qemu里pci设备的热插拔
qemu里pci设备的热插拔
-v0.1 2019.2.17 Sherlock Init
-v0.2 2019.2.21 Sherlock Add all related command
本文讨论linux系统中pci设备直通给qemu中涉及的pci热插拔问题。
场景是一个pcie设备的vf通过vfio直通给qemu使用,这时如果我们在host上通过sysfs把
对应的vf disable掉。
正常来讲,qemu里的vf pci设备会表现为一个pci设备热拔出的行为。与之相对应的设置为:
guest kernel的配置里要打开pci hotplug: CONFIG_HOTPLUG_PCI_PCIE.
guest kernel的启动cmdline里要是能pci native hotplug, 加上pcie_port=native
启动qemu的时候,需要把直通上来的pci vf挂到一个支持pci热插拔的pci桥下面:
比如在qemu里挂接一个ioh3420的pci桥,然后再把直通的vf挂在这个桥下。本文的测试是在主线linux v5.0-rc6上做的,这个版本有一个pci hotplug的bug,这个
bug会导致虚拟机里vf无法被热拔。相关的fix补丁已经被pci maintainer ack, 会合
入v5.1主线版本。如果是在v5.0, 以及之前的内核的版本上测试,需要确认这个补丁
是否合入:
[PATCH RESEND] PCI: pciehp: Assign ctrl->slot_ctrl before writing it to hardware
综合以上,如下的qemu启动命令,配合正确的kernel,可以支持qemu里直通vf的pci热拔
操作:(这里已ARM64平台为例)
qemu-system-aarch64 -machine virt,gic_version=3 -enable-kvm -cpu host \-m 1024 -kernel ./Image -initrd ./minifs.cpio.gz -nographic -append \"rdinit=init console=ttyAMA0 earlycon=pl011,0x9000000 pcie_ports=native" \-device ioh3420,id=root_port \-device vfio-pci,host=0000:75:00.1,bus=root_port
具体可以这样测试:(已HiSilicon D06 zip engine为例)
- 在host上把vf和vfio驱动绑定:
echo 1 > /sys/devices/pci0000:74/0000:74:00.0/0000:75:00.0/sriov_numvfsecho 0000:75:00.1 > /sys/bus/pci/drivers/hisi_zip/unbindecho vfio-pci > /sys/devices/pci0000:74/0000:74:00.0/0000:75:00.1/driver_overrideecho 0000:75:00.1 > /sys/bus/pci/drivers_probe
启动qemu: 同上面的命令
在host上disable vf:
echo 0 > /sys/devices/pci0000:74/0000:74:00.0/0000:75:00.0/sriov_numvfs
可以看到在qemu里,vf表现为一个pci热拔的动作:
(fix me: add log, 目前看上面的命令会在host上挂住)
为了使得这篇介绍完整,对于qemu里pci设备的热插,可以这样来做:
启动qemu后按ctrl a + c 进入qemu monitor(启动qemu的时候带ioh3420但是不带VF设备)
在qemu monitor里: device_add vfio-pci,host=0000:75:00.1,bus=root_port
这样可以把已经和vfio驱动绑定的VF PCI热插到qemu
(fix me: lspci看不到新设备,但是在qemu monitor里info pci可以看到新插入的设备)
qemu里pci设备的热插拔相关推荐
- Linux的pcie模拟网卡,Qemu虚拟机pci设备透传——网卡
在qemu虚拟机中为了提高网络的性能,将本地host端的多余网卡透传到虚拟机中使用. 设备的透传需要主机支持Intel(VT-d)或AMD (IOMMU)硬件虚拟化加速技术 查看是否开启IOMMU1d ...
- qemu虚拟化-pci设备模拟
pci设备算是学习qemu必须要掌握的一类设备的模拟,单独提出来说一下.这里以qemu的pci教学程序为基础讲解,源码路径:hw/misc/edu.c 1.设备的定义 typedef struct { ...
- qemu: PCI 设备模拟
目录 1. PCI设备 2. PCI设备模拟 3. PCI设备中断模拟 1. PCI设备 可以参考 :PCI/PCIe基础--配置空间分布_vc66vcc的博客-CSDN博客_pcie配置空间 2. ...
- StratoVirt 中的 PCI 设备热插拔实现
热插拔即带电插拔,在虚拟化场景下,热插拔就是在虚拟机运行过程中对磁盘网卡等设备进行动态调整. 常见的热插拔机制有 ACPI 机制的热插拔,PCIe-Native 机制的热插拔.ACPI 机制的热插拔依 ...
- 使用libvirt和qemu将pci pass through设备添加到虚拟机上
透传的优势 guest使用透传设备可以获得设备近乎原生的性能, PCI pass-throught设备给动态迁移带来的问题, dest host可能没有同样的硬件. 就算可以模拟一个设备,但是原始设备 ...
- QEMU如何虚拟PCI设备
引子 PCI(PCIE)设备在PC架构中有着举足轻重的地位,了解PCI总线与PCI设备在QEMU中的工作机制有助于我们了解CPU和设备之间的沟通机制,会对PC系统有更全面的认知,同时对virtio设备 ...
- VIRTIO PCI 设备
Virtio的代码主要分两个部分:QEMU和内核驱动程序.Virtio设备的模拟就是通过QEMU完成的,QEMU代码在虚拟机启动之前,创建虚拟设备.虚拟机启动后检测到设备,调用内核的virtio设备驱 ...
- linux驱动 pcie 框架_Linux PCI 设备驱动基本框架(二)
针对相应设备定义描述该PCI设备的数据结构: structdevice_private {/*注册字符驱动和发现PCI设备的时候使用*/ struct pci_dev *my_pdev;// stru ...
- Pci设备驱动:设备枚举
有了设备模型基础及usb设备驱动的基础知识,来了解PCI设备驱动,就相对简单了,因为PCI设备驱动仍然套用了设备驱动模型的方式,用到的仍然是设备模型的相应函数,只是把相应的pci设备挂载到PCI总线的 ...
最新文章
- 程序员面试题精选100题(51)-顺时针打印矩阵[算法]
- Tensorflow详解保存模型(进阶版一):如何有选择的保存变量
- 自己的数字选择控件NumberPicker
- GitHub 有望在中国开设子公司?
- 为什么要学习Kotlin
- 【2017最新题库】通识课尔雅人文的物理学答案题库
- 图像特征的特点及其常用的特征提取与匹配方法
- 关于字符编码与word微软雅黑字体的抽风浅析
- 矢量数据 秦岭淮河_秦岭-淮河一线的大致纬度
- Java题 细胞分裂
- Arch LinuxLinux引导教程 2021.7.22
- Proximity indication
- 教务(选课)管理系统
- git 常用的命令行
- C++ typename详解
- 华为电子邮件显示未读邮件1_电子邮件简介已经过去
- Java语言程序设计 例题9.8(Fan类)
- JavaScript中的 NaN 与 isNaN
- linux强行安装软件,linux软件安装
- 带nfc 的 android 华为,目前支持NFC的手机这么多,为什么只有小米华为能覆盖这么多城市...