首页 > 其他分享 >Devfreq Bus Dcvs

Devfreq Bus Dcvs

时间:2024-09-09 18:25:36浏览次数:1  
标签:Dcvs Bus 带宽 bw Devfreq 频率 DDR devfreq CPU

一、引言

计算机的世界里,CPU任务分为CPU bound和IO bound。而实际场景下往往是两者混合型任务。针对性能的优化,普遍关注点都在CPU上(不论是CPU的频点和CPU的选核), 往往忽略对IO bound的任务的优化。而DDR作为SOC芯片代码运行空间和数据缓存空间,在不同应用状态下,SOC对DDR访问的带宽需求不一样。譬如听音乐时访问带宽需求较小,此时DDR工作在较低的频率,而通过网络信号观看高清视频时,则对带宽需求较大。DDR则需要提高工作频率。由此可见,SOC需要根据系统的运行情况动态调整DDR的总线工作频,以提高CPU工作效率,并降低系统在运行状态的功耗,达到性能功耗的平衡。

二、BUS DCVS

什么是BUS DCVS?

BUS DCVS,其 Bus Dynamic Clock and Voltage Scaling 的缩写,它是一种总线频率选择的算法,用于在动态的工作负载间选择最佳的频率点,以满足性能和功耗的平衡。

先来看看现代SOC架构,对于DDR这个slave而言,其对应的master会很多,例如 CPU,GPU,NPU,DISPLAY,CAMERA 等等。每隔一段时间各个master就会给你自己对带宽的需求,最终由RPM汇总仲裁后设定最终的DDR频率。

本文主要介绍主流平台CPU的BUS DCVS策略

以上图所示架构,BUS DCVS主要是根据L2->L3,L3->system cache,System 和cache->DDR 等路径上对带宽的需求,选择最合适的频点以达到功耗和性能的平衡。

Bus DCVS 提供了2种调频策略

1. bw_hwmon (bandwidth hardwaremonitor)

基于CPU到cache 和 cache 到 DDR 的流量带宽调整cache 和 DDR的频率

2. memlat(memory latency)

基于 cache和 DDR 的 CPU 相关统计数据来调整相应频率。

三、BUS DCVS 软件架构

BUS DCVS分为3个大部分

  1. User space (用户空间)

表现形式为sysfs 节点。路径为/sys/class/devfreq/socddr-bw和/sys/class/devfreq/socddr-lat(分别对应2种不同的策略方式)。当然还有devfreq的标准节点,min_freq/max_freq/cur_freq。用户空间的软件可以通过访问对应的文件获取当前master 对 DDR的带宽需求。如果具有某些权限,设置可以通过设置相应的参数来控制当前master 对 DDR 带宽需求的策略

  1. Kernel space(内核空间)

CPU 的BUS DCVS与其他的非CPUFreq调频的外设一样,是基于devfreq 框架的一套机制。其核心为devfreq framework,设备的抽象为bimc-bwmon 和arm-memlat-mon,策略的抽象为governor bw_hwmon 和 memlat。

  1. RPM OS

其主要作用是手机各个master voted的ddr 带宽,最终设定DDR的频率到LPDDR的硬件上。

四、bw_hwmon策略

1. 源码路径

a) drivers/devfreq/devfreq_devbw.c

b) drivers/devfreq/bimc-bwmon.c

c) driver/devfreq/governor_bw_hwmon.c

d) arch/arm64/boot/dts/vendor/qcom/

2. bw_hwmon软件框图

bw_hwmon策略涉及到的模块大致分为 devbw,bimc-bwmon,和devfreq framework。

a)  bimc-bwmon:其代表代表 BIMC带宽监视器的设备,可用于测量来自 BIMC 主端口的读/写流量的带宽。

b) devbw:master对ddr slave的带宽需求

c) devfreq framework:非 CPU 设备的通用动态电压和频率缩放 (DVFS) 框架bw_hwmon调频策略的触发时机

d) 根据时间片轮询查看单位时间窗口的平均带宽

e) 根据配置带宽上升下降的阈值作为触发点,一旦在单位时间内上升或者下降过快,则触发中断通知更新频率

基于上述的触发时机,bimc-bwmon收到硬件监测到的带宽信息,根据软件的计算规则,预估需要调整的带宽,将其下发至devbw匹配OPP表,将需要的频率通过RPM驱动发送到RPM core,根据多个master对带宽的需求最终决策DDR需求的频率。

3. 初始化流程

a) bimc-bwmon驱动通过设备名”qcom,bimc-bwmon[0-4]”匹配到对应的devicetree中的硬件信息,获取中断号,获取控制器的版本,针对不同功能的控制器进行初始化。然后调用register_bw_hwmon初始化devfreq_governor类,并赋值其函数指针get_target_freq和event_handler,最终通过devfreq_add_governor注册到devfreq framework。

b) devbw驱动通过如下设备名”qcom,devbw*”匹配到对应的devicetree中的硬件信息,初始化devbw 设备的信息dev_data类,并将其设置为driver的私有数据。设置devfreq framework结构的devfreq_dev_profile中的target 和 get_dev_status函数及polling_ms的初始值。

同时设置设备的OPP表(OPP表的代码以DTS的形式表现)。

最终通过devfreq_add_device将devbw 设备添加到devfreq framework的devfreq list链表中。此时会与devfreq governor建立两者的联系。

c) 当event_handler收到GOV_START信号以后,start_monitor 会注册中断函数,此中断就对应上升下降阈值的触发时机。如果有设置polling_ms则会queue_delayed_work 更新频率。

4. 频率调整流程

如上图所示为devfreq framework的通用的更新外设频率的流程

updatedevfreq 为核心函数,其流程如下

1.通过get_target_freq重新评估需要的频率

2.通过get_cur_freq获取当前的频率,如果实现此接口,则使用上次的频率作为当前频率

3.最后通过target 函数指针调用设置硬件的clock

其中get_target_freq 函数指针对应的函数就是bus dcvs的策略算法实现,此处为devfreq_bw_hwmon_get_freq,其本质就是get_bw_and_set_irq函数。

5. get_bw_and_set_irq

此策略中的变量参数比较多,但是本质上最基本的计算方式如下图所示

AB:平均需求的带宽

IB:瞬时需求的带宽

a) guard_band_mbps:基于性能的目的引入guard_band,在投票之前为measured_mbps += guard_band_mbps,为了解决带宽更新不及时导致的问题

b) decay_rate:此参数的范围为0-100,如果设置为100则不考虑历史的影响。且只有在当前测量值比上一次需求带宽小的情况才生效,用于避免频率更新后的乒乓性。

c) bw_step:类似取整的参数,用于降低更新频率的频繁性。

d) io_percent:用于计算IB,CPU的执行过程是一部分时间在访存,一部分时间在执行。相当于设定访存所占时间的百分比。

五、memlat策略

1. 源码路径

a) drivers/devfreq/devfreq_devbw.c

b) drivers/devfreq/arm-memlat-mon.c

c) driver/devfreq/governor_memlat.c

d) arch/arm64/boot/dts/vendor/qcom/

2. memlat软件架构

Gover normemlat 是对 bw_hwmon机制的补充,主要对应memory latency sensitivity的任务

memlat策略涉及到的模块大致分为 devbw,memlat-mon,和devfreq framework。

  1. memlat-mon:其代表的是使用PMU来度量访存延时的设备。

  2. devbw:master对ddr slave的带宽需求。

  3. devfreqframework:非 CPU 设备的通用动态电压和频率缩放 (DVFS) 框架。

3. 初始化流程

a)   设备dts信息

qcom,target-dev:此设备对应的master。

qcom,cachemiss-ev:测量的缓存未命中事件。

qcom,core-dev-table:CPU核心频率到所需带宽投票的映射表。

operating-points-v2:从master到slave的带宽OPP表。

b) arm-memlat-mon驱动通过设备名”qcom,arm-memlat*”匹配到对应的devicetree中的硬件信息,获取miss_ev_id,并对相关结构体进行初始化。然后调用register_memlat初始化devfreq_governor类,并赋值其函数指针get_target_freq和event_handler,最终通过devfreq_add_governor注册到devfreq framework。

c) 同bw_hwmon策略一样,event_handle 收到GOV_START信号以后,调用start_hwmon对相关的events进行初始化,同时启动delayed work更新频率。

4. 频率调整流程

此策略的因子比较简单。在每次的时间周期内,统计PM Uevent获取的instructions count 和 L2miss rate,只有当inst / miss 小于ratioceil的时候才会触发更新频率。最终将需求的带宽频率调用devfreq_bw的set_bw函数设置到硬件。

六、总结

随着各大厂商对芯片性能功耗的极致优化,对于一些cpu stall的场景可以通过BUS DCVS更精细化的优化进行改善。最后祝愿各位在技术的道路上越走越远。

标签:Dcvs,Bus,带宽,bw,Devfreq,频率,DDR,devfreq,CPU
From: https://www.cnblogs.com/linhaostudy/p/18405065

相关文章

  • Dubbo URLBUS 模型
    Solomon_肖哥弹架构跟大家“弹弹”分佈式微服务Dubbo中的URLBUS领域模型欢迎点赞,点赞,点赞。关注本人的公众号Solomon肖哥弹架构获取更多的惊喜URL是Dubbo种一个重要的领域模型,了解它可以更加轻松的理解Dubbo的设计理念定义在不谈及dubbo时,我们大多数人......
  • 三格电子——Profibus-DP 转光纤点对点式光端机
    型号:MS-F155-P(Y)一、功能概述MS-F155-P(Y)是将Profibus-DP总线转为光纤的模块,可以延长Profibus通信距离,最远可以达到20公里到40公里。采用光信号传输,模块有很好的抗电磁干扰能力。专用的光纤通信芯片设计电路,使数据通信稳定可靠,可用于比较......
  • COMP41760 Business Analytics Project
    Business Analytics Project ReportSummative Assignment BriefVersionApril 2024CourseworkAdministrativeDetailsModule Name and Code:COMP41760 BusinessAnalytics ProjectAssignmentName:Project ReportDeadlineforsubmission:......
  • UNIT BUSA3015 Business Forecasting
    UNITBUSA3015BusinessForecasting,Session2,2024AssessmentTask       Report1Duedate              11:59pmFriday13thSeptemberWeight(%)            20%Taskdescription       ......
  • Modbus协议总结
    ModbusTCP通信概述ModbusTCP是一种基于TCP/IP协议的Modbus通信协议,用于在客户机和服务器之间进行数据通信。它常用于工业自动化控制、电力监控与管理、温湿度监测等领域。ModbusTCP协议使用标准的TCP/IP协议栈,通过以太网进行通信,并支持多个设备同时访问同一个ModbusTCP服务......
  • SAP Business One 与无锡哲讯:携手共创企业数字化未来
     在当今快速发展的商业世界中,企业的数字化转型已成为提升竞争力的关键。在众多的数字化解决方案中,SAPBusinessOne以其强大的功能和灵活性脱颖而出。与此同时,无锡哲讯智能科技有限公司作为专业的SAP 系统服务提供商,为企业带来了全新的发展机遇。 SAPBusinessOne是一款专......
  • 找不到libusd_ms.dll无法继续执行代码:有效方法帮助你解决libusd_ms.dll缺失问题
    在使用计算机的过程中,遇到“找不到libusd_ms.dll无法继续执行代码”的错误提示时,往往会让用户感到困扰。这类问题通常表明某个应用程序或游戏依赖的动态链接库(DLL)文件缺失或损坏,导致程序无法正常启动或运行。本文将深入探讨这一问题的原因,并提供详细的解决方法。libusd_ms.dl......
  • BUSANA 7003 – Business Analytics Project
    BUSANA7003–BusinessAnalyticsProject–Semester2,2024FinalProjectBackground.YouarestartinganewjobasaBusinessAnalystatAQRAssetManagement,aglobalinvestmentmanagementfirmfocusedonquantitativeinvestmentstrategies.Yourfirst......
  • FT232使用libusb控制GPIO
    FT232使用官方驱动控制GPIO很简单打开FT_OpenEx,FT_SetBitMode(FT_BITMODE_ASYNC_BITBANG)写FT_Write读FT_Read使用libusb方式打开// libusb-win32(v1.2.6.0)BOOL CHubGpio::InitLibusb(){ structusb_interface_descriptor*setting; structusb_bus *bus;......
  • BUSA8030 (BUSA7030) Mgt of Data, Analytics and Change
    BUSA8030(BUSA7030)MgtofData,AnalyticsandChangeSession2,2024AssessmentTask   CaseStudy–IndividualAssignmentDuedate      6thofSeptember2024,23:55Weight(%)       30%Taskdescription       Individ......