xen multi page io ring

今年的Xen summit裏,intel介紹了io性能調優方面的兩個點,一個是multi page io ring,  更大的max_segment,另一個per-block lock。

裏面說的vm裏面的io 性能損耗比原生的差了26%, 通過第一個點的調優,能夠提高17%,加上第二點的優化,能提高到24%,這樣的話,vm裏面的io性能幾乎認爲沒損耗。

ctrix在今年3月份的時候給了個patch,實現了multi page io ring,這個patch主要的工作是對blkback, blkfront的修改,並沒有包括下游路勁的修改。

先來說下io ring在vm io這塊的作用和主要代碼邏輯

VM的blkfront裏面,會去申請一個shared io ring, 目前是一個page size, 通過grant_table做授權,告訴host,怎樣拿到這個shared io ring.

host的blkback會去根據這個讀到的grant_table授權項去做映射,把io ring映射到host addr。

io ring的結構包括了req, rsp, 簡單的生產者消費者模式,blkfront是req的生產者,rsp的消費者,blkback是req的消費者,rsp的生產者,分別有着各自的id,來記錄當前的生產消費記錄。

blkfront通過往shared io ring裏面去扔req, blkback從裏面拿出req, 經過處理交給下游。這就是我們通常看到的io ring, citrix的patch也是針對這部分邏輯進行的修改。

在下游,還有另外一個io ring存在,做着類似的工作, 那就是blktap -> tapdisk2

tapdisk2通過打開一個字符設備blktap,並且mmap到字符設備上,從而獲得了blktap設備裏面創建的shared io ring的地址

所以如果要想改實現multi page io ring, 除了citrix的patch,還需要一個blktap和tapdisk2的patch

看了citrix patch,會發現使用了multi page io ring,就需要使用到多個授權項 ring_ref[], 在ring_ref的消息通知上會有點小小的麻煩。

後面先把citrix的patch做backport, 並完成blktap,tapdisk2的patch,再考慮下inel提出的那幾點改進如更大的max_segment

 

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