|
5 | 5 | </a> |
6 | 6 | </p> |
7 | 7 |
|
| 8 | + |
8 | 9 | # What is Network Performance Meter (NetPerfMeter)? |
9 | 10 |
|
10 | | -NetPerfMeter is a network performance meter for the UDP, TCP, MPTCP, SCTP and DCCP transport protocols over IPv4 and IPv6. It simultaneously transmits bidirectional flows to an endpoint and measures the resulting flow bandwidths and QoS. The results can be written as scalar files (summary of the run) and vector files (details per frame). These files can be processed further, e.g. for analysis and plotting of the results. |
| 11 | +NetPerfMeter is a network performance meter for the TCP, MPTCP, UDP, DCCP and SCTP transport protocols over IPv4 and IPv6. It simultaneously transmits bidirectional flows to an endpoint and measures the resulting flow bandwidths and QoS. The results can be written as scalar files (summary of the run) and vector files (details per frame). These files can be processed further, e.g. for analysis and plotting of the results. |
| 12 | + |
| 13 | +<p class="center"> |
| 14 | + <a href="screenshot-mptcp.webp"><img alt="Screenshot of NetPerfMeter run" src="screenshot-mptcp.webp" width="75%" /></a><br /> |
| 15 | + A NetPerfMeter Run |
| 16 | +</p> |
| 17 | + |
| 18 | + |
| 19 | +## Design Goals and Features## |
| 20 | + |
| 21 | +The key goal of NetPerfMeter is to provide a tool for the performance comparison of multiple transport connections, which are further denoted as *Flows*. That is, it is possible to configure different flows between two systems using varying parameters, in order run a configured measurement, collect the obtained results and post-process them for statistical analyses. Particularly, all five relevant IETF Transport Layer protocols are supported: |
| 22 | + |
| 23 | + * [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) (User Datagram Protocol; see [RFC 768](https://www.rfc-editor.org/rfc/rfc768.html)), |
| 24 | + * [DCCP](https://en.wikipedia.org/wiki/DCCP) (Datagram Congestion Control Protocol; see [RFC 4340](https://www.rfc-editor.org/rfc/rfc4340.html)), |
| 25 | + * [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) (Transmission Control Protocol; see [RFC 793](https://www.rfc-editor.org/rfc/rfc793.html)), |
| 26 | + * [MPTCP](https://en.wikipedia.org/wiki/MPTCP) (Multipath TCP; see [RFC 8684](https://www.rfc-editor.org/rfc/rfc8684.html)), |
| 27 | + * [SCTP](https://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol) (Stream Control Transmission Protocol; see [RFC 9260](https://www.rfc-editor.org/rfc/rfc9260.html)). |
| 28 | + |
| 29 | +Of course, this support includes the possibility to parametrise various protocol-specific options. Note, that the protocol support by NetPerfMeter depends on the underlying operating system. DCCP, MPTCP, as well as some SCTP extensions are not available on all platforms, yet. |
| 30 | + |
| 31 | +Furthermore, each flow is able to apply its specific traffic behaviour: |
| 32 | + |
| 33 | + * Each flow may use its own Transport Layer protocol (i.e. UDP, DCCP, TCP, MTCP or SCTP). |
| 34 | + * Bidirectional data transfer is possible, with individual parameters for each direction. |
| 35 | + * Flows may either be saturated (i.e. try to send as much as possible) or non-saturated. In the latter case, a frame rate and a frame size have to be configured. Both may be distributed randomly, using a certain distribution (like uniform, negative exponential, etc.). This feature allows to mimic multimedia traffic. |
| 36 | + * For the stream-oriented SCTP, an independent traffic configuration is possible for each stream. |
| 37 | + * Support for on-off traffic is provided by allowing to specify a sequence of time stamps when to start, stop and restart a flow or stream. |
| 38 | + * Also, for SCTP, it is possible to configure partial reliability (see [RFC 3758](https://www.rfc-editor.org/rfc/rfc3758.html)) as well as ordered and unordered delivery (see [RFC 9260](https://www.rfc-editor.org/rfc/rfc9260.html)). |
| 39 | + |
| 40 | +Clearly, the NetPerfMeter application provides features similar to the [NetPerfMeter simulation model in OMNeT++](https://doc.omnetpp.org/inet/api-4.4.0/neddoc/inet.applications.netperfmeter.NetPerfMeter.html). It is therefore relatively easy – from the parametrisation perspective – to reproduce NetPerfMeter simulation scenarios in reality. |
| 41 | + |
| 42 | + |
| 43 | +## Instances and Protocols |
| 44 | + |
| 45 | +<p align="center"> |
| 46 | + <a href="src/figures/EN-NetPerfMeter-MeasurementScenario.svg"><img alt="Figure of the Concept of a NetPerfMeter Measurement" src="src/figures/EN-NetPerfMeter-MeasurementScenario.svg" width="512pt" /></a><br /> |
| 47 | + The Concept of a NetPerfMeter Measurement |
| 48 | +</p> |
| 49 | + |
| 50 | +Similar to the [NetPerfMeter simulation model in OMNeT++](https://doc.omnetpp.org/inet/api-4.4.0/neddoc/inet.applications.netperfmeter.NetPerfMeter.html), an application instance may either be in *Active Mode* (client side) or *Passive Mode* (server side). The figure above illustrates the concept of a NetPerfMeter measurement. The passive instance accepts incoming NetPerfMeter connections from the active instance. The active instance controls the passive instance, by using a control protocol denoted as NetPerfMeter Control Protocol (NPMP-CONTROL). That is, the passive instance may run as a daemon; no manual interaction by the user – e.g. to restart it before a new measurement run – is required. This feature is highly practical for a setup distributed over multiple Internet sites (e.g. like the [NorNet Testbed](https://www.nntb.no/)) and allows for parameter studies consisting of many measurement runs. The payload data between active and passive instances is transported using the NetPerfMeter Data Protocol (NPMP-DATA). The figure below shows the protocol stack of a NetPerfMeter node. |
| 51 | + |
| 52 | +<p align="center"> |
| 53 | + <a href="src/figures/EN-NetPerfMeter-ProtocolStack.svg"><img alt="Figure of the NetPerfMeter Protocol Stack" src="src/figures/EN-NetPerfMeter-ProtocolStack.svg" width="384pt" /></a><br /> |
| 54 | + The NetPerfMeter Protocol Stack |
| 55 | +</p> |
| 56 | + |
| 57 | + |
| 58 | +## Measurement Processing |
| 59 | + |
| 60 | +The following figure presents the message sequence of a NetPerfMeter measurement run: |
| 61 | + |
| 62 | +<p align="center"> |
| 63 | + <a href="src/figures/EN-NetPerfMeter-Measurement-SeqDiagram.svg"><img alt="Figure of a Measurement Run with NetPerfMeter" src="src/figures/EN-NetPerfMeter-Measurement-SeqDiagram.svg" width="512pt" /></a><br /> |
| 64 | + A Measurement Run with NetPerfMeter |
| 65 | +</p> |
| 66 | + |
| 67 | +Note that the [Wireshark](https://www.wireshark.org/) network protocol analyser provides out-of-the-box support for NetPerfMeter. That is, it is able to dissect and further analyse NPMP-CONTROL and NPMP-DATA packets using all supported Transport Layer protocols. |
| 68 | + |
| 69 | + |
| 70 | +### Measurement Setup |
| 71 | + |
| 72 | +A new measurement run setup is initiated by the active NetPerfMeter instance by establishing an NPMP-CONTROL association to the passive instance first. The NPMP-CONTROL association by default uses SCTP for transport. If SCTP is not possible in the underlying networks (e.g. due to firewalling restrictions), it is optionally possible to use TCP for the NPMP-CONTROL association instead. Then, the configured NPMP-DATA connections are established by their configured Transport Layer protocols. For the connection-less UDP, the message transfer is just started. The passive NetPerfMeter instance is informed about the identification and parameters of each new flow by using NPMP-CONTROL Add Flow messages. On startup of the NPMP-DATA flow, an NPMP-DATA Identify message allows the mapping of a newly incoming connection to a configured flow by the passive instance. It acknowledges each newly set up flow by an NPMP-CONTROL Acknowledge message. After setting up all flows, the scenario is ready to start the measurement run. |
| 73 | + |
| 74 | + |
| 75 | +### Measurement Run |
| 76 | + |
| 77 | +The actual measurement run is initiated from the active NetPerfMeter instance using an NPMP-CONTROL Start Measurement message, which is also acknowledged by an NPMP-CONTROL Acknowledge message. Then, both instances start running the configured scenario by transmitting NPMP-DATA Data messages over their configured flows. |
| 78 | + |
| 79 | +During the measurement run, incoming and outgoing flow bandwidths may be recorded as vectors – i.e. time series – at both instances, since NPMP-DATA Data traffic may be bidirectional. Furthermore, the CPU utilisations – separately for each CPU and CPU core – are also tracked. This allows to identify performance bottlenecks, which is particularly useful when debugging and comparing transport protocol implementation performance. Furthermore, the one-way delay of messages can be recorded. Of course, in order to use this feature, the clocks of both nodes need to be appropriately synchronised, e.g. by using the [Network Time Protocol (NTP)](https://en.wikipedia.org/wiki/Network_Time_Protocol). |
| 80 | + |
| 81 | + |
| 82 | +### Measurement Termination |
| 83 | + |
| 84 | +The end of a measurement run is initiated – from the active NetPerfMeter instance – by using an NPMP-CONTROL Stop Measurement message. Again, it is acknowledged by an NPMP-CONTROL Acknowledge message. At the end of the measurement, average bandwidth and one-way delay of each flow and stream are recorded as scalars (i.e. single values). They may provide an overview of the long-term system performance. |
| 85 | + |
| 86 | + |
| 87 | +## Result Collection |
| 88 | + |
| 89 | +After stopping the measurement, the passive NetPerfMeter instance sends its global vector and scalar results (i.e. over all flows) to the active instance, by using one or more NPMP-CONTROL Results messages. |
| 90 | +Then, the active NetPerfMeter instance sequentially removes the flows by using NPMP-CONTROL Remove Flow messages, which are acknowledged by NPMP-CONTROL Acknowledge messages. On flow removal, the passive instance sends its per-flow results for the corresponding flow, again by using NPMP-CONTROL Results messages. |
| 91 | + |
| 92 | +The active instance, as well, archives its local vector and scalar results data and stores them – together with the results received from its peer – locally. |
| 93 | +All result data is compressed by using BZip2 compression (see [bzip2](https://sourceware.org/bzip2/)), which may save a significant amount of bandwidth (of course, the passive node compresses the data *before* transfer) and disk space. |
| 94 | + |
| 95 | + |
| 96 | +## Measurement Execution, Result Post-Processing and Visualisation## |
| 97 | + |
| 98 | +By using shell scripts, it is possible to apply NetPerfMeter for parameter studies, i.e. to create a set of runs for each input parameter combination. For example, a script could iterate over a send buffer size σ from 64 KiB to 192 KiB in steps of 64 KiB as well as a path bandwidth ρ from 10 Mbit/s to 100 Mbit/s in steps of 10 Mbit/s and perform 5 measurement runs for each parameter combination. |
| 99 | + |
| 100 | +When all measurement runs have eventually been processed, the results have to be visualised for analysis and interpretation. The NetPerfMeter package provides support to visualise the scalar results, which are distributed over the scalar files written by measurement runs. Therefore, the first step necessary is to bring the data from the various scalar files into an appropriate form for further post-processing. This step is denoted as *Summarisation*; an introduction is also provided in "[SimProcTC – The Design and Realization of a Powerful Tool-Chain for OMNeT++ Simulations](https://www.nntb.no/~dreibh/netperfmeter/#Publications-OMNeT__Workshop2009)". |
| 101 | + |
| 102 | +The summarisation task is performed by the tool <tt>createsummary</tt>. An external program – instead of just using [GNU R](https://www.r-project.org/) itself to perform this step – is used due to the requirements on memory and CPU power. <tt>createsummary</tt> iterates over all scalar files of a measurement M. Each file is read – with on-the-fly BZip2-decompression – and each scalar value as well as the configuration m∈M having led to this value – are stored in memory. Depending on the number of scalars, the required storage space may have a size of multiple GiB. |
| 103 | + |
| 104 | +Since usually not all scalars of a measurement are required for analysis (e.g. for an SCTP measurement, it may be unnecessary to include unrelated statistics), a list of scalar name prefixes to be excluded from summarisation can be provided to <tt>createsummary</tt>, in form of the so-called *Summary Skip List*. This feature may significantly reduce the memory and disk space requirements of the summarisation step. Since the skipped scalars still remain stored in the scalar files themselves, it is possible to simply re-run <tt>createsummary</tt> with updated summary skip list later, in order to also include them. |
| 105 | + |
| 106 | +Having all relevant scalars stored in memory, a data file – which can be processed by [GNU R](https://www.r-project.org/) or other programs – is written for each scalar. The data file is simply a table in text form, containing the column names on the first line. Each following line contains the data, with line number and an entry for each column (all separated by spaces); an example is provided in Listing 3 of "[SimProcTC – The Design and Realization of a Powerful Tool-Chain for OMNeT++ Simulations](https://www.nntb.no/~dreibh/netperfmeter/#Publications-OMNeT__Workshop2009)". That is, each line consists of the settings of all parameters and the resulting scalar value. The data files are also BZip2-compressed on the fly, in order to reduce the storage space requirements. |
11 | 107 |
|
12 | 108 |
|
13 | 109 | # Installation |
|
0 commit comments