1import time 2 3ssh_hosts = [hosts.create_host(m) for m in machines] 4at_hosts = [autotest.Autotest(h) for h in ssh_hosts] 5 6 7def add_profilers(at, profilers, timeout_sync, timeout_start, timeout_stop, 8 machines, name): 9 control_file = [] 10 for profiler in profilers: 11 control_file.append("job.profilers.add(%s)" 12 % str(profiler)[1:-1]) 13 14 control_file.append(("job.run_test('profiler_sync', timeout_sync=%d, " 15 "timeout_start=%d, timeout_stop=%d, " 16 "hostid='%s', masterid='%s', all_ids=%s)") 17 % (timeout_sync, timeout_start, timeout_stop, 18 at.host.hostname, "PROF_MASTER", str(machines))) 19 20 for profiler in profilers: 21 control_file.append("job.profilers.delete('%s')" % profiler[0]) 22 23 params = ["\n".join(control_file), "profile-" + profiler[0], at.host] 24 return subcommand(at.run, params, name) 25 26 27def wait_for_profilers(machines, timeout = 180): 28 # wait until the profilers have started 29 sync_bar = barrier("PROF_MASTER", "sync_profilers", 30 timeout, port=11920) 31 sync_bar.rendezvous_servers("PROF_MASTER", *machines) 32 33 34def start_profilers(machines, timeout = 180): 35 # wait until the profilers have started 36 start_bar = barrier("PROF_MASTER", "start_profilers", 37 timeout, port=11920) 38 start_bar.rendezvous_servers("PROF_MASTER", *machines) 39 40 41def stop_profilers(machines, timeout = 120): 42 stop_bar = barrier("PROF_MASTER", "stop_profilers", timeout, port=11920) 43 stop_bar.rendezvous_servers("PROF_MASTER", *machines) 44 45 46def server_sleep_test(seconds): 47 wait_for_profilers(machines) 48 start_profilers(machines) 49 for i in range(seconds): 50 print "%d of %d" % (i, seconds) 51 time.sleep(1) 52 stop_profilers(machines) 53 54 55def main(): 56 timeout_sync = 180 57 timeout_start = 60 58 timeout_stop = 60 59 profilers = [["vmstat"], ["iostat"]] 60 61 tests = [subcommand(server_sleep_test, [20], "server_sleep_test")] 62 for at in at_hosts: 63 name = "profiled-%s" % at.host.hostname 64 tests.append(add_profilers(at, profilers, timeout_sync, 65 timeout_start, timeout_stop, machines, name)) 66 parallel(tests) 67 68 69main() 70