sched/core: Forced idle accounting
authorJosh Don <joshdon@google.com>
Mon, 18 Oct 2021 20:34:28 +0000 (13:34 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 17 Nov 2021 13:49:00 +0000 (14:49 +0100)
commit4feee7d12603deca8775f9f9ae5e121093837444
tree5b4d68bde6fbd540ec521237d75892b617241eac
parent2fb75e1b642f49253d8848c9e47e8942f5366221
sched/core: Forced idle accounting

Adds accounting for "forced idle" time, which is time where a cookie'd
task forces its SMT sibling to idle, despite the presence of runnable
tasks.

Forced idle time is one means to measure the cost of enabling core
scheduling (ie. the capacity lost due to the need to force idle).

Forced idle time is attributed to the thread responsible for causing
the forced idle.

A few details:
 - Forced idle time is displayed via /proc/PID/sched. It also requires
   that schedstats is enabled.
 - Forced idle is only accounted when a sibling hyperthread is held
   idle despite the presence of runnable tasks. No time is charged if
   a sibling is idle but has no runnable tasks.
 - Tasks with 0 cookie are never charged forced idle.
 - For SMT > 2, we scale the amount of forced idle charged based on the
   number of forced idle siblings. Additionally, we split the time up and
   evenly charge it to all running tasks, as each is equally responsible
   for the forced idle.

Signed-off-by: Josh Don <joshdon@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20211018203428.2025792-1-joshdon@google.com
include/linux/sched.h
kernel/sched/core.c
kernel/sched/core_sched.c
kernel/sched/debug.c
kernel/sched/fair.c
kernel/sched/sched.h