Linux系统设置IOMMU

一、IOMMU简介

  • IOMMU:input/output memory management unit。
  • 连接DMA io bus和主存,完成从设备虚拟地址到物理地址的映射。
  • 提供对故障设备的内存保护的功能。

优点

  • 因为IOMMU的映射,能够将多个不连续的物理地址映射为大块连续的地址供设备使用,便于简化驱动设计
  • 使旧设备(32bit设备)能够使用高位地址(能够改善内存使用,提高性能)
  • 内存保护,避免设备使用不属于它的地址
  • 提供硬件中断remapping功能

缺点

  •  地址转换和管理开销带来的性能降级
  •  消耗物理内存

虚拟化中的应用

一般来说,因为内存地址不同,虚拟机中的操作系统无法直接访问host上的设备。通过IOMMU,能够将设备地址在虚拟机中和host中映射为同样的支持,供虚拟机使用。这样的做法也能够缓解IO延时

iommu={off,force,noforce,soft}

通用IOMMU设置:参考文章:IOMMU - Linux 内核引导选项简介 - 开发文档 - 文江博客

off 彻底关闭IOMMU功能

force 强制使用硬件IOMMU,即使硬件可能有缺陷(例如VIA芯片组)或者根本没有必要这样做(例如内存不足3G)。

noforce(默认) 在内存不足3G的机器上,不使用硬件IOMMU,因为根本没有必要。

soft(Intel平台的默认值) 使用通过软件模拟的IOMMU(SWIOTLB),同时禁止使用硬件IOMMU(即使存在)。

二、Linux开启IOMMU

2.1 修改/etc/default/grub, 调整GRUB_CMDLINE_LINUX内容

GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet amd_iommu=on iommu=pt" 

#intel的cpu改为intel_iommu=on

#AMD的cpu改为amd_iommu=on

2.2 重新创建引导

如果服务器是UEFI启动,执行

centos系统

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

ubuntu系统

grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

如果服务器是 legacy模式启动

centos

grub2-mkconfig -o /boot/grub2/grub.cfg

ubuntu

grub-mkconfig -o /boot/grub/grub.cfg

2.3 在BIOS中开启IOMMU选项,如果网卡有对应的虚拟化选项需同步开启

2.4 查看状态

dmesg | grep -E "DMAR|IOMMU"

IOMMU启动状态

IOMMU 关闭状态

补充

iommu=pt并不会影响kvm/dpdk/spdk的性能,这三者本质上都是用户态驱动,iommu=pt只会影响内核驱动,能让内核驱动设备性能更高。

kvm一定要用intel_iommu=onDPDK/SPDK如果绑定vfio-pci那也一定要求intel_iommu=on,如果绑定uio/igb_uio那么就不需要intel_iommu=on,推荐都用vfio-pci,后面kvm中的pci-assign,DPDK/SPDK用到的igb_uio都得淘汰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值