= 17. Wimax Measurement Experiment: multiple traffic generators and single receiver = == Description == The experiment runs multiple traffic generators on up to 7 (client) wimax nodes and single traffic receiver. The number of clients can be varied to study the wimax interface's ability to handle traffic at different loads. The traffic generated is UDP, the number of packets and the bit rate can be varied as well. == Hardware utilized == 1. ''Sandbox 4 node1-1 - node1-7'': runs otg2 as generator.[[BR]] 2. ''Sandbox 4 node1-8'': runs otr2 as receiver.[[BR]] 3. ''RF-attenuator matrix'': this used prior to running the experiment to attenuate the air interface between the wimax base station and nodes.[[BR]] == Software / scripts worth mentioning == 1. ''baseline-iperf.ndz'': disk image that's loaded onto the nodes. This image is loaded with otg2 / otr2.[[BR]] 2. ''oml2-server'': server running on sandbox 4 which collects measurement data from oml2-iperf and stores in a database file.[[BR]] 3. ''sqlite3'': command line interface for accessing the contents in a database file.[[BR]] 4. ''mclient.rb'': the experiment script. [http://wimax.orbit-lab.org/attachment/wiki/WiMAX/30/06/mclient.rb Click here to view file.][[BR]] a. The script takes the following parameters as arguments:[[BR]] i. nClient - number of client nodes to use, nClients = [1..7] ii. packetsize - packet size (byte) from the sender node, packetsize max = 1024 iii. bitrate - bitrate (bit/s) from the sender node b. Example usage:[[BR]] i. omf-5.2 exec mclient.rb -- --nClients 8 --packetsize 512 --bitrate 16000 == Set up == Getting started, ssh into the console of sandbox 4.[[BR]] * Verify the oml2-server is running: * '''$ ps -elf | grep oml2-server''' {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ ps -elf | grep oml2-server 4 S oml2 948 1 0 80 0 - 2471 poll_s Feb02 ? 00:00:16 /usr/bin/oml2-server -l 3003 --logfile=/var/log/oml2-server.log --user=oml2 --group=oml2 0 S nilanjan 1259 27360 0 80 0 - 1002 pipe_w 10:59 pts/1 00:00:00 grep oml2-server }}} Before the experiment, the BS parameters can be changed. The following are a few examples commands to control the MCS:[[BR]] * To get the current MCS: * '''$ wget -O status http://localhost:5052/wimaxrf/mcsProfile''' * Change downlink MCS to single profile: * '''$ wget -O status http://localhost:5052/wimaxrf/mcsProfile?dl=15 ''' * Change downlink MCS with profile list: * '''$ wget -O status http://localhost:5052/wimaxrf/mcsProfile?dl=15,17,18''' * Change uplink MCS to single profile: * '''$ wget -O status http://localhost:5052/wimaxrf/mcsProfile?ul=15''' * Change uplink MCS with profile list: * '''$ wget -O status http://localhost:5052/wimaxrf/mcsProfile?ul=15,17,18''' * To restart the base station: * '''$ wget http://localhost:5052/wimaxrf/restart''' For other details on changing BS parameters please refer to ''Basic Support Services'' under http://wimax.orbit-lab.org/wiki [[BR]] Although the experiment script can vary the attenuator values, the details on manually changing attenuator values can be found in ''RF Matrix Control Services'' under http://wimax.orbit-lab.org/wiki [[BR]] == Usage == * Start clean, turn off all the nodes: * '''$ omf-5.2 tell offh all''' {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ omf-5.2 tell offh all INFO NodeHandler: init OMF Experiment Controller 5.2.408 INFO Topology: Loading topology 'system:topo:all'. --------------------------------------------------- Testbed : sb4.orbit-lab.org - Command: offHard Node n_1_2 - Ok Node n_1_7 - Ok Node n_1_1 - Ok Node n_1_6 - Ok Node n_1_5 - Ok Node n_1_9 - Ok Node n_1_4 - Ok Node n_1_8 - Ok Node n_1_3 - Ok --------------------------------------------------- }}} * Query the status of the nodes. Wait until all nodes are in ''POWEROFF'' state. * '''$ omf-5.2 stat'''. {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ omf-5.2 stat INFO NodeHandler: init OMF Experiment Controller 5.2.408 ----------------------------------------------- INFO Topology: Loading topology 'system:topo:all'. Testbed : sb4.orbit-lab.org Node n_1_1 - State: POWEROFF Node n_1_2 - State: POWEROFF Node n_1_3 - State: POWEROFF Node n_1_4 - State: POWEROFF Node n_1_5 - State: POWEROFF Node n_1_6 - State: POWEROFF Node n_1_7 - State: POWEROFF Node n_1_8 - State: POWEROFF Node n_1_9 - State: POWEROFF ----------------------------------------------- }}} * Load image onto node1-1 through node1-8: * '''$ omf-5.2 load [1,1..8] baseline-iperf.ndz''' {{{ Imaging nodes: '[1,1..8]' with image 'baseline-iperf.ndz' (Domain: default from hostname) (Timeout: 800 sec.) INFO NodeHandler: init OMF Experiment Controller 5.2.408 INFO NodeHandler: init Experiment ID: sb4.orbit-lab.org_2012_04_17_12_48_29 INFO NodeHandler: Web interface available at: http://10.14.0.10:4000 INFO Experiment: load system:exp:stdlib INFO property.resetDelay: value = 100 (Fixnum) INFO property.resetTries: value = 1 (Fixnum) INFO Experiment: load system:exp:imageNode INFO property.nodes: value = [1, 1..8] (Array) INFO property.image: value = "baseline-iperf.ndz" (String) INFO property.domain: value = nil (NilClass) INFO property.outpath: value = "/tmp" (String) INFO property.timeout: value = 800 (Fixnum) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/8/8 - (still down: n_1_1,n_1_2,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/8/8 - (still down: n_1_1,n_1_2,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/8/8 - (still down: n_1_1,n_1_2,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/8/8 - (still down: n_1_1,n_1_2,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/8/8 - (still down: n_1_1,n_1_2,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 2/6/8 - (still down: n_1_1,n_1_2,n_1_3) INFO stdlib: Waiting for nodes (Up/Down/Total): 3/5/8 - (still down: n_1_1,n_1_2,n_1_3) INFO stdlib: Waiting for nodes (Up/Down/Total): 5/3/8 - (still down: n_1_2,n_1_5,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 5/3/8 - (still down: n_1_2,n_1_5,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 5/3/8 - (still down: n_1_2,n_1_5,n_1_8) INFO stdlib: Resetting node n_1_2 INFO stdlib: Resetting node n_1_5 INFO stdlib: Resetting node n_1_8 INFO stdlib: Waiting for nodes (Up/Down/Total): 5/3/8 - (still down: n_1_2,n_1_5,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO stdlib: Waiting for nodes (Up/Down/Total): 6/2/8 - (still down: n_1_2,n_1_8) INFO exp: Progress(0/0/8): 0/0/0 min(n_1_1)/avg/max (77) - Timeout: 619 sec. INFO whenAll: *: 'status[@value='UP']' fires INFO exp: Progress(0/0/8): 0/25/30 min(n_1_5)/avg/max (77) - Timeout: 609 sec. INFO exp: Progress(0/0/8): 30/41/50 min(n_1_5)/avg/max (77) - Timeout: 599 sec. INFO exp: Progress(0/0/8): 50/61/70 min(n_1_5)/avg/max (77) - Timeout: 589 sec. INFO exp: Progress(0/0/8): 70/81/90 min(n_1_5)/avg/max (77) - Timeout: 579 sec. INFO exp: Progress(0/0/8): 90/90/90 min(n_1_1)/avg/max (77) - Timeout: 569 sec. INFO exp: Progress(5/0/8): 90/98/100 min(n_1_5)/avg/max (77) - Timeout: 559 sec. INFO exp: Progress(6/0/8): 100/100/100 min()/avg/max (77) - Timeout: 549 sec. INFO exp: ----------------------------- INFO exp: Imaging Process Done INFO exp: - 8 node(s) successfully imaged - See the topology file: '/tmp/sb4.orbit-lab.org_2012_04_17_12_48_29_topo_active.rb' INFO exp: ----------------------------- INFO Experiment: DONE! INFO NodeHandler: Shutting down experiment, please wait... INFO NodeHandler: Shutdown flag is set - Turning Off the resources }}} * After loading the image, the nodes are turned off. Turn these nodes back on: * '''$ omf-5.2 tell on [1,1..8]''' {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ omf-5.2 tell on [1,1..8] INFO NodeHandler: init OMF Experiment Controller 5.2.408 --------------------------------------------------- Testbed : sb4.orbit-lab.org - Command: on Node n_1_1 - Ok Node n_1_2 - Ok Node n_1_3 - Ok Node n_1_4 - Ok Node n_1_5 - Ok Node n_1_6 - Ok Node n_1_7 - Ok Node n_1_8 - Ok --------------------------------------------------- }}} * Query the status of the nodes until they are in ''POWERON'' state: '''> omf-5.2 stat''' * Now run the experiment script: * '''$ omf-5.2 exec mclient.rb -- --nClients 6 --packetsize 512 --bitrate 1024000''' {{{ INFO NodeHandler: init OMF Experiment Controller 5.2.408 INFO NodeHandler: init Experiment ID: sb4.orbit-lab.org_2012_04_17_12_07_56 INFO NodeHandler: Web interface available at: http://10.14.0.10:4000 INFO Experiment: load system:exp:stdlib INFO property.resetDelay: value = 100 (Fixnum) INFO property.resetTries: value = 1 (Fixnum) INFO Experiment: load mclient.rb INFO property.nClients: value = 6 (Fixnum) INFO property.packetsize: value = 512 (Fixnum) INFO property.bitrate: value = 1024000 (Fixnum) INFO exp: Group Sender: 1 INFO exp: Group Sender: 2 INFO exp: Group Sender: 3 INFO exp: Group Sender: 4 INFO exp: Group Sender: 5 INFO exp: Group Sender: 6 INFO stdlib: Waiting for nodes (Up/Down/Total): 5/2/7 - (still down: n_1_2,n_1_1) INFO whenAll: *: 'apps/app/status/@value' fires INFO exp: Give machines some time to warm up INFO exp: Request from Experiment Script: Wait for 5s.... INFO exp: Collect measurements for 60 seconds INFO exp: Request from Experiment Script: Wait for 60s.... ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_6' - Error Message: 'EXIT' with 'ifconfig_7' - Error while terminating application 'ifconfig_7' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_6' - Error Message: 'EXIT' with 'wimaxcu_7' - Error while terminating application 'wimaxcu_7' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_5' - Error Message: 'EXIT' with 'ifconfig_6' - Error while terminating application 'ifconfig_6' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_5' - Error Message: 'EXIT' with 'wimaxcu_6' - Error while terminating application 'wimaxcu_6' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_4' - Error Message: 'EXIT' with 'ifconfig_5' - Error while terminating application 'ifconfig_5' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_4' - Error Message: 'EXIT' with 'wimaxcu_5' - Error while terminating application 'wimaxcu_5' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_3' - Error Message: 'EXIT' with 'ifconfig_4' - Error while terminating application 'ifconfig_4' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_3' - Error Message: 'EXIT' with 'wimaxcu_4' - Error while terminating application 'wimaxcu_4' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_1' - Error Message: 'EXIT' with 'ifconfig_2' - Error while terminating application 'ifconfig_2' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_2' - Error Message: 'EXIT' with 'ifconfig_3' - Error while terminating application 'ifconfig_3' - undefined method `stdin' for nil:NilClass INFO exp: Finish it. INFO exp: Request from Experiment Script: Wait for 7s.... ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_2' - Error Message: 'EXIT' with 'wimaxcu_3' - Error while terminating application 'wimaxcu_3' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_8' - Error Message: 'EXIT' with 'wimaxcu' - Error while terminating application 'wimaxcu' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_8' - Error Message: 'EXIT' with 'ifconfig' - Error while terminating application 'ifconfig' - undefined method `stdin' for nil:NilClass ERROR EXECUTION_ERROR: Execution Error on node: 'n_1_1' - Error Message: 'EXIT' with 'wimaxcu_2' - Error while terminating application 'wimaxcu_2' - undefined method `stdin' for nil:NilClass INFO Experiment: DONE! INFO NodeHandler: Shutting down experiment, please wait... INFO run: Experiment sb4.orbit-lab.org_2012_04_17_12_07_56 finished after 1:35 }}} The ERROR messages above can be ignored since the corresponding application are being terminated. == A few words on post processing == This experiment generates a sqlite3 database file named with the experiment id and this file is automatically copied to the current directory. The .sql file will have several tables: _experiment_metadata, _senders, otg2_udp_out, otr2_udp_in.[[BR]] In particular, '''otr2_udp_in''' table contain information about the received packets from the various senders.[[BR]] The following will display the tables in the file:[[BR]] * '''$ sqlite3 udp_n6_p512_br1024000.sq3 ".tables"''' {{{ TABLES }}} The following will display the contents of the udp_otr2_in table:[[BR]] * '''$ sqlite3 -header udp_n6_p512_br1024000.sq3 "select * from otr2_udp_in"''' {{{ TABLES }}} For a rough calculation on bandwidth... each line in otr2_udp_in display data pertinent to a client node (identified by the IP address in column 17) with the correspond time stamps (column 4), packet received (column 14).[[BR]] * Also note that the measurements are strictly dependent on the wimax base station configuration and the attenuator settings. Please refer to '''Set Up''' section above for more details.