硬件辅助IO虚拟化之设备透传

IO虚拟化实现的方式有很多种,有软件模拟、半虚拟化、设备直接分配、单根IO虚拟化。在《说一说虚拟化绕不开的io半虚拟化》一文中介绍了io的全虚拟化和半虚拟化。下面介绍一下IO的硬件辅助虚拟化。

PCI设备直接分配

设备直接分配 (Device assignment)也称为 Device Pass-Through。就是将宿主机host中的物理 PCI 设备直接分配给客户机guest使用,虚拟机独占这个PCI设备。在guest进行对应的IO操作时,避免 了VM Exit 陷入VMM 中,极大提高了性能。

在Intel平台上的Device assignment技术是VT-D(Intel Virtualization Technology for Directed I/O),是在VT-X的基础上对硬件辅助虚拟化的扩展。

下图(来自intel《vt-directed-io-spec》)是软件模拟io虚拟化和intel的VT-D的对比原理图:

PCI设备直接分配实践

下面的例子是把host主机中个一个网卡透传给虚拟机使用。

(在intel平台上要开启VT-d,内核要设置intel_iommu=on。)

1.在host上查看网卡信息

# lspci

00:19.0 Ethernet controller: Intel Corporation Ethernet Connection I217-LM (rev 04)

04:00.0 Ethernet controller: Intel Corporation 82541PI Gigabit Ethernet Controller (rev 05)

# ls /sys/bus/pci/devices/0000\:04\:00.0/net/

eth1

# cat /sys/class/net/eth1/address

90:e2:ba:9f:7c:5a

2.把pci设备从host中分离

# virsh nodedev-list

pci_0000_04_00_0

# virsh nodedev-dettach pci_0000_04_00_0

Device pci_0000_04_00_0 detached

3.把pci设备分配给虚拟机

虚拟机xml:

<devices>

<hostdev mode='subsystem' type='pci' managed='yes'>

<source>

<address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>

</source>

<address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/>

</hostdev>

</devices>

4.进入虚拟机查看pci是否进入

# lspci

00:10.0 Ethernet controller: Intel Corporation 82541PI Gigabit Ethernet Controller (rev 05)

# cat /sys/class/net/eth1/address

90:e2:ba:9f:7c:5a

可以看出虚拟机中的网卡就是原来host中的网卡。并且此时在host的/sys/class/net/中已经看不到这个网卡了。

5.把pci设备还给host:

# virsh nodedev-reattach pci_0000_04_00_0


关注本公众号,了解更多关于云计算虚拟化的知识。

原文发布于微信公众号 - 虚拟化云计算(openstack_openstack)

原文发表时间:2018-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

最全的30+个开源免费的Docker工具

容器生态系统的发展和扩展速度越来越快速,并且已经有了许多的Docker工具和服务,想要知道所有的有用选择,你会发现基本很难完成。

30130
来自专栏FreeBuf

如何打造一款可靠的WAF(Web应用防火墙)

之前写了一篇《WAF防御能力评测及工具》,是站在安全运维人员选型WAF产品的角度来考虑的(优先从测试角度考虑是前职业病,毕竟当过3年游戏测试?!)。本篇文章从W...

40250
来自专栏编程坑太多

跟我一起学docker(一)--认识

22540
来自专栏喵了个咪的博客空间

Kubernetes(一) - Docker管理工具

20730
来自专栏美团技术团队

美团容器平台架构及容器技术实践

美团的容器集群管理平台叫做HULK。漫威动画里的HULK在发怒时会变成“绿巨人”,它的这个特性和容器的“弹性伸缩”很像,所以我们给这个平台起名为HULK。貌似有...

22550
来自专栏编程坑太多

『中级篇』Kubenetes简介(60)

PS:了解我的老铁都知道,概念讲的少,更多重在实践,通过实践更好的理解概念,从下次开始怼k8s的环境和集群。如果跟我一起学的老铁,应该可以感受的到,在学习doc...

25930
来自专栏技术翻译

Kubernetes扩展容器架构的7 个工具

Kubernetes是最初由Google开发的容器编排工具,已成为敏捷和DevOps团队的重要资源。作为一个开源工具,Kubernetes本身正在成为一个生态系...

13440
来自专栏Albert陈凯

5分钟弄懂Docker

尽管之前久闻Docker的大名了,但是天资愚钝,对其到底是个啥东西一直摸不清,最近花了一段时间整理了一下,算是整理出一点头绪来。 官网的介绍是这样的: Do...

35150
来自专栏北京马哥教育

Docker学习总结之Docker与Vagrant之间的特点比较

不分场景而直接比对vagrant和docker是不恰当的!在一些简单场景中,它们两款产品作用是重复的,但在更多场景中,它们两款产品无法相互替 代。事实上,vag...

27430
来自专栏Java工程师日常干货

docker化你的java应用(上)前言走进docker

在各种技术大会(互联网架构,云计算等等),哪都少不了docker的身影。docker为啥这么火?因为它解决了大部分企业的痛点:快速的持续集成,服务的弹性伸缩,部...

14410

扫码关注云+社区

领取腾讯云代金券