天天看點

帶你讀《存儲漫談Ceph原理與實踐》第三章接入層3.1塊存儲 RBD(六)

3.1.6  Burst I/O

BurstI/O指的是雲盤在一定時間内達到IOPS突發上限的能力,突發能力适用于雲伺服器的啟動場景,如系統盤,若有持續突發能力,就能夠大幅度地提升雲伺服器的啟動速度。

CephRBD 裝置突發能力的實作基于令牌桶。突發時,令牌的消耗速度大于令牌的生成速度,令牌的數量逐漸減少,最後IOPS 會維持和桶生成令牌的速度一緻,即達到IOPS的上限,理論上:

可持續的突發時間= 最初令牌桶中的令牌數/( 實際 I/O 請求的速度- 令牌生成速度)然而實際上這樣是無法控制突發速度的上限和突發時間的,這樣的突發應該了解為可

突發的I/O請求量,舉例說明一下,如卷的上限IOPS設定為1000IOPS(令牌生成的速率),卷突發設定為 2000IOPS,若實際 I/O請求速度剛好也是 2000IOPS,那麼突發時長實際是 2s,而且實際 I/O請求速度并沒有得到限制,若實際請求速度到了5000IOPS,那麼實際突發時長僅為 0.5s,即 0.5s後請求速度就被穩定限制在1000IOPS。

為了解決上述問題, 需要對令牌桶算法進行優化, 将令牌桶的容量設定為 burst_second×burst,然後向該令牌桶中添加一個小桶(容量為burst),以令牌生成速度(也即 IOPS的上限速度)生成的令牌放入令牌桶中,令牌桶再将令牌以突發速度流入小桶中,請求總是從小桶中擷取令牌。這樣,當 burst_second> 1時,RBD 裝置可以獲得持續的突發能力,突發上限值由小桶容量 burst決定,突發持續時間由 burst_second控制,這些參數都可以通過指令線上動态地去設定。下面舉例說明一下。

(1)線上設定參數

設定前如圖 3-25所示。

帶你讀《存儲漫談Ceph原理與實踐》第三章接入層3.1塊存儲 RBD(六)

圖 3-25參數設定目

rbd_qos_read_iops_burst:讀 I/O的突發限制。rbd_qos_read_iops_burst_seconds:讀 I/O 突發的持續時間。rbd_qos_read_iops_limit:每秒讀 I/O限制。

設定後如圖 3-26所示

帶你讀《存儲漫談Ceph原理與實踐》第三章接入層3.1塊存儲 RBD(六)

圖 3-26參數設定後

将讀 IOPS限制設定為 1000,并将讀 IOPS突發設定為5000,RBD隻能獲得 2s的突發級别 IOPS,然後維持限制級别。

(2)對比測試

設定前的測試結果如圖 3-27所示。

帶你讀《存儲漫談Ceph原理與實踐》第三章接入層3.1塊存儲 RBD(六)

圖 3-27 設定目的測試結果

設定後測試結果如圖 3-28所示。

帶你讀《存儲漫談Ceph原理與實踐》第三章接入層3.1塊存儲 RBD(六)

圖 3-28 設定後的測試結果

(3)測試結果分析

設定後的單卷讀 IOPS 理論值計算公式如下。

iops = {rbd_qos_read_iops_burst_seconds * rbd_qos_read_iops_burst + (total_time_of_rand_read - rbd_qos_read_iops_burst_seconds) * rbd_qos_read_iops_limit} / total_time_of_rand_read

單卷随機讀理論值:iops= (2*5000+ 98*1000)/100= 1080

測試值:iops= 1097結論:符合預期

繼續閱讀