perf/core: Update cgroup time with descendants
PATCH 1/1 perf/core: Update cgroup time with descendants
From: "leilei.lin" <[email protected]>
This fix updating cgroup time when event is being scheduled in by cgroup descendants
--- kernel/events/core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
kernel/events/core.c +3 -1
@@ -662,7 +662,9 @@ static inline void update_cgrp_time_from_event(struct perf_event *event)/* * Do not update time when cgroup is not active */ -if (cgrp == event->cgrp) +if (cgrp == event->cgrp || +cgroup_is_descendant (cgrp->css.cgroup, + event->cgrp->css.cgroup))__update_cgrp_time (event->cgrp); }
Signature · 1 line
2.8.4.31.g9ed660f
Add steps of reproducing
1
``` mkdir /sys/fs/cgroup/perf_event/root1 mkdir /sys/fs/cgroup/perf_event/root1/leaf1 ``` 2 $pid is any running process ``` echo $pid > /sys/fs/cgroup/perf_event/root1/cgroup.procs ```
3
``` perf stat -e cycles -G root1 -a -I 1000 ```
You shall get 0 cycles from it, which should have been cycles of $pid
2017-09-14 15:03 GMT+08:00 <[email protected]>:
Quoted 28 lines
From: "leilei.lin" <[email protected]>
This fix updating cgroup time when event is being scheduled in by cgroup descendants
Signed-off-by leilei.lin <[email protected]>--- kernel/events/core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)kernel/events/core.c +3
-2@@ -662,7 +662,9 @@ static inline void update_cgrp_time_from_event(struct perf_event *event)/* * Do not update time when cgroup is not active */ -if (cgrp == event->cgrp) +if (cgrp == event->cgrp || +cgroup_is_descendant (cgrp->css.cgroup, + event->cgrp->css.cgroup))__update_cgrp_time (event->cgrp); } --2.8.4.31.g9ed660f
Quoted 30 lines · Lin Xiulei
Add steps of reproducing
1
``` mkdir /sys/fs/cgroup/perf_event/root1 mkdir /sys/fs/cgroup/perf_event/root1/leaf1 ``` 2 $pid is any running process ``` echo $pid > /sys/fs/cgroup/perf_event/root1/cgroup.procs ```3
``` perf stat -e cycles -G root1 -a -I 1000 ```You shall get 0 cycles from it, which should have been cycles of $pid
2017-09-14 15:03 GMT+08:00 <[email protected]>:
Quoted 10 lines
From: "leilei.lin" <[email protected]>
This fix updating cgroup time when event is being scheduled in by cgroup descendants
Signed-off-by leilei.lin <[email protected]>--- kernel/events/core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Quoted 13 lines
kernel/events/core.c static inline void update_cgrp_time_from_event(struct perf_event *event) · line 668
Quoted 13 lines
kernel/events/core.c +3
-1@@ -662,7 +662,9 @@ static inline void update_cgrp_time_from_event(struct perf_event *event)/* * Do not update time when cgroup is not active */ -if (cgrp == event->cgrp) +if (cgrp == event->cgrp || +cgroup_is_descendant (cgrp->css.cgroup, + event->cgrp->css.cgroup))__update_cgrp_time (event->cgrp);
you no longer need the 'cgrp == event->cgrp', it's part of the cgroup_is_descendant call
other than that it looks ok to me
thanks,
jirka