Skip to content
Snippets Groups Projects
Commit e3e2e7f5 authored by jgatt's avatar jgatt
Browse files

optimization of scheduler we sort only when needed to improve performance and...

optimization of scheduler we sort only when needed to improve performance and unnecessary computation
parent 0551746e
Branches
Tags
1 merge request!16Merge request multibehavior
......@@ -25,6 +25,11 @@ SortableJobOrder::~SortableJobOrder()
}
FCFSOrder::FCFSOrder()
{
update_job_impact=false;
}
FCFSOrder::~FCFSOrder()
{
......@@ -47,6 +52,11 @@ void FCFSOrder::updateJob(SortableJob *job, const SortableJobOrder::UpdateInform
}
LCFSOrder::LCFSOrder()
{
update_job_impact = false;
}
LCFSOrder::~LCFSOrder()
{
......@@ -68,6 +78,12 @@ void LCFSOrder::updateJob(SortableJob *job, const SortableJobOrder::UpdateInform
(void) info;
}
AscendingSizeOrder::AscendingSizeOrder()
{
update_job_impact = false;
}
AscendingSizeOrder::~AscendingSizeOrder()
{
......@@ -93,6 +109,11 @@ void AscendingSizeOrder::updateJob(SortableJob *job, const SortableJobOrder::Upd
}
DescendingSizeOrder::DescendingSizeOrder()
{
update_job_impact = false;
}
DescendingSizeOrder::~DescendingSizeOrder()
{
......@@ -118,6 +139,11 @@ void DescendingSizeOrder::updateJob(SortableJob *job, const SortableJobOrder::Up
}
AscendingWalltimeOrder::AscendingWalltimeOrder()
{
update_job_impact = false;
}
AscendingWalltimeOrder::~AscendingWalltimeOrder()
{
......@@ -140,6 +166,11 @@ void AscendingWalltimeOrder::updateJob(SortableJob *job, const SortableJobOrder:
}
DescendingWalltimeOrder::DescendingWalltimeOrder()
{
update_job_impact = false;
}
DescendingWalltimeOrder::~DescendingWalltimeOrder()
{
......@@ -220,8 +251,11 @@ void Queue::sort_queue(SortableJobOrder::UpdateInformation *update_info,
SortableJobOrder::CompareInformation *compare_info)
{
// Update of all jobs
for (SortableJob * sjob : _jobs)
_order->updateJob(sjob, update_info);
if (_order->update_job_impact)
{
for (SortableJob *sjob : _jobs)
_order->updateJob(sjob, update_info);
}
// Sort
_jobs.sort([this, compare_info](const SortableJob * j1, const SortableJob * j2)
......
......@@ -32,6 +32,7 @@ public:
virtual ~SortableJobOrder();
virtual bool compare(const SortableJob * j1, const SortableJob * j2, const CompareInformation * info = nullptr) const = 0;
virtual void updateJob(SortableJob * job, const UpdateInformation * info = nullptr) const = 0;
bool update_job_impact = true;
protected:
JobComparator jobcmp;
......@@ -40,6 +41,7 @@ protected:
class FCFSOrder : public SortableJobOrder
{
public:
FCFSOrder();
~FCFSOrder();
bool compare(const SortableJob * j1, const SortableJob * j2, const CompareInformation * info = nullptr) const;
void updateJob(SortableJob * job, const UpdateInformation * info = nullptr) const;
......@@ -48,6 +50,7 @@ public:
class LCFSOrder : public SortableJobOrder
{
public:
LCFSOrder();
~LCFSOrder();
bool compare(const SortableJob * j1, const SortableJob * j2, const CompareInformation * info = nullptr) const;
void updateJob(SortableJob * job, const UpdateInformation * info = nullptr) const;
......@@ -56,6 +59,7 @@ public:
class AscendingSizeOrder : public SortableJobOrder
{
public:
AscendingSizeOrder();
~AscendingSizeOrder();
bool compare(const SortableJob * j1, const SortableJob * j2, const CompareInformation * info = nullptr) const;
void updateJob(SortableJob * job, const UpdateInformation * info = nullptr) const;
......@@ -64,6 +68,7 @@ public:
class DescendingSizeOrder : public SortableJobOrder
{
public:
DescendingSizeOrder();
~DescendingSizeOrder();
bool compare(const SortableJob * j1, const SortableJob * j2, const CompareInformation * info = nullptr) const;
void updateJob(SortableJob * job, const UpdateInformation * info = nullptr) const;
......@@ -72,14 +77,17 @@ public:
class AscendingWalltimeOrder : public SortableJobOrder
{
public:
AscendingWalltimeOrder();
~AscendingWalltimeOrder();
bool compare(const SortableJob * j1, const SortableJob * j2, const CompareInformation * info = nullptr) const;
void updateJob(SortableJob * job, const UpdateInformation * info = nullptr) const;
};
class DescendingWalltimeOrder : public SortableJobOrder
{
public:
DescendingWalltimeOrder();
~DescendingWalltimeOrder();
bool compare(const SortableJob * j1, const SortableJob * j2, const CompareInformation * info = nullptr) const;
void updateJob(SortableJob * job, const UpdateInformation * info = nullptr) const;
......
......@@ -237,6 +237,7 @@ void BinPackingEnergy::make_decisions(double date,
* Handle recently released jobs from worklaod: put them in the
* queue
**********************************************************************/
bool modified_queue = false;
for (const std::string &new_job_id : _jobs_released_recently)
{
const Job *new_job = (*_workload)[new_job_id];
......@@ -249,16 +250,22 @@ void BinPackingEnergy::make_decisions(double date,
}
else
{
_queue->append_job(new_job, update_info);
modified_queue = true;
}
}
/**********************************************************************
* Binpacking scheduling decision:
* Sort jobs in decreasing number of requested cores
* (DescendingSizeOrder) and hosts in our custom order (~ increasing
* available core)
**********************************************************************/
_queue->sort_queue(update_info, compare_info);
if (modified_queue)
{
_queue->sort_queue(update_info, compare_info);
}
listofHosts.sort(HostComparator());
/* Go through the job queue and try to schedule the jobs */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment