diff --git a/.gitignore b/.gitignore index d1207942c644aab06278c9e4907f8b02704fb802..d63207953a215bd3ad7f5f730dbfab0e89bd68fb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -out +out/* +!out/example_jobs.csv *__pycache__* \ No newline at end of file diff --git a/README.md b/README.md index 778b4c58b3f6e8130c29e5652000dd0399e8994d..ca7a57f6a3ad3065bca9ad5632a0ab12a0ce8f88 100644 --- a/README.md +++ b/README.md @@ -80,18 +80,68 @@ In this tutorial, we will develop our schedulers in Python thanks to [pybatsim] The scheduler implementations will be located in the folder [sched/](./sched/). -### Exercise 1 +### Exercise 1: workload Represent the workload used previously in this course (exercise 1 from the [exercise document](https://docs.google.com/document/d/15nfFvYgTwStwS0JGt5DMaQs6JDya8dKzFj69wMLTuTw/edit)) in Batsim JSON format. You will put it in a new file named `expe/ex1.json`. We will use the field "walltime" to store the "deadline". -### Exercise 2 -TODO run a simulation with pre-defined scheduler `rejector`. -Look at the outputs... +### Exercise 2: run your first simulation + +We will see if the installation from step Install worked, by running a first simulation. + +For this, you will need two processes, launched in two separate terminal: one for the infrastructure simulator (batsim), managing the workload and the platform, and one for the scheduler. + +On one Nix shell, launch batsim with platform input `expe/1machine.xml`, workload input `expe/2jobs.json` and export prefix `out/`: + +```bash +batsim -p expe/1machine.xml -w expe/2jobs.json -e out/ +``` + +The simulation should start, and wait for the scheduler to be started as well. +Try to understand the output from batsim in the terminal. + + +On another Nix shell, run a scheduler. +You are given a very simple scheduler, `sched/rejector.py`, that rejects all the jobs: + +```bash +pybatsim sched/rejector.py +``` + +Try to understand the output of the scheduler in the terminal as well. + +That's it, you run your first simulation! +Simulation outputs are stored in the `out` directory. +You have [schedule-centric outputs](https://batsim.readthedocs.io/en/latest/output-schedule.html) (`schedule.csv`) and [job-centric outputs](https://batsim.readthedocs.io/en/latest/output-jobs.html). +Open them, read the doc, and make sure you understand most of the fields. + +Have a look also at the file `out/example_jobs.csv` to see how the job output looks like when the jobs are not rejected. + +Finally, to get a visual representation of the outputs, we will use the visualization software `evalys`. +We provide a wrapper of `evalys` with the main functions that you need in the file `util/plot.py`. +The `jobs.csv` output that was produced before is not suitable for visualization since it has no jobs that executed. +Produce the visualization: + +```bash +python util/plot.py out/example_jobs.csv +``` + +You have an option to store the output in a PDF file. +Check available options with `python util/plot.py -h`. + +### Exercise 3: FCFS monomachine +Now, it's time to develop your own scheduler! +We will start with a FCFS monomachine: it schedules the jobs by order of arrival (and lexicographical order on the job ID in case of a tie). + +Create a file `fcfsMono.py` in `sched` directory. +Draw inspiration from the template in `sched/template.py` to create your scheduler. + +Warning: the file name and class name must match (for example, `fcfsMono.py` for the file name and `FcfsMono` for the class name). + +Test it on `2jobs.json` and `ex1.json` inputs, and other inputs that you will create. +Visualize the outputs with evalys to see if it worked correcty. + -### Exercise 3 -TODO develop a monomachine FCFS scheduler and run it on the inputs from ex1. -Visualize the output thanks to evalys. ## Session 2: monomachine schedulers - séance 2 : monomachine + d'autres algos : RMS, EDF (3 cas: infra sous-dimensionnée / normalement dim / sur-dim, remarquer que sur du surdimensioné, l'algo change rien) @@ -112,20 +162,6 @@ Visualize the output thanks to evalys. - no working poetry in nix-shell - will that work in the lab's machines? -## Status rn -We can start a small expe! - -On one shell: -``` -ns -A dev -pybatsim newSched -``` - -On the other shell: -``` -ns -A expe -batsim -p expe/1machine.xml -w expe/2jobs.json -e out/ -``` [Batsim]: https://batsim.org/ [Nix]: https://nixos.org/nix/ diff --git a/sched/new_sched.py b/sched/template.py similarity index 82% rename from sched/new_sched.py rename to sched/template.py index ed398686f35dc8107f6d2fcd4524537128163e2a..5054aa87c14486c7dd7dfc5adbf6eca16f7d07d0 100644 --- a/sched/new_sched.py +++ b/sched/template.py @@ -1,12 +1,11 @@ """ -Trivial example scheduler that rejects any job. -No hard feelings! +Template for scheduler development. """ -from pybatsim.batsim.batsim import BatsimScheduler +from batsim.batsim import BatsimScheduler, Batsim -class Newsched(BatsimScheduler): +class Template(BatsimScheduler): def __init__(self, options): """Anything you need to initialize at class creation""" pass