From 872fa5d1da1f99144cc7399dab7c476fdf8e8715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Madon?= <mael.madon@irit.fr> Date: Wed, 26 Oct 2022 13:48:38 +0200 Subject: [PATCH] added description, examples and instructions in the README --- README.md | 34 +++++++++++++++++++++++++++++++++- example_4_sessions.png | Bin 0 -> 16813 bytes 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 example_4_sessions.png diff --git a/README.md b/README.md index 36b26ed..662c90c 100644 --- a/README.md +++ b/README.md @@ -1 +1,33 @@ -Scripts and data to decompose an input workload into user sessions. \ No newline at end of file +# swf2sessions +Python script to read a workload trace in the [Standard Workload Format](https://www.cs.huji.ac.il/labs/parallel/workload/swf.html) (SWF), decompose it into user sessions and store the results in the Session Annotated Batsim JSON format (SABjson). + +## What is a session? +The idea behind this decomposition is to keep the *logic* of user submissions rather than the exact submission times. For example, in the image below, the workload has been split into 4 sessions following the "Arrival" delimitation approach: + + + +- Job1 and job2 belong to the same session because their inter-arrival time is lower than a threshold value (here: 60 minutes). +- Job3, however, started a new session. +- Session4 *depends on* sessions 2 and 3 because its first job was submitted after the terminaison of all jobs in sessions 2 and 3. +- Session3 *depends on* session1, but not on session2. + + + +## Usage +You need python3 installed on your machine. + +To run the session decomposition on the workload `workloads/example.swf` illustrated above, with "Arrival" delimitation approach and a threshold of 60 minutes: + +```terminal +python3 swf2sessions.py -at 60 workloads/example.swf out/ +``` + +For more documentation, see: `python3 swf2sessions.py -h` + +## Tests +Some integration tests have been written for this script, and are stored in the `test/` folder. To run them on your machine, you need to install pytest and launch it at the root of the project: + +```terminal +pip3 install pytest +pytest +``` \ No newline at end of file diff --git a/example_4_sessions.png b/example_4_sessions.png new file mode 100644 index 0000000000000000000000000000000000000000..0700bd216feec0c1d582e47b0dd10aa3bb21ff26 GIT binary patch literal 16813 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 CB$Frr literal 0 HcmV?d00001 -- GitLab