1. 環境介紹
ceph叢集:
mon:ceph-xxx-osd02.ys,ceph-xxx-osd03.ys,ceph-xxx-osd01.ys
osd: 36
mds:ceph-xxx-osd04.ys=up:active
ceph版本:
ceph version 12.2.2.3 (277c813c8cdeb79eba8a11bfe08faf1bf7809f07) luminous (stable)
os系統:
CentOS Linux release 7.2.1511 (Core)
3.10.0-514.16.1.el7.x86_64
cpu型号: Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
cpu核數: 40
硬碟: hdd
下表以測試随機寫IOPS的指令為例,說明指令中各種參數的含義。
參數
說明
-direct=1
表示測試時忽略I/O緩存,資料直寫。
-iodepth=128
表示使用AIO時,同時發出I/O數的上限為128。
-rw=randwrite
表示測試時的讀寫政策為随機寫(random writes)。作其它測試時可以設定為:
1. randread(随機讀random reads)
2. read(順序讀sequential reads)
3. write(順序寫sequential writes
4. randrw(混合随機讀寫mixed random reads and writes)
-ioengine=libaio
表示測試方式為libaio(Linux AIO,異步I/O)。應用使用I/O通常有二種方式:同步和異步。同步的I/O一次隻能發出一個I/O請求,等待核心完成才傳回。這樣對于單個線程iodepth總是小于1,但是可以透過多個線程并發執行來解決。通常會用 16−32 根線程同時工作将iodepth塞滿。異步則通常使用libaio這樣的方式一次送出一批I/O請求,然後等待一批的完成,減少互動的次數,會更有效率。
-bs=4k
表示單次I/O的塊檔案大小為4k。未指定該參數時的預設大小也是4k。測試IOPS時,建議将bs設定為一個比較小的值,如本示例中的4k。測試吞吐量時,建議将bs設定為一個較大的值,如本示例中的1024k。
-size=1G
表示測試檔案大小為1G。
-numjobs=1
表示測試線程數為1。
-runtime=1000
表示測試時間為1000秒。如果未配置,則持續将前述-size指定大小的檔案,以每次-bs值為分塊大小寫完。
-group_reporting
表示測試結果裡彙總每個程序的統計資訊,而非以不同job彙總展示資訊。
-name=Rand_Write_Testing
表示測試任務名稱為Rand_Write_Testing,可以随意設定。
//block size是4M, 30個線程并發,持續時間200s
測試結果:帶寬:377MB/s 平均IOPS: 89 運作時長:2848ms 耗時:1249ms
測試結果:帶寬:289MB/s 平均IOPS: 68 運作時長:3717ms 耗時:1423ms
測試結果:帶寬:224MB/s 平均IOPS: 53 運作時長:4785ms 耗時:1819ms
測試結果:帶寬:197MB/s 平均IOPS: 46 運作時長:5454ms 耗時:ss50ms
測試結果:帶寬:264MB/s 平均IOPS: 64.4k 運作時長:4068ms 耗時:1.9ms
測試結果:帶寬:2900kB/s 平均IOPS: 707 運作時長:370303ms 耗時:180ms
測試結果:帶寬:349MB/s 平均IOPS: 85.3k 運作時長:3073ms 耗時:1.4ms
測試結果:帶寬:11.2MB/s 平均IOPS: 2730 運作時長:95995ms 平均耗時:46ms
3. 測試結論
操作
block size
吞吐量
IOPS
耗時
順序讀
4M
377MB/s
89
1249ms
随機讀
289MB/s
68
1423ms
順序寫
224MB/s
53
1819ms
随機寫
197MB/s
46
2250ms
4k
164MB/s
64.4k
1.9ms
2900kB/s
707
180ms
349MB/s
85.3k
1.4ms
11.2MB/s
2730
46ms
4. 叢集能力評估
參考:
由于Ceph存儲結構不同于實體硬體,是以影響其IOPS的因素主要有網絡、副本數量、日志、OSD(硬碟)數量、OSD伺服器數量、OSD IOPS等。
這裡給出一個來自Mirantis的經驗公式:
IOPS = 硬碟IOPS * 硬碟數量 * 0.88 / 副本數量
其中0.88為4-8k随機讀操作占比(88%),如果OSD不是以硬碟為機關而是RAID組,則替換公式中對應參數。
關于Ceph的IOPS計算僅供參考,計算結果可能會跟實體環境實測有較大偏差。
參考上述公式,結合測試報告,推算公式如下:
IOPS = 硬碟IOPS * 硬碟數量 / 副本數量(隻針對寫)
随機讀寫:
磁盤IOPS = (随機讀+随機寫)/ 2 (按照平均值計算)
副本數量 = 1~3 (按照讀寫計算)
根據公式估算測試叢集rbdbench(36個osd) iops:
4M塊大小:IOPS = (68+46)/2 * 36 / 3 = (最小值:684 ~ 最高值:2052)
4k塊大小: IOPS = (707+2730)/2 * 36 / 3 = (最小值:61866 ~ 最高值:20622)
IOPS = 硬碟吞吐量 * 硬碟數量 / 副本數量(隻針對寫)
順序讀寫:
硬碟吞吐量 = (順序讀+順序寫)/ 2 (按照平均值計算)
根據公式估算測試叢集rbdbench(36個osd) 吞吐量:
4M塊大小:IOPS = (377+224)/2 * 36 / 3 =(最小值: 3606MB/s ~ 最高值:10818MB/s)
4k塊大小: IOPS = (164+349)/2 * 36 / 3 = (最小值: 3078MB/s ~ 最高值:9234MB/s)

image.png