# This "test" is used by autotest_lib.server.standalone_profilers to start # and stop profilers on a collection of hosts at approximately the same # time by synchronizing using barriers. from autotest_lib.client.bin import test from autotest_lib.client.common_lib import barrier class profiler_sync(test.test): version = 1 def execute(self, timeout_sync, timeout_start, timeout_stop, hostid, masterid, all_ids): """ @param timeout_sync: Seconds to wait for the synchronization of all hosts that will be launching profilers. (local_sync_profilers) @param timeout_start: Seconds to wait for each of the initial sync_profilers and start_profilers barriers between this host and the master to be reached. @param timeout_stop: Seconds to wait for this host and the master to reach each of the stop_profilers and finish_profilers barriers. @param hostid: This host's id (typically the hostname). @param masterid: The master barrier host id where autoserv is running. @param all_ids: A list of all hosts to synchronize profilers on. """ profilers = self.job.profilers barrier_server = barrier.listen_server(port=11920) b0 = self.job.barrier(hostid, "sync_profilers", timeout_start, listen_server=barrier_server) b0.rendezvous_servers(masterid, hostid) b1 = self.job.barrier(hostid, "start_profilers", timeout_start, listen_server=barrier_server) b1.rendezvous_servers(masterid, hostid) b2 = self.job.barrier(hostid, "local_sync_profilers", timeout_sync) b2.rendezvous(*all_ids) profilers.start(self) b3 = self.job.barrier(hostid, "stop_profilers", timeout_stop, listen_server=barrier_server) b3.rendezvous_servers(masterid, hostid) profilers.stop(self) profilers.report(self) b4 = self.job.barrier(hostid, "finish_profilers", timeout_stop, listen_server=barrier_server) b4.rendezvous_servers(masterid, hostid) barrier_server.close()