Preempt_rt kernel enters idle loop even when there are processes ready
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linaro-networking |
Invalid
|
High
|
viresh kumar |
Bug Description
Hi,
I am examining the core isolation properties between 3.6/3.7 and 3.10 with preempt_rt and for some reason the numbers are much worse for the 3.10 preempt_rt kernel (LNG version). This is the experiment. I boot up Linux with the following boot options.
setenv bootargs "isolcpus=1 nohz_full=1 rcu_nocbs=1 root=/dev/mmcblk1p2 rw rootwait console=
Linux config options can be found in the attached file (or so I thought. I seem only to be able to attach one single file. How to attach multiple?). I run a heavy load on core 0 and only a busy loop on core 1 where I measure how long it takes to traverse the loop. Usually a loop is very quick, but once in a while there is a tick or some other disturbance and the time it takes to traverse the loop becomes much longer. I am only interested in the maximum latency for traversing the loop when measured over a minute or so.
In 3.6/3.7 the max latency was 15 usec, but with 3.10 it is 10 times as much 150 usec. If you take a look at the function trace log attached (filtered to only show core 1), it seems like core 1 goes into idle even though I am executing a busy loop on highest real time priority, locked to core 1, SCHED_FIFO and there is nothing else on that core. It should get 100% of that core. But if I do a top, I see that it gets around 95% and sometimes even less than that. It is also dependent on the load I run on core 0. If I do not load it, the numbers get slightly better. This did not happen in 3.6/3.7. I am currently running linux-lng-
In 3.6/3.7, only the tick has an impact on the max latency of the loop.
BTW, I have tried without NO_HZ_FULL in the kernel with the same results.
Thanks: Magnus
Changed in linaro-networking: | |
importance: | Medium → High |
Changed in linaro-networking: | |
assignee: | nobody → viresh kumar (viresh.kumar) |
Added config file.