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).
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, analyse the dependencies between sessions and store the results in the Session Annotated Batsim JSON format (SABjson).
## What is a session?
## What is a session?
Analysing the workload trace of a parallel infrastructure to identify user sessions was started by Zackay and Feitelson ([Zackay and Feitelson 2013](https://www.cs.huji.ac.il/w~feit/parsched/jsspp12/p12-zakay.pdf)).
Analysing the workload trace of a parallel infrastructure to identify user sessions and their dependencies was started by Zackay and Feitelson ([Zackay and Feitelson 2013](https://www.cs.huji.ac.il/w~feit/parsched/jsspp12/p12-zakay.pdf)).
The idea behind it 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:
The idea behind it 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:


...
@@ -23,7 +23,7 @@ Requirements:
...
@@ -23,7 +23,7 @@ Requirements:
To run the session decomposition on the workload `workloads/example.swf` illustrated above, with "Arrival" delimitation approach and a threshold of 60 minutes:
To run the session decomposition on the workload `workloads/example.swf` illustrated above, with "Arrival" delimitation approach and a threshold of 60 minutes:
help="'Max' delimitation approach: a job starts a new session if the think time after the previous job with the highest finish time is above the threshold (in minutes)")
'Unit: minutes. The threshold (on think-time or inter-arrival time, depending on the delimiation approach) above which a job will be considered to be in a new session.'
)
parser.add_argument(
'--no_dynamic_reduction',
action="store_true",
help=
help=
'Unless this option is specified, during the construction of the graph the algorithm dynamically avoids to add an edge between two nodes if a path already exists.'
'Unless this option is specified, during the construction of the graph the algorithm dynamically avoids to add an edge between two nodes if a path already exists.'