阿呆实战NVMe之一:QEMU和KVM

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

 

 

看完了蛋蛋的NVMe系列,你是不是有点手痒痒了,毕竟这是一门技术,不是艺术,只能欣赏,却不能亵玩,实在是太不让人尽兴了。三俗的来说,估计你也是看了上面的女神进来看文章的,但是,是不是下面的苍老师才能让你真正动手实践?

 

 

八卦蛋蛋

 

作为ssdfans的招牌,蛋蛋现在已经有了很多粉丝。你估计也想知道蛋蛋到底是个什么样的人,阿呆有幸略知一二。首先,蛋蛋博士真的是一位博士,饱读诗书,而且智商也很高。肯定有人要问了,你怎么知道他智商高呢,把跑分亮出来看看。其实阿呆也没跑过分,只知道蛋蛋家族有高智商基因,出了不少高考状元。乡亲们因为有了这样一家邻居,教育孩子不得不格外卖力气: 天赋不如人已经输在了起跑线上,后天可得加倍努力啊!

 

阿呆以前搞不懂NVMe,都是英文文档,好不容易看完也不能消化,花个把星期很多也是云里雾里。但是,看了蛋蛋写的NVMe系列,通俗易懂,最多半天就能掌握精髓。想到这里,阿呆不得不像古人一样发出慨叹:

 

天不生蛋蛋,万古长如夜!

 

QEMU

 

好了,后面我们不扯蛋了,言归正传。尽管阿呆想动手实践NVMe,可是舍不得花钱买昂贵的PCIe SSD练手,而且买了也是人家的控制器,自己怎么在上面搞开发啊,真是愁死人了。后来,阿呆想到一个好主意:真的玩不起,咱还不能搞个假的吗?果然找到一个免费的操作系统Linux上免费的虚拟机软件QEMU。估计很多人玩过VMWare,QEMU差不多,只不过是开源的,所以手闲的人可以在上面搞开发。如下图,在Linux系统上用QEMU虚拟了一个Windows系统。

 

 

说到这里,不得不提一下大名鼎鼎的KVM了。总是听人家讲什么虚拟化,KVM之类的,听起来挺时髦的,那KVM到底是个什么东东? 现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术,就是有些CPU是支持虚拟化指令的。KVM也一样依赖此项技术,全称Kernel-based Virtual Machine,其实就是虚拟了一个Linux内核,而且通过CPU的专有虚拟化指令可以达到很高的效率。但是我们知道Linux操作系统分为内核层和用户层,光有KVM这个内核层,我们还跑不起来任何图形界面等用户应用。KVM就相当于是开发商,只会盖房子,而且盖的非常坚固,但是盖好房子发现都是毛坯,不能住人,这时候他们发现了另一个开发商QEMU,他们也盖房子,还搞装修,装修的本领很不错,盖得房子实在不咋地。于是,这两家开发商战略合作,KVM负责盖房子,QEMU负责搞装修,人们交了房就能住进精装修的房子了,又坚固又漂亮好用。所以现在往往是KVM+QEMU搞一个虚拟机,KVM是内核态,QEMU是用户态。如下图。

 

 

说来惭愧,阿呆的知识其实都是百度上搜的。如果你想更深入地了解KVM,就得拜师了,上哪里找老师呢?哈哈,远在天边,近在眼前,我们藏龙卧虎的ssdfans微信群里就有位大牛,西山居的系统运维经理肖力,大名鼎鼎的《深度实践KVM》就是他写的。

 

云计算与虚拟化

 

总是听人说云计算,虚拟化,为什么他俩关系这么铁?阿呆也不懂内情,但是知道云计算公司搞了很多虚拟机,因为我们www.ssdfans.com网站就是买了阿里云的ECS服务,所谓的ECS弹性云计算其实就是用虚拟机实现的。我们传统企业建设自己的机房,要配置很多电脑,交换机,存储阵列等,来搭建网站,实现邮件服务器,内部OA等服务。到了云计算这里,还是买很多机器,只不过这些机器都是虚拟的,所谓弹性就是系统的CPU,内存,硬盘,带宽等资源都是可以配置的,谁叫人家是虚拟的呢,玩虚的就是任性啊。

 

不过最近总是有读者反映ssdfans网站从手机访问缓慢,电脑却还可以接受,阿呆还没好好看看是什么原因,希望有专家能够指点迷津。我们网站使用的是wordpress,文件存放在阿里云ECS,数据库采用了阿里云的RDS,服务器只有杭州的,还没有买全国各地的CDN加速。

 

CPU的虚拟化指令

 

后面阿呆要开始无耻的大段摘抄《深度实践KVM》了, 嘿嘿,广告也不是白做的~~如下图,X86的指令集一般分为4种特权模式:Ring 0,Ring 1,Ring 2,Ring 3,操作系统一般是Ring 0,应用程序Ring 3,驱动程序Ring 1,Ring 2.可是到了虚拟机就遇到问题了:你敢让虚拟机的Ring 0指令真的跑在真实CPU的Ring 0模式下吗?毕竟都是虚拟的,搞不好就出问题了,但如果都跑在Ring 3模式下,那白白浪费了CPU的这个设计,性能又上不去了。

 

 

所以Intel等CPU厂商推出了虚拟化指令。Intel的VT-x技术推出了两种操作模式:VMX root operation,VMX non-root operation。我们知道虚拟机包含两部分,虚拟层VMM(virtual machine monitor)和虚拟出来的系统,虚拟层其实就是我们物理系统里的一个应用,所以它跑在VMX root operation,和正常模式一样。而虚拟出来的系统跑在VMX non-root operation,是处在VMM控制之下的一个环境。这样虚拟机跑在自己的CPU轨道里,物理机也跑在自己的原来的CPU轨道里,相互隔离,性能也得到了提高。

 

 

这就像是孩子长大娶了老婆,和父母住在一起,生活已经是两家人了,可是共用厨房和厕所,首先经常上厕所得排队,憋得受不了,其次,小两口的隐私也得不到保护。老爹没办法,可怜天下父母心啊,又花钱盖了一套厕所和厨房,大家同在屋檐下,再也不冲突了,相安无事。

 

I/O虚拟化

 

一家人和睦了一段时间之后,新的问题又出现了。小两口消费观念新潮,总是需要买各种东西,但是又没时间去,所以只能让爹妈每天去超市代买,垃圾也让二老去倒。老人嫌累,小两口嫌他们少买了这个那个。老父亲好好想了想,找出症结了:尽管我们空间分开了,但是生活的原材料还没分开。后来,小两口不从超市购物了,他俩的东西全都选择网购,更自由,更方便,垃圾让快递小哥顺手帮忙带走,什么都搞定了。这就是I/O虚拟化啊:两家人的消费和废物处理隔离。

 

我们都知道,影响电脑性能的主要是CPU和内存,玩游戏还要显卡,下电影要网速和硬盘快。虚拟机也有这些问题,CPU虚拟化提升了处理能力,但是数据操作也需要高性能啊,关键在于解决I/O设备与虚拟机数据交换的问题,而这部分主要相关的是DMA直接内存存取,以及IRQ中断请求,只要解决好这两个方面的隔离、保护以及性能问题,就是成功的I/O虚拟化。

 

慈祥的老父亲Intel开发了VT-d技术,在北桥(现在改叫MCH,因为南桥退休了)提供DMA虚拟化和IRQ虚拟化。传统的IOMMU(memory management unit,内存管理单元)集中管理所有DMA,不容易实现DMA隔离,而VT-d实现了多个DMA保护区域的存在,实现DMA虚拟化。

 

传统设备中断请求有两种方式:一是通过I/O中断控制器路由,另一种是DMA写请求直接发出去的MSI(message signaled interrupt,消息中断)。由于使用了DMA,需要访问所有内存地址,没办法实现中断隔离,其实就是虚拟机的没办法区分。VT-d的中断重映射架构重新定义了MSI的格式,尽管MSI依然是DMA写请求,但是不嵌入内存地址,而是消息ID,通过消息ID区分不同的虚拟机区域。

 

啰啰嗦嗦说了这么多,怎么还没进入NVMe这个主题啊,没办法,阿呆就是这么个人,做足了前戏,慢慢的进入。

 

后面阿呆将会带你一起在QEMU虚拟机虚拟出一个NVMe设备,同时,在虚拟机Linux操作系统中开发一个NVMe驱动来使用它。

 

引用

 

肖力等,《深度实践KVM》

http://wenku.baidu.com/view/79bbd89851e79b89680226cb.html

分类目录 SSD, 技术文章.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。