diff --git a/sched/fillerSched.py b/sched/fillerSched.py new file mode 100644 index 0000000000000000000000000000000000000000..7b83c482d7b15391220634fd55ed51ed47d9030b --- /dev/null +++ b/sched/fillerSched.py @@ -0,0 +1,63 @@ +from batsim.batsim import BatsimScheduler, Batsim + +import sys +import os +from procset import ProcSet +from itertools import islice + + +class FillerSched(BatsimScheduler): + + def onAfterBatsimInit(self): + self.nb_completed_jobs = 0 + + self.jobs_completed = [] + self.jobs_waiting = [] + + self.sched_delay = 0.005 + + self.openJobs = set() + self.availableResources = ProcSet((0,self.bs.nb_compute_resources-1)) + + + def scheduleJobs(self): + scheduledJobs = [] + + print('openJobs = ', self.openJobs) + print('available = ', self.availableResources) + + # Iterating over a copy to be able to remove jobs from openJobs at traversal + for job in set(self.openJobs): + nb_res_req = job.requested_resources + + if nb_res_req <= len(self.availableResources): + # Retrieve the *nb_res_req* first availables resources + job_alloc = ProcSet(*islice(self.availableResources, nb_res_req)) + job.allocation = job_alloc + scheduledJobs.append(job) + + self.availableResources -= job_alloc + + self.openJobs.remove(job) + + # update time + self.bs.consume_time(self.sched_delay) + + # send to uds + if len(scheduledJobs) > 0: + self.bs.execute_jobs(scheduledJobs) + + print('openJobs = ', self.openJobs) + print('available = ', self.availableResources) + print('') + + def onJobSubmission(self, job): + if job.requested_resources > self.bs.nb_compute_resources: + self.bs.reject_jobs([job]) # This job requests more resources than the machine has + else: + self.openJobs.add(job) + self.scheduleJobs() + + def onJobCompletion(self, job): + self.availableResources |= job.allocation + self.scheduleJobs() diff --git a/test.nix b/test.nix new file mode 100644 index 0000000000000000000000000000000000000000..70e1c83eee8dd3c3e98d1d59fa76bff60c3dd076 --- /dev/null +++ b/test.nix @@ -0,0 +1,34 @@ +{ + kapack ? import + (fetchTarball "https://github.com/oar-team/nur-kapack/archive/901a5b656f695f2c82d17c091a55db2318ed3f39.tar.gz") + {} +, pkgs ? kapack.pkgs +, python3 ? pkgs.python3 +, python3Packages ? pkgs.python3Packages +}: + +let + jobs = rec { + evalys = kapack.evalys.overrideAttrs (attr: rec { + name = "evalys"; + version = "d4d47bd2f4d076730b05f1345b1bf9032cd28753"; + src = pkgs.fetchgit rec { + url = "https://github.com/Mema5/evalys.git"; + rev = version; + sha256 = "sha256-eHGRNj2xWBoEgG2wvAZUoH1Us5d1yu9emu1Zyyms1JU="; + }; + }); + + expe = pkgs.mkShell rec { + buildInputs = [ + kapack.batsim-410 + kapack.pybatsim-320 + python3Packages.matplotlib + evalys + ]; + QT_QPA_PLATFORM_PLUGIN_PATH= with pkgs.libsForQt5.qt5; "${qtbase.bin}/lib/qt-${qtbase.version}/plugins/platforms"; + }; + }; + +in + jobs \ No newline at end of file