RSGCTest
From DSD Wiki
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
- Data from completed runs for each property, where {PROPERTIES} encodes the properties and additional parameters, e.g.,
- On each node,
{TMP}directory is/tmp/rsgc-output/wip/
- SHARED directory is
- 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.
- Run
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
- 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
- The ns file runs conductor.py -fork ...
- conductor.py forks one or more conductor.py -run ... with the same args
- At this point, we distinguish between the master and client conductor. There is 1 master.
- Initialization
- conductor.py master sets up properties, etc.
- conductor.py client waits
- Run test, for each set of properties
- conductor.py master and client start the musician
- conductor.py master sends commands
- conductor.py client waits
- Finish test, for each set of properties
- conductor.py master creates the shared directory
- conductor.py (all) copy their data from /tmp into shared dir.
- Initialization
Dang 16:55, 3 November 2006 (PST)
