Skip to content

cpusets: dynamical scheduler domain flags

Michael Wang lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest5 patches 4 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/5cpusets: add basic variablesinclude/linux/sched.h kernel/cpuset.c+29 -00 replies
2/5cpusets: add functions and code for initializationinclude/linux/sched.h kernel/cpuset.c kernel/sched/core.c+15 -50 replies
3/5cpusets: enable the dynamical domain flagskernel/cpuset.c kernel/sched/core.c+16 -10 replies
4/5cpusets: add fundamental functions for recordingkernel/cpuset.c+31 -00 replies
5/5cpusets: add the configuration facilitykernel/cpuset.c+85 -00 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 0/5] cpusets: dynamical scheduler domain flags

From: Michael Wang <[email protected]>

This patch set provide a way for user to dynamically configure the scheduler domain flags, which usually to be static.

We can do the configuration through cpuset cgroup, new file will be found under each hierarchy:

sched_smt_domain_flag
-- appear when CONFIG_SCHED_SMT enabled, stands for the domain flags
of cpuset on smt level

sched_mc_domain_flag
-- appear when CONFIG_SCHED_MC enabled, stands for the domain flags
of cpuset on mc level

sched_book_domain_flag
-- appear when CONFIG_SCHED_BOOK enabled, stands for the domain flags
of cpuset on book level

sched_cpu_domain_flag
-- stands for the domain flags of cpuset on cpu level

sched_enable_domain_flag
-- set to 1 if want to use the dynamical domain flags, domain will
be rebuild

Examples:

Currently the domain flags bit are:

#define SD_LOAD_BALANCE         0x0001  /* Do load balancing on this domain. */
#define SD_BALANCE_NEWIDLE      0x0002  /* Balance when about to become idle */
#define SD_BALANCE_EXEC         0x0004  /* Balance on exec */
#define SD_BALANCE_FORK         0x0008  /* Balance on fork, clone */
#define SD_BALANCE_WAKE         0x0010  /* Balance on wakeup */
#define SD_WAKE_AFFINE          0x0020  /* Wake task to waking CPU */
#define SD_PREFER_LOCAL         0x0040  /* Prefer to keep tasks local to this domain */
#define SD_SHARE_CPUPOWER       0x0080  /* Domain members share cpu power */
#define SD_SHARE_PKG_RESOURCES  0x0200  /* Domain members share cpu pkg resources */
#define SD_SERIALIZE            0x0400  /* Only a single load balancing instance */
#define SD_ASYM_PACKING         0x0800  /* Place busy groups earlier in the domain */
#define SD_PREFER_SIBLING       0x1000  /* Prefer to place tasks in a sibling domain */
#define SD_OVERLAP              0x2000  /* sched_domains of this level overlap */
#define SD_NUMA                 0x4000  /* cross-node balancing */

If we want to set SMT domain to be:
'SD_LOAD_BALANCE | SD_BALANCE_WAKE | SD_OVERLAP'
and other level domain only has SD_LOAD_BALANCE, then we can use:

	echo 0x1011 > /sys/fs/cgroup/cpuset/cpuset.sched_smt_domain_flag
	echo 0x1 > /sys/fs/cgroup/cpuset/cpuset.sched_mc_domain_flag
	echo 0x1 > /sys/fs/cgroup/cpuset/cpuset.sched_book_domain_flag
	echo 0x1 > /sys/fs/cgroup/cpuset/cpuset.sched_cpu_domain_flag
	echo 1 > /sys/fs/cgroup/cpuset/cpuset.sched_enable_domain_flag

including:
cpusets: add basic variables
cpusets: add functions and code for initialization
cpusets: enable the dynamical domain flags
cpusets: add fundamental functions for recording
cpusets: add the configuration facility

---
 b/include/linux/sched.h |   22 ++++++++
 b/kernel/cpuset.c       |    7 ++
 b/kernel/sched/core.c   |    2 
 include/linux/sched.h   |   10 ++-
 kernel/cpuset.c         |  131 +++++++++++++++++++++++++++++++++++++++++++++++-
 kernel/sched/core.c     |   10 +++
 6 files changed, 176 insertions(+), 6 deletions(-)