= 16. Wimax Measurement Experiment: oml2-iperf with variable link attenuation values = == Description == This experiment runs oml2-iperf on two nodes and collects bandwidth measurements along with the controlled attenuator values. The RSSI seen by the wimax node interface is varied by controlling this attenuator value. At different attenuator values we can measure the down link throughput for the wimax interface. This experiment script is geared towards nodes on sand box 4 which has nodes with wireless interfaces connected the base station via an rf attenuator matrix. Using this experiment we also measure the throughout at different modulation-coding schemes (MCS) which is set prior to running the experiment script.[[BR]] == Hardware utilized == 1. ''Sandbox 4 node1-4'': runs oml2-iperf as server. The wimax interface card is used for measurements.[[BR]] 2. ''Sandbox 4 node1-9'': runs oml2-iperf as client.[[BR]] 3. ''RF-attenuator matrix'': this used by the script to attenuate the air interface between the wimax base station and node.[[BR]] == Software / scripts requirements worth mentioning == 1. ''baseline-iperf.ndz'': disk image that's loaded onto the nodes. This image is loaded with oml2-iperf.[[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. ''wimax-iperf-attn.rb'': the experiment script == 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''' * After changing MCS the base station may need a restart: '''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: '''omf-5.2 stat'''. Wait until all nodes are in powered off state. {{{ 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-4 and node1-9: '''omf-5.2 load [[1,4],[1,9]] baseline-iperf.ndz''' {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ omf-5.2 load [[1,4],[1,9]] baseline-iperf.ndz ; sleep 360 ; omf-5.2 tell on [[1,4],[1,9]] ; sleep 360 ; omf-5.2 exec dl-iperf.rb Imaging nodes: '[[1,4],[1,9]]' 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_02_09_10_22_14 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, 4], [1, 9]] (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/2/2 - (still down: n_1_9,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/2/2 - (still down: n_1_9,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/2/2 - (still down: n_1_9,n_1_4) INFO stdlib: Waiting for nodes (Up/Down/Total): 0/2/2 - (still down: n_1_9,n_1_4) INFO exp: Progress(0/0/2): 0/0/0 min(n_1_9)/avg/max (46) - Timeout: 750 sec. INFO whenAll: *: 'status[@value='UP']' fires INFO exp: Progress(0/0/2): 20/20/20 min(n_1_9)/avg/max (46) - Timeout: 740 sec. INFO exp: Progress(0/0/2): 40/40/40 min(n_1_9)/avg/max (46) - Timeout: 730 sec. INFO exp: Progress(0/0/2): 60/60/60 min(n_1_9)/avg/max (46) - Timeout: 720 sec. INFO exp: Progress(0/0/2): 70/75/80 min(n_1_9)/avg/max (46) - Timeout: 710 sec. INFO exp: Progress(0/0/2): 90/90/90 min(n_1_9)/avg/max (46) - Timeout: 700 sec. INFO exp: Progress(2/0/2): 100/100/100 min()/avg/max (46) - Timeout: 690 sec. INFO exp: ----------------------------- INFO exp: Imaging Process Done INFO exp: - 2 node(s) successfully imaged - See the topology file: '/tmp/sb4.orbit-lab.org_2012_02_09_10_22_14_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 INFO run: Experiment sb4.orbit-lab.org_2012_02_09_10_22_14 finished after 1:51 }}} * After loading the image, node1-4 & node1-9 are turned off. Turn these nodes back on: '''omf-5.2 tell on [[1,4],[1,9]]''' {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ omf-5.2 tell on [[1,4],[1,9]] INFO NodeHandler: init OMF Experiment Controller 5.2.408 --------------------------------------------------- Testbed : sb4.orbit-lab.org - Command: on Node n_1_9 - Ok Node n_1_4 - Ok --------------------------------------------------- }}} * Query the status of the nodes until node1-4 & node1-9 are in ''POWERON'' state: '''omf-5.2 stat''' * Now run the experiment script: '''omf-5.2 exec wimax-iperf-attn.rb''' == Post processing data == After the experiment successfully executes a database file ''(values.db)'' is created. This file is populated with the following parameters for each iperf run:[[BR]] 1. atten -----> rf matrix attenuation value 2. nBytes ----> number of '''bytes''' transferred from iperf client to server. 3. time ------> total time taken for iperf connection. 4. kBperS ----> throughput in kilobytes per second To view the contents of the database file: '''sqlite3 -header -column values.db "select * from t1" ''' {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ sqlite3 -header -column values.db "select * from t1" t1key atten nBytes time kBperS ---------- ---------- ---------- ---------------- ---------------- 1 0 10878976 10.0952429920435 8419.01478418953 2 5 11141120 10.2252359986305 8512.2729697053 3 10 11010048 10.1255509853363 8494.94512689406 4 15 11010048 10.1354229897261 8486.67096451635 5 20 2097152 12.675085991621 1292.61450461408 6 0 2097152 12.675085991621 1292.61450461408 7 5 2097152 12.675085991621 1292.61450461408 8 10 2097152 12.675085991621 1292.61450461408 9 15 2097152 12.675085991621 1292.61450461408 10 20 2097152 12.675085991621 1292.61450461408 }}} We can use R studio to analyze the data. So first dump the contents out to a file. {{{ nilanjan@console.sb4:~/exp/dl-iperf/5.2$ sqlite3 -header values.db "select * from t1" > data.tmp nilanjan@console.sb4:~/exp/dl-iperf/5.2$ more data.tmp t1key|atten|nBytes|time|kBperS 1|0|10878976|10.0952429920435|8419.01478418953 2|5|11141120|10.2252359986305|8512.2729697053 3|10|11010048|10.1255509853363|8494.94512689406 4|15|11010048|10.1354229897261|8486.67096451635 5|20|2097152|12.675085991621|1292.61450461408 6|0|2097152|12.675085991621|1292.61450461408 7|5|2097152|12.675085991621|1292.61450461408 8|10|2097152|12.675085991621|1292.61450461408 9|15|2097152|12.675085991621|1292.61450461408 10|20|2097152|12.675085991621|1292.61450461408 11|0|11010048|10.100084990263|8516.36397940451 12|0|11010048|10.1232209950686|8496.90034840705 13|0|11141120|10.2302289903164|8508.11844802196 14|0|11141120|10.2948209941387|8454.73661460998 15|5|11010048|10.1497679948807|8474.67646978575 16|10|11141120|10.2250469923019|8512.43031602002 17|15|10878976|10.1348799914122|8386.08844623893 18|20|1179648|10.5095049887896|876.92046483927 19|0|11010048|10.125388994813|8495.08103284368 20|5|9043968|10.2897919863462|6866.61111262068 }}} == Trouble shooting & miscellaneous info ==