增加对ARM64和X86的硬件预取控制驱动的支持

该博客介绍了为ARM64和X86平台添加的sysfs接口,用于用户态控制CPU硬件预取行为,以进行性能调优。此驱动创建了通用和架构特定的部分,允许在每个CPU的cache/index目录下通过属性文件调整预取控制。文中还给出了X86平台上的使用示例,并提到了存在的问题,如在某些情况下'lscpu'命令可能失败。
摘要由CSDN通过智能技术生成

         这组PATCH增加了sysfs接口来控制CPU硬件预取行为对ARM64和X86进行用户态的性能调优。

1 背景

        A64FX和一些intel处理器有依赖于实现的寄存器来控制CPU硬件预取行为。A64FX有IMP_PF_STREAM_DETECT_CTRL_EL0,intel处理器有MSR_MISC_FEATURE_CONTROL。这些寄存器不能从用户态访问。

        使用这个的优点为改善性能。作为一个性能优化的例子,运行Stream benchmark在A64FX被描述。

        对于MSR 0x1a4,通过MSR驱动也可以从用户态修改该值。但是不建议使用MSR驱动,因此它需要一个合适的内核接口。

        因为这些原因,我们需要一个新的合适内核接口来控制IMP_PF_STREAM_DETECT_CTRL_EL0和MSR 0x1a4。

2 总体设计

        驱动的源码分为通用部分(driver/base/pfctl.c)和架构部分(arch/xxx/pfctl.c)。通用部分描述为不依赖于架构的处理,比如创建sysfs。架构部分被描述为依赖于架构的处理。它必须至少包含支持哪种硬件预取单元以及如何对寄存器进行读和写。这些信息通过通用部分的注册函数被设置。

        如果CPU支持硬件预取控制行为,驱动在每个CPU的cache/index目录下创建”prefetch_control”目录和一些属性文件。每个属性文件与父index目录的cache级别相关。

        Sysfs接口的细节描述在文件Documentation/ABI/testing/sysfs-devices-system-cpu。

        该驱动需要cache sysfs目录和cache level/type信息。在ARM处理器中,这些信息可以从寄存器中获取,而不需要从ACPI PPTT获取。

        如果机器不支持ACPI PPTT和Kconfig,且支持硬件预取控制,我们可以增加处理来使用寄存器来创建cache/index目录。

        这行为会造成一个问题,将在后面描述。

3 例子

        本部分提供了一个在X86 INTEL_FAM6_BROADWELL_X上使用sysfs接口的例子。

        这个模式有如下寄存器说明:

  1. L2硬件预取禁用
  2. L2相邻cache line预取禁用
  3. DCU硬件预取禁用
  4. DCU IP预取禁用

        [63:4] 保留

        在这个例子中,index0(L1D cache)与bit[2,3]相关,index2(L2 cache)与bit[0,1]相关。在CPU1的index0和index2的属性文件如下所示:

#ls /sys/devices/system/cpu/cpu1/cache/index0/prefetch_contol

Hardware_prefetcher_enable

Ip_prefetcher_enable

#ls /sys/devices/system/cpu/cpu1/cache/index2/prefetch_contol

Adjacent_cache_line_prefetcher_enable

Hardware_prefetcher_enable

        如果用户想要禁用CPU1的L2相邻cache line,操作如下:

#echo 0 > /sys/devices/system/cpu/cpu1/cache/index2/prefetch_contol/Adjacent_cache_line_prefetcher_enable

        在其他例子中,A64FX的index0如下所示:

#ls /sys/devices/system/cpu/cpu1/cache/index0/prefetch_control/

Stream_detect_prefetcher_dist

Stream_detect_prefetcher_enable

Stream_detect_prefetcher_strong

4 已知的问题

        “lscpu”命令会以-ENOENT结束因为目录cache/index存在但shared_cpu_map文件不存在。这是因为patch 5,它创建了cache/index目录包含level和type,但没有ACPI PPTT。

LKML: Kohei Tarumizu: [PATCH v2 0/8] Add hardware prefetch control driver for arm64 and x86

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值