安卓cpu知识

背景

  目前的cpu都是多核的,为了有更好的能效,每个核的频率从低往高不等。市面上,大家根据频率不同,都叫大小核。既然分了大小核,那么多核心,就要有不同的cpu调度策略。所以cpu上的所有核,又会根据自身的频率不同,几个核心为一组,分到一个簇里(cluster)。同一个簇里的核,使用相同的调度策略(policy)。

cpu基本知识

  1. cpu整体信息文件夹节点
    /sys/devices/system/cpu/
    通过ls -al。可以查看到cpu有多少个核心,比如8核,会有cpu0~cpu7
  2. cpu每个核文件夹节点
    /sys/devices/system/cpu/cpu0
    通过ls -al。可以查看核属于哪个cluster。比如0号cpu查到,cpufreq -> …/cpufreq/policy0。说明0号cpu属于cluster0,和簇里其他核一起使用policy0里的频率策略。
  3. cpu频率相关的文件夹节点
    /sys/devices/system/cpu/cpu0/cpufreq/
    通过ls -al。可以发现下列文件节点:
    cpuinfo_cur_freq-----------------------> cpu硬件当前的频率(khz)
    cpuinfo_max_freq----------------------> cpu硬件物理最大频率(khz)
    cpuinfo_min_freq----------------------> cpu硬件物理最小频率(khz)
    scaling_max_freq----------------------> cpu软件设置的最大频,用于策略调整。注意:各厂商的os经过二次开发,可能会有比这个节点优先级更高的文件节点。
    scaling_available_frequencies------->cpu支持的频率范围(khz)
    scaling_available_governors--------> cpu支持的策略列表
    scaling_governor-----------------------> cpu当前的运行策略
    scaling_cur_freqr-----------------------> cpu期望运行的频率
    以上这些文件节点,实际上都是policy0这个簇里的策略,通过软链接的方式,链接到cpu0这里。所以如果要修改cpu策略,直接到簇里修改,几个核心同时生效。如果想要限定cpu的频率,可以设置cpuinfo_max_freq和cpuinfo_min_freq
  4. cpu的cluster查看
    /sys/devices/system/cpu/cpufreq
    通过ls -al。查看有多少个目录名字包含policy的。比如policy0或者policy7。有多少个目录就有多少个簇。
  5. core_ctl的作用
    core_ctl会根据当前系统的负载动态调节运行的cpu个数,从而降低功耗。如果active的cpu个数大于系统需要的cpu个数,就隔离多余的cpu,否则接触隔离。
    相关文件节点:
    /sys/devices/system/cpu/cpu0/core_ctl/active_cpus------>第一个cluster正在跑的cpu
    /sys/devices/system/cpu/cpu0/core_ctl/need_cpus------->第一个cluster需要的cpu
    /sys/devices/system/cpu/cpu0/core_ctl/max_cpus-------->第一个cluster最大调度数
    /sys/devices/system/cpu/cpu0/core_ctl/min_cpus--------->第一个cluster最小调度数
  6. cpu功耗
    cpu功耗分为:静态功耗、动态功耗
    静态功耗:mos管内部产生的泄漏电流。
    动态功耗:负载电容充放电造成,只要电路有信号翻转就会产生动态功耗。公式:P=C∗F∗V^2
    功耗优化:根据公式看,同一个程序功耗优化的方向是开多线程。解释如下:某任务,用f频率单线程在大核跑。拆分为2个f/2频率在小核跑,小核的电压更低,功耗更低。
    同频率不同任务功耗差异:不同任务对应不同的指令,不同指令对应不同数量和类型的晶体管,所以总功耗将不同。
  7. cpu核心绑定
    adb shell ‘taskset -p <掩码> <线程号>’
    掩码是什么?掩码是控制绑哪个核心的16进制数字
    掩码计算方式:
    假如cpu是8核,按照cpu7cpu6cpu5cpu4cpu3cpu2cpu1cpu0排序,形成一个8位数二进制。
    绑cpu7对应的二进制是10000000
    绑cpu234对应的二进制是00011100
    将二进制换算成十六进制就获得掩码,比如10000000=80,00011100=1c
  8. 查看线程的cpu执行核心的掩码
    adb shell ‘taskset -p <线程号>’
  9. 尽情期待

cpu优化

安卓cpu调度优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值