Sysbench 内存 rndrd/rndwr 测试是否消除了缓存的影响?

问题描述 投票:0回答:0

简而言之,我的问题是:Sysbench在测量内存读写性能时是否应该消除缓存的影响,类似于在测量磁盘性能时如何消除内存的影响?

如果答案是否定的,是否意味着 Sysbench 只关心最终的性能,而不管是否有缓存?

如果答案是肯定的,Sysbench 是否在任何地方禁用了缓存(我错过了),或者没有这样做?

附言“影响缓存”,我的意思是:当用户定义的memory_block_size小于缓存大小时,整个内存块(或其中的大部分)被加载到CPU缓存中,因此内存性能受到影响缓存。

===

这里是一些背景信息:

我正在尝试在 Sysbench 中运行内存基准测试,这就是 Sysbench 进行随机内存访问测试的方式:

int event_rnd_read(sb_event_t *req, int tid)
{
  (void) req; /* unused */

  for (ssize_t i = 0; i <= max_offset; i++)
  {
    size_t offset = (size_t) sb_rand_default(0, max_offset);
    size_t val = SIZE_T_LOAD(buffers[tid] + offset);
    (void) val; /* unused */
  }

  return 0;
}

MACRO SIZE_T_LOAD 扩展为:

# define SIZE_T_LOAD(ptr) ck_pr_load_32((uint32_t *)(ptr))

sizeof(size_t)
为4字节时。
ck_pr_load_32
是一个原子内存加载函数,编译器根据this链接很难优化。
max_offset
设置为
memory_block_size / SIZEOF_SIZE_T - 1;
,其中
memory_block_size
在大多数情况下设置为接近 4KB 的某个位置。

以上所有代码均复制自https://github.com/akopytov/sysbench/blob/master/src/tests/memory/sb_memory.c

所以,据我所知,Sysbench 没有做任何特别的事情来消除缓存在他们的内存随机读取测试中的影响。真的吗?如果是,那合理吗?

caching operating-system benchmarking random-access sysbench
© www.soinside.com 2019 - 2024. All rights reserved.