作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一个使用 Python 和 PyGTK 的 Linux 软件项目的开发人员。我们正在编写的程序依赖于许多第三方包,这些包可通过所有 mayor 发行版存储库获得。其中之一是 python 绑定(b
我是一名优秀的程序员,十分优秀!