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=yCONFIG_SCHED_CORE_CTRL=y# 另有局部CONFIG被依赖CONFIG_SMP=yCONFIG_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/enableecho 1 > /sys/devices/system/cpu/cpu0/core_ctl/enable

  • 设置沉闷CPU最小核数和最大核数

    echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/min_cpusecho 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# lsbackground              cpuset.memory_pressure_enabledcgroup.clone_children   cpuset.memory_spread_pagecgroup.procs            cpuset.memory_spread_slabcgroup.sane_behavior    cpuset.memscpuset.cpu_exclusive    cpuset.sched_load_balancecpuset.cpus             cpuset.sched_relax_domain_levelcpuset.effective_cpus   foregroundcpuset.effective_mems   notify_on_releasecpuset.mem_exclusive    release_agentcpuset.mem_hardwall     system-backgroundcpuset.memory_migrate   taskscpuset.memory_pressure  top-app# cat cpuset.cpus0-3

知识点附送

  • 查看零碎反对的CPU外围与在线的外围数
cat /sys/devices/system/cpu/presentcat /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/onlineecho 1 > /sys/devices/system/cpu/cpu1/onlineecho 0 > /sys/devices/system/cpu/cpu2/onlineecho 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# lscore_ctl_isolated  cpu3     isolated    online    smtcpu0               cpufreq  kernel_max  possible  ueventcpu1               cpuidle  modalias    power     vulnerabilitiescpu2               hotplug  offline     present

看内核资讯

https://lwn.net/