使用系统调用的缓存污染

问题描述 投票:4回答:2

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

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数据缓存中逐出许多用户数据行。我怎样才能做到这一点?

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

我想向朋友们研究由于操作系统造成的缓存污染对应用程序性能的影响。为此,我编写了一个小型自定义基准测试程序。 1. malloc一个大小为= ...

linux memory-management operating-system linux-kernel
2个回答
1
投票

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


0
投票

我正在阅读Hennessy和Patterson-线程级并行-操作系统和多程序工作负载。 L1高速缓存活动频繁的示例是一些基准代码的编译。可能,您可以具有一些可以编译的代码,并在步骤3中产生该编译以修改L1缓存。但是,是的,L1i也将进行修改。

© www.soinside.com 2019 - 2024. All rights reserved.