4

朋友们 我想研究一下操作系统造成的缓存污染对应用程序性能的影响。
为此,我编写了一个小型自定义基准程序。

1. malloc an array of size = l1 data cache-size
2. repeat ... sweep this array from start to end (hit-rate = 1.0)
3. *** perform a system call that thrashes l1 data cache ***
4. sweep the array once again (expected hit-rate = ~0.7 ---> 1.0) 

算法的第 2 步重复读取完整的数组。希望该数组将保留在缓存中,从而导致命中率为 1。

执行系统调用后,我再次尝试读取缓存。但我假设操作系统已经驱逐了一些属于用户的缓存行。

如您所见,该程序依赖系统调用从 l1 数据缓存中逐出许多用户数据行。我怎样才能做到这一点?

我假设系统调用应该与文件相关或与流相关。

4

2 回答 2

1

对 L1 缓存的影响因系统调用而异。一种方法是遍历几个不同的系统调用并测量每个调用的影响(包括,例如与 I/O 相关的调用,如write(),您可以在其中改变缓冲区的大小,从而可能对缓存产生影响)。

您可能希望避免系统调用实现为vsyscall(例如gettimeofday()),因为它们不需要切换到内核空间。见 [ 1 , 2 ]。

听起来您想隔离对 L1d 的影响,因此您可能需要注意另一件事:在您的第 2 步中,在您遍历阵列后,L1i 缓存将被填充。在您的系统调用完成后,很可能 L1dL1i 都已被污染,因此您可能还会看到 i-cache 未命中的性能影响。

为了获得更好的细粒度测量,您可能可以使用硬件性能计数器,具体取决于您的体系结构。

于 2012-04-23T23:17:08.677 回答
0

我正在阅读 Hennessy 和 Patterson - 线程级并行性 - 操作系统和多道程序工作负载。显示 L1-cache 活动高的示例是一些基准代码的编译。可能,您可以拥有一些可以编译的代码,然后在步骤 3 中生成该编译以修改 L1 缓存。但是,是的,L1i 也会被修改。

于 2019-10-08T09:37:22.223 回答