NBD で複数ソケットを使う

NBD では 4.10 から一つのブロックデバイスに対して複数のソケットをアサインすることができるようになった。

github.com

github.com 前回使ったコードを適当に変更して複数ソケットをマルチスレッドでさばくようにした。

また fio で適当に計測してみた。

# of fio threads # of nbd threads ios(r/w)
1 1 8313625/8309306
1 4 9939814/9935338
2 2 12332608/12329740
2 4 10418903/10416638
4 1 10956949/10836467
4 2 10441119/10353829
4 4 8330135/8235491
# of fio threads # of nbd threads type MiB/s
1 1 READ 181MiB/s
1 1 WRITE 180MiB/s
1 4 READ 216MiB/s
1 4 WRITE 216MiB/s
2 2 READ 268MiB/s
2 2 WRITE 268MiB/s
2 4 READ 226MiB/s
2 4 WRITE 226MiB/s
4 1 READ 239MiB/s
4 1 WRITE 239MiB/s
4 2 READ 227MiB/s
4 2 WRITE 227MiB/s
4 4 READ 181MiB/s
4 4 WRITE 182MiB/s

計測したマシンが hyper thread こみで 4 コアなので、fio と nbd のスレッドを同じにしつつ、合計で 4 にするのが一番性能が出るみたいだ。 以前測った lio よりもスループットが出ている。 ついでなので lio でも同じ傾向がないか fio 2 スレッドで試したが、どうにも速度が出ないようだ。

Run status group 0 (all jobs):
   READ: bw=187MiB/s (197MB/s), 187MiB/s-187MiB/s (197MB/s-197MB/s), io=32.9GiB (35.4GB), run=180001-180001msec
  WRITE: bw=187MiB/s (197MB/s), 187MiB/s-187MiB/s (197MB/s-197MB/s), io=32.9GiB (35.4GB), run=180001-180001msec

Disk stats (read/write):
  sdb: ios=8632558/8631694, merge=0/5, ticks=169527/171223, in_queue=334347, util=78.51%