= Tutorial for Hurdle3-like experiment = [[TOC(DSC*,depth=2)]] == Objective == Use OEDL script to execute transmit and receive ZGNURadio benchmark scripts on the pair of grid nodes. == Hardware / Software Resources Used == 1. Two grid nodes with USRPs. 2. ''baseline-gnu-12-04-32bit.ndz'': disk image loaded onto nodes. This image has all the prerequisite software to configure the USRPs. 3. Orbit's Arbitrary Waveform Injection System: used to inject noise or simple signal into RF environment; more information of the waveform generator service can be found [http://www.orbit-lab.org/wiki/Software/bAM/mInterf interference AM pages.] 4. Packet server: This is server that resides on the grid console and is used by a transmitting node to send data packets over the air via USRP as well as by the receiving node to submit received packets for scoring. 5. [attachment:dsc-h3.rb]: this is the OEDL experiment script to manage the nodes, interference service and packet server and execute the transmit and receive scripts. == Setting up the nodes == * To get started first make a reservation on the [https://www.orbit-lab.org/loginService/ControlPanel Orbit Scheduler] for using the Grid. * After logging into grid console, make sure all nodes are turned off (in the example below, turn off all the nodes in the grid): {{{ username@console.grid:~$ omf tell -a offh -t system:topo:all }}} * Verify state of node before continuing. Make sure nodes are in the POWEROFF state. {{{ username@console.grid:~$ omf stat }}} * Image the two nodes used in the tutorial (node1-1 and node20-20): {{{ username@console.grid:~$ omf load -i baseline-gnu-12-04-32bit.ndz -t node1-1.grid.orbit-lab.org,node20-20.grid.orbit-lab.org -r 20 }}} * After nodes are imaged, verify that nodes are in POWEROFF state. Otherwise issue the following to turn them off for a reboot {{{ username@console.grid:~$ omf tell -a offh -t node1-1.grid.orbit-lab.org,node20-20.grid.orbit-lab.org }}} * Turn nodes back on and verify they are in POWERON state {{{ username@console.grid:~$ omf tell -a on -t node1-1.grid.orbit-lab.org,node20-20.grid.orbit-lab.org }}} * Download the [attachment:dsc-h3.rb OEDL experiment script for this tutorial] to your local directory. {{{ username@console.grid:~$ wget http://www.orbit-lab.org/raw-attachment/wiki/DSC/dc_trial1/dsc-h3.rb }}} == Running the experiment script == * Type to following command to run the experiment. This will start the packet server, configure and start the interference generator and finally kick off the transmit and receive benchmark scripts within the nodes. The actual transmission/reception will run for 100 seconds (which can be adjusted with the property at the top of the script). {{{ username@console.grid:~$ omf exec dsc-h3.rb }}} * The output should look similar to the following: {{{ username@console.grid:~# omf exec dsc-h3.rb INFO NodeHandler: OMF Experiment Controller 5.4 (git 578791f) INFO NodeHandler: Slice ID: default_slice (default) INFO NodeHandler: Experiment ID: default_slice-2013-06-16t11.47.35.694-04.00 INFO NodeHandler: Message authentication is disabled INFO Experiment: load system:exp:stdlib INFO property.resetDelay: resetDelay = 230 (Fixnum) INFO property.resetTries: resetTries = 1 (Fixnum) INFO Experiment: load system:exp:eventlib INFO Experiment: load system:exp:winlib INFO Experiment: load dsc-h3.rb INFO property.rxnode: rxnode = "node1-1.grid.orbit-lab.org" (String) INFO property.txnode: txnode = "node20-20.grid.orbit-lab.org" (String) INFO property.rate: rate = "1.25M" (String) INFO property.modulation: modulation = "bpsk" (String) INFO property.freq: freq = "1900000000" (String) INFO property.runtime: runtime = 100 (Fixnum) INFO ALL_UP_AND_INSTALLED: Event triggered. Starting the associated tasks. INFO exp: Give machines some time to warm up :-) INFO exp: Request from Experiment Script: Wait for 2s.... INFO exp: Starting the packet server INFO 11:47:49.031 - Starting the server at INFO 11:47:49.033 - Starting UDP sender server at 5101 INFO 11:47:49.033 - Starting TCP receiver server at 5102 INFO 11:47:49.033 - Starting UDP receiver server at 5103 INFO 11:47:49.033 - Starting TCP sender server at 5100 INFO exp: Configuring interference INFO exp: Starting interference INFO exp: Starting benchmark_rx INFO exp: Starting benchmark_tx INFO exp: Runing for 100 seconds... INFO exp: Request from Experiment Script: Wait for 100s.... INFO 11:47:49.318 - Rx Thread count: 1 INFO 11:47:50.910 - Tx Thread count: 1 console.grid.orbit-lab.org INFO OML Client V2.8.1 [Protocol V3] Copyright 2007-2012, NICTA INFO Net_stream: connecting to host tcp://idb2.orbit-lab.org:3003 INFO 11:48:05.910 - t=15000 msec rx/tx/bad packets=580/1678/0 rx/tx bytes=835200/2416320 success=34.565% INFO 11:48:20.910 - t=30000 msec rx/tx/bad packets=1123/3279/0 rx/tx bytes=1617120/4721760 success=34.2482% INFO 11:48:35.910 - t=45000 msec rx/tx/bad packets=2019/4880/0 rx/tx bytes=2907360/7027200 success=41.373% INFO 11:48:50.910 - t=60000 msec rx/tx/bad packets=2678/6481/0 rx/tx bytes=3856320/9332640 success=41.3208% INFO 11:49:05.910 - t=75000 msec rx/tx/bad packets=3371/8081/0 rx/tx bytes=4854240/11638080 success=41.71% INFO 11:49:20.910 - t=90000 msec rx/tx/bad packets=4121/9683/0 rx/tx bytes=5934240/13943520 success=42.5591% INFO exp: Done! Stop eveything INFO exp: Request from Experiment Script: Wait for 5s.... INFO 11:49:30.910 - 100 sec timeout reached - closing connection INFO 11:49:30.910 - TIME = 100000 msec rx/tx/bad packets=4731/10750/0 rx/tx bytes=6812640/15480000 success=44.0093% INFO Waiting for buffered queue reader thread to drain... INFO Buffered queue reader thread finished OK... INFO 11:49:30.912 - Rx Thread count: 0 INFO 11:49:30.920 - Tx Thread count: 0 INFO EXPERIMENT_DONE: Event triggered. Starting the associated tasks. INFO NodeHandler: INFO NodeHandler: Shutting down experiment, please wait... INFO NodeHandler: INFO run: Experiment default_slice-2013-06-16t11.47.35.694-04.00 finished after 2:1 }}} * Turn the nodes off {{{ username@console.grid:~$ omf tell -a offh -t node1-1.grid.orbit-lab.org,node20-20.grid.orbit-lab.org }}} NOTES: * In case you interrupt the execution of the script, please make sure that both packet server process on the console and python processes on the nodes are terminated before running the experiment again * Please monitor the output of the script - if there are any errors indicated, more details can be found in /tmp/"Experimen ID".log ("Experiment ID" is unique to every experiment run and is indicated at the top of the console output - in case of the run shown above the "Experiment ID" is default_slice-2013-06-16t11.47.35.694-04.00 and the log file would be available in /tmp/default_slice-2013-06-16t11.47.35.694-04.00.log)