关于提升游戏能效的个人粗略小结
关于提高游戏流畅度并降低功耗——提升游戏能效的个人粗略小结  
 
一个应用由多个进程组成,单个进程内包含多个线程,每个线程包含[实际要进行的计算]即[负载]。一个线程被分配给一个或多个CPU核心,即一个线程被固定在一个或多个CPU核心上,从而解决应用运行时产生的负载。CPU调节频率以提供性能然后解决负载。  
 
大体来说,应用使用CPU经历了以下三个阶段: 给线程分配CPU核心→CPU调节频率以提供性能→CPU解决负载  
 
可针对三个阶段分别进行优化。 
(“阶段”——“优化措施名称”)  
[给线程分配CPU核心]阶段——线程调度:  
前置认知: 
应用运行时,线程调度器会不止一次对每个线程按预定的线程调度模式执行线程调度。  
CPU核心在解决被给予的线程内的负载时,即线程在CPU核心上运行时,会在这个核心的缓存区域产生要反复用到的缓存。如果线程被从这个核心迁移,则这些缓存将无法被使用——缓存失效,并且需要重新生成缓存导致负载增加。  
线程调度模式:  
亲和:把线程固定在某(几)个核心上。影响:减少线程迁移导致的缓存失效以减少负载从而降低功耗;当线程包含的负载超过其对应CPU核心能提供的性能,负载无法被及时解决,应用就会运行卡顿  
迁移:线程被同时固定在多个核心上时,为将负载均摊给各核心而将线程在各核心上来回转移。作用:充分运用CPU各核心性能,提高应用流畅度;来回迁移会导致缓存大量失效,造成更多负载,导致功耗上升  
另外,两种调度模式都有“软”“硬”之分  
硬亲和:将线程固定在某(几)个核心上运行,由用户或程序决定,线程调度器无法改变  
软亲和:每次线程调度,线程调度器会使线程继续在之前的核心上运行,除非有其它需要  
软迁移:先满足均衡负载后满足低功耗地,将线程在核心上来回迁移  
硬迁移:只为了均衡负载而将线程在核心上来回迁移(注:此模式在内核大版本不低于5.10 /5.15的联发科/骁龙设备上才存在)  
注意:在一个应用中,线程调度并非只有迁移或亲和,而是两者兼有  
小结: 通过线程调度可达到的优化方向:低功耗 更流畅 优化方法:如安装AsoulOpt或开启Scene核心分配 关于AsoulOpt的提示:配置文件中提到的“均衡负载”或“硬亲和”等说明,更像是一种偏向性,并非只有这一种线程调度模式。建议优先尝试能效可能最好的硬亲和,如果不满意再尝试别的模式,或更换其它版本并测试各个模式  
 
[CPU调节频率]阶段——CPU频率调度: 不甚了解。但提供性能会造成功耗。  
尽可让CPU只提供需要的性能,减少提供的性能中过剩的性能——减少空转,从而降低功耗。 
已知特殊调度:SceneFAS/FAS-RS/官方类FAS调度(ColorOS的GameOpt 小/红米FEAS 红魔新FAS)可以预测性能需求并据之提供性能,Scene调度自带的辅助调速器(不会与SceneFAS同时运行)也能抑制性能,比一般CPU频率调度更能减少空转  
建议:以“游戏体验优先,功耗次之”为指导思想,优先尝试安装省电调度,试遍每个性能模式,若最后仍不理想,可尝试安装更不省电的调度再尝试,或可尝试上面提到的特殊调度  
 
[CPU解决负载]阶段——复杂调度:  
知之甚少。  
已知:GPU驱动 系统属性修改优化 内核层面的优化  
建议:安装GPU驱动 安装第三方内核(如潘多拉内核)  
 
另外,还可在硬件层面几乎不损失性能地降低功耗——给CPU或GPU降压  
别的不知道的东西: 关于GPU调度,GPU频率变动不宜频繁,否则似乎会造成更多功耗...? 内存泄漏也会影响功耗,但是完全不知道  
 
CPU频率犹如[水库],线程调度宛如连通水库的[水渠与田地],复杂调度则是[田间农作物运用水源的机制],要兼顾流畅和低功耗,每一阶段的优化都必不可少  
例如:线程调度貌似常被人忽视,而缺乏线程调度而徒劳地提高CPU频率,或帧率不稳徒劳地提高CPU频率,就像不太合理的“力大飞砖”  
 
写完了一大堆粗略又不容易看懂的东西,直接讲讲可以根据它们干嘛吧:  
 
1.安装AsoulOpt或开启Scene核心分配,或别的线程优化办法  
关于AsoulOpt特别提醒:  
①需要修改配置。针对一个游戏,先尝试硬亲和,再尝试软亲和,最后尝试硬迁移  
②已知内核会影响AsoulOpt正常生效,所以当吃不上AsoulOpt时可试试更简单的Scene核心分配,或安装第三方内核或更新系统以更新内核尝试吃上AsoulOpt(“是否吃上”:是否生效)  
③在内核大版本不低于5.10 /5.15的联发科/骁龙设备,由于不支持硬迁移,AsoulOpt为避免异常,所以:  
配置项只有mode的版本:会把mode2视为mode0  
配置项有pertask的版本:会把pertask=1视为pertask=0(如果设备支持pertask=1,则当pertask=1时fallback值被忽略而无需配置)  
配置项只有fallback的版本:貌似还未加入硬迁移。fallback=0时偏硬亲和,fallback=1时偏软迁移  
 
2.使用喜欢的第三方调度。 
我自己喜欢:SceneLP FAS,日用极速也省电,FAS效果在我的设备帧率足够且功耗低于FAS-RS  
 
3.给GPU降压,安装GPU驱动(如果知道方法还可给CPU降压)等,安装潘多拉内核(不止内核优化,还有内存温控FEAS等方面) 
2025-01-18
浏览1192
登录后评论
评论
5