首页 > 其他分享 >OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性

时间:2023-02-03 16:31:59浏览次数:63  
标签:OpenHarmony 隔离 system devices cpu sys CPU 轻量级

(目录)

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 涉及文件如下 image.png

相关接口

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

image.png

功能分类 接口名 描述
控制接口 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

image.png

  • 开关CPU轻量级隔离功能
echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable
echo 1 > /sys/devices/system/cpu/cpu0/core_ctl/enable

image.png

  • 设置活跃CPU最小核数和最大核数
echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/min_cpus
echo 4 > /sys/devices/system/cpu/cpu0/core_ctl/max_cpus

image.png

  • 显示当前已经动态隔离的CPU核
cat /sys/devices/system/cpu/core_ctl_isolated

image.png

  • 显示当前未隔离和CPU cluster最终计算需要的CPU核数
cat /sys/devices/system/cpu/cpu0/core_ctl/active_cpus	
cat /sys/devices/system/cpu/cpu0/core_ctl/need_cpus	

image.png

  • 显示系统记录的所有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 两个节点功能相同。

image.png

OpenHarmony标准系统内核支持Blackbox

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

内核编译选项查看: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

trace目录

/sys/kernel/debug/tracing

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相关接口 image.png
# 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/

本文作者:离北况归

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

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

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

标签:OpenHarmony,隔离,system,devices,cpu,sys,CPU,轻量级
From: https://blog.51cto.com/harmonyos/6035775

相关文章

  • 对程序员来说CPU是什么——1.3 决定程序流程的程序计数器
     图1-4是程序起动时内存内容的模型。用户发出启动程序的指示后,Windows等操作系统会把硬盘中保存的程序复制到内存中。确定程序运行的开始位置,Windows等操作系统把程序从......
  • 对程序员来说CPU是什么——1.2 CPU是寄存器的集合体
    程序是把寄存器作为对象来描述的。机器语言级别的程序是通过寄存器来处理的,CPU是(具有各种功能的)寄存器的集合体。eax(累计寄存器)和ebp(基址寄存器)是CPU内部的寄存器的名称。......
  • WGCLOUD的原理和使用分享 - 实时监测服务器CPU温度
    WGCLOUD具备自动监测主机CPU温度的能力,不用配置,只要启动被控端agent就行了,它会自动采集CPU温度指标数据,如下图不过测试中,发现貌似虚拟机采集不到CPU温度,实体机是可以采集CPU......
  • Linux查看cpu个数
    1.查看物理CPU的个数  #cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wc-l 2.查看逻辑CPU的个数 #cat/proc/cpuinfo|grep"processor"|wc-l 3.查看CPU是......
  • OpenHarmony内核学习[1]--单独编译OpenHarmony标准系统内核
    内核是操作系统的核心,学习掌握OpenHarmony内核对于开发人员至关重要。笔者整理学习OpenHarmony标准系统内核笔记如下:阅读本文大约需要15分钟。(目录)OpenHarmony标准系......
  • Linux CPU亲和性
    CPU亲合力就是指在linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行。一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行。在一个多处理器系统......
  • 【cpuidle】cpuidle overview
    什么是cpuidle基本了解参考这些文章对cpuidle做一些基本了解http://www.wowotech.net/pm_subsystem/cpuidle_overview.htmlhttps://blog.csdn.net/feelabclihu/articl......
  • 我所理解的CPU中断
    我所理解的CPU中断 什么是中断假设你在玩王者荣耀,突然一个电话过来…,这就是中断!对CPU来说就是:CPU在执行某一段程序的时候收到某些特定信号转而去执行另一段特定程序的......
  • linux服务器运行java项目, 监控查看内存、储存空间和cpu占用率
    服务器部署方式为tomcat中运行war包的方式,有一次重新部署时候发现报异常堆栈溢出了.想要定位到某个war包中通过学习整理出此篇文章以作记录笔记.1.关于内存过高......
  • 基于Docker安装的Stable Diffusion使用CPU进行AI绘画
    基于Docker安装的StableDiffusion使用CPU进行AI绘画由于博主的电脑是为了敲代码考虑买的,所以专门买的高U低显,i9配核显,用StableDiffusion进行AI绘画的话倒是专门有个......