安卓CPU调速器和IO调度器详解

Android的CPU的频率并不是一成不变的,会因应程式所需而调整频率,通常会视乎CPU Loading% 而升/降频,在特定时间再检查是否升/降。

I/O即input/output的缩写关于数据的读写操作不同进程请求数据的优先顺序等等。

 

在性能设置或者第三方内核调节器里,你会看到处理器和I/O调度器的设置选项。处理器的配置通常有【ondemand】【interactive】【conservative】等选项,I/O调度器的配置则有【noop】【deadline】【cfq】等选项。下面就给大家介绍一下个选项的作用和优缺点。

 

处理器配置选项————————————————————————

 

【ondemand】按需模式:

按需调节cpu频率,不操作手机的时候控制在最低频率,滑屏或进入应用后会迅速提升至最高频率,当空闲时迅速降低频率,性能较稳定,但因频率变化幅度过大,省电方面只有一般的水平。是一种在电池和性能之间趋向平衡的默认模式,但是对于智能手机来说,ondemand在性能表现方面略有欠缺。

优点: 基本上实现了平衡,不错的性能兼有不错的续航

缺点: 不断地调整CPU频率消耗了一定的电力,导致这只能是一个“理想中”完美的调速器,频率升高时也偏敏感了一些(例如需要500,可能会给你升到650)

 

【interactive】交互模式:

和ondemand相似,规则是“快升慢降”,注重响应速度、性能,当有高需求时迅速跳到高频率,当低需求时逐渐降低频率,相比ondemand费电,与Conservative相对,快速提升频率,缓慢降低频率。

优点:  比Ondemand稍强的性能,较快的响应速度

缺点:  在不需要时仍然维持较高的频率,比Ondemand耗电

 

【conservative】保守模式:

和ondemand相似,规则是“慢升快降”,注重省电,当有高需求时逐渐提高频率,当低需求迅速跳至低频率。与Interactive相对,保守的调解方案,缓慢地提升频率,迅速地下降频率。

优点:比Ondemand稍省电,在真的需要之前不会提高频率

缺点:缓慢地提升频率意味着在打开一些较大的APP或尝试唤醒待机中的机器会较慢

 

【powersave】省电模式:

按设定最低频率运行,日常没有使用价值,除非配合setcpu情景模式,关屏睡眠时使用此调节模式,省电但系统响应速度慢,强制CPU一直运行在最低频率。

优点: 最小的功耗,最长的续航时间,最好的发热控制

缺点: 糟糕的性能,运行不流畅,有延迟、卡顿

 

【userspace】用户模式:

用户控制模式,这不是一个预制调速方案的调速器,它允许用户通过非操控内核的方法调节CPU,但是事实在出现”set cpu”这类软件之后就等于废物了。

任何情况下都会控制CPU运行在配置的频率范围内,配置中的用户自己添加的省电设置。在此情景模式下,降低CPU最大运行频率可以延长电池待机时间,但同时也会降低机器的唤醒速度,建议最好不使用该选项。

优缺点不予以评价。

 

【performance】高性能模式:

高性能模式,按你设定范围的最高频率运行,即使系统负载非常低cpu的频率也为最高。性能很好,因为CPU本身不需要资源去调整频率,但是电量消耗较快,温度也高一些,强制CPU一直运行在最高频率。

优点: 良好的性能、速度

缺点: 大功耗,糟糕的电池续航时间,导致手机发热较严重,长期使用会对硬件造成一定的物理损坏

 

 

I/O调度器配置选项————————————————————————

 

【noop】 这个调度模式会把所有的数据请求直接合并到一个简单的队列里。不适合有机械结构的存储器因为没有优化顺序会增加额外的寻道时间。属于最简单的一个调度模式无视io操作优先级和复杂性执行完一个再执行一个如果读写操作繁多的话就会造成效率降低。

 

【deadline】 顾名思义用过期时间来排序io操作顺序保证先出现的io请求有最短的延迟时间相对于写操作给读操作更优先的级别。是比较好的一个调度模式。

 

【cfq】完全公平队列是anticipatory模式的替代品没有过多的做预测性调度而是根据给定的进程io优先级直接来分配操作的顺序。这个模式在linux上表现良好但也许并不是最适合android的io调度模式太强调均衡而降低了连续读写数据的性能。

 

[bfq ]

与cfq类似,但是加入了一个类似于预测帧的技术,减少了I/O的访问次数和数据吞吐量,更加节约MMC寿命与电池续航。bfq指的是budgetfair queuing,从名字上就能看出来这个策略对于各i/o请求是公平的(fair),不会有上面说的noop的第一种问题。这里指的公平就是尽量使各进程的i/o请求都能得到尽快响应不会长期搁置,但因为系统资源有限,所以只能保证尽快响应但不保证可以尽快完成。不难看出bfq适合多进程同时发出多i/o请求的状况,因为它不会像noop那样无视后续的i/o请求。直观的看就是手机程序开的很多时系统还能对各进程有不错的响应速度也就是有最好的随机存取,延时低。

 

【sio 】

虽然基于deadline但是它和noop一样不会对io操作进行排序所以有着noop那样快速的存取速度但并没有过多优化io操作。如果不喜欢noop完全不参与调度也可以选择这个。

 

【 anticipatory 】其实这个有点类似于pc硬盘的NCQ功能执行有预测性的调度看起来似乎可以提高效率不过因为它的预测机制会在进程将要结束一个读写操作时时开始准备下一个的预处理所以会打乱系统正常的连续io调度降低随机存取效率。用的人很少不推荐。

 

【vr 】

具有和deadline相似的操作排序机制有着最高的峰值读写速度但是性能比较不稳定也就是说可能跑出最高的分数但是也会出现最低值

 

【fiops】

fair-iops,这个调度器虽然和cfq一样追求平均的优先级,但是是根据闪存设备重新设计的一个调节器,各方面表现良好。

 

【row】

顾名思义ROW=Read over write。这个调度器的解释可以总结为:最大限制减少IO响应时间,并且重排执行操作,直接进行读写操作,给予IO最高优先值。在移动设备中,它将不会在桌面上有尽可能多的并行线程。通常它是一个单一的线程或最多2个同时工作的线程读写。有利于阅读的请求通过写入读取的延迟大大降低。比deadline好用,但是如果线程过多有可能会带来瞬间卡顿。

教程

Android设备上的传感器模拟工具:SensorSimulator

2017-3-30 8:07:43

教程

Apache使用.htaccess防盗链

2017-9-12 6:41:11

13 条回复 A文章作者 M管理员
  1. 采用kernel adutior等调度调试软件修改cpu调度模式前,请一定要关闭温度控制,关闭全部的温控模式,如果有热插拔也关闭。
    温控文件与更改后的cpu调度程序可能会有冲突。

    • 是的

    • 浅夏

      我现在已经转投sence2.0.0了,比kernel更好用,而且针对骁龙625和骁龙630,平行八核或者四大核+四小核,有更好的管理(用户的后台应用占用cpu,系统的后台占用cpu~之类)

    • Kernel Adiutor每次启动才开始设置,可以还原,手机不容易变砖导致无法开机。

    • 浅夏

      sence虽然功能强大,但如果设置错误,需要重刷底包
      的确,我之前nexus7 二代就是因为非原生系统,点选了低内存优化,挂了

    • 是的,如果没有备用机,还是保险要紧

  2. 我的情况是,moto x4 机子的Pixel Experience系统运营人停止更新了,手上的系统版本也就无从更新。而这一版本在六七月出现多次机体发热,kernel怎么调都搞不定。反倒是几天前接触了sence,将用户后台应用限制在一个小核上,而小核的最大频率被我限制到1000mhz左右,大核维持2200mhz,这样对性能没啥影响,而发热问题完美解决

    • 这样设置,玩游戏不得卡死

    • 浅夏

      微博微信、知乎淘宝、值得买网银。支付宝我黑域掉了,如果按这样设置,打开支付宝时间在3秒内,而如果是机子默认的cpu调度,要5秒。游戏就没试过了,但我做了一个优化,四大核中一个给系统后台,四小核中一个给用户后台,其余六个给前台应用,所以对于机主当下操作的执行效率很高。

    • 切断唤醒是关键,国内一些流氓软件喜欢在后台互相唤醒,是导致机器卡顿的罪魁祸首。

  3. 19年12月更新了PE的10.0rom,系统发热比9.0要好多了,插卡续航可以做到1小时掉电1%。近期浏览知乎“红巨星”的文章,以及bilibili“xian333c”的视频,大概也明白了高通从大小核(功耗控制不好)-平行八核(合理控制功耗)-大中小核(通过DynamIQ合理控制功耗)的发展历程,对于手上这个骁龙630的平行八核:LITTLT 4*A53+little 4*A53,而且观察日常使用LITTLE的占用率更高,直接就把little的最高两档频率给屏蔽了,反正630发热一般,推断不至于出现LITTLE降频的情况,而little本身就是日常低负载时候发力,那就低频好了

    • 可以使用内核调教APP进行调节

    • 目前更新了MIUI12内测版,我感觉还可以,新功能很多。

搜索