異步化IO

背景:

          隨着存儲計算分離的項目進一步推進,IO異步成爲了一件必須要做的事情了。隨着存儲內容分發到遠端集中存儲(盤古集羣),IO lateny平均也需要300-400us,更不用說對於長尾訪問,網絡抖動,IO集中的情況,有時IO Latency可達到1ms。IO異步化是我們改進延時的一種方式。

實現過程:

          總體採用的異步回調的方式,但是由於應用層,與底層存儲用的並不是相同線程池,這個過程意味着多次線程切換。同時呢,爲了防止“異步地獄”等問題,我們也自己封裝了promise和future,使得回調邏輯可以看得更加清楚。

一些問題:

        在調用異步回調的函數中,對於很多棧變量的生命週期都不好把控,暫時是通過ptr承接棧變量,控制好變量的生命週期,但是之前很多小的棧變量都通過new的方式產生,對性能必然有些影響。

      同步接口的實現,是否通過異步wait來實現。如果不通過異步來實現,同時保留兩套接口,那麼代碼可讀性和可維護性就會差很多。但是用異步實現同步,可能會造成死鎖的問題。同時同步也可能會有性能的下降,對於全內存等場景,其實是不可接受的。

      異步IO之後,底層IO吞吐上去了,但是不可避免的IODepth也上去了,也造成了單次IO Latency延時的增長。儘管總延時會有下降。但是延時和吞吐都好,纔是最好的。

 

除了這些之外,總體來說,要上上下下改好多接口呀。。。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章