如何禁用处理器的L1和L2缓存?


10

是否可以在Ubuntu 14.04上禁用L1和/或L2缓存(最好使用Python之类的高级语言)?如果是这样,怎么办?

另外,禁用缓存是否会在不同体系结构之间显着不同?如果是这样,我对ARM Cortex-A15更感兴趣。

编辑

在研究如何禁用缓存时,我确实从kernel.org文档中找到了/ proc / sys / vm /中的“ drop_caches”文件。

“这样做会导致内核丢弃干净的缓存,以及可回收的平板对象(如dentries和inode)。一旦删除,它们的内存就会释放。”

...

“此文件不是控制各种内核高速缓存(inodes,dentries,页面高速缓存等)增长的方式。当系统上其他地方需要内存时,内核会自动回收这些对象。”

这似乎不像我正在寻找的那样,因为这不仅不似乎会禁用缓存,而且我认为虚拟内存位于操作系统内,而不位于硬件上。我的目标是禁用缓存,因此必须在其他地方(例如RAM内)寻找所需的内存。

编辑

澄清一下,我了解禁用缓存会对系统造成什么影响。但是,这是在太空应用中提高安全性关键应用可靠性的一种常用技术。以下是一些记录此现象的资源:

通过高速缓存减少嵌入式软件辐射引起的故障

在空间辐射环境中对微处理器进行地面辐射测试的指南

甚至有关于该主题的书籍:

电子中的电离辐射效应:从记忆到成像仪


如果您尝试执行诸如禁用缓存之类的操作,那么您正在执行嵌入式编程,如果您正在执行嵌入式编程,则可能应该使用嵌入式语言(C),而我不会使用OS。顺便说一句,禁用缓存将极大地降低系统速度。
山姆

我还有其他方法可以在不使用缓存的情况下加快系统速度,但是直到禁用缓存并运行基准测试,我才能说出这些方法的有效性。我非常了解C或汇编语言是嵌入式应用程序的首选。但是,在Python中发生了一些更有意义的高级事情。如果Python支持执行某些操作,例如为我的特定应用程序禁用缓存,那将更加方便。至于剥离操作系统,不幸的是,裸机不是我的选择。
AustinTronics

Answers:


2

您不能直接在Python中执行此操作,因为您需要一个内核模块来执行此操作(以及加载该模块的root权限)。

请参阅http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21,以了解如何使L1缓存无效(无效,而不是禁用)。

不同的CPU体系结构(例如x86与ARM)需要不同的汇编代码(CPU指令)来禁用缓存。我不确定Linux内核是否有可能禁用L1 / L2 / L3 / L4高速缓存,如果有的话,我相信它会在内部短暂使用,因为CPU速度很慢没有这些缓存。

请参阅是否可以在Linux系统上禁用CPU缓存(L1 / L2)?有关如何在x86 / x64系统上禁用缓存的链接(您需要更改register cr0)。对于ARM,请检查“ 禁用缓存”行为

我不确定您是否完全了解CPU缓存的功能。您能否详细说明为什么要削弱系统性能?


该应用程序是用于航空航天的高性能嵌入式计算。对于我的应用程序,正常运行时间比性能更重要。我知道这听起来很奇怪,但是这种现象已有充分的记录。
AustinTronics

如何在没有CPU缓存的情况下拥有“高性能”应用程序?缓存与正常运行时间有什么关系?
tehnicaorg '16

2
我是研发部门的软件开发人员,我们做了很多疯狂的事情。很抱歉,如果我在整个回复中都遗漏了信息或含糊其辞,但由于涉及的是专有信息,我无法如愿以偿。如果您对高速缓存与航空航天应用中的正常运行时间有什么关系感兴趣,请参阅公开的JPL论文。这也是一篇日记纸
AustinTronics

1
具有讽刺意味的是,今天禁用L1缓存很有意义!
环Ø

4

您可以用一些ASM代码完成此操作,请参阅《英特尔系统编程指南》第11章。

11.5.3防止缓存

要在启用L1,L2和L3缓存并收到缓存填充后禁用它们,请执行以下步骤:1.进入无填充缓存模式。(将控制寄存器CR0中的CD标志设置为1,将NW标志设置为0。2.使用WBINVD指令刷新所有缓存。3.禁用MTRR,并将默认内存类型设置为未缓存,或者将所有MTRR设置为未缓存的内存类型。 (请参见第11.11.2.1节“ IA32_MTRR_DEF_TYPE MSR”中有关TYPE字段和E标志的讨论的讨论)。

我不知道实现此功能的Python模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.