Sharif University of Technology - Real Time Systems project
- Saee Saadat
- Neda Taghizadeh
python run.py <config_number> <mode>
examples:
python run.py # To run everything
python run.py configs/1.1.yml
python run.py configs/1.1.yml plot
python run.py configs/1.1.yml edf-only
Visit final_records.yml
and final_records_full.yml
for the final results of the simulations.
You can find relevant logs in the logs
folder.
Please visit the charts
folder for some generated charts.
python generate.py <config_number> <mode>
the mode argument is optional and can be either debug
or report
.
If the mode is debug
, the program will print the results to the console.
If the mode is report
, the program will generate two csv reports in the reports
folder. One for the tasks and one for the core assignments.
the name of the report will correspond to the config file and the assignment method used for the tasks.
The config file is a YML file that contains the following fields:
random_seed
: The seed used for generating random numbers. (Optional for consistent results)num_of_tasks
: Number of tasks to be generatedratio
: Ratio of the number of high criticality tasks to the number of low criticality tasksnum_of_cores
: Number of cores in the systemcore_utilization
: Utilization of each coreperiods
: A list of periods for the tasks (chosen uniformly at random)mu_range
: the minimum and maximum values for the mu parameter in the UUniFast algorithmoverrun_percentage
: The percentage of cores that are in overrun stateerror_rate
: The error rate of the system (what percentage of cores might fail their tasks)reliability
: The required reliability of the systemassignment_policy
: The policy used for assigning tasks to cores. (WFD
orFFD
)scheduling_policy
: The policy used for scheduling the tasks. (OnlyEDF-VD
has been implemented)
Task generation based on the UUniFast algorithm is done based on This Paper Since we are using NMR, the utilization generated for HC tasks is divided by the number of copies needed to achieve the required reliability.
using this formula:
N = ceil(-log(1 - R) / log(P)) if P ≠ 0, else 0
The number of copies we need for a task with failure rate of P to achieve reliability of R is calculated.
The tasks are assigned to cores based on the chosen policy. The policies implemented are WFD
and FFD
.