0

使用 scylla_setup 时,iotune 研究我的结果是:

Measuring sequential write bandwidth: 473 MB/s
Measuring sequential read bandwidth: 499 MB/s
Measuring random write IOPS: 1902 IOPS
Measuring random read IOPS: 1999 IOPS

iops 为 1900-2000,使用 fio 时,

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/dev/sdc1 --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

结果是

test: (groupid=0, jobs=1): err= 0: pid=11697: Wed Jun 26 08:58:13 2019
   read: IOPS=47.6k, BW=186MiB/s (195MB/s)(3070MiB/16521msec)
   bw (  KiB/s): min=187240, max=192136, per=100.00%, avg=190278.42, stdev=985.15, samples=33
   iops        : min=46810, max=48034, avg=47569.61, stdev=246.38, samples=33
  write: IOPS=15.9k, BW=62.1MiB/s (65.1MB/s)(1026MiB/16521msec)
   bw (  KiB/s): min=62656, max=65072, per=100.00%, avg=63591.52, stdev=590.96, samples=33
   iops        : min=15664, max=16268, avg=15897.88, stdev=147.74, samples=33
  cpu          : usr=4.82%, sys=12.81%, ctx=164053, majf=0, minf=23
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
     issued rwt: total=785920,262656,0, short=0,0,0, dropped=0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: bw=186MiB/s (195MB/s), 186MiB/s-186MiB/s (195MB/s-195MB/s), io=3070MiB (3219MB), run=16521-16521msec
  WRITE: bw=62.1MiB/s (65.1MB/s), 62.1MiB/s-62.1MiB/s (65.1MB/s-65.1MB/s), io=1026MiB (1076MB), run=16521-16521msec

Disk stats (read/write):
  sdc: ios=780115/260679, merge=0/0, ticks=792798/230409, in_queue=1023170, util=99.47%

读取 iops 为 46000 - 48000,写入 iops 为 15000-16000

4

1 回答 1

0

(注意:看起来提问者也将此作为 Scylla Github 问题提交 - https://github.com/scylladb/scylla/issues/4604

[为什么] 来自 scylla_setup iotune [...] 的磁盘 iops 与 fio 测试数据不同

不同的基准,不同的结果:

  • Scylla 可能在每个 I/O 上使用了更大的块大小(例如 64k)(这可能是最大的因素)。当您使块大小变大(由于收益递减而达到某个最大值)时,该块大小实现的带宽(即您可以在一秒钟内发送的数据总量)会增加,但您获得的 IOPS 通常会下降(您毕竟每个 I/O 发送更多数据)。这个是正常的!
  • Scylla 可能正在使用缓冲 I/O(而不是直接 I/O)
  • Scylla 可能已经分别对读取和写入进行基准测试
  • Scylla 可能一直在使用更大的队列深度
  • Scylla 可能以不同的方式分批提交
  • Scylla 可能正在写入不同类型的数据
  • 等等...

一般来说,使用不同工具完成基准测试并将它们直接相互比较是非常困难的——您需要知道它们在后台做了什么,任何比较才有意义。试图在没有更多上下文的情况下孤立地查看 IOPS 或带宽是没有意义的,因为您通常会在一个与另一个之间进行权衡。最好使用具有相同选项的相同基准测试工具来比较两台不同机器的更改或测量调整对同一台机器的影响。

TLDR;这很可能是一个苹果与橘子的比较,其中工具测量不同的上下文。

PS:gtod_reduce是一种很少有人真正需要的速度更快的条纹。如果您的硬件无法达到每秒千兆字节的处理能力,并且您没有看到 CPU 已达到极限,那么减少gettimeofday调用不太可能对结果产生很大影响。

(这个问题可能更适合服务器故障(因此在那里得到更好的答复),因为它不直接与编程有关)

于 2019-07-13T06:05:14.843 回答