Linux 6.9 的 x86 高速缓存更新提供了改进的内存带宽节流启发式,如英特尔资源导向技术 (RDT) 和 AMD EPYC CPU 使用的 resctrl 代码。
改进的内存带宽节流启发式旨在更好地处理负载水平不太规律的工作负载,而在现有的内核版本中,这些负载最终会受到不必要的惩罚。
长期担任英特尔 Linux 工程师的托尼-勒克(Tony Luck)带头进行了这项改进,并在补丁中作了解释:
当一个组使用的带宽超过用户在方案文件中设定的目标值时,MBA_mbps 反馈环会增加节流,而当低于目标值时,则会减少节流。
为避免每次轮询时节流的上下波动,每当节流发生变化时,都会设置一个标记 “delta_comp”,表示带宽的实际变化应在下一次轮询时记录在 “delta_bw “中。只有当当前带宽加上 delta_bw 低于用户目标值时,才会降低节流。
如果工作负载有稳定的带宽需求,这种算法就能很好地发挥作用。但如果工作负载在节流水平发生变化时进入不同阶段,就会出现严重问题。例如,如果工作负载在节流级别提高后基本上处于空闲状态,那么计算出的 delta_bw 值或多或少会与旧带宽级别相同。如果工作负载恢复,Linux 可能永远不会减少节流,因为当前带宽 plu delta_bw 已超过用户设定的目标值。
实施一种更简单的启发式方法,假设在最坏的情况下,当前测量的带宽受当前节流水平的控制。计算如果将节流放宽到下一个更高水平,带宽可能会增加多少。如果仍低于用户目标值,则可以减少节流。
这就修复了 2018 年以来一直存在的内存带宽节流启发式。
该修复已于上周作为 Linux 6.9 内核 x86/cache 拉取请求的一部分进行了合并。
转自 Improved Memory Bandwidth Throttling Behavior For Linux 6.9 – Phoronix