Linux 下检查 VT-d / IOMMU 是否开启

欢迎转载,但请在开头或结尾注明原文出处【blog.chaosjohn.com】

介绍

VT-dIOMMU 其实都是指的 I/O 虚拟化,只不过前者是 Intel 的叫法,后者是 AMD 的叫法:

  • VT-d 全称为 Intel® Virtualization Technology for Directed I/O
  • IOMMU 全称为 Input/Output Memory Management Unit

这项技术是可以让PCI-e设备的资源直接分配给虚拟机,即 PCI直通

举个例子,在虚拟客户机里可以直接访问到物理显卡,性能比使用由 VMM/Hypervisor 虚拟出来的显卡好很多,并且还支持 显卡加速

在 Linux 下检查是否开启

一般来说,在主板的 BIOS/UEFI 里,能找到 VT-d / IOMMU 的设置项,设为开启即可。

但是也有特殊情况,某些主板里是找不到该项设置的,这里分两种情况:

  • 主板硬件或固件不支持 I/O 虚拟化
  • 主板刷入了阉割版的固件,但是实际上 VT-d / IOMMU 是被启用的

那如果在 Linux 下如何检查是否开启呢?

如果 VT-d / IOMMU 被启用,Linux 在启动过程中会配置 DMA重映射,所以简单的方法是在 dmesg 里查找 DMAR 相关项。

  • 在已开启的机子上:
# dmesg | grep DMAR
[    0.000000] ACPI: DMAR 0x00000000BBECB000 0000A8 (v01 LENOVO TP-R0D   00000930 PTEC 00000002)
[    0.001000] DMAR: Host address width 39
[    0.001000] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.001000] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e
[    0.001000] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[    0.001000] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[    0.001000] DMAR: RMRR base: 0x000000bbdd8000 end: 0x000000bbdf7fff
[    0.001000] DMAR: RMRR base: 0x000000bd000000 end: 0x000000bf7fffff
[    0.001000] DMAR-IR: IOAPIC id 2 under DRHD base  0xfed91000 IOMMU 1
[    0.001000] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[    0.001000] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.002000] DMAR-IR: Enabled IRQ remapping in x2apic mode

观察最后一行,可以看到类似 DMAR-IR: Enabled IRQ remapping in xxxxx mode 的输出

  • 在未开启的机子上:
# dmesg | grep DMAR
#

什么输出都没有,即没有找到任何与 DMAR 相关的项

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 本文档包含DPDK软件安装和配置的相关说明。旨在帮助用户快速启动和运行软件。文档主要描述了在Linux...
    半天妖阅读 17,996评论 0 22
  • 本文是Arch Linux 线性安装手册/傻瓜书的附录部分,手册/傻瓜书地址在下面: http://www.jia...
    驿窗阅读 4,483评论 0 19
  • 关于这部分。 如果仅限于制作一份可以进入安装界面的EFI文件,大家只要稍作了解即可。喜欢折腾的朋友可以自己动手试试...
    爅璃阅读 89,615评论 23 79
  • 我们说的Linux其实指的就是 内核(kernel)而已。这个内核控制你主机的所有硬件并提供系统所有的功能,所以它...
    Zhang21阅读 7,474评论 0 18
  • 1.虚拟化定义 虚拟化定义:虚拟化是一种资源管理技术,它将计算机的各种实体资源(CPU、内存、存储、网络等)予以抽...
    双子昕阅读 2,106评论 0 0