linux性能优化基础——iommu相关配置
小喇叭故事网此篇⽂档介绍了IOMMU相关的信息:
ig是啥iommu和vt-d都是io半虚拟化的⼀种技术,两者很接近,只不过iommu是AMD的,vt-d是Intel的。
maintainerIO半虚拟化对⽐IO虚拟化,主要是虚拟机可直接和IO设备通信,⽽不必⾛VMM虚拟出来的虚拟IO设备。举例来说,VMguest系统可以直接访问物理显卡并调⽤其资源,⽽不必通过VMM虚拟出来的显卡调⽤资源。
linux中检查IOMMU是否开启
⼀般可以在主板BIOS/UEFI中可以找到,但是如果该硬件不⽀持虚拟化或者硬件固件被阉割但是实际上vt-d/iommu是被启⽤的。所以通过BIOS/UEFI固件并不能保证⼀定可以看到IOMMU信息。
正确的⽅法是通过dmesg命令查看。因为如果vt-d或者ioMmu开启并被使⽤,系统就会配置和启动DMA重映射,所以通过观察DMA是否启动来得知iommu是否开启。
执⾏以下命令:
dmesg | grep -i dmar
可以得到如下结果:英文圣诞歌
进一步英文
[ 0.144034] DMAR: IOMMU enabled爱你一生一世英文
[ 0.779260] DMAR: Host address width 52海啸奇迹 豆瓣
...friends with benefits
[ 0.779305] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.781570] DMAR-IR: Enabled IRQ remapping in x2apic mode
agreewith
<
[ 3.776139] DMAR: Intel(R) Virtualization Technology for Directed I/O
可以看到有“IOMMU enabled”的信息,这说明此运⾏时系统打开了IOMMU。
除了⽤dmesg,还可以通过 cat /proc/cmdline 指令查看iommu是否打开。cmdline中的参数会被内核执⾏命令⾏时获取并解析,但不代表该⼀定能够起作⽤,也有发现cmdline中某配置被设置为enabling但是实际上系统却并没有打开它的情况。