增加对ARM64和X86的硬件预取控制驱动的支持
这组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接口的例子。
这个模式有如下寄存器说明:
- L2硬件预取禁用
- L2相邻cache line预取禁用
- DCU硬件预取禁用
- 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_contolHardware_prefetcher_enableIp_prefetcher_enable#ls /sys/devices/system/cpu/cpu1/cache/index2/prefetch_contolAdjacent_cache_line_prefetcher_enableHardware_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_distStream_detect_prefetcher_enableStream_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
增加对ARM64和X86的硬件预取控制驱动的支持相关推荐
- LINUX按照物理地址预取,linux – 如何以编程方式禁用硬件预取?
我想以编程方式禁用硬件预取. 这是一个相关的片段: "DPL Prefetch and L2 Streaming Prefetch settings can also be changed ...
- 关于AMD64和arm64、x86和x86_64的介绍
今天水一篇,算法相关的停更一篇 X86 X86架构是微处理器自行的计算机语言指令集,指的是一个Intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令的集合.大家通常称呼它为32位指令集,是 ...
- ARM64、x86基础知识介绍和区别
一. 概述 CPU的两大架构:ARM和X86. ARM:ARM64是CPU构架的一种,通常用于手机.平板等CPU,目前笔记本电脑也会采用ARM64构架的CPU. x86:x86是CPU构架的一种,通常 ...
- 详解 ARM64 内核中对 52 位虚拟地址的支持
当 64 位硬件变得可用之后,处理更大地址空间(大于 232 字节)的需求变得显而易见.现如今一些公司已经提供 64TiB 或更大内存的服务器,x86_64 架构和 arm64 架构现在允许寻址的地址 ...
- 亚马逊增加了对Aurora的跨区域和加密复制支持
在一篇最近的博客文章上,亚马逊最近公布了对她的兼容MySQL的数据库引擎Aurora的更新.在这次更新中亚马逊发布了许多项新功能,包括跨区域镜像拷贝.加密数据库的跨区域数据复制.不同账号之间的加密快照 ...
- 博图买什么样配置的笔记本_装博途 软件 笔记本的硬件配置要求-工业支持中心-西门子中国...
DELL 移动式工作站 M3530 HP Zbook 15 Thinkpad T590.P1 i7标压CPU,固态硬盘最少512G,最少16G DDR4内存,最少2G独显 用15.6寸的,屏幕大一些, ...
- uefi安装android x86,Android-x86 8.1 RC1发布 支持从UEFI系统引导和安装
6月19日消息 在PC上运行Android系统的方式很多,但最可靠的还是Android-x86项目,现在其最新版已经发布,基于Android 8.1 Oreo. Android-x86是在PC安装An ...
- Matlab | Matlab中使用imaqtool工具箱获取摄像头数据及如何安装(摄像头)硬件适配器的图像采集支持包
========================================== 博主github:https://github.com/MichaelBeechan 博主CSDN:https:/ ...
- 开源硬件--树莓派 SD卡支持列表
为什么80%的码农都做不了架构师?>>> occur. OK Manufacturer Type Size (GB) Class Model Info Logged by ok ...
最新文章
- vs2015编译tensorflow v1.5
- easyui 删除指定行
- 逆波兰表达式中缀表达式转换为后缀表达式
- 官方版.NET SDK连线更新(2011/01/19)
- 数仓如何限制临时数据文件下盘量
- Python文件读取(1.1)
- arcgis for javascript ArcGISDynamicMapServiceLayer 过滤图层点
- hdu 1524 A Chess Game
- Qt窗口部件——QWidget
- TMDB电影数据分析
- 【渝粤题库】陕西师范大学292141政府规制经济学作业(专升本)
- 用python写网络爬虫-下载百思不得姐视频
- Excel如何筛选数据重复项?
- ffiddler抓取手机(app)https包
- 触控板失灵的解决方法(synaptics驱动)
- 博弈论与SG函数(Nim游戏)
- robocup3d 发布比赛版本
- 解决电脑无法进入休眠/睡眠状态,而仅关闭屏幕的问题
- java车机_真·车载版Android来了:车机实现全部功能
- 【Dubbo实战】基础学习篇(一)
热门文章
- node api框架_使用Web API,Node和Nexmo从浏览器发送SMS
- CentOS 7.2 配置Apache服务(httpd)--上篇
- 你喜欢试探别人的底线吗?
- 手机版云盘怎么打开连接服务器,手把手教你简易NAS构建,手机/平板/智能电视随意调取,家庭存储云共享,有了自己的网络云盘后再也不用担心容量不够了!...
- 如何在Mac电脑中使用键盘移动操作鼠标焦点?如何在Mac中打开辅助键盘?
- 自学爬虫的初体验(一)
- python编写的程序可以在任何平台中执行-在Windows平台上编写的Python程序无法在Unix平台运行。...
- 【概率论】Laplace 分布 / Laplace Distribution
- seleniumbase学习总结6 - 落地常见问题
- 人生「价值」的三个关键词|《价值》