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 <[email protected]>
Sent: Friday, 20 October 2017 11:52 AM
To: Lyons, Anna (Data61, Kensington NSW)
Cc: [email protected]
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, 
<[email protected]<mailto:[email protected]>> 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 <[email protected]<mailto:[email protected]>>
Sent: Friday, 20 October 2017 10:18 AM
To: Lyons, Anna (Data61, Kensington NSW)
Cc: [email protected]
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 
<[email protected]<mailto:[email protected]>> 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, 
<[email protected]<mailto:[email protected]>> 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 <[email protected]> on behalf of Norrathep Rattanavipanon 
<[email protected]<mailto:[email protected]>>
Sent: Tuesday, 17 October 2017 8:35 AM
To: [email protected]
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
_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel

Reply via email to