Recall I stated that the scheduler is basic ;)
The timer ticks on the master kernel are started on boot, then not reset on any thread operation. This means that the actual thread timeslice is just 'X interrupts must come in'. So it's likely to vary by up to the tick ms value, as the yield does not have any relation with a new tick starting.
If you measured the time for many threads (100 or so) to all consumer their timeslice, you should see the error drop off and the average value approach the timeslice.
I'm curious as to what exactly you are trying to do? the RT kernel may be more suited.
Thanks
Anna.
________________________________
From: Norrathep Rattanavipanon
Sent: Friday, 20 October 2017 11:52 AM
To: Lyons, Anna (Data61, Kensington NSW)
Cc: devel@sel4.systems
Subject: Re: [seL4] Questions on seL4's scheduling
Thanks Anna. So I tried to measure timeslice in userspace and it seems like it does not match with the settings. Any idea what happens or what is wrong with my code:
I ran it on IMX6-SabreLite, master branch/kernel version 4.0.
main thread:
sel4bench_init();
seL4_Yield();
uint64_t start = sel4bench_get_cycle_count();
seL4_Yield();
uint64_t end = sel4bench_get_cycle_count();
sel4bench_destroy();
printf("Takes %llu\n", (end-start));
second thread:
while(1);
Both of them have the same priority.
When I set TIMER_TICK_MS=5 and TIME_SLICE=2, it outputs 8000000, which is around 8msecs.
Also, if i set TIMER_TICK_MS=2 and TIME_SLICE=1, I get around 1.6msecs.
Best,
On Thu, Oct 19, 2017 at 5:03 PM, mailto:Anna.Lyons@data61.csiro.au> wrote:
Hi Oak,
The timeslice value on the master kernel is only reset on thread creation and once the thread is depleted, so when a thread drops its priority the timeslice will not change, so it'll run for 2ms.
The timeslice cannot be set to lower than 1 ms, however you could change the timer driver on your target platform to do so (look at the initTimer function).
Note that the scheduler on the master kernel is fairly basic, the RT branch is far more fully featured (tickless and you can set different timeslices per thread).
Cheers
Anna.
________________________________
From: Norrathep Rattanavipanon mailto:nrattana@uci.edu>
Sent: Friday, 20 October 2017 10:18 AM
To: Lyons, Anna (Data61, Kensington NSW)
Cc: devel@sel4.systems
Subject: Re: [seL4] Questions on seL4's scheduling
Also, is it possible to set timeslice to be less than 1 milliseconds?
On Thu, Oct 19, 2017 at 3:08 PM, Norrathep Rattanavipanon mailto:nrattana@uci.edu> wrote:
Thank you, Anna and Gernot for the answer.
One more question, so assuming a timeslice is 5ms, a thread with the highest priority has run for 3ms, then drops its priority to be the same as the other thread.
Then, the same thread will start running with the fresh timeslice and it will run for another 5ms or will it just run for 2ms to complete the timeslice?
Oak
On Mon, Oct 16, 2017 at 3:09 PM, mailto:Anna.Lyons@data61.csiro.au> wrote:
Hi Oak,
Assuming your questions are about the master branch of the kernel, as on the RT branch the kernel is tickless.
1. There are two config paramters
+ TIMER_TICK_MS is how many milliseconds per tick
+ TIME_SLICE is how many ticks per timeslice.
2. Assuming a thread is waiting on a notification object for an irq to arrive, and another thread is running at the same priority when the irq arrives, the thread waiting on the notification object will not be woken until the currently running thread has exhausted it's timeslice.
Cheers,
Anna.
________________________________
From: Devel on behalf of Norrathep Rattanavipanon mailto:nrattana@uci.edu>
Sent: Tuesday, 17 October 2017 8:35 AM
To: devel@sel4.systems
Subject: [seL4] Questions on seL4's scheduling
Hello,
I have a few questions about seL4's scheduling model in the main (formally verified) branch.
1) I see the time slice parameter in make menuconfig. Is that where I can change the scheduler's time slice correct? And the unit is in timer tick period I suppose?
2) I kind of remember the discussion we had that if an interrupt handler has lower priority than the currently running task, then the interrupt wouldnt happen.
So what if both of them have the same priority, would the kernel schedule the currently running task until it uses up all of its timeslice, then issues the interrupt notification or would the interrupting process get executed right away?
Best Regards,
Oak
--
Norrathep (Oak) Rattanavipanon
M.S. in Computer Science
University of California - Irvine
--
Norrathep (Oak) Rattanavipanon
M.S. in Computer Science
University of California - Irvine
--
Norrathep (Oak) Rattanavipanon
M.S. in Computer Science
University of California - Irvine
--
Norrathep (Oak) Rattanavipanon
M.S. in Computer Science
University of California - Irvine