RSGCTest

From DSD Wiki

Jump to: navigation, search

Contents

Files

  • Getting the CVS repo: cvs -d portnoy.lbl.gov:/home/u3/repository co java/rsgc
  • Right now, everything is in java/rsgc/perf/
    • conductor.py - main library of python code for running tests
    • *_test.py - various actual tests
    • *.r, parse_*.py - Postprocessing scripts
  • On emulab/deterlab these are checked out under the project home's src/ directory

Running on Emulab

General instructions

  • For the NS file, see experiment rsgcbatch or latencyscaling
  • Modify number of nodes and nodes per host as needed
  • You can set the debug level to 'debug', 'info', or 'off' by modifying the variable param_debug
  • Submit batch job
  • Collect results in SHARED directory (see below)
  • Once it starts:
    • SHARED directory is /proj/RSGC/tests
    • SHARED/tests
      • top-level files give props, nodes, log4j
    • SHARED/tests/output/node??.out
      • all the redirected stdout from the current conductor run
    • SHARED/tests/output/{PROPERTIES}/
      • Data from completed runs for each property, where {PROPERTIES} encodes the properties and additional parameters, e.g., SR:ID:WV:EVS:SD_25pct
    • On each node, {TMP} directory is /tmp/rsgc-output/wip/
  • To ping all nodes
    • Run /proj/RSGC/src/java/rsgc/perf/ping_musicians.py
    • This will result in output in {TMP}/musician.XXX_Y.out, where 'XXX' is the pc number and Y is the index of this node on this host, from zero, e.g. if you are running two nodes per host Y will be both 0 and 1.

Running interactively

You can debug scripts by running interactively on 2 nodes.

  • Use the "Dummy" emulab experiment to allocate the nodes.
  • Go to node01, node02 on dummy (ssh node01.dummy.rsgc)
  • Set PATH to include /proj/RSGC/src/java/rsgc/perf
  • On each node, run the command corresponding to the experiment. For example:
    • node01: latency_test.py seed=1234 label=far level=debug master=0 -fork 0 1 2 node02
    • node02: latency_test.py seed=1234 level=debug master=1 -fork 1 1 2 node02
  • Note that running latency_test.py -h will produce a help message
  • Since Musicians run in the background, if there is an error, you should run the ~dang/bin/stopall script to clean up before restarting

Available experiments

  • barrier_test.py: Internal testing of barriers
  • membership_scaling_test.py: One-at-a time membership scaling on a LAN
  • flash_mob_test.py: All-at-once membership scaling on a LAN
  • latency_test.py: Membership scaling with one node "far away" from the rest

Data analysis

The data analysis pipeline is, generally speaking,

data → python script → comma-separated-values → R script → output

All the Python and R scripts live in java/rsgc/perf/ alongside the test scripts. The following sections explain how to do this with specific input data.

NetLogger data

parse_netlogger.py

  • operates on a set of directories labeled {PROPERTY}_{VARIATION}
  • designed for multiple modes, but so far --memscale is the only allowed mode
  • user gives path to parent directory and an output file where all the data goes
  • each sub-directory's files is first merged into a file named {PROPERTY}_{VARIATION}-merged.netlog, then these are all parsed to CSV
  • subsequent runs on the same directory (if necessary) will skip the (expensive) NetLogger merge step, since the file is already there
  • Example:
$ ./parse_netlogger.py --memscale data/emulab_tests/20nodes_pc3000/ foo.csv
$ ls data/emulab_tests/20nodes_pc3000/
SO:ID:WV:VS:SD_100pct                SR:ID:WV:VS:SD_25pct
SO:ID:WV:VS:SD_100pct-merged.netlog  SR:ID:WV:VS:SD_25pct-merged.netlog
SO:ID:WV_100pct                      SR:ID:WV:VS:SD_50pct
SO:ID:WV_100pct-merged.netlog        SR:ID:WV:VS:SD_50pct-merged.netlog
SR:ID:WV:EVS:SD_100pct               SR:ID:WV_100pct
SR:ID:WV:EVS:SD_100pct-merged.netlog SR:ID:WV_100pct-merged.netlog
SR:ID:WV:EVS:SD_10pct                SR:ID:WV_10pct
SR:ID:WV:EVS:SD_10pct-merged.netlog  SR:ID:WV_10pct-merged.netlog
SR:ID:WV:EVS:SD_25pct                SR:ID:WV_25pct
SR:ID:WV:EVS:SD_25pct-merged.netlog  SR:ID:WV_25pct-merged.netlog
SR:ID:WV:EVS:SD_50pct                SR:ID:WV_50pct
SR:ID:WV:EVS:SD_50pct-merged.netlog  SR:ID:WV_50pct-merged.netlog
SR:ID:WV:VS:SD_10pct                 memscale.csv
SR:ID:WV:VS:SD_10pct-merged.netlog
$ head -4 foo.csv
props,run,dt,vid,setsize,pid,variation
SO:ID:WV:VS:SD,0,0.014749,1,1,40000,100pct
SO:ID:WV:VS:SD,0,0.052193,2,2,40001,100pct
SO:ID:WV:VS:SD,0,0.023611,3,3,40002,100pct
  • To then graph the data with R, use the interpreter.
  • First, cd to the same directory as the output file (foo.csv in the example above)
  • Then run R and use the following commands:
# source the plotting code:
  source('membership_scaling.r')
# load the dataset:
  data <- read.csv('foo.csv')
# plot it
  times.bwplot(data)
# to eliminate the first 10 runs:
   data10 <- data[data$run > 10,]
# or, to select a single property
   data.so <- data[data$props == 'SO:ID:WV' | data$props == 'SO:ID:WV:SD',]
# ..etc..
  • To make a PDF, put pdf(file='theplot.pdf') before your plot command, and dev.off() after it

Background monitoring data

  • Use parse_mon.py and provide it with the same path you gave parse_netlogger.py, above.
  • Give it an output path so it can generate files for each type of bg monitoring (e.g. jstat and mping)
  • Output is in path/{monitoring-type}.csv
  • Read these files into R and graph them
    • details to follow..

Test framework description

  1. The ns file runs conductor.py -fork ...
  2. conductor.py forks one or more conductor.py -run ... with the same args
  3. At this point, we distinguish between the master and client conductor. There is 1 master.
    1. Initialization
      1. conductor.py master sets up properties, etc.
      2. conductor.py client waits
    2. Run test, for each set of properties
      1. conductor.py master and client start the musician
      2. conductor.py master sends commands
      3. conductor.py client waits
    3. Finish test, for each set of properties
      1. conductor.py master creates the shared directory
      2. conductor.py (all) copy their data from /tmp into shared dir.

Dang 16:55, 3 November 2006 (PST)

Personal tools