[LITMUS^RT] sys_set_rt_task_param() race

Björn Brandenburg bbb at mpi-sws.org
Fri Jan 13 21:42:24 CET 2017


Hi Tianyang,

thanks for your interest in LITMUS^RT. 

> On 13 Jan 2017, at 21:18, Chen, Tianyang <tiche at seas.upenn.edu> wrote:
> 
> The syscall sys_set_rt_task_param() in litmus/litmus.c cannot change a real-time task's parameters due to potential race with the scheduler, according the comments below:
> 
> "Only non-real-time tasks may be configured with this system call to avoid races with the scheduler. In practice, this means that a task's parameters must be set _before_ calling sys_prepare_rt_task()”

This is an old limitation inherited from the early days of LITMUS^RT that has never been relaxed. The “race” warning just means that none of the scheduler plugins expect that task parameters could change. 

> I can't think of anything that needs to be fixed other than an already armed hrtimer for budget enforcement. For example, if a job is running and before the budget enforcement timer fires, someone refills the budget.

The plugin may have allocated or configured parameter-specific data structures. For instance, this is the case with the Pfair plugin.

> This can be taken care of by re-programming the hrtimer during refills. If someone wants to abort the current job immediately, the exec_time can be manipulated so when the scheduler is called, out_of_time will be set to true.
> 
> I'm trying add a new syscall to update a rt_task's paramters, such as period and budget of EDF. The "race" with a scheduler sounds like a serious issue. Is there any other things that I'm overlooking? Thanks.

It probably works with EDF. I actually coded up a patch at some point to change job parameters at runtime. Let me see if I can dig it up.

- Björn





More information about the litmus-dev mailing list