OpenHarmony标准系统内核学习(二)—CPU轻量级隔离特性

系统 OpenHarmony
CPU轻量级隔离特性提供了根据系统负载和用户配置来选择合适的CPU进行动态隔离的能力。

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

CPU轻量级隔离特性

基本概念

CPU轻量级隔离特性提供了根据系统负载和用户配置来选择合适的CPU进行动态隔离的能力。

  • 内核会将被隔离CPU上的任务和中断迁移到其他合适的CPU上执行
  • 被隔离的CPU会进入ilde状态,以此来达到功耗优化的目标。同时提供用户态的配置和查询接口来实现更好的系统调优。

ilde状态: 现代处理器通常能够进入这样的状态——程序的执行被暂停,而且属于它的指令不从内存中提取或执行。

参考文档:https://www.kernel.org/doc/html/v5.10/admin-guide/pm/cpuidle.html

配置指导

使能CPU轻量级隔离特性

启用CPU轻量级隔离,需要通过编译内核时打开相应的配置项及依赖,相关CONFIG如下:

rk3568芯片组件config:kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig

CONFIG_CPU_ISOLATION_OPT=y
CONFIG_SCHED_CORE_CTRL=y
# 另有部分CONFIG被依赖
CONFIG_SMP=y
CONFIG_SCHED_WALT=y

引入动态核隔离的内核基础设施以及对应的用户态接口

CPU轻量级隔离特性与kernel_linux_5.10引入动态核隔离的内核基础设施以及对应的用户态接口相关。

支持隔离核场景和解除隔离核场景。

  • 隔离核:内核根据接口配置值对隔离核上非绑定在本核上的任务进行迁移,放到affinity中其它隔离核上执行。
  • 解除隔离核:内核根据接口配置值以及系统负载解除核隔离,任务可以在该核上执行。

合入的相关issues如下:https://gitee.com/openharmony/kernel_linux_5.10/issues/I4SRVK?from=project-issue

合入的内核部分代码如下:https://gitee.com/openharmony/kernel_linux_5.10/pulls/54/files 涉及文件如下

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

相关接口

CPU轻量级隔离提供了一些接口用于控制CPU隔离核的个数以及记录当前状态,支持以CPU cluster层级进行配置,这些接口位于每个CPU cluster的首个CPU设备信息目录中,如/sys/devices/system/cpu/cpu0/core_ctl

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

功能分类

接口名

描述

控制接口

enable

功能开关,1表示开启,0表示关闭

min_cpus

设置活跃(未隔离)CPU最小核数

max_cpus

设置活跃(未隔离)CPU最大核数,其中最大值为CPU cluster包含的CPU个数

状态接口

active_cpus

显示CPU cluster最终计算需要的CPU核数

need_cpus

显示当前需要解隔离的CPU核数

global_state

记录系统所有CPU cluster的状态信息,包含CPU 隔离状态,online状态以及负载信息等。

使用CPU轻量级隔离接口

使用hdc_std工具进入rk3568开发板终端,RK3568 CPU为四核A55

查看CPU轻量级隔离功能开关状态

cat /sys/devices/system/cpu/cpu0/core_ctl/enable

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

开关CPU轻量级隔离功能

echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable
echo 1 > /sys/devices/system/cpu/cpu0/core_ctl/enable

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

设置活跃CPU最小核数和最大核数

echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/min_cpus
echo 4 > /sys/devices/system/cpu/cpu0/core_ctl/max_cpus

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

显示当前已经动态隔离的CPU核

cat /sys/devices/system/cpu/core_ctl_isolated

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

显示当前未隔离和CPU cluster最终计算需要的CPU核数

cat /sys/devices/system/cpu/cpu0/core_ctl/active_cpus
cat /sys/devices/system/cpu/cpu0/core_ctl/need_cpus

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

显示系统记录的所有CPU cluster的状态信息

cat /sys/devices/system/cpu/cpu0/core_ctl/global_state

OpenHarmony标准系统内核支持的其它特性

OpenHarmony标准系统内核支持统计各个进程的dma-buf占用

  • 数据收集:在dmabuf export的时候(创建时),记录exporter(申请者)的pid、进程名等信息。
  • 展示:新增以下两个内核节点用于展示,显示每个进程占用的dmabuf objects信息:包括dmabuf object的大小、对应inode、申请者、exp_name等所需信息。

/proc/process_dmabuf_info 与 /sys/kernel/debug/dma_buf/process_bufinfo 两个节点功能相同。

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

OpenHarmony标准系统内核支持Blackbox

  • rk3568上DFX支持了Blackbox功能,大部分情况下,可以记录重启前最后时刻的内核日志,路径为/data/log/bbox
  • Blackbox的功能会在设备挂掉的时候保存现场,内核相关的config:

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

内核编译选项查看:zcat /proc/config.gz

/proc/config.gz 就是标准系统内核配置文件,用 gzip 格式压缩过。

只有当内核配置 CONFIG_IKCONFIG 和 CONFIG_IKCONFIG_PROC 为 y,才会在 /proc 中出现 config.gz 文件。

相关issues:https://gitee.com/openharmony/kernel_linux_config/issues/I4WRTR

cpuset与cpu热插拔解耦

​https://gitee.com/openharmony/kernel_linux_5.10/issues/I4LKQ0?from=project-issue​

# cd/ dev/cpuset
# ls
background cpuset.memory_pressure_enabled
cgroup.clone_children cpuset.memory_spread_page
cgroup.procs cpuset.memory_spread_slab
cgroup.sane_behavior cpuset.mems
cpuset.cpu_exclusive cpuset.sched_load_balance
cpuset.cpus cpuset.sched_relax_domain_level
cpuset.effective_cpus foreground
cpuset.effective_mems notify_on_release
cpuset.mem_exclusive release_agent
cpuset.mem_hardwall system-background
cpuset.memory_migrate tasks
cpuset.memory_pressure top-app
# cat cpuset.cpus
0-3

知识点附送

查看系统支持的CPU核心与在线的核心数

cat /sys/devices/system/cpu/present
cat /sys/devices/system/cpu/online

查看系统支持的CPU离线的状态

cat /sys/devices/system/cpu/offline

查看系统支持的CPU在线的状态

cat /sys/devices/system/cpu/cpu0/online

开关CPU核心

echo 1 > /sys/devices/system/cpu/cpu0/online
echo 1 > /sys/devices/system/cpu/cpu1/online
echo 0 > /sys/devices/system/cpu/cpu2/online
echo 0 > /sys/devices/system/cpu/cpu3/online

查看CPU信息

cat /proc/cpuinfo

查看计算机名

hostname

查看内核/操作系统/CPU信息

uname -a

查看网卡信息

dmesg | grep -i eth

cpu相关接口

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性-开源基础软件社区

# cd /sys/devices/system/cpu
# ls
core_ctl_isolated cpu3 isolated online smt
cpu0 cpufreq kernel_max possible uevent
cpu1 cpuidle modalias power vulnerabilities
cpu2 hotplug offline present

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

责任编辑:jianghua 来源: 51CTO 开源基础软件社区
相关推荐

2023-02-01 16:28:30

Linux内核鸿蒙

2022-09-07 15:08:58

操作系统鸿蒙

2022-10-12 15:14:08

开机动画鸿蒙

2022-09-15 14:56:12

GDB调试鸿蒙

2022-04-02 20:45:04

Hi3516开发板操作系统鸿蒙

2021-09-16 15:04:28

鸿蒙HarmonyOS应用

2021-11-08 07:19:45

鸿蒙HarmonyOS应用

2023-12-29 08:45:40

Python3.8鸿蒙解释器

2022-09-13 16:10:15

鸿蒙操作系统

2022-09-16 15:01:37

操作系统技术鸿蒙

2022-09-06 15:46:52

speexdsp鸿蒙

2023-06-27 15:12:46

C++三方库移植

2022-09-15 15:21:22

操作系统鸿蒙

2022-09-14 15:28:19

操作系统鸿蒙

2022-01-13 10:11:59

鸿蒙HarmonyOS应用

2013-04-27 19:22:54

Ubuntu 13.0Lunbuntu 13

2022-02-16 16:01:02

Hi3516开发板鸿蒙

2023-04-10 09:44:22

内核鼠标调试鸿蒙

2009-09-11 08:26:49

Linux系统CRUX 2.6Linux

2021-07-19 15:34:05

鸿蒙HarmonyOS应用
点赞
收藏

51CTO技术栈公众号