22 | | * Verify state of node before continuing. Make sure all nodes are in the POWEROFF state. |
23 | | {{{ |
24 | | nilanjan@console.grid:~$ omf stat |
25 | | }}} |
26 | | |
27 | | * Image nodes. Two (2) are required to run - check [https://www.orbit-lab.org/cPanel/controlPanel/start inventory status] to find nodes with 2 similar USRP2s. In this examples we'll use node1-1 and node1-2. |
28 | | {{{ |
29 | | nilanjan@console.grid:~$ omf load -i baseline-12-04-gnu.ndz -t node1-1,node1-2 |
30 | | }}} |
31 | | |
32 | | * Turn nodes back on and verify they are in POWERON state |
33 | | {{{ |
34 | | nilanjan@console.grid:~$ omf tell -a on -t system:topo:imaged |
35 | | }}} |
36 | | |
37 | | === Running OEDL script and viewing results === |
38 | | * Run the experiment script using the following OMF command. The output is show as well. |
39 | | {{{ |
40 | | nilanjan@console.grid:~$ omf exec system:exp:gnu-benchmark |
41 | | |
42 | | INFO NodeHandler: OMF Experiment Controller 5.4 (git 3fb37b9) |
43 | | INFO NodeHandler: Reading configuration file /etc/omf-expctl-5.4/services.yaml |
44 | | INFO NodeHandler: Add domain http - http://internal1.orbit-lab.org:5054/ |
45 | | INFO NodeHandler: Add domain http - http://repository1.orbit-lab.org:5054/ |
46 | | INFO NodeHandler: Slice ID: default_slice (default) |
47 | | INFO NodeHandler: Experiment ID: default_slice-2014-07-17t14.20.09.457-04.00 |
48 | | INFO NodeHandler: Message authentication is disabled |
49 | | INFO Experiment: load system:exp:stdlib |
50 | | INFO property.resetDelay: resetDelay = 230 (Fixnum) |
51 | | INFO property.resetTries: resetTries = 1 (Fixnum) |
52 | | INFO Experiment: load system:exp:eventlib |
53 | | INFO Experiment: load system:exp:winlib |
54 | | INFO Experiment: load system:exp:gnu-benchmark |
55 | | INFO property.rate: rate = ".250M" (String) |
56 | | INFO property.modulation: modulation = "bpsk" (String) |
57 | | INFO property.freq: freq = "2410000000" (String) |
58 | | INFO property.runtime: runtime = 10 (Fixnum) |
59 | | INFO Topology: Loaded topology '/tmp/pxe_slice-2014-07-17t13.52.30.457-04.00-topo-success'. |
60 | | INFO Topology: Loaded topology 'system:topo:imaged'. |
61 | | TX: node1-2.grid.orbit-lab.org |
62 | | RX: node1-1.grid.orbit-lab.org |
63 | | INFO ALL_UP_AND_INSTALLED: Event triggered. Starting the associated tasks. |
64 | | INFO exp: Request from Experiment Script: Wait for 2s.... |
65 | | INFO exp: Start receiver app |
66 | | INFO exp: Request from Experiment Script: Wait for 2s.... |
67 | | INFO exp: Start sending packets |
68 | | INFO exp: Request from Experiment Script: Wait for 10s.... |
69 | | INFO exp: Stop transmitter and receiver |
70 | | INFO exp: Request from Experiment Script: Wait for 2s.... |
71 | | INFO exp: done |
72 | | INFO EXPERIMENT_DONE: Event triggered. Starting the associated tasks. |
73 | | INFO NodeHandler: |
74 | | INFO NodeHandler: Shutting down experiment, please wait... |
75 | | INFO NodeHandler: |
76 | | INFO run: Experiment default_slice-2014-07-17t14.20.09.457-04.00 finished after 0:25 |
77 | | |
78 | | nilanjan@console.grid:~$ |
79 | | }}} |
80 | | |
81 | | * Results from running the OEDL experiment can be found in a log file in /tmp directory. The name of the log file is the ''default_slice'' name found from the OEDL output appended with .log. A successful run will have several lines similar to the following. This is will show the packet number, number of packets received and the number of correctly formed packets as seen from the receiver. |
82 | | {{{ |
83 | | : |
84 | | : |
85 | | 2014-07-21 10:51:07 DEBUG nodeHandler::AgentCommands: APP_EVENT STDOUT from: 'test:app:benchmark_rx#1' (node1-1.grid.orbit-lab.org) - msg: 'ok = True pktno = 140 n_rcvd = 140 n_right = 140' |
86 | | 2014-07-21 10:51:07 DEBUG nodeHandler::AgentCommands: APP_EVENT STDOUT from: 'test:app:benchmark_rx#1' (node1-1.grid.orbit-lab.org) - msg: 'ok = True pktno = 141 n_rcvd = 141 n_right = 141' |
87 | | 2014-07-21 10:51:07 DEBUG nodeHandler::AgentCommands: APP_EVENT STDOUT from: 'test:app:benchmark_rx#1' (node1-1.grid.orbit-lab.org) - msg: 'ok = True pktno = 142 n_rcvd = 142 n_right = 142' |
88 | | : |
89 | | : |
90 | | }}} |
91 | | |
92 | | The output from the transmitter will up as a series of periods '.' similar to the following: |
93 | | {{{ |
94 | | 2014-07-21 10:51:09 DEBUG nodeHandler::AgentCommands: APP_EVENT STDERR from: 'test:app:benchmark_tx#1' (node1-2.grid.orbit-lab.org) - msg: '.................................................................U............................................................................................................................................................................................................................' |
95 | | }}} |
96 | | |
97 | | |
98 | | === OEDL script === |
99 | | |
100 | | {{{ |
101 | | defProperty('rate', '.250M', "Bitrate") |
102 | | defProperty('modulation','bpsk',"Modulation") |
103 | | defProperty('freq', '2410000000', "Center frequency") |
104 | | defProperty('runtime', 10, "Run time (s)") |
105 | | |
106 | | |
107 | | defApplication('test:app:benchmark_rx', 'benchmark_rx.py') { |a| |
108 | | a.version(2, 0, 4) |
109 | | a.shortDescription = "" |
110 | | a.description = "" |
111 | | a.path = "export LC_ALL=C;/root/gnuradio/gr-digital/examples/narrowband/benchmark_rx.py" |
112 | | a.defProperty('args', "Argument list", nil, |
113 | | {:dynamic => false, :type => :string}) |
114 | | a.defProperty('freq', "center frequency in Hz", '-f', |
115 | | {:dynamic => false, :type => :string}) |
116 | | a.defProperty('rx-gain', "receive gain in dB", '--rx-gain', |
117 | | {:dynamic => false, :type => :string}) |
118 | | a.defProperty('bitrate', "specify bitrate", '-r', |
119 | | {:dynamic => false, :type => :string}) |
120 | | a.defProperty('modulation', "modulation: psk, cpm, qpsk, dqpsk, gfsk,qam, dbpsk, bpsk, gmsk [default=psk]", '-m', |
121 | | {:dynamic => false, :type => :string}) |
122 | | a.defProperty('constellation-points', "set constellation - power of two for psk, power of 4 for QAM [default=16]", '-p', |
123 | | {:dynamic => false, :type => :string}) |
124 | | } |
125 | | |
126 | | defApplication('test:app:benchmark_tx', 'benchmark_tx.py') { |a| |
127 | | a.version(2, 0, 4) |
128 | | a.shortDescription = "" |
129 | | a.description = "" |
130 | | a.path = "export LC_ALL=C;/root/gnuradio/gr-digital/examples/narrowband/benchmark_tx.py" |
131 | | a.defProperty('args', "Argument list", nil, |
132 | | {:dynamic => false, :type => :string}) |
133 | | a.defProperty('freq', "center frequency in Hz", '-f', |
134 | | {:dynamic => false, :type => :string}) |
135 | | a.defProperty('tx-gain', "transmit gain in dB", '--tx-gain', |
136 | | {:dynamic => false, :type => :string}) |
137 | | a.defProperty('tx-amplitude', "transmitter digital amplitude [0,1) [default=0.25", '--tx-amplitude', |
138 | | {:dynamic => false, :type => :string}) |
139 | | a.defProperty('bitrate', "specify bitrate", '-r', |
140 | | {:dynamic => false, :type => :string}) |
141 | | a.defProperty('modulation', "modulation: psk, cpm, qpsk, dqpsk, gfsk,qam, dbpsk, bpsk, gmsk [default=psk]", '-m', |
142 | | {:dynamic => false, :type => :string}) |
143 | | a.defProperty('constellation-points', "set constellation - power of two for psk, power of 4 for QAM [default=16]", '-p', |
144 | | {:dynamic => false, :type => :string}) |
145 | | } |
146 | | |
147 | | |
148 | | |
149 | | defTopology('txnode') { |t| |
150 | | # Load the topology of imaged nodes |
151 | | # These nodes are from most recent omf load command |
152 | | baseTopo = Topology['system:topo:imaged'] |
153 | | |
154 | | # Draw a random node from the pool of active ones |
155 | | aNode = baseTopo.getUniqueRandomNode |
156 | | |
157 | | # Add this random node to this 'senderTopo' topology |
158 | | t.addNode(aNode) |
159 | | puts "TX: #{t.getNodeByIndex(0).to_s}" |
160 | | } |
161 | | |
162 | | defTopology('rxnode') { |t| |
163 | | # Load the topology of imaged nodes |
164 | | # These nodes are from most recent omf load command |
165 | | baseTopo = Topology['system:topo:imaged'] |
166 | | |
167 | | # Draw a random node from the pool of active ones |
168 | | aNode = baseTopo.getUniqueRandomNode |
169 | | |
170 | | # Add this random node to this 'senderTopo' topology |
171 | | t.addNode(aNode) |
172 | | puts "RX: #{t.getNodeByIndex(0).to_s}" |
173 | | } |
174 | | |
175 | | defGroup('rx', 'rxnode') { |n| |
176 | | n.addApplication('test:app:benchmark_rx') { |app| |
177 | | app.setProperty('freq', property.freq) |
178 | | app.setProperty('modulation',property.modulation) |
179 | | app.setProperty('bitrate',property.rate) |
180 | | app.setProperty('rx-gain','30') |
181 | | } |
182 | | |
183 | | } |
184 | | |
185 | | defGroup('tx', 'txnode') { |n| |
186 | | n.addApplication('test:app:benchmark_tx') { |app| |
187 | | app.setProperty('freq', property.freq) |
188 | | app.setProperty('modulation',property.modulation) |
189 | | app.setProperty('bitrate',property.rate) |
190 | | app.setProperty('tx-gain','30') |
191 | | app.setProperty('tx-amplitude','0.5') |
192 | | } |
193 | | |
194 | | } |
195 | | |
196 | | onEvent(:ALL_UP_AND_INSTALLED) { |event| |
197 | | # Wait a couple of seconds before proceeding so processes can settle down |
198 | | wait 2 |
199 | | |
200 | | # Start receiver application |
201 | | info "Start receiver app" |
202 | | group("rx").startApplications |
203 | | |
204 | | # Wait a couple of seconds for receiver application to become ready |
205 | | wait 2 |
206 | | |
207 | | # Start transmitter application |
208 | | info "Start sending packets" |
209 | | group("tx").startApplications |
210 | | |
211 | | # Run for specified runtime |
212 | | wait property.runtime |
213 | | |
214 | | # Stop benchmark applications |
215 | | info "Stop transmitter and receiver" |
216 | | allGroups.stopApplications |
217 | | |
218 | | # As a precaution manually kill the benchmark applications on tx & rx node |
219 | | allGroups.exec("PID=$(ps -ef | awk '$8==\"python\" {print $2}') ; kill -9 $PID") |
220 | | wait 2 |
221 | | |
222 | | info "done" |
223 | | Experiment.done |
224 | | } |
225 | | }}} |
| 14 | === Set up the node === |
| 15 | Kurac palac |