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所示。

圖 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所示
圖 3-26參數設定後
将讀 IOPS限制設定為 1000,并将讀 IOPS突發設定為5000,RBD隻能獲得 2s的突發級别 IOPS,然後維持限制級别。
(2)對比測試
設定前的測試結果如圖 3-27所示。
圖 3-27 設定目的測試結果
設定後測試結果如圖 3-28所示。
圖 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結論:符合預期