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

 

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