CPU 轻量级隔离个性
基本概念
-
CPU 轻量级隔离个性 提供了 依据零碎负载和用户配置来抉择适合的 CPU 进行动静隔离 的能力。
- 内核会将被隔离 CPU 上的工作和中断迁徙到其余适合的 CPU 上执行
- 被隔离的 CPU 会进入 ilde 状态,以此来达到功耗优化的指标。同时提供用户态的配置和查问接口来实现更好的零碎调优。
ilde 状态:古代处理器通常可能进入这样的状态——程序的执行被暂停,而且属于它的指令不从内存中提取或执行。
参考文档:https://www.kernel.org/doc/ht…
配置领导
使能 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…
- 合入的内核局部代码如下:https://gitee.com/openharmony… 波及文件如下
相干接口
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 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
-
开关 CPU 轻量级隔离性能
echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable echo 1 > /sys/devices/system/cpu/cpu0/core_ctl/enable
-
设置沉闷 CPU 最小核数和最大核数
echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/min_cpus echo 4 > /sys/devices/system/cpu/cpu0/core_ctl/max_cpus
-
显示以后曾经动静隔离的 CPU 核
cat /sys/devices/system/cpu/core_ctl_isolated
-
显示以后未隔离和 CPU cluster 最终计算须要的 CPU 核数
cat /sys/devices/system/cpu/cpu0/core_ctl/active_cpus cat /sys/devices/system/cpu/cpu0/core_ctl/need_cpus
-
显示零碎记录的所有 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 规范零碎内核反对 Blackbox
-
- rk3568 上 DFX 反对了 Blackbox 性能,大部分状况下,能够记录重启前最初时刻的内核日志,门路为 /data/log/bbox
-
Blackbox 的性能会在设施挂掉的时候保留现场,内核相干的 config:
内核编译选项查看:zcat /proc/config.gz
/proc/config.gz 就是规范零碎内核配置文件,用 gzip 格局压缩过。
只有当内核配置 CONFIG_IKCONFIG 和 CONFIG_IKCONFIG_PROC 为 y,才会在 /proc 中呈现 config.gz 文件。 - 相干 issues:https://gitee.com/openharmony…
trace 目录
/sys/kernel/debug/tracing
cpuset 与 cpu 热插拔解耦
https://gitee.com/openharmony…
# 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 相干接口
# 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
看内核资讯
https://lwn.net/