问题标签 [vfio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - PCIe 设备如何向 Linux 通告多个虚拟功能?
SR-IOV 允许 PCIe 设备公开单个物理功能和多个虚拟功能。内核如何检测设备是否支持虚拟功能?它是 PCIe 配置寄存器的一部分吗?在内核中的哪个位置测试了设备导出了多少功能?
编辑:我正在内核源代码中寻找一行代码(或一个文件),用于检查 PCIe 设备以确定它导出了多少虚拟功能。我还会选择一个指向适当标准的链接,该标准列出了设备需要向主机发送哪些信息,以便报告它支持多个虚拟功能。
vfio - QEMU-KVM VM中有vfio设备时,无法保存(virsh save)VM,为什么?
当 QEMU-KVM VM 包含 vfio 设备时,“virsh save”命令将无法保存 VM。所以,我很好奇为什么 vfio-device 不支持 VM 保存命令。我知道的原因之一是,它会与 VM 迁移冲突。但是如果我不打算迁移虚拟机,是否可以使用 vfio 设备保存虚拟机,为什么?
linux-kernel - 如何提高用户空间 DMA 访问的 SPDK 性能?
我正在研究使用 SPDK/VFIO API 进行 dma 访问的用户空间 PCI 驱动程序。
目前对于每个 DMA 分配请求,我需要填充结构,spdk_vfio_dma_map
然后调用系统调用ioctl(fd, VFIO_IOMMU_MAP_DMA, &dma_map)
以通过 IOMMU 映射 DMA 区域。然后稍后调用ioctl(fd, VFIO_IOMMU_UNMAP_DMA, &dma_map)
以取消映射 IOMMU 映射。
到目前为止,这一切正常,看起来就像 SPDK 示例正在使用的那样。但是我想知道是否有一种方法可以预先分配用户空间中的所有内存缓冲区,然后在每个 DMA 分配请求中只使用预先分配的内存而不是ioctl
每次都调用?
任何想法都值得赞赏。
memory - 在 QEMU/VFIO 环境中跟踪 PCI 设备内存 I/O 操作
我正在尝试在 QEMU / VFIO 环境下对某些 PCI 设备进行逆向工程,并且我想跟踪该卡对物理内存的所有 I/O 操作。该卡利用 PCI 总线主控并将内容写入其他设备,并且很可能从主机 RAM 读取驱动程序预处理的一些数据。至于现在,我只能跟踪对卡 MMIO 空间的所有读写(从主机到设备的数据传输),遗憾的是我错过了 R/W 操作的第二个方向(设备从主机获取数据)。
是否有可能跟踪 PCI 设备在物理内存上执行的 I/O 操作,即 QEMU / VFIO 环境下的直接 I/O 和/或 DMA 传输?我已启用对以下事件的跟踪:
vfio_pci_read_config vfio_pci_write_config vfio_region_write vfio_region_read vfio_intx_interrupt vfio_intx_eoi vfio_intx_update vfio_intx_enable vfio_intx_disable vfio_msi_interrupt vfio_populate_device_config vfio_region_mmap
是否有任何事件允许做可以在 QEMU 中注册的事情?先感谢您。
qemu - qemu 从 xml 到本机分配 PCI 设备
我在这里被困在两个世界之间。我在 virsh/XML 中有一部分 VM,在 qemu 本机命令中有一部分,我正在尝试统一它们,所以我的最后一点是将这个 XML 部分转换为 qemu 本机:
它是一个 USB 控制器/端口/任何东西。我在互联网上发现了一些建议使用-device pci-assign,host=0d:00.3
但不再起作用的代码:qemu-system-x86_64: -device pci-assign,host=0d:00.3: 'pci-assign' is not a valid device model name
所以我在这里迷路了。
virtual-machine - 错误:无法将套接字连接到“/var/run/libvirt/libvirt-sock”:连接被拒绝
我在虚拟机的xml文件中添加了一个物理网卡的虚拟网卡。
当我执行 virsh define 时,我得到错误信息
错误:无法连接到管理程序
错误:无法将套接字连接到“/var/run/libvirt/libvirt-sock”:连接被拒绝
我尝试重新安装 libvirt qemu,但没有效果。
gpu - VFIO - Intel 4770 上的 igpu 直通到虚拟机(Host Os Proxmox)
我正在运行最新的 Proxmox(此时为 6.3-3,已完全更新)并尝试将我的 Core i7 4770 CPU 上的板载 GPU 传递到 Windows 10 VM。我已经在系统上启用了 iommu,并且还告诉 grub 不要让系统通过添加intel_iommu=on video=efifb:off
到 grub 内核选项来声明设备。我已经通过检查 dmesg 验证了 IOMMU 实际上是可用的
我还将 iGPU(和相关的音频设备)添加到黑名单中,以防止主机操作系统声明它:
最后,我在主机上设置了一个新的 Windows 10 虚拟机以及 q35 芯片组和 uEFI (OVMF) BIOS,因为这显然是通过硬件的最“兼容”的方式。我还在 Proxmox 主机的 HDMI 端口中插入了一个外部屏幕。我知道当虚拟机启动时,我应该会看到这个屏幕变得生动起来。VM 的 qemu 配置文件如下:
完成后,我可以启动 VM。一旦我启动虚拟机,屏幕就会进入待机状态,表示没有信号。然后我可以 RDP 进入系统,我看到 Intel HD Graphics 4600 在设备管理器中可见。所以我从英特尔网站安装了最新的驱动程序。不幸的是,该设备将无法启动并在其旁边显示一个感叹号。设备状态显示
Windows has stopped this device because it has reported problems. (Code 43)
不幸的是,这个code 43
错误只是意味着出了点问题,它并不是很具体是什么原因造成的。
不太确定从这一点开始尝试什么 - 关于在哪里继续解决这个问题的任何帮助都会很有用。
virtualization - DPDK中关于Virtio PMD的查询
在 ARM 机器上使用 DPDK 的 virtio 驱动程序时,我几乎没有任何疑问。我们从 QEMU 模拟的 virto-net 设备中取消绑定 virti-pci 驱动程序(来宾内核),然后将其绑定到 VFIO-PCI 驱动程序(来宾内核),但我不明白为什么我们将 virtio-net 设备绑定到 VFIO -PCI驱动程序?
在正常情况下,VFIO 用于将设备分配给来宾,但在 DPDK 的 virtio-pmd 驱动程序的情况下它如何工作?
另外,在 virtio-pmd 的情况下是否有必要拥有 vhost-net 以及它如何适合那里?
kernel - Modprobe vfio-pci 在 VM 中不起作用,我做错了什么?
我一直在尝试使用“modprobe vfio-pci”命令将 vfio-pci 模块加载到内核中,但没有成功。
在低级编程方面,我是新手,所以我怀疑我可能做错了什么。
我尝试了什么:
sudo modprobe vfio-pci // lsmod 中没有显示关于 vfio
modprobe vfio enable_unsafe_noiommu_mode=1 // 仍然,lsmod 中没有显示
添加 iommu=on 作为内核参数 // 我不确定这是否更像是一个 dpdk 问题
我为什么要这样做?
我正在尝试使用 DPDK,因此我需要加载该模块,如此处所示。
环境:
我已经在 VirtualBox、VMWare、Qemu 构建的虚拟机中尝试过这个。它对他们中的任何一个都不起作用。主机是 Ubuntu 20.04,来宾也是 Ubuntu 20.04。
CPU 信息:print-screen。
编辑1:忘了提,modinfo vfio-pci 和 modinfo vfio 都显示有关这些模块的信息,所以我想它们并没有丢失。