前言
之前一直在Intel平台下部署深度学习训练环境,但近来牙膏厂的CPU性能拉胯,尝试了一下AMD平台,没想到才安装就翻车了,记录一下故障修复过程 。
安装失败
官网上下载了20.04 LTS,U盘纯净方式安装,收获一堆‘的”AMD-Vi -wait loop timed out“ 。
禁用 IOMMU
折腾半天,原来是AMD内存管理引擎引起的,可以简单关闭 IOMMU 先让安装可进行下去 。
?
进入BIOS,选择,找到 IOMMU 选择,禁用虚拟化
?
IOMMU设置IOMMU 是什么?
在计算机领域,IOMMU(Input/Unit)是一个内存管理单元(Unit),它的作用是连接DMA- I/O总线(- I/O Bus)和主存(main ) 。传统的内存管理单元会把CPU访问的虚拟地址转化成实际的物理地址 。而IOMMU则是把设备()访问的虚拟地址转化成物理地址 。为了防止设备错误地访问内存,有些IOMMU还提供了访问内存保护机制 。参考下图:
IOMMU的一个重要用途是在虚拟化技术():虚拟机上运行的操作系统(guest OS)通常不知道它所访问的host-内存地址 。如果要进行DMA操作,就有可能破坏内存,因为实际的硬件()不知道guest-和host-内存地址之间的映射关系 。IOMMU根据guest-和host-内存地址之间的转换表( table),re-硬件访问的地址,就可以解决这个问题 。
优点
与内存的直接物理寻址 (DMA) 相比,拥有 IOMMU 的优势包括:
内存受到保护,免受尝试 DMA 攻击的
恶意设备和尝试错误内存传输的故障设备的影响,因为设备无法读取或写入尚未明确分配(映射)的内存 。内存保护基于运行在 CPU 上的操作系统(见图)独占控制 MMU 和 IOMMU 。这些设备在物理上无法绕过或破坏配置的内存管理表 。
【AMD-Vi completion-wait loop timed out?】
文章插图
在某些架构中,IOMMU 还执行硬件中断重新映射,其方式类似于标准内存地址重新映射 。
IOMMU 可以支持外设内存分页 。使用 PCI-SIG PCIe 地址转换服务 (ATS) 页面请求接口 (PRI) 扩展的外设可以检测内存管理器服务的需求并发出信号 。
对于端口 I/O 是与内存地址空间不同的地址空间的系统架构,当 CPU 通过I/O 端口与设备通信时,不使用 IOMMU。在端口 I/O 和内存映射到合适地址空间的系统架构中,IOMMU 可以转换端口 I/O 访问 。
缺点
与内存的直接物理寻址相比,拥有 IOMMU 的缺点包括:
改进
显然简单关闭 IOMMU 并不是一个最佳选择,除非你想运行32位linux 。在AMD 64位处理器系统上,IOMMU能力对于许多事情都是必要的,特别是 PCIE 的显卡加速 。而采用"soft" IOMMU 则无法使用虚拟化,这里有一个推荐设置来修复这个问题 。
参考链接?
#
?