kvm sr-iov 热插拔 简介

简介:

SR-IOV简介:(参考:http://docs.oracle.com/cd/E38902_01/html/E38873/glbzi.html)

我们知道vt-d功能可以进行设备直接分配,用以让虚拟机使用达到类似物理机性能的i/o设备,但是使用vt-d有个缺点:一个设备只能让一个客户机使用,所以有没有什么办法可以让设备性能的情况下,让多个虚拟机同时使用呢?这个就是

SR-IOV(single root i/o virtualization and sharing) 技术,图片来自书本《kvm虚拟化技术 原理和实战解析》

wKiom1hPkxXzm8BeAAFkci8aDi4137.png

sr-iov技术需要硬件设备的支持,它提供两种新功能类型:

物理功能(physical function pf):用于支持 SR-IOV 功能的 PCI 功能,如 SR-IOV 规范中定义。PF 包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。PF 是全功能的 PCIe 功能,可以像其他任何 PCIe 设备一样进行发现、管理和处理。PF 拥有完全配置资源,可以用于配置或控制 PCIe 设备。

虚拟功能 (Virtual Function, VF):与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 仅允许拥有用于其自身行为的配置资源。

简而言之,一个PF可以配置出多个VF,也可以自身作为一个完整资源提供给虚拟机使用。每个VF都有自己独立的配置空间(configuration space)和完整BAR(BASE ADDRESS REGISTER 基址寄存器),它是一个真正的独立的硬件资源。hypervisor把这些资源通过vd-x等硬件虚拟化技术绕过自身的软件交换机直接映射给客户机使用,可以把多个VF分配给不同的客户机,这样多个客户机就可以直接操作相同硬件资源

在kvm中,可以将一个或多个VF分配给一个客户机,客户机通过自身的VF驱动程序直接操作设备的VF而不需要kvm的参与。

SR-IOV使用(以网卡为例):

lspci -v -s $BDF  #查看Capability选项来确定设备是否支持$BDF功能,一般显示为Capabilities: [160] Single Root I/O Virtualization (SR-IOV)

modinfo igb #查看igb模块说明,PF使用不同驱动支持不同数量的VF,比如网卡驱动igb最多支持7,而ixgbe最多支持63,可以看到说明中的“ parm:           max_vfs:Maximum number of virtual functions to allocate per physical function (uint)”

lsmod igb

rmmod igb 

modprobe igb max_vfs=7  #要想开启vf功能需要在加载驱动是加上max_vfs参数

ls -l /sys/bus/pci/devices/$BDF #可以观察这里的链接来查看PF和VF的对应关系

echo -n "$vendID $deviceID"> /sys/bus/pci/drivers/pci-stub/new_id

echo $BDF >/sys/bus/pci/devices/$BDF/driver/unbind

echo $BDF > /sys/bus/pci/drivers/pci-stub/bind #隐藏设备,当然这里的BDF指的是VF的BDF 

qemu-system-x86_64  -m 2048 -smp 3 xp.qcow2  -device pci-assign,host=$BDF,id=mydev0,addr=0x6 -usb -usbdevice tablet #通过-device 参数分配设备给客户机

PCI设备的热插拔:

pci设备的需要BIOS、pci总线、客户机操作系统内核和驱动程序的支持。

将一个可热插拔设备添加到客户机只需要在monitor界面中,使用以下命令:

device_add pco-assign,host=$BDF,id=yourid    #id可以自定义

要删除,则使用:

device_del  yourid #即插入时的id











本文转自biao007h51CTO博客,原文链接: http://blog.51cto.com/linzb/1882245,如需转载请自行联系原作者




相关文章
|
3月前
|
Ubuntu Linux 虚拟化
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
86 0
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
|
2月前
|
Linux
Linux内核中USB设备驱动实现
Linux内核中USB设备驱动实现
28 0
|
Linux 数据安全/隐私保护 开发者
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
243 0
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
SPI设备标准驱动源码分析(linux kernel 5.18)
SPI设备标准驱动源码分析(linux kernel 5.18)
SPI设备标准驱动源码分析(linux kernel 5.18)
|
开发框架 Linux
Linux设备树系列-GPIO驱动实践
Linux设备树系列-GPIO驱动实践
1471 0
|
开发工具
Hi3516开发笔记(六):通过HiTools使用USB/串口将uboot、kernel、rootfs和userdata按照分区表烧写镜像
Hi3516开发笔记(六):通过HiTools使用USB/串口将uboot、kernel、rootfs和userdata按照分区表烧写镜像
Hi3516开发笔记(六):通过HiTools使用USB/串口将uboot、kernel、rootfs和userdata按照分区表烧写镜像
|
Linux 芯片
linux PHY驱动
本文参考3.17版本的内核,结合TI的cpsw驱动(但去掉cpsw大部分代码,保留phy相关的),追踪一下通用PHY驱动。文中使用函数及主要功能语句的形式给出调用过程。
|
Linux 芯片
iMX6 SoloX千兆以太网Linux PHY驱动调试
最近在iMX6 SoloX平台上调试千兆以太网Linux PHY驱动调试,使用的是RGMII接口类型。RGMII即Reduced GMII,是RGMII的简化版本,将接口信号线数量从24根减少到14根(COL/CRS端口状态指示信号,这里没有画出),时钟频率仍旧为125MHz,TX/RX数据宽度从8为变为4位,为了保持1000Mbps的传输速率不变,RGMII接口在时钟的上升沿和下降沿都采样数据。
|
测试技术 虚拟化 Windows