Linux 下檢查 VT-d / IOMMU 是否開啓

歡迎轉載,但請在開頭或結尾註明原文出處【blog.chaosjohn.com】html

介紹

VT-dIOMMU 其實都是指的 I/O 虛擬化,只不過前者是 Intel 的叫法,後者是 AMD 的叫法:api

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

這項技術是能夠讓PCI-e設備的資源直接分配給虛擬機,即 PCI直通markdown

舉個例子,在虛擬客戶機裏能夠直接訪問到物理顯卡,性能比使用由 VMM/Hypervisor 虛擬出來的顯卡好不少,而且還支持 顯卡加速app

在 Linux 下檢查是否開啓

通常來講,在主板的 BIOS/UEFI 裏,能找到 VT-d / IOMMU 的設置項,設爲開啓便可。oop

可是也有特殊狀況,某些主板裏是找不到該項設置的,這裏分兩種狀況:性能

  • 主板硬件或固件不支持 I/O 虛擬化
  • 主板刷入了閹割版的固件,可是實際上 VT-d / IOMMU 是被啓用的

那若是在 Linux 下如何檢查是否開啓呢?spa

若是 VT-d / IOMMU 被啓用,Linux 在啓動過程當中會配置 DMA重映射,因此簡單的方法是在 dmesg 裏查找 DMAR 相關項。code

  • 在已開啓的機子上:
# 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 的輸出orm

  • 在未開啓的機子上:
# dmesg | grep DMAR
#
複製代碼

什麼輸出都沒有,即沒有找到任何與 DMAR 相關的項htm

相關文章
相關標籤/搜索