def test_utilization(self): rt = ResultTrace() rt._lists_start = { "job_db_inx": [2, 1], "account": ["account2", "account1"], "cpus_req": [96, 48], "cpus_alloc": [96, 48], "job_name": ["jobName2", "jobName1"], "id_job": [2, 1], "id_qos": [3, 2], "id_resv": [4, 3], "id_user": [5, 4], "nodes_alloc": [4, 2], "partition": ["partition2", "partition1"], "priority": [199, 99], "state": [2, 3], "timelimit": [200, 100], "time_submit": [3003, 3000], "time_start": [3001, 3002], "time_end": [3005, 3010] } (integrated_ut, utilization_timestamps, utilization_values, acc_waste, corrected_ut) = (rt.calculate_utilization(144)) self.assertEqual(utilization_timestamps, [3001, 3002, 3005, 3010]) self.assertEqual(utilization_values, [96, 144, 48, 0]) self.assertEqual(acc_waste, 0) (integrated_ut, utilization_timestamps, utilization_values, acc_waste, corrected_ut) = (rt.calculate_utilization(144, endCut=3006)) self.assertEqual(utilization_timestamps, [3001, 3002, 3005, 3006]) self.assertEqual(utilization_values, [96, 144, 48, 48]) self.assertEqual(acc_waste, 0)
def test_multi_load_trace(self): self._create_tables() rt = ResultTrace() rt._lists_submit = { "job_db_inx": [1, 2], "account": ["account1", "account2"], "cpus_req": [48, 96], "cpus_alloc": [48, 96], "job_name": ["jobName1", "jobName2"], "id_job": [1, 2], "id_qos": [2, 3], "id_resv": [3, 4], "id_user": [4, 5], "nodes_alloc": [2, 4], "partition": ["partition1", "partition2"], "priority": [99, 199], "state": [3, 2], "timelimit": [100, 200], "time_submit": [3000, 3003], "time_start": [3002, 3001], "time_end": [3002, 3005] } rt._lists_start = { "job_db_inx": [2, 1], "account": ["account2", "account1"], "cpus_req": [96, 48], "cpus_alloc": [96, 48], "job_name": ["jobName2", "jobName1"], "id_job": [2, 1], "id_qos": [3, 2], "id_resv": [4, 3], "id_user": [5, 4], "nodes_alloc": [4, 2], "partition": ["partition2", "partition1"], "priority": [199, 99], "state": [2, 3], "timelimit": [200, 100], "time_submit": [3003, 3000], "time_start": [3001, 3002], "time_end": [3005, 3002] } rt.store_trace(self._db, 1) new_rt = ResultTrace() new_rt.load_trace(self._db, 1) new_rt.load_trace(self._db, 1, True) self.assertEqual(new_rt._lists_submit["time_submit"], [3000, 3003, 3004, 3007]) self.assertEqual(new_rt._lists_submit["time_start"], [3002, 3001, 3006, 3005]) self.assertEqual(new_rt._lists_submit["time_end"], [3002, 3005, 3006, 3009]) self.assertEqual(new_rt._lists_start["time_start"], [3001, 3002, 3005, 3006]) self.assertEqual(new_rt._lists_start["time_submit"], [3003, 3000, 3007, 3004]) self.assertEqual(new_rt._lists_start["time_end"], [3005, 3002, 3009, 3006])
def test_multi_load_results(self): self._create_tables() rt = ResultTrace() rt._lists_submit = { "job_db_inx": [1, 2, 3], "account": ["account1", "account2", "account1"], "cpus_req": [48, 96, 24], "cpus_alloc": [48, 96, 24], "job_name": ["jobName1", "jobName2", "wf_manifest"], "id_job": [1, 2, 3], "id_qos": [2, 3, 4], "id_resv": [3, 4, 5], "id_user": [4, 5, 6], "nodes_alloc": [2, 4, 1], "partition": ["partition1", "partition2", "partition1"], "priority": [99, 199, 99], "state": [3, 2, 3], "timelimit": [100, 200, 200], "time_submit": [3000, 3003, 3500], "time_start": [3002, 3004, 3501], "time_end": [3003, 3005, 3510] } rt._lists_start = { "job_db_inx": [2, 1, 3], "account": ["account2", "account1", "account1"], "cpus_req": [96, 48, 24], "cpus_alloc": [96, 48, 24], "job_name": ["jobName2", "jobName1", "wf_manifest"], "id_job": [2, 1, 3], "id_qos": [3, 2, 4], "id_resv": [4, 3, 5], "id_user": [5, 4, 6], "nodes_alloc": [4, 2, 1], "partition": ["partition2", "partition1", "partition1"], "priority": [199, 99, 99], "state": [2, 3, 3], "timelimit": [200, 100, 200], "time_submit": [3003, 3000, 3500], "time_start": [3004, 3002, 3501], "time_end": [3005, 3002, 3510] } rt.store_trace(self._db, 1) new_rt = ResultTrace() new_rt.load_trace(self._db, 1) new_rt.fill_job_values(start=3000, stop=4000) new_rt.load_trace(self._db, 1) new_rt.fill_job_values(start=3000, stop=4000, append=True) self.assertEqual(new_rt._jobs_runtime, [1, 1, 1, 1]) self.assertEqual(new_rt._jobs_waittime, [2, 1, 2, 1]) self.assertEqual(new_rt._jobs_turnaround, [3, 2, 3, 2]) self.assertEqual(new_rt._jobs_timelimit, [100, 200, 100, 200]) self.assertEqual(new_rt._jobs_cpus_alloc, [48, 96, 48, 96]) self.assertEqual(new_rt._jobs_slowdown, [3, 2, 3, 2])
def test_store_trace(self): self._create_tables() rt = ResultTrace() rt._lists_submit = { "job_db_inx": [1, 2], "account": ["account1", "account2"], "cpus_req": [48, 96], "cpus_alloc": [48, 96], "job_name": ["jobName1", "jobName2"], "id_job": [1, 2], "id_qos": [2, 3], "id_resv": [3, 4], "id_user": [4, 5], "nodes_alloc": [2, 4], "partition": ["partition1", "partition2"], "priority": [99, 199], "state": [3, 2], "timelimit": [100, 200], "time_submit": [3000, 3003], "time_start": [3002, 3001], "time_end": [3002, 3005] } rt._lists_start = { "job_db_inx": [2, 1], "account": ["account2", "account1"], "cpus_req": [96, 48], "cpus_alloc": [96, 48], "job_name": ["jobName2", "jobName1"], "id_job": [2, 1], "id_qos": [3, 2], "id_resv": [4, 3], "id_user": [5, 4], "nodes_alloc": [4, 2], "partition": ["partition2", "partition1"], "priority": [199, 99], "state": [2, 3], "timelimit": [200, 100], "time_submit": [3003, 3000], "time_start": [3001, 3002], "time_end": [3005, 3002] } rt.store_trace(self._db, 1) rows = self._db.doQuery("SELECT time_start FROM traces " "WHERE trace_id=1 " "ORDER BY time_start") self.assertIn((3001, ), rows) self.assertIn((3002, ), rows)
def test_calculate_waiting_submitted_work(self): rt = ResultTrace() rt._lists_submit = { "job_db_inx": [2, 1], "account": ["account2", "account1", "account3"], "cpus_req": [1, 1, 1], "cpus_alloc": [1, 1, 1], "job_name": ["jobName2", "jobName1", "jobName3"], "id_job": [2, 1, 3], "id_qos": [3, 2, 1], "id_resv": [4, 3, 0], "id_user": [5, 4, 1], "nodes_alloc": [4, 2, 3], "partition": ["partition2", "partition1", "partition1"], "priority": [199, 99, 200], "state": [3, 3, 3], "timelimit": [200, 100, 200], "time_submit": [2998, 2999, 3000], "time_start": [3001, 3003, 3004], "time_end": [3005, 3010, 3012] } rt._lists_start = { "job_db_inx": [2, 1], "account": ["account2", "account1", "account3"], "cpus_req": [1, 1, 1], "cpus_alloc": [1, 1, 1], "job_name": ["jobName2", "jobName1", "jobName3"], "id_job": [2, 1, 3], "id_qos": [3, 2, 1], "id_resv": [4, 3, 0], "id_user": [5, 4, 1], "nodes_alloc": [4, 2, 3], "partition": ["partition2", "partition1", "partition1"], "priority": [199, 99, 200], "state": [3, 3, 3], "timelimit": [200, 100, 200], "time_submit": [2998, 2999, 3000], "time_start": [3001, 3003, 3004], "time_end": [3005, 3010, 3012] } stamps, waiting_ch, core_h_per_min_stamps, core_h_per_min_values = ( rt.calculate_waiting_submitted_work(acc_period=0)) self.assertEqual(stamps, [2998, 2999, 3000, 3001, 3003, 3004]) self.assertEqual(waiting_ch, [4, 11, 19, 15, 8, 0]) self.assertEqual(core_h_per_min_stamps, [2999, 3000]) self.assertEqual(core_h_per_min_values, [11, 9.5])
def test_utlization_sotre_load(self): rt = ResultTrace() self.addCleanup(self._del_table, "usage_values") rt._get_utilization_result().create_table(self._db) rt._lists_start = { "job_db_inx": [2, 1], "account": ["account2", "account1"], "cpus_req": [96, 48], "cpus_alloc": [96, 48], "job_name": ["jobName2", "jobName1"], "id_job": [2, 1], "id_qos": [3, 2], "id_resv": [4, 3], "id_user": [5, 4], "nodes_alloc": [4, 2], "partition": ["partition2", "partition1"], "priority": [199, 99], "state": [2, 3], "timelimit": [200, 100], "time_submit": [3000, 3000], "time_start": [3001, 3003], "time_end": [3005, 3010] } rt._wf_extractor = FakeWFExtractor() (integrated_ut, utilization_timestamps, utilization_values, acc_waste, corrected_ut) = (rt.calculate_utilization(144, do_preload_until=3003, endCut=3010, store=True, db_obj=self._db, trace_id=1)) self.assertEqual(acc_waste, 24) self.assertEqual(utilization_timestamps, [3003, 3005, 3006, 3007, 3008, 3010]) self.assertEqual(utilization_values, [144, 48, 36, 24, 48, 0]) rt_2 = ResultTrace() rt_2.load_utilization_results(self._db, 1) new_ut, new_acc, new_corrected_ut = rt_2.get_utilization_values() self.assertAlmostEqual(integrated_ut, new_ut) self.assertEqual(acc_waste, new_acc) print("new_corrected_ut", new_corrected_ut) self.assertAlmostEqual(corrected_ut, new_corrected_ut)
def setUp(self): self._db = DB(os.getenv("TEST_DB_HOST", "127.0.0.1"), os.getenv("TEST_DB_NAME", "test"), os.getenv("TEST_DB_USER", "root"), os.getenv("TEST_DB_PASS", "")) ht = Histogram() ht.create_table(self._db) self.addCleanup(self._del_table, ht._table_name) ns = NumericStats() ns.create_table(self._db) self.addCleanup(self._del_table, ns._table_name) us = NumericList("usage_values", ["utilization", "waste"]) us.create_table(self._db) self.addCleanup(self._del_table, "usage_values") rt = ResultTrace() self.addCleanup(self._del_table, "import_table") rt.create_import_table(self._db, "import_table") self.addCleanup(self._del_table, "traces") rt.create_trace_table(self._db, "traces") rt = ResultTrace() rt._lists_submit = { "job_db_inx": [1, 2], "account": ["account1", "account2"], "cpus_req": [48, 96], "cpus_alloc": [48, 96], "job_name": ["jobName1", "jbname2"], "id_job": [1, 2], "id_qos": [2, 3], "id_resv": [3, 4], "id_user": [4, 5], "nodes_alloc": [2, 4], "partition": ["partition1", "partition2"], "priority": [99, 199], "state": [3, 2], "timelimit": [100, 200], "time_submit": [3000, 3001], "time_start": [3002, 3001], "time_end": [3002, 3005] } rt._lists_start = { "job_db_inx": [2, 1], "account": ["account2", "account1"], "cpus_req": [96, 48], "cpus_alloc": [96, 48], "job_name": ["jobName2", "jobName1"], "id_job": [2, 1], "id_qos": [3, 2], "id_resv": [4, 3], "id_user": [5, 4], "nodes_alloc": [4, 2], "partition": ["partition2", "partition1"], "priority": [199, 99], "state": [2, 3], "timelimit": [200, 100], "time_submit": [3003, 3000], "time_start": [3001, 3002], "time_end": [3005, 3002] } rt.store_trace(self._db, 1) self._rt = rt
def test_utlization_waste(self): rt = ResultTrace() rt._lists_start = { "job_db_inx": [2, 1], "account": ["account2", "account1"], "cpus_req": [96, 48], "cpus_alloc": [96, 48], "job_name": ["jobName2", "jobName1"], "id_job": [2, 1], "id_qos": [3, 2], "id_resv": [4, 3], "id_user": [5, 4], "nodes_alloc": [4, 2], "partition": ["partition2", "partition1"], "priority": [199, 99], "state": [2, 3], "timelimit": [200, 100], "time_submit": [3000, 3000], "time_start": [3001, 3003], "time_end": [3005, 3010] } (integrated_ut, utilization_timestamps, utilization_values, acc_waste, corrected_ut) = (rt.calculate_utilization(144, do_preload_until=3002)) self.assertEqual(utilization_timestamps, [3002, 3003, 3005, 3010]) self.assertEqual(utilization_values, [96, 144, 48, 0]) self.assertEqual(acc_waste, 0) self.assertEqual(integrated_ut, corrected_ut) (integrated_ut, utilization_timestamps, utilization_values, acc_waste, corrected_ut) = (rt.calculate_utilization(144, do_preload_until=3003, endCut=3006)) self.assertEqual(utilization_timestamps, [3003, 3005, 3006]) self.assertEqual(utilization_values, [144, 48, 48]) self.assertEqual(acc_waste, 0) self.assertEqual(integrated_ut, corrected_ut) self.assertEqual(integrated_ut, (2.0 * 144.0 + 48.0) / (3.0 * 144.0)) (integrated_ut, utilization_timestamps, utilization_values, acc_waste, corrected_ut) = (rt.calculate_utilization(144, do_preload_until=3003, endCut=3010)) self.assertEqual(utilization_timestamps, [3003, 3005, 3010]) self.assertEqual(utilization_values, [144, 48, 0]) self.assertAlmostEqual(integrated_ut, 0.523809, delta=0.001) self.assertEqual(acc_waste, 0) self.assertEqual(integrated_ut, corrected_ut) rt._wf_extractor = FakeWFExtractor() (integrated_ut, utilization_timestamps, utilization_values, acc_waste, corrected_ut) = (rt.calculate_utilization(144, do_preload_until=3003, endCut=3010)) self.assertEqual(acc_waste, 24) self.assertEqual(utilization_timestamps, [3003, 3005, 3006, 3007, 3008, 3010]) self.assertEqual(utilization_values, [144, 48, 36, 24, 48, 0]) self.assertAlmostEqual((integrated_ut - corrected_ut) * 7 * 144, 24)