blob: e3fa86acb9ff15bb5f21a75ac394ab4e493b9565 [file] [log] [blame]
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)