朋友们,我想研究由于 *** 作系统导致的caching污染对应用程序性能的影响。
为此我写了一个小的定制基准程序。
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)
algorithm的第2步重复读取完整的数组。 希望这个数组会留在caching中,因此命中率为1。
在执行系统调用之后,我尝试再次读取caching。 但我认为 *** 作系统已经驱逐属于用户的一些caching行。
正如你所看到的,程序依靠系统调用来驱逐数据caching中的许多用户数据行。 我怎样才能做到这一点?
在linux中的工作者线程
微软会在未来的版本中淘汰Win32 API吗?
如何定义windows x86堆栈中的堆栈?
访问硬盘的未分配空间
光秃秃的骨头OS内核编程
我假定系统调用应该是文件相关或stream相关。
如何跟踪所有的后代进程清理?
粘滞便笺是如何工作的?
*** 作系统如何知道缺页的磁盘地址?
是否可以让我的应用程序显示一个时间,而不pipe系统时间是否被修改
*** 作系统如何处理Python脚本的Python和subprocess?
系统调用到系统调用对L1缓存的影响不尽相同。 一种方法是循环执行几个不同的系统调用,并测量每个系统调用的影响(包括例如与write()相关的I / O相关调用,您可以在其中调整缓冲区大小,从而影响缓存)。
您可能希望避免将系统调用实现为vsyscalls (例如gettimeofday() ),因为它们不需要切换到内核空间。 参见[ 1,2 ]。
这听起来像你想要隔离L1d上的效果,所以你可能需要小心的另一件事:在第二步中,在通过阵列循环后,L1i缓存将被填充。 系统调用完成后,L1d 和 L1i可能都被污染了,所以你也可能会看到i-cache未命中的性能影响。
为了获得更好的细粒度测量,您可以使用硬件性能计数器,具体取决于您的体系结构。
总结以上是内存溢出为你收集整理的使用系统调用caching污染全部内容,希望文章能够帮你解决使用系统调用caching污染所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)