2

我想测试一个具有各种内存总线使用级别的程序。例如,我想知道当其他进程使用 50% 的内存总线时,我的程序是否按预期工作。我将如何模拟这种干扰?

我的尝试是运行一个具有多个线程的进程,每个线程从一大块内存中随机读取。这似乎对我的程序没有太大影响。我的程序有很多内存操作,所以我预计会有明显的干扰。我想使总线饱和但不使用太多 CPU 周期,这样任何性能下降都只会由总线争用引起。

笔记:

  • 我正在使用 Xeon E5645 处理器,DDR3 内存
4

3 回答 3

3

“进程使用 50% 的内存总线”的心智模型并不是一个很好的模型。已获得核心并访问不在缓存中的内存的线程使用内存总线。

让线程饱和总线很简单,只需使用 memcpy()。复制几次适合最后一个缓存的数量,并通过多次运行它来预热它,这样就不会出现页面错误来减慢代码速度。

于 2012-06-27T13:22:14.670 回答
1

我的第一直觉是设置一堆 DMA 操作来反弹数据,而不会过多地使用 CPU。这一切都取决于您正在运行的操作系统和硬件。这是嵌入式系统吗?我很乐意在评论中提供更多细节。

于 2012-06-27T13:04:37.667 回答
0

我会使用 SSE2 movntps 指令来传输数据,以避免同一核心中其他线程的缓存冲突。也许展开该循环 16 次以最小化每次内存传输的指令数。虽然 DMA 想法听起来不错,但链接的手册很旧,并且适用于 32 位 linux,而且您的处理器型号让我认为您可能拥有 64 位操作系统,这让我想知道其中有多少是正确的。在最坏的情况下,您的测试代码中的错误可能会破坏您的硬盘驱动器。

于 2012-06-27T19:59:20.317 回答