1#!/usr/bin/perl
2#
3# $FreeBSD$
4#
5
6if ($#ARGV != 0) {
7	print "runit.pl kernelname\n";
8	exit(-1);
9}
10
11$tcpp_dir = "/rwatson/svn/base/head/tools/tools/netrate/tcpp";
12
13($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
14$mon++;
15$year += 1900;
16$date = sprintf("%04d%02d%02d", $year, $mon, $mday);
17
18$kernel = $ARGV[0];
19$outfile = $date."_".$kernel.".csv";
20unlink($outfile);
21open(OUTFILE, ">".$outfile) || die $outfile;
22print OUTFILE "# $kernel $date\n";
23print OUTFILE "# hydra1: ".`ssh root\@hydra1 uname -a`."\n";
24print OUTFILE "# hydra2: ".`ssh root\@hydra2 uname -a`."\n";
25print OUTFILE "#\n";
26print OUTFILE "kernel,tso,lro,mtu,cores,trial,";
27print OUTFILE "bytes,seconds,conns,bandwidth,user,nice,sys,intr,idle\n";
28close(OUTFILE);
29
30system("ssh root\@hydra1 killall tcpp");
31system("ssh root\@hydra2 killall tcpp");
32sleep(1);
33system("ssh root\@hydra2 ${tcpp_dir}/tcpp -s -p 8&");
34sleep(1);
35
36sub test {
37	my ($kernel, $tso, $lro, $mtu) = @_;
38
39	$prefix = "$kernel,$tso,$lro,$mtu";
40	print "Configuring $prefix\n";
41
42	system("ssh root\@hydra1 ifconfig cxgb0 $tso $lro mtu $mtu");
43
44	system("ssh root\@hydra2 ifconfig cxgb0 $tso $lro mtu $mtu");
45
46	print "Running $prefix\n";
47	system("ssh root\@hydra1 '(cd $tcpp_dir ; csh parallelism.csh ".
48	    "$outfile $prefix)'");
49}
50
51# Frobbing MTU requires resetting the host cache, which we don't do,
52# so don't frob MTU.
53@mtu_options = ("1500");
54@tso_options = ("tso", "-tso");
55@lro_options = ("lro", "-lro");
56
57foreach $mtu (@mtu_options) {
58	foreach $tso (@tso_options) {
59		foreach $lro (@lro_options) {
60			sleep(5);
61			test($kernel, $tso, $lro, $mtu);
62		}
63	}
64}
65