问题标签 [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.
arm - 通过 VFIO 对分配的设备进行中断处理
我试图了解中断处理如何通过 VFIO 分配给 VM(来宾 KVM)的设备工作,但对它是如何发生的没有任何线索?
比方说,我有一个设备通过 VFIO 直接分配(设备直通)给来宾 VM,并且该特定设备出现硬件中断?
接下来发生什么?
c - 带 iommu=on 且不带 VFIO 的 Linux 用户空间 DMA
Linux 用户空间应用程序是否可以在不被 IOMMU 阻塞且不使用 VFIO 的情况下将自己的内存用于 DMA?
当 iommu 被禁用 (intel_iommu=off) 或处于直通模式 (intel_iommu=passthrough) 时,我们的应用程序工作正常。但是,当启用 IOMMU (intel_iommu=on) 时它不起作用,因为我们在用户空间中分配的内存不允许用于 DMA。
官方的解决方案是使用 Linux VFIO 接口来管理 IOMMU,但是我们觉得 VFIO 特性还不是很成熟,希望找到一个更简单的解决方案。
我们能否以某种方式指示 IOMMU 允许对我们分配的物理内存进行 DMA 访问?这将是美妙的,因为这样我们就不必指示我们的用户更改他们的内核引导参数。
如果有一个基于 VFIO 的简单可靠的解决方案,那也很有趣。
有关我们如何分配内存的详细信息,请参阅相关的先前问题: mremap(2) with HugeTLB to change virtual address?
linux - vfio 中的 ioctl (VFIO_DEVICE_GET_REGION_INFO) 返回的“num_regions”是什么
我试图了解 vfio 如何在 pci 上工作。我已阅读https://www.kernel.org/doc/Documentation/vfio.txt,并且正在根据它编写测试。在某些时候,我的代码如下所示:
我不明白的是最后一个 printf 显示 9(九)个区域!查看我的 PCI 设备的配置空间,我可以看到:
我是 PCI 新手,但我对此的解释是这块板上只有两个 BARS(0 和 2)。而且我认为 PCI 上的最大区域数(BAR?)是 6。
然而,有一点迹象表明我误解了一些东西:上面提到的内核文档指出:
对于 PCI 设备,配置空间是一个区域
所以这可能会导致我正在查看的主板有 3 个区域......仍然显示 9...... pci_vfio 的 PCI 区域是什么?它们是如何编号和访问的?...
谢谢。
qemu - 使用 libvirt 直通 GPU 时出现 vfio_dma_map 错误
这是qemu日志
dmesg:
libvirt 版本:
试过 set ulimit -l to limited 没用
gpu - Nvidia GPU 直通失败,代码为 43
我目前正在尝试使用 qemu 2.5 和 libvirt 1.3.5 将 nvidia GPU 传递给 Windows 10 来宾。
我在设备管理器中看到 Nvidia GPU 上的“错误 43”。
我曾尝试通过添加“kvm=off”和“hv_vendor_id=123456780ab”来隐藏虚拟机管理程序,但它对我不起作用。我在谷歌搜索,人们以这种方式解决了这个问题。
而且我还在任务管理器中看到了虚拟机:是的。
我用错了吗?我可以将 AMD gpu 传递给 windows guest(AMD 不检查 kvm 虚拟化)。
我可以用其他方式欺骗nvidia吗?
我的系统信息:
显卡:
libvirt.xml
qemu 命令
期待您的帮助!
c - 无法在 vfio pci 设备的文件描述符上使用 pread
所以我正在使用 qemu kvm 一段时间,现在我需要通过 PCI 设备。我完成了所有必需的程序来完成这项工作:启用 iommu、modprobed vfio 模块、将设备绑定到 vfio 并检查是否确实创建了 vfio 组等......但是当我使用任何 pci 设备启动 qemu 时,我收到错误消息:
vfio:读取设备配置空间失败
我深入研究了 qemu 的代码以查看问题可能是什么,并发现问题发生在设备的预加载上。即使偏移量为 0,也会发生这种情况,并且对文件描述符进行正常读取没有问题,因为我更改了代码来测试它。检查 errno 是否因预读失败给我一个“非法搜索”错误消息。
我写了一些代码来看看这是否发生在 qemu 上下文之外(认为它可能是 qemu 代码中的某些东西干扰了设备),并且遇到了同样的问题。我还尝试使用 pread 读取一个普通文件,并且效果很好......这是我为测试它而编写的代码,我对其进行了一些分解,以便能够指出更相关的部分:
这个读取工作正常,给了我一个 nbytes 的 ret 代码
此预读失败并显示 ret 代码 -1 和 errno 'Illegal seek'
在这里,我尝试对 sysfs 中的一个公共文件进行读取和预读,以查看预读是否失败,并且在这种情况下,读和预读都可以正常工作:
我正在使用用 uClibc 编译的通用 linux 内核 v4.7.8 用于嵌入式系统......有人知道为什么会发生这种情况吗?我现在一头雾水!!TT
更新:我在同一台机器上安装了 ubuntu 16.04(内核 v4.4.0)并重复了这些步骤,pci passthrough 工作正常,我的测试代码上的 pread 也工作得很好。所以我不确定自定义通用内核出了什么问题。
根据 arash 的建议,我尝试了 pread(fd,buf,nbytes,SEEK_CUR),它给了我同样的“非法搜索”错误。我从 ftell 得到的偏移量在 ubuntu 和通用内核中都是0xffffffff 。
virtual-machine - GPU 直通后没有主机显示
我正在尝试设置 GPU 直通以在我的系统上的 VM 中使用。我正在使用 Ubuntu 17.04 并在手动将 nouveau 驱动程序列入黑名单后成功按照以下链接中的说明进行操作。
https://medium.com/@calerogers/gpu-virtualization-with-kvm-qemu-63ca98a6a172
当我打开主机系统时,我看到 Ubuntu 启动启动画面,但随后屏幕变黑并且没有显示任何内容。我可以通过 ssh 进入系统并看到 Nvidia GPU 已正确分配给 vfio-pci(如预期的那样)。我还没有测试过直通在 VM 上是否有效,因为我想让我的主机显卡首先与集成的 Intel 显卡一起工作。
我试过xrandr,但它说它无法打开显示器。我希望我必须做一些特定的事情来为主机启用集成显卡。有什么建议么?
系统:华擎 Z77 EXTREME4 Intel i7-4790K Nvidia GTX 650 Ti
谢谢您的帮助!
linux - vfio-pci 是所有 pci 设备的用户空间驱动程序吗?
我知道 vfio 可以将中断、DMA 和 pci I/O 暴露给用户空间。我读到如果有人想为 pci 设备利用 vfio,他必须取消绑定原始驱动程序并绑定到 vfio-pci 驱动程序。所以我的问题是,vfio-pci 是所有 pci 设备的用户空间驱动程序吗?因为在我的理解中,vfio 只是提供了一些基本的接口。或者,如果我需要新 pci 设备的驱动程序,我应该只使用 vfio-pci 驱动程序还是使用它提供的接口来编写新驱动程序?
gpu - 带有 libvirt 的 nvidia 1060 gpu passhtrough
我目前正在尝试将我的 nvidia GPU 设置为 Windows 来宾。我实际上正在使用拱门
这是我到目前为止所做的以及我面临的问题:
启用 iommu
gpu的iommu组
启用 vfio
libvirt 虚拟机配置
但是当客人启动我得到这个错误
设备选项 ROM 内容可能无效(检查 dmesg)。使用 rombar=0 跳过选项 ROM 探测,或使用 romfile= 从文件加载
我发现我应该能够转储这个 romfile 购买阅读足够的文件
“输入/输出错误”(英文)
由于这个解决方案没有奏效,我试图从内存中读取它,我应该能够转储它,但我需要他在内存中的地址位置。我应该用 grep 'Video ROM' /proc/iomem找到它,但这个命令什么也不返回
我现在被卡住了,我正在寻找一种解决方案来使这个 gpu 直通工作,我不明白出了什么问题,欢迎提出每一个建议
linux - 测试使用 VFIO 的用户空间驱动程序?
我有一个可能有问题的硬件和一个可能有问题的用户空间驱动程序,它依赖于 vfio-pci 内核驱动程序。我想在不处理硬件的情况下测试驱动程序。
我想理想的解决方案是这样的:运行我的整个堆栈,除了硬件(应用程序、用户空间驱动程序、VFIO 驱动程序)并拦截 VFIO 驱动程序决定发送到硬件的所有内容。然后我可以验证硬件是否获得了正确的信息——重置发生在预期的时间,DMA 将到达正确的地址,等等。
我想我正在寻找类似模拟设备的东西,它可以让我在 vfio-pci 下运行用户空间代码,而不是运行硬件。这样的事情存在吗?