gpt4 book ai didi

linux - 使用系统调用造成缓存污染

转载 作者:行者123 更新时间:2023-12-01 22:38:43 26 4
gpt4 key购买 nike

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

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数据缓存中逐出许多用户数据行。我怎样才能实现这个目标?

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

最佳答案

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

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

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

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

关于linux - 使用系统调用造成缓存污染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com