diff options
author | 2019-06-25 12:25:34 +0000 | |
---|---|---|
committer | 2019-06-25 12:25:34 +0000 | |
commit | 0415ae764f84398ccc14debd9afbac761da385ae (patch) | |
tree | 0d3c411933ae58ade28faddfc360476357a845ea /utils/README.md | |
parent | c240213705c4aabfc7e292a860baed992f937d43 (diff) | |
parent | 861c1ba313e000f91b8dca188c69af1b44f3806f (diff) |
Merge "[HICN-223] Utils tutorial"
Diffstat (limited to 'utils/README.md')
-rw-r--r-- | utils/README.md | 234 |
1 files changed, 211 insertions, 23 deletions
diff --git a/utils/README.md b/utils/README.md index 73525c6c2..0d81ea426 100644 --- a/utils/README.md +++ b/utils/README.md @@ -1,23 +1,23 @@ -Utility applications -================== +# Utility applications -## Introduction ## +## Introduction -hicn-ping-server, hicn-ping-client and hiperf are three utility applications that use hicn stack. +hicn-ping-server, hicn-ping-client and hiperf are three utility applications for testing and benchmarking stack. -## Using hICN Utils applications ## +## Using hICN Utils applications -### Platforms ### +### Platforms -The hICN application Examples have been tested in: +hicn-light has been tested in: -- Ubuntu 16.04 (x86_64) +- Ubuntu 16.04 / 18.04 (x86_64) - Debian Testing +- Centos 7 - MacOSX 10.12 +- Android +- iOS -Other platforms and architectures may work. - -### Dependencies ### +### Dependencies Build dependencies: @@ -26,16 +26,17 @@ Build dependencies: Basic dependencies: -- OpenSSL +- ppenSSL - pthreads -- Libevent -- Libparc +- libevent +- libparc +- libhicntransport -## Executables ## +## Executables -The utility applications are a set of binary executables that are used to run a clinet/server ping applications (hicn-ping-server and hicn-ping-client) and a hicn implementation of hicn (hiperf). +The utility applications are a set of binary executables consisting of a client/server ping applications (hicn-ping-server and hicn-ping-client) and a hicn implementation of hicn (hiperf). -### hicn-ping-server ### +### hicn-ping-server The command `hicn-ping-server` runs the server side ping application. hicn-ping-server can be executed with the following options: @@ -55,9 +56,12 @@ Options: -q = quite, not prints (default false) -d = daemon mode -H = help + +Example: +hicn-ping-server -n c001::/64 ``` -### hicn-ping-client ### +### hicn-ping-client The command `hicn-ping-client` runs the client side ping application. hicn-ping-client can be executed with the following options: @@ -80,11 +84,14 @@ Options: -D = dump, dumps sent and received packets (default false) -q = quiet, not prints (default false) -H = help + +Example: +hicn-ping-client -n c001::1 ``` -### hiperf ### +### hiperf -The command `hiperf` is a tool for performing network throughput measurements with hicn. It can be executed as server or client using the following options: +The command `hiperf` is a tool for performing network throughput measurements with hicn. It can be executed as server or client using the following options: ``` usage: hiperf [-S|-C] [options] [prefix|name] @@ -103,9 +110,9 @@ Server specific: -k <keystore_path> = path of p12 file containing the crypto material used for signing the packets -y <hash_algorithm> = use the selected hash algorithm for calculating manifest digests -p <password> = password for p12 keystore --x = produce a content of <download_size>, then after downloading it produce a new content of +-x = produce a content of <download_size>, then after downloading it produces a new content of <download_size> without resetting the suffix to 0 --B <bitrate> = bitrate for RTC producer, to be used with the -R option +-B <bitrate> = bitrate for RTC producer, to be used with the -R option, in kbps (example: 64kbps) Client specific: -b <beta_parameter> = RAAQM beta parameter @@ -115,9 +122,190 @@ Client specific: -c <certificate_path> = path of the producer certificate to be used for verifying the origin of the packets received -i <stats_interval> = show the statistics every <stats_interval> milliseconds -v = Enable verification of received data + +Example: +hiperf -S c001::/64 +``` + +## How To Benchmark Client-Server Throughput using hiperf + +### hicn-light-daemon + +This tutorial will explain how to configure a simple client-server topology and retrieve network measurements using the hiperf utility. + +We consider this simple topology, consisting on two linux VM which are able to communicate through an IP network (you can also use containers or physical machines): + +```text +|client (10.0.0.1/24; 9001::1/64)|======|server (10.0.0.2/24; 9001::2/64)| +``` + +Install the hICN suite on two linux VM. This tutorial makes use of Ubuntu 18.04, but it could easily be adapted to other platforms. +You can either install the hICN stack using binaries or compile the code. In this tutorial we will build the code from source. + +```bash +$ curl -s https://packagecloud.io/install/repositories/fdio/release/script.deb.sh | sudo bash +$ apt-get install -y git \ + cmake \ + build-essential \ + libasio-dev \ + libcurl4-openssl-dev \ + libparc-dev \ + --no-install-recommends + +$ mkdir hicn-suite && cd hicn-suite +$ git clone https://github.com/FDio/hicn hicn-src +$ mkdir hicn-build && cd hicn-build +$ cmake ../hicn-src -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../hicn-install -DBUILD_APPS=ON +$ make -j 4 install +$ export HICN_ROOT=${PWD}/../hicn-install +``` + +It should install the hICN suite under hicn-install. + +#### hICN stack based on hicn-light forwarder with UDP faces + +##### Server Configuration + +Create a configuration file for the hicn-light forwarder. Here we are configuring UDP faces. + +```bash +server$ mkdir -p ${HICN_ROOT}/etc +server$ LOCAL_IP="10.0.0.1" # Put here the actual IPv4 of the local interface +server$ LOCAL_PORT="12345" +server$ cat << EOF > ${HICN_ROOT}/etc/hicn-light.conf +add listener udp list0 ${LOCAL_IP} ${LOCAL_PORT} +EOF +``` + +Start the hicn-light forwarder + +```bash +server$ sudo ${HICN_ROOT}/bin/hicn-light-daemon --daemon --capacity 0 --log-file ${HICN_ROOT}/hicn-light.log --config ${HICN_ROOT}/etc/hicn-light.conf +``` + +We set the forwarder capacity to 0 because we want to measure the end-to-end performance without retrieving any data packet from intermediate caches. + +Run the [hiperf](#hiperf) server. + +```bash +server$ ${HICN_ROOT}/bin/hiperf -S b001::/64 +``` + +The hiperf server will register the prefix b001::/64 on the local forwarder and will reply with pre-allocated data packet. In this test we won't consider segmentation and reassembly cost. + +##### Client Configuration + +Create a configuration file for the hicn-light forwarder at the client. Here we are configuring UDP faces. + +```bash +client$ mkdir -p ${HICN_ROOT}/etc +client$ LOCAL_IP="10.0.0.2" # Put here the actual IPv4 of the local interface +client$ LOCAL_PORT="12345" +client$ REMOTE_IP="10.0.0.1" # Put here the actual IPv4 of the remote interface +client$ REMOTE_PORT="12345" +client$ cat << EOF > ${HICN_ROOT}/etc/hicn-light.conf +add listener udp list0 ${LOCAL_IP} ${LOCAL_PORT} +add connection udp conn0 ${REMOTE_IP} ${REMOTE_PORT} ${LOCAL_IP} ${LOCAL_PORT} +add route conn0 b001::/16 1 +EOF +``` + +Run the hicn-light forwarder + +```bash +client$ sudo ${HICN_ROOT}/bin/hicn-light-daemon --daemon --capacity 1000 --log-file ${HICN_ROOT}/hicn-light.log --config ${HICN_ROOT}/etc/hicn-light.conf +``` + +Run the [hiperf](#hiperf) client: + +```bash +client$ ${HICN_ROOT}/bin/hiperf -C b001::1 -W 50 +EOF +``` + +This will run the client with a fixed window of 50 interests. + +#### Using hicn-light forwarder with hICN faces + +For sending hICN packets directly over the network, using hicn faces, change the configuration of the two forwarders and restart them. + +##### Server Configuration + +```bash +server$ mkdir -p ${HICN_ROOT}/etc +server$ LOCAL_IP="9001::1" +server$ cat << EOF > ${HICN_ROOT}/etc/hicn-light.conf +add listener hicn lst 0::0 +add punting lst b001::/16 +add listener hicn list0 ${LOCAL_IP} +EOF +``` + +#### Client Configuration + +```bash +client$ mkdir -p ${HICN_ROOT}/etc +client$ LOCAL_IP="9001::2" +client$ REMOTE_IP="9001::1" +client$ cat << EOF > ${HICN_ROOT}/etc/hicn-light.conf +add listener hicn lst 0::0 +add punting lst b001::/16 +add listener hicn list0 ${LOCAL_IP} +add connection hicn conn0 ${REMOTE_IP} ${LOCAL_IP} +add route conn0 b001::/16 1 +EOF +``` + +### vpp based hicn-plugin + +Compile the hicn stack enabling the [vpp](https://github.com/FDio/vpp) support. + +In this example we will do a local hiperf client-server communication. + +```bash +$ curl -s https://packagecloud.io/install/repositories/fdio/release/script.deb.sh | sudo bash +$ apt-get install -y git \ + cmake \ + build-essential \ + libasio-dev \ + libcurl4-openssl-dev \ + libparc-dev \ + vpp libvppinfra vpp-plugin-core vpp-dev python3-ply python python-ply \ + --no-install-recommends + +$ mkdir hicn-suite && cd hicn-suite +$ git clone https://github.com/FDio/hicn hicn-src +$ mkdir hicn-build && cd hicn-build +$ cmake ../hicn-src -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_APPS=ON -DBUILD_HICNPLUGIN=ON +$ sudo make -j 4 install +$ export HICN_ROOT=${PWD}/../hicn-install +``` + +Make sure vpp is running: + +```bash +$ sudo systemctl restart vpp +``` + +Run the hicn-plugin: + +```bash +$ vppctl hicn control start +``` + +Run hiperf server: + +```bash +$ hiperf -S b001::/64 +``` + +Run hiperf client: + +```bash +$ hiperf -C b001::1 -W 300 ``` -## License ## +## License This software is distributed under the following license: |