wiki:GEC20Agenda/LabWiki/ModuleA/Execute

Version 14 (modified by zink@cs.umass.edu, 10 years ago) (diff)

--

Module A Execute Experiment

3. Instrument your Application using LabWiki

In this part of Module A you will learn how you can use LabWiki to execute an experiment on the slice you reserved in the previous step.

3.1 Design and Execute measurement in LabWiki

3.1.1. The "Plan" Window

To get started point your browser to http://labwiki.casa.umass.edu:4000/. Labwiki has three major windows. We will focus on the leftmost window first. This is the "Planning" window in which you document your experiment. (This is somewhat the equivalent of an electronic lab journal.) Documents are written in Markdown.

At the top of that window is a text field which you can use to search for existing MD scripts. Type "learningswitch" in the field and then select "learningswitch.md" from the list of files that are offered. This document has some information on the experiment that will be performed in Module A of the tutorial.

3.1.2 The "Prepare" Window

The "Prepare" (middle) window allows you to define your experiment through and OMF experiment script specified in OMF Experiment Description Language (OEDL).

At the top of that window is a text field which you can use to search for existing OEDL scripts. Type "GEC20" in the field and then select "GEC20-learningswitch.oedl" from the list of files that are offered. This list the experiment script in the field below.

For reference, we show the experiment script here:

defProperty('source1', "nodea-gimitest1", "ID of a resource")
defProperty('source2', "switch-gimitest1", "ID of a resource")


defProperty('sinkaddr12', '192.168.1.7', "Ping destination address")
defProperty('sinkaddr13', '192.168.1.8', "Ping destination address")

defProperty('sinkaddr21', '192.168.1.9', "Ping destination address")
defProperty('sinkaddr23', '192.168.1.10', "Ping destination address")

defApplication('ping') do |app|
  app.description = 'Simple Definition for the ping-oml2 application'
  # Define the path to the binary executable for this application
  app.binary_path = '/usr/local/bin/ping-oml2'
  # Define the configurable parameters for this application
  # For example if target is set to foo.com and count is set to 2, then the 
  # application will be started with the command line:
  # /usr/bin/ping-oml2 -a foo.com -c 2
  app.defProperty('target', 'Address to ping', '-a', {:type => :string})
  app.defProperty('count', 'Number of times to ping', '-c', {:type => :integer})
  # Define the OML2 measurement point that this application provides.
  # Here we have only one measurement point (MP) named 'ping'. Each measurement
  # sample from this MP will be composed of a 4-tuples (addr,ttl,rtt,rtt_unit)
  app.defMeasurement('ping') do |m|
    m.defMetric('dest_addr',:string)
    m.defMetric('ttl',:uint32)
    m.defMetric('rtt',:double)
    m.defMetric('rtt_unit',:string)
  end
end

defApplication('trema') do |app|
  app.description = 'This app runs trema from command line'
  app.binary_path = '/usr/bin/trema run /root/learning-switch.rb'
end

defGroup('Source2', property.source2) do |node|
  node.addApplication("trema")
end

defGroup('Source1', property.source1) do |node|
  node.addApplication("ping") do |app|
    app.setProperty('target', property.sinkaddr12)
    app.setProperty('count', 30)
    #app.setProperty('interval', 1)
    app.measure('ping', :samples => 1)
  end
  node.addApplication("ping") do |app|
    app.setProperty('target', property.sinkaddr13)
    app.setProperty('count', 30)
    #app.setProperty('interval', 1)
    app.measure('ping', :samples => 1)
  end
   node.addApplication("ping") do |app|
    app.setProperty('target', property.sinkaddr21)
    app.setProperty('count', 30)
    #app.setProperty('interval', 1)
    app.measure('ping', :samples => 1)
  end
   node.addApplication("ping") do |app|
    app.setProperty('target', property.sinkaddr23)
    app.setProperty('count', 30)
    #app.setProperty('interval', 1)
    app.measure('ping', :samples => 1)
  end
end

onEvent(:ALL_UP_AND_INSTALLED) do |event|
  info "Starting the ping"
  after 2 do
    group('Source2').startApplications
  end
  after 10 do
    group('Source1').startApplications
  end
  after 80 do
    info "Stopping the ping"
    allGroups.stopApplications
    Experiment.done
  end
end

defGraph 'RTT' do |g|
  g.ms('ping').select(:oml_seq, :dest_addr, :rtt) 
  g.caption "RTT of received packets."
  g.type 'line_chart3'
  g.mapping :x_axis => :oml_seq, :y_axis => :rtt, :group_by => :dest_addr
  g.xaxis :legend => 'oml_seq'
  g.yaxis :legend => 'rtt', :ticks => {:format => 's'}
end

##Troubleshooting##

3.1.2 Copy the following script into the Prepare Window

OEDL Script

3.1.3 Start your application from LabWiki

Design

Next: Finish

Attachments (2)

Download all attachments as: .zip