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