[Ceph] 使用 rados、ceph、和 fio 指令測試 Ceph 效能

[Ceph] 使用 rados、ceph、和 fio 指令測試 Ceph 效能

最近在測試新建的 Ceph 叢集的效能,

把搜尋到的指令都記錄一下…

 

首先是在 cephadm shell 指令模式下,

可以執行 rados bench 指令來測試磁碟效能,

像是下面的指令是測試 10 秒內寫入的速度:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# rados bench -p testbench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_test-ceph-vm1_1372
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 313 297 1187.95 1188 0.0414735 0.0516698
2 16 573 557 1113.93 1040 0.05781 0.0547785
3 16 847 831 1107.91 1096 0.0779656 0.0571364
4 16 1120 1104 1103.91 1092 0.0732392 0.0564813
5 16 1391 1375 1099.89 1084 0.11295 0.0578266
6 16 1659 1643 1095.22 1072 0.0371295 0.0564791
7 16 1941 1925 1099.89 1128 0.0131482 0.0519181
8 16 2185 2169 1084.39 976 0.00961795 0.0479551
9 16 2454 2438 1083.38 1076 0.0383834 0.058801
10 16 2727 2711 1084.23 1092 0.0227965 0.0584466
11 4 2727 2723 990.027 48 0.0427452 0.0583888
12 4 2727 2723 907.529 0 - 0.0583888
Total time run: 12.3263
Total writes made: 2727
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 884.94
Stddev Bandwidth: 415.83
Max bandwidth (MB/sec): 1188
Min bandwidth (MB/sec): 0
Average IOPS: 221
Stddev IOPS: 103.958
Max IOPS: 297
Min IOPS: 0
Average Latency(s): 0.0621596
Stddev Latency(s): 0.183044
Max latency(s): 3.10595
Min latency(s): 0.00657373
# rados bench -p testbench 10 write --no-cleanup hints = 1 Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects Object prefix: benchmark_data_test-ceph-vm1_1372 sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s) 0 0 0 0 0 0 - 0 1 16 313 297 1187.95 1188 0.0414735 0.0516698 2 16 573 557 1113.93 1040 0.05781 0.0547785 3 16 847 831 1107.91 1096 0.0779656 0.0571364 4 16 1120 1104 1103.91 1092 0.0732392 0.0564813 5 16 1391 1375 1099.89 1084 0.11295 0.0578266 6 16 1659 1643 1095.22 1072 0.0371295 0.0564791 7 16 1941 1925 1099.89 1128 0.0131482 0.0519181 8 16 2185 2169 1084.39 976 0.00961795 0.0479551 9 16 2454 2438 1083.38 1076 0.0383834 0.058801 10 16 2727 2711 1084.23 1092 0.0227965 0.0584466 11 4 2727 2723 990.027 48 0.0427452 0.0583888 12 4 2727 2723 907.529 0 - 0.0583888 Total time run: 12.3263 Total writes made: 2727 Write size: 4194304 Object size: 4194304 Bandwidth (MB/sec): 884.94 Stddev Bandwidth: 415.83 Max bandwidth (MB/sec): 1188 Min bandwidth (MB/sec): 0 Average IOPS: 221 Stddev IOPS: 103.958 Max IOPS: 297 Min IOPS: 0 Average Latency(s): 0.0621596 Stddev Latency(s): 0.183044 Max latency(s): 3.10595 Min latency(s): 0.00657373
# rados bench -p testbench 10 write --no-cleanup

hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_test-ceph-vm1_1372
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16       313       297   1187.95      1188   0.0414735   0.0516698
    2      16       573       557   1113.93      1040     0.05781   0.0547785
    3      16       847       831   1107.91      1096   0.0779656   0.0571364
    4      16      1120      1104   1103.91      1092   0.0732392   0.0564813
    5      16      1391      1375   1099.89      1084     0.11295   0.0578266
    6      16      1659      1643   1095.22      1072   0.0371295   0.0564791
    7      16      1941      1925   1099.89      1128   0.0131482   0.0519181
    8      16      2185      2169   1084.39       976  0.00961795   0.0479551
    9      16      2454      2438   1083.38      1076   0.0383834    0.058801
   10      16      2727      2711   1084.23      1092   0.0227965   0.0584466
   11       4      2727      2723   990.027        48   0.0427452   0.0583888
   12       4      2727      2723   907.529         0           -   0.0583888
Total time run:         12.3263
Total writes made:      2727
Write size:             4194304
Object size:            4194304
Bandwidth (MB/sec):     884.94
Stddev Bandwidth:       415.83
Max bandwidth (MB/sec): 1188
Min bandwidth (MB/sec): 0
Average IOPS:           221
Stddev IOPS:            103.958
Max IOPS:               297
Min IOPS:               0
Average Latency(s):     0.0621596
Stddev Latency(s):      0.183044
Max latency(s):         3.10595
Min latency(s):         0.00657373

 

以上面的輸出來看,寫入可以達到 884.94 MB/秒,

IOPS 平均是 221,但因為 IOPS 每秒平均 I/O 次數,

因此和單次讀取/寫入的大小會有關係,像上例中預設是單次寫入 4MB 左右。

 

加上 --object-size 來指定要寫入的大小為 1MB 後,

寫入達到 1070.92 MB/秒,IOPS 也上升到 1070:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# rados bench -p testbench 10 write --no-cleanup --object-size $((1024*1024))
hints = 1
Maintaining 16 concurrent writes of 1048576 bytes to objects of size 1048576 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_test-ceph-vm1_1942
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 1237 1221 1220.92 1221 0.0155967 0.0130126
2 16 2297 2281 1140.41 1060 0.0148864 0.0139774
3 16 3328 3312 1103.91 1031 0.0123301 0.0144233
4 16 4390 4374 1093.4 1062 0.0107925 0.0146018
5 16 5457 5441 1088.1 1067 0.0138464 0.0146763
6 16 6504 6488 1081.24 1047 0.00574564 0.0147792
7 16 7536 7520 1074.19 1032 0.0200246 0.0148717
8 16 8617 8601 1075.03 1081 0.0135501 0.0148632
9 16 9682 9666 1073.9 1065 0.0119147 0.0148804
10 16 10717 10701 1070 1035 0.0140663 0.0149382
Total time run: 10.0073
Total writes made: 10717
Write size: 1048576
Object size: 1048576
Bandwidth (MB/sec): 1070.92
Stddev Bandwidth: 55.6166
Max bandwidth (MB/sec): 1221
Min bandwidth (MB/sec): 1031
Average IOPS: 1070
Stddev IOPS: 55.6166
Max IOPS: 1221
Min IOPS: 1031
Average Latency(s): 0.0149344
Stddev Latency(s): 0.00457351
Max latency(s): 0.0354361
Min latency(s): 0.00351768
# rados bench -p testbench 10 write --no-cleanup --object-size $((1024*1024)) hints = 1 Maintaining 16 concurrent writes of 1048576 bytes to objects of size 1048576 for up to 10 seconds or 0 objects Object prefix: benchmark_data_test-ceph-vm1_1942 sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s) 0 0 0 0 0 0 - 0 1 16 1237 1221 1220.92 1221 0.0155967 0.0130126 2 16 2297 2281 1140.41 1060 0.0148864 0.0139774 3 16 3328 3312 1103.91 1031 0.0123301 0.0144233 4 16 4390 4374 1093.4 1062 0.0107925 0.0146018 5 16 5457 5441 1088.1 1067 0.0138464 0.0146763 6 16 6504 6488 1081.24 1047 0.00574564 0.0147792 7 16 7536 7520 1074.19 1032 0.0200246 0.0148717 8 16 8617 8601 1075.03 1081 0.0135501 0.0148632 9 16 9682 9666 1073.9 1065 0.0119147 0.0148804 10 16 10717 10701 1070 1035 0.0140663 0.0149382 Total time run: 10.0073 Total writes made: 10717 Write size: 1048576 Object size: 1048576 Bandwidth (MB/sec): 1070.92 Stddev Bandwidth: 55.6166 Max bandwidth (MB/sec): 1221 Min bandwidth (MB/sec): 1031 Average IOPS: 1070 Stddev IOPS: 55.6166 Max IOPS: 1221 Min IOPS: 1031 Average Latency(s): 0.0149344 Stddev Latency(s): 0.00457351 Max latency(s): 0.0354361 Min latency(s): 0.00351768
# rados bench -p testbench 10 write --no-cleanup --object-size $((1024*1024))

hints = 1
Maintaining 16 concurrent writes of 1048576 bytes to objects of size 1048576 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_test-ceph-vm1_1942
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16      1237      1221   1220.92      1221   0.0155967   0.0130126
    2      16      2297      2281   1140.41      1060   0.0148864   0.0139774
    3      16      3328      3312   1103.91      1031   0.0123301   0.0144233
    4      16      4390      4374    1093.4      1062   0.0107925   0.0146018
    5      16      5457      5441    1088.1      1067   0.0138464   0.0146763
    6      16      6504      6488   1081.24      1047  0.00574564   0.0147792
    7      16      7536      7520   1074.19      1032   0.0200246   0.0148717
    8      16      8617      8601   1075.03      1081   0.0135501   0.0148632
    9      16      9682      9666    1073.9      1065   0.0119147   0.0148804
   10      16     10717     10701      1070      1035   0.0140663   0.0149382
Total time run:         10.0073
Total writes made:      10717
Write size:             1048576
Object size:            1048576
Bandwidth (MB/sec):     1070.92
Stddev Bandwidth:       55.6166
Max bandwidth (MB/sec): 1221
Min bandwidth (MB/sec): 1031
Average IOPS:           1070
Stddev IOPS:            55.6166
Max IOPS:               1221
Min IOPS:               1031
Average Latency(s):     0.0149344
Stddev Latency(s):      0.00457351
Max latency(s):         0.0354361
Min latency(s):         0.00351768

 

另一個可以測試的是看 OSD (Object Storage Daemon) 的效能,

像是下面的指令是叫 osd.0 全部寫入 12MB,切成 4KB block 大小,

每個物件大小是 4MB,總共寫入 100 次:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# ceph tell osd.0 bench 12288000 4096 4194304 100
{
"bytes_written": 12288000,
"blocksize": 4096,
"elapsed_sec": 0.436031583,
"bytes_per_sec": 28181444.828963228,
"iops": 6880.2355539461005
}
# ceph tell osd.0 bench 12288000 4096 4194304 100 { "bytes_written": 12288000, "blocksize": 4096, "elapsed_sec": 0.436031583, "bytes_per_sec": 28181444.828963228, "iops": 6880.2355539461005 }
# ceph tell osd.0 bench 12288000 4096 4194304 100

{
    "bytes_written": 12288000,
    "blocksize": 4096,
    "elapsed_sec": 0.436031583,
    "bytes_per_sec": 28181444.828963228,
    "iops": 6880.2355539461005
}

 

也可以直接用 fio 指令測試硬碟的效能,

像是下面的指令使用 fio 對磁碟裝置 /dev/nvme0n1 進行隨機寫入測試:

  • -ioengine=libaio:使用 libaio 非同步 I/O 引擎
  • -fsync=1:每次 I/O 操作後立即同步寫入磁碟
  • -direct=1:直接對磁碟進行寫入,而不經過作業系統快取,
  • -bs=4k:區塊大小為 4 KB
  • -iodepth=1:每次同時只能有一個 I/O 動作
  • -rw=randwrite:進行隨機寫入操作
  • -runtime=15:測試時間為 15 秒
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo fio -ioengine=libaio -name=test -filename=/dev/nvme0n1 -fsync=1 -direct=1 -bs=4k -iodepth=1 -rw=randwrite -runtime=15
test: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.36
Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][w=36.8MiB/s][w=9413 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=73520: Thu Sep 26 08:08:35 2024
write: IOPS=23.4k, BW=91.4MiB/s (95.9MB/s)(1372MiB/15001msec); 0 zone resets
slat (nsec): min=1164, max=943220, avg=30805.63, stdev=48108.29
clat (nsec): min=394, max=370116, avg=10917.42, stdev=6877.66
lat (usec): min=10, max=944, avg=41.72, stdev=41.79
clat percentiles (nsec):
| 1.00th=[ 410], 5.00th=[ 418], 10.00th=[ 422], 20.00th=[ 434],
| 30.00th=[13376], 40.00th=[14144], 50.00th=[14400], 60.00th=[14656],
| 70.00th=[14784], 80.00th=[15040], 90.00th=[15424], 95.00th=[16192],
| 99.00th=[21632], 99.50th=[29568], 99.90th=[32384], 99.95th=[33024],
| 99.99th=[42752]
bw ( KiB/s): min=35848, max=233824, per=100.00%, avg=95587.59, stdev=86644.16, samples=29
iops : min= 8962, max=58456, avg=23896.90, stdev=21661.04, samples=29
lat (nsec) : 500=26.41%, 750=1.22%, 1000=0.29%
lat (usec) : 2=0.18%, 4=0.03%, 10=0.04%, 20=70.31%, 50=1.50%
lat (usec) : 100=0.01%, 250=0.01%, 500=0.01%
fsync/fdatasync/sync_file_range:
sync (nsec): min=960, max=375193, avg=11578.64, stdev=6944.77
sync percentiles (nsec):
| 1.00th=[ 988], 5.00th=[ 1004], 10.00th=[ 1012], 20.00th=[ 1048],
| 30.00th=[13888], 40.00th=[14784], 50.00th=[15040], 60.00th=[15296],
| 70.00th=[15424], 80.00th=[15680], 90.00th=[16064], 95.00th=[17024],
| 99.00th=[22656], 99.50th=[31616], 99.90th=[35072], 99.95th=[35584],
| 99.99th=[48384]
cpu : usr=3.13%, sys=77.41%, ctx=252229, majf=0, minf=12
IO depths : 1=200.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.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.0%, >=64=0.0%
issued rwts: total=0,351132,0,351131 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=91.4MiB/s (95.9MB/s), 91.4MiB/s-91.4MiB/s (95.9MB/s-95.9MB/s), io=1372MiB (1438MB), run=15001-15001msec
$ sudo fio -ioengine=libaio -name=test -filename=/dev/nvme0n1 -fsync=1 -direct=1 -bs=4k -iodepth=1 -rw=randwrite -runtime=15 test: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1 fio-3.36 Starting 1 process Jobs: 1 (f=1): [w(1)][100.0%][w=36.8MiB/s][w=9413 IOPS][eta 00m:00s] test: (groupid=0, jobs=1): err= 0: pid=73520: Thu Sep 26 08:08:35 2024 write: IOPS=23.4k, BW=91.4MiB/s (95.9MB/s)(1372MiB/15001msec); 0 zone resets slat (nsec): min=1164, max=943220, avg=30805.63, stdev=48108.29 clat (nsec): min=394, max=370116, avg=10917.42, stdev=6877.66 lat (usec): min=10, max=944, avg=41.72, stdev=41.79 clat percentiles (nsec): | 1.00th=[ 410], 5.00th=[ 418], 10.00th=[ 422], 20.00th=[ 434], | 30.00th=[13376], 40.00th=[14144], 50.00th=[14400], 60.00th=[14656], | 70.00th=[14784], 80.00th=[15040], 90.00th=[15424], 95.00th=[16192], | 99.00th=[21632], 99.50th=[29568], 99.90th=[32384], 99.95th=[33024], | 99.99th=[42752] bw ( KiB/s): min=35848, max=233824, per=100.00%, avg=95587.59, stdev=86644.16, samples=29 iops : min= 8962, max=58456, avg=23896.90, stdev=21661.04, samples=29 lat (nsec) : 500=26.41%, 750=1.22%, 1000=0.29% lat (usec) : 2=0.18%, 4=0.03%, 10=0.04%, 20=70.31%, 50=1.50% lat (usec) : 100=0.01%, 250=0.01%, 500=0.01% fsync/fdatasync/sync_file_range: sync (nsec): min=960, max=375193, avg=11578.64, stdev=6944.77 sync percentiles (nsec): | 1.00th=[ 988], 5.00th=[ 1004], 10.00th=[ 1012], 20.00th=[ 1048], | 30.00th=[13888], 40.00th=[14784], 50.00th=[15040], 60.00th=[15296], | 70.00th=[15424], 80.00th=[15680], 90.00th=[16064], 95.00th=[17024], | 99.00th=[22656], 99.50th=[31616], 99.90th=[35072], 99.95th=[35584], | 99.99th=[48384] cpu : usr=3.13%, sys=77.41%, ctx=252229, majf=0, minf=12 IO depths : 1=200.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.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.0%, >=64=0.0% issued rwts: total=0,351132,0,351131 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): WRITE: bw=91.4MiB/s (95.9MB/s), 91.4MiB/s-91.4MiB/s (95.9MB/s-95.9MB/s), io=1372MiB (1438MB), run=15001-15001msec
$ sudo fio -ioengine=libaio -name=test -filename=/dev/nvme0n1 -fsync=1 -direct=1 -bs=4k -iodepth=1 -rw=randwrite -runtime=15

test: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.36
Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][w=36.8MiB/s][w=9413 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=73520: Thu Sep 26 08:08:35 2024
  write: IOPS=23.4k, BW=91.4MiB/s (95.9MB/s)(1372MiB/15001msec); 0 zone resets
    slat (nsec): min=1164, max=943220, avg=30805.63, stdev=48108.29
    clat (nsec): min=394, max=370116, avg=10917.42, stdev=6877.66
     lat (usec): min=10, max=944, avg=41.72, stdev=41.79
    clat percentiles (nsec):
     |  1.00th=[  410],  5.00th=[  418], 10.00th=[  422], 20.00th=[  434],
     | 30.00th=[13376], 40.00th=[14144], 50.00th=[14400], 60.00th=[14656],
     | 70.00th=[14784], 80.00th=[15040], 90.00th=[15424], 95.00th=[16192],
     | 99.00th=[21632], 99.50th=[29568], 99.90th=[32384], 99.95th=[33024],
     | 99.99th=[42752]
   bw (  KiB/s): min=35848, max=233824, per=100.00%, avg=95587.59, stdev=86644.16, samples=29
   iops        : min= 8962, max=58456, avg=23896.90, stdev=21661.04, samples=29
  lat (nsec)   : 500=26.41%, 750=1.22%, 1000=0.29%
  lat (usec)   : 2=0.18%, 4=0.03%, 10=0.04%, 20=70.31%, 50=1.50%
  lat (usec)   : 100=0.01%, 250=0.01%, 500=0.01%
  fsync/fdatasync/sync_file_range:
    sync (nsec): min=960, max=375193, avg=11578.64, stdev=6944.77
    sync percentiles (nsec):
     |  1.00th=[  988],  5.00th=[ 1004], 10.00th=[ 1012], 20.00th=[ 1048],
     | 30.00th=[13888], 40.00th=[14784], 50.00th=[15040], 60.00th=[15296],
     | 70.00th=[15424], 80.00th=[15680], 90.00th=[16064], 95.00th=[17024],
     | 99.00th=[22656], 99.50th=[31616], 99.90th=[35072], 99.95th=[35584],
     | 99.99th=[48384]
  cpu          : usr=3.13%, sys=77.41%, ctx=252229, majf=0, minf=12
  IO depths    : 1=200.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.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.0%, >=64=0.0%
     issued rwts: total=0,351132,0,351131 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=91.4MiB/s (95.9MB/s), 91.4MiB/s-91.4MiB/s (95.9MB/s-95.9MB/s), io=1372MiB (1438MB), run=15001-15001msec

參考資料:Chapter 7. Ceph performance benchmark

(本頁面已被瀏覽過 78 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料