This document covers the general details of integrating sample applications with the ORBIT tesbed setup. A specific example (Iperf) is chosen as a candidate application and the steps are described in the document. The readers are referred to the ORBIT architecture document for the individual software component details.
To summarize, nodeHandler is the experiment controller software that is used to choreograph the experiment. It is used to power on, initialize interfaces, launch the applications simultaneously on the nodes involved in the experiment, as well as create databases consistent with the measurements for that particular experiment.
OML (ORBIT Measurement Library) is used to collect measurements at run-time from the nodes. It consists of an OML-client on the nodes and the collection server on the experiment controller machine that is used to collect the measurements sent by the clients and insert into appropriate columns of the database. Integrating a new application with this setup mainly consists of the following steps.
Please note that these are details not needed if you just want to use the application. These are meant to cover how Iperf was integrated with nodehandler and OML framework.
- 1 I want to use Iperf without knowing the following details
- 2 Integrating with measurement collection
- 3 Integrating with Nodehandler – Launching the application
- 3.1 Create application definitions for Iperf client and server
- 3.2 Iperf Sender
- 3.3 Iperf Receiver
- 3.4 Create prototypes using previously defined applications
- 3.5 Iperf UDP Sender
- 3.6 Iperf UDP Receiver
- 3.7 Iperf TCP Sender
- 3.8 Iperf TCP Receiver
- 3.9 Write experiment script using the previously defined application and prototype definitions
- 3.10 Experiment Script
- 4 Parameters and statistics supported
Simply check out Iperf from the SVN repository
In order to initiate measurement collection using OML, the following steps need to be taken
The first step is to identify what are the measurements reported by the application and finding the right files in the source code corresponding to these measurement reports. For Iperf, the statistics for UDP are throughput, packet loss and jitter and for TCP: throughput
For Iperf, this was traced to the file ReportDefault.c
The application definition file for Iperf is defined to capture the outputs that the program reports. This file is later used to auto-generate OML library and headers for this application. The following application definition file has been written for Iperf (using a subset of command line inputs)
[http://www.orbit-lab.org/wiki/Documentation/OtherApps/Iperf/IperfAppDefXML Iperf Application Definition Schema]
Verify that the XML file is syntactically correct by correct by checking if it opens correctly in an XML enabled browser (IE or Mozilla)
In the main method of Iperf (found in main.cpp),
''initialize_oml(&argc, argv, null)''
In the file ReportDefault.c
Linker options: -loml_client -lomltx
LDFLAGS = -L/usr/lib/ -Lpath_to/liboml_orbit_winlab_iperf.a
The oml client package with the required libraries can be obtained from the orbit repository (apt-get oml-client). It will install oml-client and oml_transport libraries in /usr/lib/
Note that the OML client is already present on the nodes (so the second step can be ignored)
Now, Iperf can be rebuilt using the Makefile.
Note that the application will need the following environment variables to be set
'''LD_LIBRARY_PATH = /usr/lib/''' '''OML_NAME=<node-id>''' '''OML_CONFIG=<OML configuration file>'''
All these variables are set automatically when the experiment is run using the nodeHandler.
This section includes the details of how to integrate Iperf with the experiment controller (nodeHandler) so that it can be launched on all the nodes involved in the experiment.
The following two sample files for Iperf sender and receiver show the details of how to create definitions for any application. The definition mainly contains the command line options that can be set during launching the application as well as the output statistics reported by the application
[http://www.orbit-lab.org/wiki/Documentation/OtherApps/Iperf/IperfSender Iperf Sender Application Script]
[http://www.orbit-lab.org/wiki/Documentation/OtherApps/Iperf/IperfReceiver Iperf Receiver Application Script]
Using the previously defined Iperf client and server application definitions, the next step is to create prototypes that use these applications. For e.g using the basic Iperf application, we define four prototypes, udpsender, udpreceiver, tcpsender and tcpreceiver. Each of these will use Iperf as the underlying application; however their properties can be customized as shown below
[http://www.orbit-lab.org/wiki/Documentation/OtherApps/Iperf/IperfUDPSender Iperf UDP Sender Prototype Script]
[http://www.orbit-lab.org/wiki/Documentation/OtherApps/Iperf/IperfUDPReceiver Iperf UDP Receiver Prototype Script]
[http://www.orbit-lab.org/wiki/Documentation/OtherApps/Iperf/IperfTCPSender Iperf TCP Sender Prototype Script]
[http://www.orbit-lab.org/wiki/Documentation/OtherApps/Iperf/IperfTCPReceiver Iperf TCP Receiver Prototype Script]
The final step is to write the actual experiment script as shown below
- UDP or TCP flow
- Sender port number
- TCP Send Window size (for TCP flows)
- Payload length (for UDP flows)
- Bandwidth (offered load for UDP flows)
- Duration of traffic generation
- Number of parallel flows
- UDP or TCP flow
- Receiver port number
- TCP Receive window size (for TCP flows)
- Duration of run
- Payload length (to expect from sender for UDP flows)
- Interval (periodic duration between report generation)
- Throughput (TCP and UDP)
- Jitter (UDP)
- Packet Loss (UDP)