xen 不同后端存储方案的性能对比
概述
在xen平台下,一般使用文件来模拟一个磁盘。在xen中使用文件来模拟磁盘有3种方式,
- blkback 直接操作
- blktap2 直接将文件映射为一个裸块设备,这样vm可以直接用phy的方式进行文件访问。
- qdisk 使用qemu来将文件模拟成一个磁盘设备。
blkback

Blkback的数据交互流程如图1所示,在Domain U 中,用户态的应用程序发出读写系
统调用,在Domain U的操作系统中的普通读写请求,被块设备前端封装成Xen格式,接着
85 通过设备通道传送给块设备后端,块设备后端将读写请求经过一系列处理后,转化为一个或
多个bio结构,submit_bio提交。前后端通过事件通道(Event Chanel)、I/O 环(I/O Ring)
以及授权表(Grant Table)完成通信和数据交互。从Domain U的角度看,块设备可以是sda、
had或者xvda 等真实设备,只是读写请求被前端截获并转交给了Domain 0。从Domain 0中
操作系统的角度看,bio最后进入 I/O 调度层,Domain U的磁盘对应着相应的磁盘镜像。

图 2 是读写请求进入在块设备后端中的详细处理过程及函数。 RING_GET_REQUEST
从I/O环中取出块设备前端发送过来的读写请求(blkif_request格式),在dispatch_rw_block_io
中将blkif_request转化成pending_req和 phys_req,最后生成一个或多个通用的bio结构,之
后的处理流程与 Linux 读写系统调用相同:bio 进入 I/O 调度层最后由真实驱动完成读写。
同时,由end_block_io_op生成响应(blkif_response)。

blkback进行文件读写
blktap2
blktap2设备比较类似于loop设备,都是通过将文件映射成一个块设备来供虚拟机使用。 在启动时,需要在xl文件中配置为
disk = ['tap2:aio:file.vhd,xvda1,w']
将文件file.vhd 模拟成一个块设备/dev/xen/blktap-2/tapdev0

IO请求从blkfront到blkback之后,通过blktap2驱动交到user space的tapdisk2进程的地址空间。然后由tapdisk2进行文件的读写。

Blktap2的数据交互流程如图2所示,DomainU中流程与blkback类似,但domain 0中
用户态的功能更加丰富了,并将原本处于内核态的部分功能移至用户态。与blkback不同是,
blktap2从设备通道中取出Domain U发送过来的读写请求(blkif_request格式),交给处于
105 用户态的 tapdisk,tapdisk 要通过对应的磁盘格式的驱动来区分磁盘镜像的类型,并且可以
选择异步IO 或者典型 IO 两种不同方式,对读写请求和数据进行检查,封装成tio结构,对
tio进行合并优化后,通过系统调用提交 tio。Blktap2 与 tapdisk通过共享内存的方式交换数
据的权限,与设备/dev/xen/blktapX 对应。blktapctr 通过设备 blktap0 管理虚拟磁盘。blktap
仍需要blkback的帮助, blktap2以及最新的blktap3已经可以独立承担块设备后端的功能
qdisk
qdisk设备是通过qemu来把文件模拟成磁盘设备。启动时在xl文件中配置为
disk = ['tap:qcow:file.vhd,xvda1,w']

IO请求从blkfront发出后,直接发送到了进程空间中qemu进程,然后由qemu进程对文件进行读写。 这样明显的减少了io路径,提高了虚拟化磁盘的性能。
注意:blktap3采用了和qdisk几乎一致的架构,用来优化blktap2。在4.4版本中,blktap3还属于开发阶段,所以这里没有提及。
性能比较
了解了2种不同访问模式原理上的区别,我对两种存储虚拟化方式进行了测试 测试平台:
| Host | cpu | Intel(R) Xeon(R) CPU E5645 @ 2.40GHz |
| Memory | 44G | |
| 硬盘 | SATA | |
| Hypervisor | Xen | 4.4.1 |
| OS | suse11 sp3 | |
| Guest | CPU | 4 |
| Memory | 4G | |
| OS | windows xp | |
| 磁盘格式 | vhd |
测试结果:
| blktap2 | qdisk | |
|---|---|---|
| Total I/Os per Send | 69.04 | 78.20 |
| Total MBs per Send | 1.08 | 1.22 |
| Average I/O Response Time(ms) | 14.48 | 12.7855 |
| Maxinum I/O Response Time(ms) | 82.48 | 93.8746 |
可以看出在qdisk模式在 IOPS、吞吐量、延迟方面均优于Blktap2。
转自:here
我在自己的设备上测试,结果与这篇文章所述一致: qdisk 的方式性能好于 blktap 的方式;而且少了一个tapdisk进程,只需要qemu-dm进程就够了。
qdisk的模式有两块关键代码: linux_gnttab_grant_map 函数,用于映射blkif protocol需要的内存; xen_blkdev_ops 结构体,实现了对img文件的操作。 上述代码都实现在qemu-xen-traditional代码里,最终编译为qemu-dm程序
xen社区负责存储性能优化的工程师的PDF:Storage-Performance-PDF.pdf
基于 Xen PVHVM 虚拟块设备的数据追踪及测试 :pvhvm块设备的数据追踪和测试
xen 不同后端存储方案的性能对比的更多相关文章
- 日均数据量千万级,MySQL、TiDB两种存储方案的落地对比
http://mp.weixin.qq.com/s?__biz=MzIzNjUxMzk2NQ==&mid=2247484743&idx=1&sn=04337e020d268a9 ...
- Openstack_后端存储平台Ceph
框架图 介绍 一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统 特点 CRUSH算法 Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案, ...
- Storm VS Flink ——性能对比
1.背景 Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架.其中 Apache Storm(以下简称"Storm")在美团点评实时 ...
- 不同Framework下StringBuilder和String的性能对比,及不同Framework性能比(附Demo)
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 环境搭建 测试用例 MSDN说明 ...
- Hadoop小文件存储方案
原文地址:https://www.cnblogs.com/ballwql/p/8944025.html HDFS总体架构 在介绍文件存储方案之前,我觉得有必要先介绍下关于HDFS存储架构方面的一些知识 ...
- MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...
- influxdb和boltDB简介——MVCC+B+树,Go写成,Bolt类似于LMDB,这个被认为是在现代kye/value存储中最好的,influxdb后端存储有LevelDB换成了BoltDB
influxdb influxdb是最新的一个时间序列数据库,最新一两年才产生,但已经拥有极高的人气.influxdb 是用Go写的,0.9版本的influxdb对于之前会有很大的改变,后端存储有Le ...
- MYSQL 中 MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...
- [转帖]influxdb和boltDB简介——MVCC+B+树,Go写成,Bolt类似于LMDB,这个被认为是在现代kye/value存储中最好的,influxdb后端存储有LevelDB换成了BoltDB
influxdb和boltDB简介——MVCC+B+树,Go写成,Bolt类似于LMDB,这个被认为是在现代kye/value存储中最好的,influxdb后端存储有LevelDB换成了BoltDB ...
随机推荐
- 通过IIS共享文件夹来实现静态资源"本地分布式"部署
以下以文件型数据库(如sqlite)为例 楼主话:以下内容,若有不专业处,大胆喷,虚心求教. 起因:要进行一个项目的分布式部署,而这个项目所涉及的其中一个数据库为sqlite(经测试,同为文件型数据库 ...
- JavaSE总结--面向对象
封装: 1)为什么要用private修饰 保护属性或方法不被别人随意调用. 继承: 继承模型: 多态: 接口: 抽象类: 内部类: 在编译时用$分隔. 访问局部变量,该变量必须用final修饰. 向下 ...
- 二叉树 【转】http://blog.csdn.net/sjf0115/article/details/8645991
//二叉树 #include<iostream> #include<stack> #include<queue> using namespace std; //二叉 ...
- 如何将现有的项目添加到远程的git库里面!
我们经常都会遇到这样的场景,就是将本地的一个项目同步到网上远程的git库里面.最近也遇到这样的问题,发现网上很少人讲到这个问题,但是这个问题是很多程序员遇到的版本库管理的最早的拦路虎. 我的远程是ht ...
- PAT——乙级1028
这道题花了我半个多小时,对呀乙级算是挺多时间的了. 1028 人口普查 (20 point(s)) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个 ...
- 【python】用python爬取中科院院士简介信息
018/07/09 23:43 项目名称:爬取中科院871个院士的简介信息 1.爬取目的:中科院871个院士的简介信息 2.爬取最终结果: 3.具体代码如下: import re # 不用安装(注意! ...
- Nginx 战斗准备 —— 优化指南
大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...
- Tomcat源码浅析
最近在学习tomcat源码,算是把tomcat的整个流程梳理通了. 从上图来看,tomcat把模块化使用到了极致,配合组件生命周期的管理,让代码看起来结构清晰,而且很容易进行业务扩展. 1.上图的接口 ...
- 【Luogu】P2498拯救小云公主(spfa)
题目链接 我水爆了- - 容易发现可以把两个圆之间连边,左上为起点右下为终点,最小生成树直到起点跟终点连起来,输出边权/2就行. 然后80. 并不理解为什么这可以转化成spfa求最短路,邻接矩阵暴力跑 ...
- 【距离GDOI:128天】【POJ2778】DNA Sequence(AC自动机+矩阵加速)
已经128天了?怎么觉得上次倒计时150天的日子还很近啊 ....好吧为了把AC自动机搞透我也是蛮拼的..把1030和这道题对比了无数遍...最终结论是...无视时间复杂度,1030可以用这种写法解. ...