Version 14 (modified by 12 years ago) (diff) | ,
---|
Run an OMF Experiment on an InstaGENI Test Bed
This page provides steps to run an OMF-experiment on an InstaGENI testbed with two nodes.
You can use the GEC16-Tutorial VM to run the experiment as it has the OMF commands pre-installed on them.
1. Create a 2 node topology using the Rspec below.
Note: This rspec is for 2 nodes on the bbninstageni Aggregate manager
For other managers, you can use url=https://boss.instageni.gpolab.bbn.com/image_metadata.php?uuid=2a721653-a868-11e2-921f-029e26f15299
For the same manager, you can use id=urn:publicid:IDN+instageni.gpolab.bbn.com+image+emulab-net:GIMIomf (given below)
<rspec type="request" generated_by="Flack" generated="2013-05-13T17:48:51Z" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd " xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.geni.net/resources/rspec/3"> <node client_id="nodeA" component_manager_id="urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm" component_id="urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc2" component_name="pc2" exclusive="false"> <vnode name="pcvm2-2" xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/> <location latitude="42.389806" longitude="-71.147599" country="US"/> <sliver_type name="emulab-openvz"> <disk_image name="urn:publicid:IDN+instageni.gpolab.bbn.com+image+emulab-net//GIMIomf"/> </sliver_type> <services> <execute command="sudo sh local/postboot_script.sh" shell="sh"/> <install install_path="/local" url="http://emmy9.casa.umass.edu/InstaGENI_Images/install-script.tar.gz"/> </services> <interface client_id="VM:if0"> <ip address="10.10.1.1" netmask="" type="ipv4"/> <flack:interface_info addressBound="true" bound="false"/> </interface> <flack:node_info x="152" y="74" unbound="true"/> </node> <node client_id="nodeB" component_manager_id="urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm" component_id="urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc2" component_name="pc2" exclusive="false"> <vnode name="pcvm2-5" xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/> <location latitude="42.389806" longitude="-71.147599" country="US"/> <sliver_type name="emulab-openvz"> <disk_image name="urn:publicid:IDN+instageni.gpolab.bbn.com+image+emulab-net//GIMIomf"/> </sliver_type> <services> <execute command="sudo sh /local/postboot_script.sh" shell="sh"/> <install install_path="/local" url="http://emmy9.casa.umass.edu/InstaGENI_Images/install-script.tar.gz"/> </services> <interface client_id="VM-0:if0"> <ip address="10.10.1.2" netmask="" type="ipv4"/> <flack:interface_info addressBound="true" bound="false"/> </interface> <flack:node_info x="450" y="104" unbound="true"/> </node> <link client_id="lan0"> <flack:link_info x="-1" y="-1" unboundVlantag="true" xmlns="http://www.protogeni.net/resources/rspec/ext/flack/1"/> <flack:link_info x="-1" y="-1" unboundVlantag="true" xmlns="http://www.protogeni.net/resources/rspec/ext/flack/1"/> <flack:link_info x="-1" y="-1" unboundVlantag="true" xmlns="http://www.protogeni.net/resources/rspec/ext/flack/1"/> <component_manager name="urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm"/> <interface_ref client_id="VM:if0"/> <interface_ref client_id="VM-0:if0"/> <property source_id="VM:if0" dest_id="VM-0:if0"/> <property source_id="VM-0:if0" dest_id="VM:if0"/> <link_type name="lan"/> <flack:link_info x="-1" y="-1" unboundVlantag="true"/> </link> <client:client_info name="Flack" environment="Flash Version: LNX 11,2,202,280, OS: Linux 3.5.0-28-generic, Arch: x86, Screen: 1680x1050 @ 72 DPI with touchscreen type none" version="v14.91" url="https://www.emulab.net/protogeni/flack2/flack.swf"/> <flack:slice_info view="graph"/> </rspec>
The postboot script is attached here. This is just for your reference. It is automatically executed when you submit your request Rspec. There is no need for any modifictaions.
!/bin/bash cd /local read -r slice</var/emulab/boot/nickname slicename=$(echo $slice | cut -f2 -d.) host=$(hostname) host1=$(echo $host | cut -f1 -d.) hostname $host1 curl http://emmy9.casa.umass.edu/pingWrap.rb -o /root/pingWrap.rb chmod +x /root/pingWrap.rb curl http://emmy9.casa.umass.edu/omf-resctl.yaml -o /etc/omf-resctl-5.4/omf-resctl.yaml perl -i.bak -pe "s/\:slice\:/\:slice\: $slicename/g" /etc/omf-resctl-5.4/omf-resctl.yaml /etc/init.d/omf-resctl-5.4 restart
2. Edit Experiment Script.
GIMI Simple Experiment script is shown above. In the experiment script you would need to change the host names to the names of your nodes.
defProperty('source1', "nodeA", "ID of a resource") defProperty('source2', "nodeB", "ID of a resource") #defProperty('sink2', "nodeB", "ID of a sink") #defProperty('sink3', "nodeC", "ID of a sink") #defProperty('sink4', "nodeD", "ID of a sink") #defProperty('sink5', "nodeE", "ID of a sink") defProperty('sinkaddr11', '10.10.1.1', "Ping destination address") defProperty('sinkaddr12', '10.10.1.2', "Ping destination address") defApplication('ping_app', 'pingmonitor') do |a| a.path = "/root/pingWrap.rb" a.version(1, 2, 0) a.shortDescription = "Wrapper around ping" a.description = "ping application" a.defProperty('dest_addr', 'Address to ping', '-a', {:type => :string, :dynamic => false}) a.defProperty('count', 'Number of times to ping', '-c', {:type => :integer, :dynamic => false}) a.defProperty('interval', 'Interval between pings in s', '-i', {:type => :integer, :dynamic => false}) a.defMeasurement('myping') do |m| #a.defMeasurement('myping', '') do |m| m.defMetric('dest_addr',:string) m.defMetric('ttl',:int) m.defMetric('rtt',:float) m.defMetric('rtt_unit',:string) end end defGroup('Source1', property.source1) do |node| node.addApplication("ping_app") do |app| app.setProperty('dest_addr', property.sinkaddr12) app.setProperty('count', 30) app.setProperty('interval', 1) app.measure('myping', :samples => 1) end end defGroup('Source2', property.source2) do |node| node.addApplication("ping_app") do |app| app.setProperty('dest_addr', property.sinkaddr11) app.setProperty('count', 30) app.setProperty('interval', 1) app.measure('myping', :samples => 1) end end #defGroup('Sink1', property.sink1) do |node| #end #defGroup('Sink2', property.sink2) do |node| #end #defGroup('Sink3', property.sink3) do |node| #end #defGroup('Sink4', property.sink4) do |node| #end #defGroup('Sink5', property.sink5) do |node| #end onEvent(:ALL_UP_AND_INSTALLED) do |event| info "Starting the ping" allGroups.startApplications wait 30 info "Stopping the ping" allGroups.stopApplications Experiment.done end defGraph 'RTT' do |g| g.ms('myping').select(:oml_seq, :dest_addr, :rtt)#.where(:dest_addr => "192.168.5.12") g.caption "RTT of received packets." g.type 'line_chart3' g.mapping :x_axis => :oml_seq, :y_axis => :rtt, :group_by => :dest_addr # g.group_by(:dest_addr) g.xaxis :legend => 'oml_seq' g.yaxis :legend => 'rtt', :ticks => {:format => 's'} end
3. Run the experiment using the following command
Execute the following command in your tutorial VM.
omf-5.4 exec --no-am -e <exp_name> -S <slice_name> step1-ping_all.rb For example omf-5.4 exec --no-am -e dbhatinstageni-ping_all -S dbhatinstageni step1-ping_all.rb
The exp_name can be anything you wish to call your experiment. Preferably you could have your exp_name as slicename+exp_name. e.g. dbhatomf_ping_all
The slice_name has to be the slice_name on which you wish to run the experiment.
Shown below is my log after a successful run of the experiment script.
INFO NodeHandler: OMF Experiment Controller 5.4 (git c005675) INFO NodeHandler: Slice ID: dbhatinstageni INFO NodeHandler: Experiment ID: dbhatinstageni-ping_all INFO NodeHandler: Message authentication is disabled WARN NodeHandler: AM support disabled - any service calls will fail! INFO Experiment: load system:exp:stdlib INFO property.resetDelay: resetDelay = 210 (Fixnum) INFO property.resetTries: resetTries = 1 (Fixnum) INFO Experiment: load system:exp:eventlib INFO Experiment: load step1-ping_all.rb INFO property.source1: source1 = "nodeA" (String) INFO property.source2: source2 = "nodeB" (String) INFO property.sinkaddr11: sinkaddr11 = "10.10.1.1" (String) INFO property.sinkaddr12: sinkaddr12 = "10.10.1.2" (String) INFO Topology: Loading topology 'nodeA'. INFO Topology: Loading topology 'nodeB'. INFO GraphDescription: REPORT:START: RTT INFO GraphDescription: REPORT:TYPE: line_chart3 INFO GraphDescription: REPORT:MS:default: SELECT%20%22oml_seq%22,%20%22dest_addr%22,%20%22rtt%22%20FROM%20%22pingWrap_myping%22 INFO GraphDescription: REPORT:MAPPING: %7B%22y_axis%22:%22rtt%22,%22group_by%22:%22dest_addr%22,%22x_axis%22:%22oml_seq%22%7D INFO GraphDescription: REPORT:AXIS: %7B%22y%22:%7B%22legend%22:%22rtt%22,%22ticks%22:%7B%22format%22:%22s%22%7D%7D,%22x%22:%7B%22legend%22:%22oml_seq%22%7D%7D INFO GraphDescription: REPORT:CAPTION: RTT%20of%20received%20packets. INFO GraphDescription: REPORT:STOP INFO Experiment: Switching ON resources which are OFF INFO ALL_UP_AND_INSTALLED: Event triggered. Starting the associated tasks. INFO exp: Starting the ping INFO exp: Request from Experiment Script: Wait for 30s.... INFO exp: Stopping the ping INFO EXPERIMENT_DONE: Event triggered. Starting the associated tasks. INFO NodeHandler: INFO NodeHandler: Shutting down experiment, please wait... INFO NodeHandler: INFO run: Experiment dbhatinstageni-ping_all finished after 0:46
Attachments (5)
- step1-ping_all.rb (2.4 KB) - added by 12 years ago.
- insta_topo.png (146.6 KB) - added by 12 years ago.
- insta_labwiki1.png (160.9 KB) - added by 12 years ago.
- insta_labwiki2.png (200.1 KB) - added by 12 years ago.
- dbhat5insta.rspec (8.7 KB) - added by 12 years ago.
Download all attachments as: .zip