wiki:GEC16Agenda/WiMAX-Tutorial/Video/02

Version 4 (modified by Fraida Fund, 11 years ago) (diff)

--

Previous

Creating and Loading a Disk Image

To prepare his experiment, he loaded a baseline image onto a node at UCLA.

Try it yourself another time: To load a baseline image onto a node, e.g. node2 at UCLA, run
omf load -i baseline.ndz -t omf.necwimax.node2


Then he installed all the applications he needs on the node, and saved the disk image.

Try it yourself another time: To save a disk image from a node, e.g. node2 at UCLA, run
omf save -n omf.necwimax.node2


When the image saving process concluded, it reported that his disk image had been saved and gave the name of the image. Now, when he wants to run his experiment, he will load his disk image onto the nodes he has reserved:

Try it yourself another time: To load a disk image onto a node, e.g. node2 at UCLA, run
omf load -i gec16-video.ndz -t omf.necwimax.node2

Clearing Experiment Settings

In addition to loading a fresh disk image, additional steps must be taken to restore the wireless environment to its default state. These commands are run from the console on Sandbox 4 to reset all of the base station and attenuation settings:

wget -qO- "http://wimaxrf:5052/wimaxrf/bs/default"
wget -qO- "http://wimaxrf:5052/wimaxrf/bs/restart"

Application Wrappers

When an OML-enabled application is run using OMF, the application itself is installed on the resource and a simple OMF application wrapper is installed on the console where the OMF Experiment Controller runs. This wrapper just gives some basic information about the application, the parameters that can be passed at the command line, and the OML measurement points that have been defined in the application.

For example, here's the wrapper for the OML-ized VLC:

defApplication('vlc', 'vlc') do |app|
 
   app.path = "/usr/local/bin/vlc" 
   app.version(2, 0, 5)
   app.shortDescription = "VLC" 
   app.description = "VLC multimedia player and streamer" 
 
   app.defProperty("input", "Stream input (e.g. file or network address)", nil, 
                   {:type => :string, :dynamic => false, :use_name => false})
   app.defProperty("sout", "Stream output", nil, 
                   {:type => :string, :dynamic => false,}) 
   app.defProperty("intf", "Main interface module", "I",
                   {:type => :string, :dynamic => false})
   app.defProperty("extraintf", "Extra interface module(s). Use --extraintf omlstats to enable OML", nil,
                   {:type => :string, :dynamic => false})
   app.defProperty("mtu", "Specifies the MTU of the network interface", nil,
                   {:type => :string, :dynamic => false})
   app.defProperty("quiet", " Deactivates all console messages", nil,
                   {:type => :boolean, :dynamic => false})
   app.defProperty("play-and-exit", "Exit VLC after playing all the items in the input stream list", nil,
                   {:type => :boolean, :dynamic => false})

   app.defMeasurement('audio') do |mp|
     mp.defMetric('i_decoded_audio_blocks',:int)
     mp.defMetric('i_played_audio_buffers',:int)
     mp.defMetric('i_lost_audio_buffers',:int)     
   end

   app.defMeasurement('video') do |mp|
     mp.defMetric('i_decoded_video_blocks',:int)
     mp.defMetric('i_played_video_frames',:int)
     mp.defMetric('i_lost_video_frames',:int)
   end


   app.defMeasurement('input') do |mp|
     mp.defMetric('i_read_packets',:int)
     mp.defMetric('i_read_bytes',:int)
     mp.defMetric('f_input_bitrate',:float)
     mp.defMetric('i_demux_read_bytes',:int)
     mp.defMetric('f_demux_bitrate',:float)
     mp.defMetric('i_demux_corrupted',:int)
     mp.defMetric('i_demux_discontinuity',:int)
   end

   app.defMeasurement('output') do |mp|
     mp.defMetric('i_sent_packets',:int)
     mp.defMetric('i_sent_bytes',:int)
     mp.defMetric('f_send_bitrate',:float)
   end
end

Next