AUTHOR = "kdlucas@google.com (Kelly Lucas)" TIME = "MEDIUM" NAME = "Netpipe Stress" TEST_CATEGORY = "Stress" TEST_CLASS = 'Network' TEST_TYPE = "Server" SYNC_COUNT = 2 DOC = """ netpipe_stress is a test which produces bandwidth and latency values for incrementing buffer sizes. This stress test will run for approximately 1 hour. If you need to adjust the run time, change the value of cycles in the run function. Arguments to run_test: bidirectional - indicates whether the test should run simultaneously in both directions buffer_size - Sets the send and receive TCP buffer sizes (from man NPtcp) upper_bound - Specify the upper boundary to the size of message being tested. By default, NetPIPE will stop when the time to transmit a block exceeds one second. (from man NPtcp) variance - NetPIPE chooses the message sizes at regular intervals, increasing them exponentially from the lower boundary to the upper boundary. At each point, it also tests perturbations of 3 bytes above and 3 bytes below (default) each test point to find idiosyncrasies in the system. This perturbation value can be changed using using this option or turned off by setting perturbation_size to 0. (from man NPtcp) cycles - Number of times to repeat each test. Each cycle takes about 6 minutes to complete. """ from autotest_lib.server import utils from six.moves import range # Buffer sizes should not be less than 131072, as this will cause netpipe # to hang. buffer_sizes = {131072: 'small', 262144: 'medium', 524288: 'large', 1048576: 'huge', } cycles = 10 upper_bound = 1048576 variance = 17 def run(pair): for x in range(cycles): for b in buffer_sizes: tag = 'netpipe' + buffer_sizes[b] + str(x) job.run_test('netpipe', tag=tag, pair=pair, buffer=b, upper_bound=upper_bound, variance=variance) # grab the pairs (and failures) print("Machines = %s" % machines) (pairs, failures) = utils.form_ntuples_from_machines(machines, 2) print("pairs = %s" % pairs) # log the failures for failure in failures: job.record("FAIL", failure[0], "netpipe", failure[1]) # now run through each pair and run job.parallel_simple(run, pairs, log=False)