The Conference Room Tutorial¶
0. Video now available!¶
We recently uploaded a video of this tutorial, which you can watch here: http://omf.mytestbed.net/videos/tv-conf-room.mp4
1. Prerequisites¶
- Make sure that you understand how OMF works from a user's point of view.
- Make sure that you have completed and understood all the basic tutorias.
2. Goal¶
- This tutorial shows an experiment which uses all of the features described in the previous basic tutorials.
- As detailed explanation on how to use these features are available in the basic tutorials, this page just shows the Experiment Description and some graphs obtained by running this experiment with different parameters
3. Scenario¶
- The "Conference Room" scenario is based on the basic Sender/Receiver scenario of the "Hello World" tutorial.
- Here we have:
- One resource in a unique Receiver group
- Multiple resources in different groups of Senders, which will send UDP Constant-Bit-Rate traffic to the Receiver
- The Senders will start and stop sending their traffic sequentially
- Different parameters of the experiment can be changed using Properties
4. The Experiment Description¶
The Experiment Description (ED) describing this experiment is (download it here: attachment:conf-room.rb):
1 defProperty('hrnPrefix', "omf.nicta.node", "Prefix to use for the HRN of resources")
2 defProperty('resources', "[1,2,3,4,5,8,9,10,11,12,13]", "List of IDs for the resources to use as senders")
3 defProperty('receiver', "6", "ID for the resource to use as a receiver")
4 defProperty('groupSize', 4, "Number of resources to put in each group of senders")
5 defProperty('rate', 300, 'Bits per second sent from senders')
6 defProperty('packetSize', 256, 'Byte size of packets sent from senders')
7 defProperty('wifiType', "g", "The type of WIFI to use in this experiment")
8 defProperty('channel', '6', "The WIFI channel to use in this experiment")
9 defProperty('netid', "confroom", "The ESSID to use in this experiment")
10 defProperty('stepDuration', 60, "The duration of each step of this conf-room")
11
12 # Define the Receiver
13 defGroup('Receiver', "#{property.hrnPrefix}#{property.receiver}") do |node|
14 node.addApplication("test:app:otr2") do |app|
15 app.setProperty('udp:local_host', '%net.w0.ip%')
16 app.setProperty('udp:local_port', 3000)
17 app.measure('udp_in', :samples => 1)
18 end
19 node.net.w0.mode = "master"
20 node.net.w0.type = property.wifiType
21 node.net.w0.channel = property.channel
22 node.net.w0.essid = property.netid
23 node.net.w0.ip = "192.168.0.254"
24 end
25
26 # Define each Sender groups
27 groupList = []
28 res = eval(property.resources.value)
29 groupNumber = res.size >= property.groupSize ? (res.size.to_f / property.groupSize.value.to_f).ceil : 1
30 (1..groupNumber).each do |i|
31 list = []
32 (1..property.groupSize).each do |j| popped = res.pop ; list << popped if !popped.nil? end
33 senderNames = list.collect do |id| "#{property.hrnPrefix}#{id}" end
34 senders = senderNames.join(',')
35
36 info "Group Sender #{i}: '#{senders}'"
37 groupList << "Sender#{i}"
38 defGroup("Sender#{i}", senders) do |node|
39 node.addApplication("test:app:otg2") do |app|
40 app.setProperty('udp:local_host', '%net.w0.ip%')
41 app.setProperty('udp:dst_host', '192.168.0.254')
42 app.setProperty('udp:dst_port', 3000)
43 app.setProperty('cbr:size', property.packetSize)
44 app.setProperty('cbr:rate', property.rate)
45 app.measure('udp_out', :samples => 1)
46 end
47 node.net.w0.mode = "managed"
48 node.net.w0.type = property.wifiType
49 node.net.w0.channel = property.channel
50 node.net.w0.essid = property.netid
51 node.net.w0.ip = "192.168.0.%index%"
52 end
53 end
54
55 onEvent(:ALL_UP_AND_INSTALLED) do |event|
56 wait 10
57 group('Receiver').startApplications
58 wait 10
59 (1..groupNumber).each do |i|
60 group("Sender#{i}").startApplications
61 wait property.stepDuration
62 end
63 (1..groupNumber).each do |i|
64 group("Sender#{i}").stopApplications
65 wait property.stepDuration
66 end
67 group('Receiver').stopApplications
68 Experiment.done
69 end
70
71 addTab(:defaults)
72 addTab(:graph2) do |tab|
73 opts = { :postfix => %{Sender index for incoming UDP traffic = F(time)}, :updateEvery => 1 }
74 tab.addGraph("Incoming UDP", opts) do |g|
75 data = Hash.new
76 index = 1
77 mpIn = ms('udp_in')
78 mpIn.project(:oml_ts_server, :src_host, :seq_no).each do |sample|
79 time, src, seq = sample.tuple
80 if data[src].nil?
81 data[src] = [index,[]]
82 index += 1
83 end
84 data[src][1] << [time, data[src][0]]
85 end
86 data.each do |src,value|
87 g.addLine(value[1], :label => "Node #{value[0]}")
88 end
89 end
90 end
- Please refer to the previous basic tutorials for more detail on understanding this ED.
4. Running the experiment & viewing the Results¶
- Please refer to the previous basic tutorials and the Getting Started page to find out:
- how to run an experiment with OMF.
- how to access and use your result database
- how to define graphs to plot during your experiment runtime
- how to access the EC's webpage during your experiment runtime
- Here we assume that you have the above ED saved in the file named
dynamic-properties.rb.
- Run the experiment using the default values for all the properties:
omf-5.3 exec conf-room.rb
- While the experiment is running, the EC's web page should display a graph similar to this:
- you can see the Sender groups (each with 4 resources) starting to send traffic to the receiver sequentially
- Run the experiment using more Senders group with fewer resources in them, on channel 1 with a different rate 1024:
omf-5.3 exec conf-room.rb -- --groupsize 2 --channel 1 --bit
- While the experiment is running, the EC's web page should display a graph similar to this:
- you can see the Sender groups (each with 2 resources) starting to send traffic to the receiver sequentially
7. What is Next?¶
Now you may want to read the following basic OMF tutorials. You do not need to follow them in the order suggested below.
And finally, a "Conference Room" scenario which combines all of the above features: