perf and cgroup event scheduling
Hi Stephane,
while trying to make sense of various other fun event scheduling issues, I noticed that perf_cgroup_switch() isn't always doing the right thing.
So we typically want to schedule: CPU-pinned, TASK-pinned, CPU-flexible TASK-flexible, however the current code doesn't respect that.
In particular perf_cgroup_sched_in() is placed wrong, it should be _before_ we schedule in the task contexts.
There's further complications with things like perf_install_in_context() and perf_cgroup_move(), but those are either rare or 'interesting' to fix.
Peter,
Quoted 8 lines · Peter Zijlstra
Hi Stephane,
while trying to make sense of various other fun event scheduling issues, I noticed that
perf_cgroup_switch()isn't always doing the right thing.So we typically want to schedule: CPU-pinned, TASK-pinned, CPU-flexible TASK-flexible, however the current code doesn't respect that.
Unfortunately, you are right ;-). I think we should try to centralize the scheduling
of per-cpu and per-thread event in a single function that goes through the priority
list. In certain cases, we would sched out and back in per-thread events, but that
would be the only to maintain the priority scheme. I will look into that.
In the meantime, yesterday, I found and fixed one potential kernel crash problem related to mixing cgroup + per-thread events. I will be posting the patch shortly.
Quoted 9 lines
In particular
perf_cgroup_sched_in()is placed wrong, it should be _before_ we schedule in the task contexts.There's further complications with things like
perf_install_in_context()andperf_cgroup_move(), but those are either rare or 'interesting' to fix.
Quoted 11 lines · Stephane Eranian
Peter,
Quoted 8 lines · Peter Zijlstra
Hi Stephane,
while trying to make sense of various other fun event scheduling issues, I noticed that
perf_cgroup_switch()isn't always doing the right thing.So we typically want to schedule: CPU-pinned, TASK-pinned, CPU-flexible TASK-flexible, however the current code doesn't respect that.
Quoted 7 lines
Unfortunately, you are right ;-). I think we should try to centralize the scheduling
of per-cpu and per-thread event in a single function that goes through the priority
list. In certain cases, we would sched out and back in per-thread events, but that
would be the only to maintain the priority scheme. I will look into that.
I've done something near to that here:
https://lkml.org/lkml/2011/3/31/232
but that patch is very fresh and not tested at all.
Quoted 4 lines
In the meantime, yesterday, I found and fixed one potential kernel crash problem related to mixing cgroup + per-thread events. I will be posting the patch shortly.
Looking fwd to that, Thanks!