当前位置: 首页 > news >正文

如何配置IOMMU或者SWIOTLB

1. 前言

这篇文章说明了如何在Linux内核中启用和配置IOMMU和SWOTLB。

当今的计算或者嵌入设备使用一种内存分区的方法进行外设的管理,如显卡、PCI设备或USB设备,都将设备映射为一段内存,用于设备的读写。

传统意义上的IOMMU用于内存映射,在系统初始化时就已设置,并且在系统运行时不能动态更改,因此有一定的局限性,所以芯片制造商(如Intel和AMD)开发了更先进的内存管理方法。

在Linux内核中,我们可以使用Intel的SWOTLB和AMD架构的其他机制来操作IOMMU。64位的系统已经能够使系统使用大量内存范围,但是这些内存需要在使用之前都需要进行映射。

2. IOMMU

近年来,制造商已经将IOMMU集成到CPU中,这也为我们升级内存速度、类型提供了便利,从而不需要再更换CPU。当然,内核仍需要设置并读取映射才能有效地使用系统内存。

2.1 使能IOMMU

IOMMU是一个硬件模块,在使用之前需要先配置使能它,具体如下所示:

Device Drivers --->

[*] IOMMU Hardware Support --->

Generic IOMMU Pagetable Support ----

[*] AMD IOMMU support

[*] Export AMD IOMMU statistics to debugfs

AMD IOMMU Version 2 driver

[*] Support for Intel IOMMU using DMA Remapping Devices

[*] Support for Shared Virtual Memory with Intel IOMMU

[*] Enable Intel DMA Remapping Devices by default

[*] Support for Interrupt Remapping

2.2 配置IOMMU

需要在内核命令行中添加以下用于控制内存映射各方面的选项,以使其生效。具体操作取决于系统的引导加载程序。常见的引导加载程序包括GRUB和Lilo。

有关引导加载程序的更多信息可以在这里找到:Category:Bootloaders - Gentoo wiki

2.2.1 Generic options

AttributeDescription and options
iommu=off This disables the IOMMU driver completely.
iommu=noforce Don't force hardware IOMMU usage when it is not needed.
iommu=force The use of the hardware IOMMU even when it is not actually needed (e.g. because < 3 GB memory).
iommu=soft Use software bounce buffering (SWIOTLB) (default for Intel machines). This can be used to prevent the usage of an available hardware IOMMU. (read bellow for Intel SWIOTLB).

2.2.2 AMD64 systems

AttributeDescription and options
amd_iommu=nofullflush,
amd_iommu=fullflush,
amd_iommu=off,
amd_iommu=force_isolation
Enable flushing of IO/TLB entries they are unmapped. Otherwise they are flushed before they will be reused, which is a lot of faster.
off = do not initialize any AMD IOMMU found in the system.
force_isolation = Force device isolation for all devices. The IOMMU driver is not allowed anymore to lift isolation requirements as needed. This option does not override iommu=pt.
amd_iommu_dump=0,
amd_iommu_dump=1
This is a boolean option: 0 = disabled, 1 = enabled
This is to dump the ACPI table for AMD IOMMU. With this option enabled, AMD IOMMU driver will print ACPI tables for AMD IOMMU during IOMMU initialization.
amd_iommu_intr=legacy,
amd_iommu_intr=vapic
Specifies one of the following AMD IOMMU interrupt remapping modes:
legacy = Use legacy interrupt remapping.
mode.vapic = Use virtual APIC mode, which allows IOMMU to inject interrupts directly into guest. This mode requires kvm-amd.avic=1. (Default when IOMMU HW support is present.)

2.2.3 Intel systems

Intel generally adopts "an-always-enable-it-if-it-is-supported" rule so most options are to turn off or disable the IOMMU functions.

AttributeDescription and options
intel_iommu=on,
intel_iommu=off
This is a boolean option: on = enabled, off = disabled.
intel_iommu=igfx_off This option turns off mapping for a graphics card and is the default state for this option. The gfx is mapped as normal device. If a gfx device has a dedicated DMAR unit, the DMAR unit is bypassed by not enabling DMAR with this option. In this case the gfx device will use physical address for DMA.
intel_iommu=forcedac With this option iommu will not optimize to look for io virtual address below 32-bit forcing dual address cycle on pci bus for cards supporting greater than 32-bit addressing. The default is to look for translation below 32-bit and if not available then look in the higher range.
intel_iommu=strict The default setting for this is disabled. This option on every unmap_single operation will result in a hardware IOTLB flush operation as opposed to batching them for performance.
intel_iommu=sp_off Super Page which is by default enabled if supported, you can turn this off using this option.
intel_iommu=ecs_off By default, extended context tables will be supported if the hardware advertises that it has support both for the extended tables themselves, and also PASID support. With this option set, extended tables will not be used even on hardware which claims to support them.

3. SWIOTLB

SWOTLB是Intel的一项技术,它有点绕过了IOMMU,并提供了一个可配置内存管理的接口。无需深入探讨其工作原理,页面表被缓存到Lookaside Buffer,减少了不断访问物理内存以进行内存映射的需求。这项技术也被称为bounce buffer,因为内存映射的物理地址保存在这个虚拟空间中,I/O在物理I/O和物理内存之间通过virtual lookaside buffer进行bounce。这使得内存映射可以快速进行,更快地提供可用的物理内存空间。

每个IO TLB称为一个“slab”,可以在内核头文件swiotlb.h中找到:

/usr/src/linux-*/include/linux/swiotlb.h

* Maximum allowable number of contiguous slabs to map,

* must be a power of 2. What is the appropriate value ?

* The complexity of {map,unmap}_single is linearly dependent on this value.

#define IO_TLB_SEGSIZE 128

* log of the size of each IO TLB slab. The number of slabs is command line

* controllable.

*

这意味着1MB将是8个slabs,作为启动参数使用的值是以slabs为单位,而不是以大小为单位。

AttributeDescription and options
swiotlb=n'th amount of slabs This specifies the amount of slabs to be used by IOTLB, each slab consists of 128K each which is 8 slabs per 1Mb(1024K), so a 64MB SWIOTLB would consist of 512 slabs. You can increase or decrease this value to allow for more buffering of virtual memory addresses in the buffer or not. Default is 64MB or 512 slabs.
swiotlb=force This option will force all system IO through the SWIOTLB so there will be no IOMMU controlled by the BIOS or the IOMMU driver elsewhere if one existed.

相关文章:

如何配置IOMMU或者SWIOTLB

1. 前言 这篇文章说明了如何在Linux内核中启用和配置IOMMU和SWOTLB。 当今的计算或者嵌入设备使用一种内存分区的方法进行外设的管理&#xff0c;如显卡、PCI设备或USB设备&#xff0c;都将设备映射为一段内存&#xff0c;用于设备的读写。 传统意义上的IOMMU用于内存映射&a…...

【大数据 复习】第3章 分布式文件系统HDFS(重中之重)

一、概念 1.分布式文件系统把文件分布存储到多个计算机节点上&#xff0c;通过网络实现、文件在多台主机上进行分布式存储的文件系统。&#xff08;就是你的电脑存a&#xff0c;我的电脑存pple&#xff09; 2.降低了硬件开销: 与之前使用多个处理器和专用高级硬件的并行化处理装…...

element-ui里message抖动问题

由于element默认屏蔽滚动条&#xff0c;导致取消时弹message时 侧边滚动栏突然回来后引起抖动问题 是由于打开弹窗时出现遮罩层dialog对话框 时引起了元素内容超出自身尺寸 对应的overflow样式内容为hidden&#xff0c;且新建了一个class类内容为增加17 内右边距&#xff0c;当…...

Attention系列总结-粘贴自知乎

1. 梦想做个翟老师&#xff1a;阿里&#xff1a;Behavior Sequence Transformer 解读48 赞同 7 评论文章 优点:捕捉用户行为历史序列中的顺序信息。w2v也是捕捉用户序列信息的,本质差异在于啥&#xff1f; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff0…...

swagger下载文件名中文乱码、swagger导出文件名乱码、swagger文件导出名称乱码、解决swagger中文下载乱码bug

文章目录 一、场景描述&#xff1a;swagger导出文件名称乱码二、乱码原因三、解决方法3.1、方法一、在浏览器中输入地址下载3.2、方法二、swagger升级为2.10.0及以上 四、可能遇到的问题4.1、DocumentationPluginsManager.java:152 一、场景描述&#xff1a;swagger导出文件名称…...

191.回溯算法:组合总和|||(力扣)

代码解决 class Solution { public:vector<vector<int>> result; // 存储所有符合条件的组合vector<int> res; // 当前组合// 回溯函数void backtracing(int k, int n, int index, int sum) {// 如果当前组合的长度等于k&#xff0c;且总和等于nif (res.si…...

JupyterLab使用指南(二):JupyterLab基础

第2章 JupyterLab基础 2.1 JupyterLab界面介绍 JupyterLab的用户界面非常直观和灵活。它包括文件浏览器、工作区、多标签页、命令面板和侧边栏等功能。以下是各个部分的详细介绍&#xff1a; 2.1.1 文件浏览器 文件浏览器位于界面左侧&#xff0c;用于导航和管理文件。你可…...

ubuntu18.04 + openssl + engine + pkcs11+ softhsm2 双向认证测试

安装环境 openssl 1.1.1 pkcs11-tool &#xff08;由sudo apt-get install opensc 安装&#xff09; libpksc11 &#xff08;需源码安装apt install 只有libp11, 源码安装才有 libpksc11.so -> pkcs11.so&#xff09; softhsm2 &#xff08;由sudo apt-get install softhsm…...

【C++】类和对象2.0

俺来写笔记了&#xff0c;哈哈哈&#xff0c;浅浅介绍类和对象的知识点&#xff01; 1.类的6个默认成员函数 俺们定义一个空类&#xff1a; class N {}; 似乎这个类N里面什么都没有&#xff0c;其实不是这样子的。这个空类有6个默认的成员函数 。 默认成员函数&#xff1a…...

【LLM之KG】KoPA论文阅读笔记

研究背景 知识图谱补全&#xff08;KGC&#xff09;是通过预测知识图谱中缺失的三元组来完善知识图谱的信息。传统方法主要基于嵌入和预训练语言模型&#xff0c;但这些方法往往忽视了知识图谱的结构信息&#xff0c;导致预测效果不佳。 研究目标 本文的研究目标是探索如何将…...

UI设计速成课:理解模态窗口与非模态窗口的区别

我们日常所说的弹性框架是非常笼统的概念。我们习惯性地称之为对话框架、浮动层和提示条。弹性框架可以分为两种:模态弹性框架和非模态弹性框架。产品需要弹性框架来传递信息&#xff0c;用户需要弹性框架来接受反馈&#xff0c;但是没有经过推敲的弹出窗口设计很容易让用户感到…...

【Linux】基础IO_4

文章目录 六、基础I/O4. 动静态库 未完待续 六、基础I/O 4. 动静态库 既然我们能够成功创建静态库了&#xff0c;接下来我们将这个代码打包成动态库&#xff1a; shared: 表示生成共享库格式 fPIC&#xff1a;产生位置无关码(position independent code) 动态库库名规则&…...

C++模板类原理讲解

C模板类原理讲解 C模板是一种强大的编译期工具&#xff0c;它允许我们创建通用的、类型无关的类和函数。模板的主要目的是实现代码的重用和泛型编程。模板类的原理涉及以下几个方面&#xff1a; 模板的定义和实例化模板的类型参数模板特化模板的编译过程模板的优点和缺点 1.…...

scratch编程03-反弹球

这篇文章和上一篇文章《scratch3编程02-使用克隆来编写小游戏》类似&#xff08;已经完全掌握了克隆的可以忽略这篇文章&#xff09;&#xff0c;两篇文章都使用到了克隆来编写一个小游戏&#xff0c;这篇文章与上篇文章不同的是&#xff0c;本体在进行克隆操作时&#xff0c;不…...

postgresql数据库进阶知识

postgresql数据库进阶知识 # 如果表存在就先删除 drop table if exists student; # 创建学生表 # id serial not null 表示id自增 # id integer not null 表示id不自增 create table student (id serial not nullconstraint student_pkprimary…...

关于HTTP劫持,该如何理解、防范和应对

一、引言 HTTP劫持&#xff08;HTTP Hijacking&#xff09;是一种网络安全威胁&#xff0c;它发生在HTTP通信过程中&#xff0c;攻击者试图通过拦截、篡改或监控用户与服务器之间的数据流量&#xff0c;以达到窃取敏感信息或执行恶意操作的目的。今天我们就来详细了解HTTP劫持…...

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败 解决方法&#xff1a; 首先%oracle_home%/network/admin下的sqlnet.ora文件&#xff0c;把SQLNET.AUTHENTICATION_SERVICES (NTS)加个 # 注释掉就好了...

saas产品运营案例 | 联盟营销计划如何帮助企业提高销售额?

在当今数字化时代&#xff0c;SaaS&#xff08;软件即服务&#xff09;产品已成为企业提高效率、降低成本的重要工具。然而&#xff0c;面对激烈的市场竞争&#xff0c;如何有效地推广SaaS产品、提高销售额&#xff0c;成为许多企业面临的挑战。林叔将以ClickFunnels为例&#…...

模式分解算法-满足3NF的无损且保持函数依赖的分解算法、满足BCNF的无损连接分解算法

一、引言 1、对指定的关系模式&#xff0c;若范式级别较低&#xff0c;为第一范式或第二范式&#xff0c;由于存在数据冗余或更新异常问题&#xff0c;在实际中一般是不可用的&#xff0c;关系模式的规范化就是将满足低一级的关系模式分解为若干满足高一级范式的关系模式的集合…...

荷兰与法国战平,双方能携手出现?

就在昨天晚上&#xff0c;荷兰队经历了90分钟的鏖战&#xff0c;最终0-0与法国队握手言和。此役&#xff0c;哈维-西蒙斯为荷兰队打进一球&#xff0c;但进球被判无效。从目前的积分形势来看&#xff0c;双方基本上确定携手晋级16强赛。本场比赛&#xff0c;荷兰队后卫内森-阿克…...

从双非到科软:我的22408备考复盘与实战指南

1. 双非逆袭科软&#xff1a;我的备考心路历程 作为一名双非院校的计算机专业学生&#xff0c;我深知考研这条路有多难走。去年这个时候&#xff0c;我也和屏幕前的你一样&#xff0c;在知乎、贴吧疯狂搜索各种经验贴&#xff0c;既期待又忐忑。现在回想起来&#xff0c;从3月到…...

对比直接使用官方API,体验通过Taotoken进行多模型选型与切换的便捷性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用官方API&#xff0c;体验通过Taotoken进行多模型选型与切换的便捷性 在实际的开发工作中&#xff0c;我们常常需要根据…...

终极指南:3步重塑你的Windows桌面视觉体验

终极指南&#xff1a;3步重塑你的Windows桌面视觉体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想象一下&#xff0c;当你专注工作…...

Cortex-M中断优先级配置与优化实践

1. 中断处理机制基础解析在嵌入式系统开发中&#xff0c;中断处理是最核心的机制之一。Cortex-M系列处理器采用嵌套向量中断控制器(NVIC)来管理中断优先级&#xff0c;其设计哲学是允许高优先级中断打断低优先级中断的执行&#xff0c;形成中断嵌套。这种机制确保了关键任务能够…...

Docker化部署KingbaseES V9:从镜像导入到开发版License激活实战

1. 为什么选择Docker部署KingbaseES V9&#xff1f; 在开发测试环境中&#xff0c;传统数据库安装方式往往需要耗费大量时间在环境配置和依赖解决上。我去年参与的一个政务云项目就遇到过这种情况&#xff1a;团队花了三天时间在不同操作系统的测试机上反复折腾依赖库&#xff…...

告别wx.startRecord!微信小程序录音功能保姆级教程(RecorderManager全解析)

微信小程序录音功能深度重构指南&#xff1a;从wx.startRecord到RecorderManager的完整迁移方案 在微信小程序开发生态中&#xff0c;音频处理能力一直是实现丰富交互体验的核心组件之一。随着技术架构的持续优化&#xff0c;微信团队对录音API进行了重大升级&#xff0c;用更现…...

【工具实战】告别网页操作:利用Alist+Rclone打造无缝云盘本地化体验

1. 为什么需要云盘本地化&#xff1f; 每次想从网盘下载文件都要打开浏览器、登录账号、找到文件、点击下载&#xff0c;这一套流程走下来至少得花两三分钟。更别提上传大文件时网页端动不动就卡死&#xff0c;或是遇到网络波动导致传输中断的糟心体验。我去年整理家庭照片时就…...

Real World Rails实战:10个高效学习Rails开发的最佳实践

Real World Rails实战&#xff1a;10个高效学习Rails开发的最佳实践 【免费下载链接】real-world-rails Real World Rails applications and their open source codebases for developers to learn from 项目地址: https://gitcode.com/gh_mirrors/re/real-world-rails …...

转:调动员工积极性的七个关键

个人理解&#xff1a; 经营的原点&#xff0c;就是“调动员工的积极性” 讲述自己的哲学&#xff0c;与员工们共有这种哲学 思想意识发生变化&#xff0c;积极性、主动性提高 稻盛和夫&#xff1a;调动员工积极性的七个关键 稻盛和夫&#xff1a;调动员工积极性的七个关键 稻…...

量子计算中SIMD编译优化与离子阱架构实践

1. 量子计算中的SIMD编译优化概述量子计算正逐步从理论走向实践&#xff0c;而离子阱架构因其长相干时间和高保真度操作成为当前最有前景的物理实现方案之一。在传统量子编译器中&#xff0c;指令调度往往采用串行执行模式&#xff0c;导致离子传输和量子门操作存在大量等待时间…...