diff --git a/zh-cn/device-dev/kernel/Readme-CN.md b/zh-cn/device-dev/kernel/Readme-CN.md index 66f6c859f7d474fa1b393f9019ab0d6c75dde107..460efc5e8e693dffd23f0dd8aca05eb4c165b4b6 100755 --- a/zh-cn/device-dev/kernel/Readme-CN.md +++ b/zh-cn/device-dev/kernel/Readme-CN.md @@ -181,3 +181,6 @@ - [内核增强特性](kernel-standard-enhanced-features.md) - [内存管理](kernel-standard-mm.md) - [Enhanced SWAP特性介绍](kernel-standard-mm-eswap.md) + - [任务调度](kernel-standard-sched.md) + - [关联线程组调度](kernel-standard-sched-rtg.md) + - [CPU轻量级隔离](kernel-standard-sched-cpuisolation.md) diff --git a/zh-cn/device-dev/kernel/kernel-standard-enhanced-features.md b/zh-cn/device-dev/kernel/kernel-standard-enhanced-features.md index 348cf8bd68185bea940b47160c780db8c0ac03d3..db45ebeb16d1988a8804d77dd3452023bf024ec5 100644 --- a/zh-cn/device-dev/kernel/kernel-standard-enhanced-features.md +++ b/zh-cn/device-dev/kernel/kernel-standard-enhanced-features.md @@ -1,3 +1,4 @@ # 内核增强特性 -- **[内存管理](kernel-standard-mm.md)** \ No newline at end of file +- **[内存管理](kernel-standard-mm.md)** +- **[任务调度](kernel-standard-sched.md)** \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-standard-sched-cpuisolation.md b/zh-cn/device-dev/kernel/kernel-standard-sched-cpuisolation.md new file mode 100644 index 0000000000000000000000000000000000000000..c87dd51b609bd7098519cadf28e1156658f5a6a1 --- /dev/null +++ b/zh-cn/device-dev/kernel/kernel-standard-sched-cpuisolation.md @@ -0,0 +1,38 @@ +# CPU轻量级隔离特性介绍 + + +## 基本概念 + +CPU轻量级隔离特性提供了根据系统负载和用户配置来选择合适的CPU进行动态隔离的能力。内核会将被隔离CPU上的任务和中断迁移到其他合适的CPU上执行,被隔离的CPU会进入ilde状态,以此来达到功耗优化的目标。同时提供用户态的配置和查询接口来实现更好的系统调优。 + + +## 配置指导 + +### 使能CPU轻量级隔离特性 +打开相关配置项及依赖 + +启用CPU轻量级隔离,需要通过编译内核时打开相应的配置项及依赖,相关CONFIG如下: + +``` +CONFIG_CPU_ISOLATION_OPT=y +CONFIG_SCHED_CORE_CTRL=y +``` + +另有部分CONFIG被依赖: + +``` +CONFIG_SMP=y +CONFIG_SCHED_WALT=y +``` +## 相关接口 + +CPU轻量级隔离提供了一些接口用于控制CPU隔离核的个数以及记录当前状态,支持以CPU cluster层级进行配置,这些接口位于每个CPU cluster的首个CPU设备信息目录中,如`/sys/devices/system/cpu/cpu0/core_ctl`。 + +| 功能分类 | 接口名 | 描述 | +| ---- | ------------ | ---------------------------------------- | +| 控制接口 | enable | 功能开关,1表示开启,0表示关闭 | +| | min_cpus | 设置活跃(未隔离)CPU最小值个数 | +| | max_cpus | 设置活跃(未隔离)CPU最大值个数,其中最大值为CPU cluster包含的CPU个数 | +| 状态接口 | active_cpus | 显示当前活跃(未隔离)的CPU个数 | +| | need_cpus | 显示当前需要解隔离的CPU个数 | +| | global_state | 记录系统所有CPU cluster的状态信息,包含CPU 隔离状态,online状态以及负载信息等。 | diff --git a/zh-cn/device-dev/kernel/kernel-standard-sched-rtg.md b/zh-cn/device-dev/kernel/kernel-standard-sched-rtg.md new file mode 100644 index 0000000000000000000000000000000000000000..5de228d46f6ed9d204889d676079ee4eff8d3d1f --- /dev/null +++ b/zh-cn/device-dev/kernel/kernel-standard-sched-rtg.md @@ -0,0 +1,61 @@ +# 关联线程组调度特性介绍 + + +## 基本概念 + +关联线程组(related thread group)提供了对一组关键线程调度优化的能力,支持对关键线程组单独进行负载统计和预测,并且设置优选CPU cluster功能,从而达到为组内线程选择最优CPU运行并且根据分组负载选择合适的CPU调频点运行。 + + +## 配置指导 + +### 使能关联线程组 +打开相关配置项及依赖,启用关联线程组功能,需要通过编译内核时打开相应的配置项及依赖,相关CONFIG如下: + +``` +CONFIG_SCHED_RTG=y +CONFIG_SCHED_RTG_DEBUG=y +CONFIG_SCHED_RTG_FRAME=y +CONFIG_SCHED_RTG_RT_THREAD_LIMIT=y +``` + +另有部分CONFIG被依赖: + +``` +CONFIG_SCHED_WALT=y +``` +### 添加进程/线程到关联线程组中 + +内核中默认创建出20个可用的关联线程组,其中group id=1的分组为预留分组,不支持添加进程/线程: + +```Bash +// 将指定pid的进程添加到group id为2的关联线程组中 +echo 2 > /proc//sched_group_id +// 将指定pid的进程从group id为2的关联线程组中移出,其中group id=0表示非关联线程组 +echo 0 > /proc//sched_group_id +``` +### 查看关联线程组信息 + +关联线程组信息包含group id,分组优选CPU cluster id,分组内线程信息等。 + + ```Bash +cat /proc/sched_rtg_debug +// 例如执行后显示如下: +RTG_ID : 2 // 分组id +RTG_INTERVAL : UPDATE:8ms\#INVALID:4294ms // CPU调频间隔和负载有效时长 +RTG_CLUSTER : -1 // CPU cluster id,其中-1表示未设置优选cluster +RTG_THREADS : 0/1 // 分组包含的线程总数 +STATE COMM PID PRIO CPU // 线程信息(状态/名称/pid/优先级/所在CPU编号) +--------------------------------------------------------- + S bash 436 120 1(0-3) + ``` + +## 关联线程组相关接口 + +关联线程组提供了设备节点和ioctl接口用于查询和配置分组信息,其中设备节点路径为`/dev/sched_rtg_ctrl`。 + +| 设备节点 | request | 描述 | +| ------------------- | ------------------- | ------------------- | +| /dev/sched_rtg_ctrl | CMD_ID_SET_RTG | 创建分组,添加/更新/删除分组中线程 | +| | CMD_ID_SET_CONFIG | 配置全局分组属性,例如最大实时分组个数 | +| | CMD_ID_SET_RTG_ATTR | 配置指定分组属性,例如分组线程优先级 | +| | CMD_ID_SET_MIN_UTIL | 设置分组最小utilization值 | diff --git a/zh-cn/device-dev/kernel/kernel-standard-sched.md b/zh-cn/device-dev/kernel/kernel-standard-sched.md new file mode 100644 index 0000000000000000000000000000000000000000..d3357a958d5a340aa1d79afd8ddaa592061ab7bc --- /dev/null +++ b/zh-cn/device-dev/kernel/kernel-standard-sched.md @@ -0,0 +1,5 @@ +# 任务调度 + +- **[关联线程组调度特性介绍](kernel-standard-sched-rtg.md)** +- **[CPU轻量级隔离特性介绍](kernel-standard-sched-cpuisolation.md)** +