<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Iommu on 断念梦的站点</title><link>https://desistdaydream.github.io/tags/iommu/</link><description>Recent content in Iommu on 断念梦的站点</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://desistdaydream.github.io/tags/iommu/index.xml" rel="self" type="application/rss+xml"/><item><title>VFIO</title><link>https://desistdaydream.github.io/docs/1.%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Kernel/VFIO/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://desistdaydream.github.io/docs/1.%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Kernel/VFIO/</guid><description>&lt;h1 id="概述"&gt;概述&lt;a class="td-heading-self-link" href="#%e6%a6%82%e8%bf%b0" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.kernel.org/driver-api/vfio.html"&gt;Linux 内核文档，驱动 API - VFIO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;许多现代系统现在都提供 &lt;a href="https://desistdaydream.github.io/docs/1.%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/DMA/"&gt;DMA&lt;/a&gt; 与中断重映射设施，帮助确保 I/O 设备在其被分配的边界内活动。这类设施包括带 AMD-Vi 和 Intel VT-d 的 x86 硬件、带 Partitionable Endpoints（PE）的 POWER 系统，以及像 Freescale PAMU 这样的嵌入式 PowerPC 系统。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Virtual Function I/O(简称 VFIO)&lt;/strong&gt; 驱动程序是一个与 IOMMU 设备无关的框架，用于在受 IOMMU 保护的安全环境中向&lt;strong&gt;用户空间&lt;/strong&gt;提供&lt;strong&gt;直接访问设备&lt;/strong&gt;的能力。换句话说，这允许安全非特权用户空间驱动程序。&lt;/p&gt;
&lt;div class="td-alert td-alert--md alert alert-tip" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;人话&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;可以让用户空间的进程直接控制物理硬件设备，而不用经过内核。比如 &lt;a href="https://desistdaydream.github.io/docs/4.%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1/DPDK/DPDK/"&gt;DPDK&lt;/a&gt; 可以通过 vfio 模块，让使用 DPDK 的程序略过内核直接控制网卡，进而避免了流量过大导致的内核软中断过高的问题。&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;我们为什么要这样做？虚拟机在配置为追求尽可能高的 I/O 性能时，常会采用&lt;strong&gt;直接访问设备&lt;/strong&gt;的方式（i.e. device assignment(设备分配)，把宿主机的硬件设备设备直接分配给虚拟机）。从设备和宿主的视角看，这相当于把该虚拟机变成了一个用户态驱动，换来延迟显著降低、带宽更高，以及可以直接复用裸机设备驱动。&lt;/p&gt;
&lt;p&gt;某些应用，尤其是高性能计算领域的应用（e.g. DPDK），同样能受益于用户空间中低开销的直接设备访问。这类应用包括网络适配器（往往不是基于 TCP/IP 的）和计算加速器。在 VFIO 出现之前，这些驱动要么必须走完整的开发流程、变成正式的上游驱动，要么在树外维护，要么改用 UIO 框架，而 UIO 没有 IOMMU 保护的概念、中断支持有限，并且访问 PCI 配置空间这类资源需要 root 权限。&lt;/p&gt;
&lt;p&gt;VFIO 驱动框架的意图是把这些做法统一起来：一方面取代 &lt;a href="https://desistdaydream.github.io/docs/10.%E4%BA%91%E5%8E%9F%E7%94%9F/Virtualization-implementation/KVM_QEMU/KVM_QEMU/"&gt;KVM&lt;/a&gt; 中专用于 PCI 的设备分配代码，另一方面提供比 UIO 更安全、功能更丰富的用户态驱动环境。&lt;/p&gt;</description></item><item><title>DMA</title><link>https://desistdaydream.github.io/docs/1.%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/DMA/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://desistdaydream.github.io/docs/1.%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/DMA/</guid><description>&lt;h1 id="概述"&gt;概述&lt;a class="td-heading-self-link" href="#%e6%a6%82%e8%bf%b0" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Direct_memory_access"&gt;Wiki, Direct memory access&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Direct Memory Access(直接内存访问，简称 DMA)&lt;/strong&gt; 是一种让硬件子系统直接访问内存的方式&lt;/p&gt;
&lt;p&gt;通过 DMA 可以让应用程序直接通过内存管理硬件。没有 DMA 之前，应用程序需要通过 CPU 来读取硬件信息，但是这会占用大量 CPU 时间，导致系统整体性能无法提高。&lt;/p&gt;
&lt;p&gt;使用 DMA 的方式，各种应用程序就可以绕过 CPU 直接访问内存中的硬件数据，e.g. &lt;a href="https://desistdaydream.github.io/docs/4.%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1/DPDK/DPDK/"&gt;DPDK&lt;/a&gt;、etc.&lt;/p&gt;
&lt;h1 id="iommu"&gt;IOMMU&lt;a class="td-heading-self-link" href="#iommu" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Input-output_memory_management_unit"&gt;Wiki, Input-Output Memory Management Unit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Input-Output Memory Management Unit(输入输出内存管理单元，简称 IOMMU)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;需要在 BIOS 中控制 IOMMU 的开关&lt;/p&gt;</description></item></channel></rss>