繁体   English   中英

有没有办法在Linux系统上禁用CPU缓存(L1 / L2)?

[英]Is there a way to disable CPU cache (L1/L2) on a Linux system?

我正在分析Linux系统上的一些代码(在Intel Core i7 4500U上运行)以获得仅执行成本的时间。 该应用程序是libmpeg2的demo mpeg2dec。 我试图获得mpeg2执行时间的概率分布。 但是,我们希望在关闭缓存时看到原始执行成本。

有没有办法可以通过Linux命令或通过gcc标志禁用系统的cpu缓存? 甚至将cpu(L1 / L2)缓存大小设置为0KB? 甚至添加一些代码更改为禁用缓存? 当然,无需修改或重建内核。

看到这个2012年的帖子,有人发布了一个微小的内核模块源来通过asm禁用缓存。

http://www.linuxquestions.org/questions/linux-kernel-70/disabling-cpu-caches-936077/

如果确实需要禁用缓存,那就这样吧。

否则,要知道进程在用户或系统“周期”方面花费了多少时间,那么我建议使用getrusage()函数。

struct rusage usage;
getrusage(RUSAGE_SELF, &usage);

您可以在循环/测试之前/之后调用它并减去这些值以便很好地了解您的进程花了多少时间,即使许多其​​他进程在同一台机器上并行运行。 你得到的主要问题是你的流程是否开始交换。 在那种情况下,你的时间将会关闭。

double user_usage = usage.ru_utime.tv_sec + usage.ru_utime.tv_usec / 1000000.0;
double system_uage = usage.ru_stime.tv_sec + usage.ru_stime.tv_usec / 1000000.0;

根据我自己的经验,这非常精确。 为了提高精度,你可以在运行测试时使用root并给它一个负优先级(-1或-2就足够了。)然后在调用可能需要它的函数之前它不会被换出。

当然,你仍然可以获得缓存的效果...假设你没有处理大量数据,而代码一直在继续(与循环相反)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM