Пример #1
0
    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)
Пример #2
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])
Пример #3
0
    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])
Пример #4
0
    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)
Пример #5
0
    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])
Пример #6
0
    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)
Пример #7
0
    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
Пример #8
0
    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)