首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >硬件辅助IO虚拟化之设备透传

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

作者头像
虚拟化云计算
修改2018-04-13 22:17:37
修改2018-04-13 22:17:37
3.3K0
举报
文章被收录于专栏:虚拟化云计算虚拟化云计算

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


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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 虚拟化云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档