External Events¶
Overview and example¶
This is a mechanism to enable injection of external events during the simulation. For example, one would be interested in studying the behavior and resilience of a scheduling policy when machine can become unavailable for a certain period of time, which is made possible using the events injection mechanism!
Input File Format¶
An example of an input file for external events can be found in events/test_events_4hosts.txt
.
Such file should contain on each line a JSON description of an event, as in
{"type": "machine_unavailable", "resources": "0", "timestamp" : 0}
{"type": "machine_available", "resources": "0", "timestamp" : 10}
{"type": "machine_unavailable", "resources": "0-1 3", "timestamp" : 20}
{"type": "machine_available", "resources": "0 1", "timestamp" : 250}
{"type": "machine_available", "resources": "3", "timestamp" : 300}
Note that it is not mandatory to have the events ordered by their timestamps in the input files, as they will be sorted anyway once all events of a file are loaded by Batsim.
In each event description, the field type
contains the type of the external event that occurs and the field timestamp
contains the date at which the event has to occur during the simulation.
Other fields may be present, depending on the event type, as described in Supported Events.
Supported Events¶
Here is the list of supported external events that can be injected during the simulation:
Each external event is notified to the scheduler via a NOTIFY protocol event.
Machine_available¶
The machines specified by the resources field (represented as an Interval set) become available. It is now possible to execute jobs on these machines if no job is running on them (unless resource sharing is enabled).
{"type": "machine_available", "resources": "2-4 8", "timestamp" : 20}
Generic_events¶
External events unknown to Batsim can also be added in the input file.
These events are not supported by Batsim unless the option --forward-unknown-event
is set. In this case, such events will be forwarded to the scheduler without any check (except for the type and timestamp fields).
{"type": "user_specific_type", "timestamp": 150, "some_field": "value_of_field", "another_field": 36}