关于IOMMU问题的扩展

关联CSDN:

Steam Deck OLED WLAN下载速率过低问题的排查和解决-CSDN博客

前言

如前所述,Steam Deck OLED WLAN速率低问题和IOMMU有一定的关系,这里我们对IOMMU为什么会对速率有影响进行一个较深入的理解。

对于IOMMU我相信大家通过网上的资料,或多或少都有一定的了解,那在这里我们只是简单的描述下,具体相关的资料大家可以google等等。。。

首先IOMMU(Input and Output Memory Management Unit)可以我们可以直接理解为一个硬件单元,主要的作用是地址的转换和地址的隔离,可以将它和MMU进行类比。

从上图可以看出,IOMMU是直接内存访问,即设备与内存直接通信,而无需经过CPU的一个操作。

IOMMU: https://en.wikipedia.org/wiki/Input%E2%80%93output_memory_management_unit

接下来我们理解为什么IOMMU会影响Steam Deck OLED WLAN的速率:

基于市场环境,大部分外设的寻址范围优先,以目前主流的32位设备为例,其在物理内存中直接寻址的范围是0~4GB。但是,现代操作系统的内存往往大于4GB。如果设备申请DMA时,内核为设备分配的DMA buffer的地址高于4GB(如上图所示简称为"high buffer"),则设备将无法寻址到它。

但是有了IOMMU以后,IOMMU就可以在0~4GB范围内分配一段与高地址buffer长度相同的内存,让设备能够直接寻址(以下称为"low buffer")。设备向low buffer写入后,IOMMU就会将low buffer中的内容,复制到high buffer,而后通知CPU从high buffer读取内容。反之亦然——CPU向high buffer写入后,IOMMU就会将high buffer中的内容,复制到low buffer,而后通知设备从low buffer读取内容。这样,CPU和设备都能读取到对方写入的内容,这样就不会占用过多的CPU资源,以提高数据搬用的效率。这样在"high buffer"和"low buffer"之间复制内容的操作,在IOMMU机制中被称为"sync"或"bounce"。

如前描述Steam Deck OLED WLAN使用的是Qualcomm QCA2066芯片,其支持能力如下所示:


WLAN

  • Compliant with lEEE 802.11a/b/g/n/ac/ax Supports 2x2 Muli-User Multiple-nput Multiple-Qutput(MU-MIMO)
  • Dual Band Simultaneous(DBS), up to 3 Gbps data rate(2x2+2x2 11ax DBS)
  • Tri-band 2.4 GHz/5 GHz/6 GHz support 20 MHz/40 MHz channel bandwidth for 2.4 GHz and 20MHz/40 MHz/80 MHz/160 MHz channel bandwidth for 5 GHz/6 GHz
  • Seamless antenna sharing with Bluetooth, LTE, LTE-U.and 5G
  • Dynamic Frequency Selection (DFS, radar detection)
  • Offloading traffc for minimal host ulilization at 802.11ac/ax speeds
  • Low-power PCle (with Li substate) interface
  • Integrated close-loop power detector

Bluetooth

  • Compliant with Bluetooth Milan and ANT+
  • Supports 2 Mbps Bluetooth Low Energy (BLE), BLE LOngRange
  • Split ACL support for A2DP true stereo (earbuds)
  • Dedicated Bluetooth antenna, sharing Bluetooth antenna with WLAN, and concurrent with 5G WLAN
  • Dual eSCO and dual A2DP streams
  • Supports class 1 and class 2 power-level transmissions without requiring an extemal PA (power amplifier)
  • Backward-compatible with previous Bluetooth standards
  • Flexible interace Slimbus, PCM2S for Bluetooth audio

因为QCA2066的PCIe寻址范围被限制到了0~4G,所以跑流时,PCIe无法直接访问高于4G以上的内存,并且IOMMU没有被使能,所以就会发生大量的软中断进行数据的搬运,基于上图,也能直观的看到问题的原因。

这里再插个话题:

为啥Qualcomm QCA206x设备使能的是32位DMA MASK(本身支持36位 DMA MASK),而不是36位的DMA MASK,这里做了一个猜测:因为我们平常适配的都是嵌入式ARM设备,对于嵌入式ARM设备的话,其实本身的物理内存一般都是小于4G的(当前有一些Android设备除外),所以对于物理内存小于4G的设备,本身在进行内存拷贝的时候,也就不需要IOMMU的参与了,所以QCA206x只需要使能32位的DMA MASK,另一个原因是为了兼容性,一些嵌入式ARM设备不支持36位的DMA MASK。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模板引擎与 XSS 防御

在 View 层,可以解决 XSS 问题。在本书的“跨站脚本攻击”一章中,阐述了“输入检查” 与“输出编码”这两种方法在 XSS 防御效果上的差异。XSS 攻击是在用户的浏览器上执行的, 其形成过程则是在服务器端页面渲染时,注入了恶意的 H…

Android中的Audio系统框架分析(一)

概述 Audio系统是Android 平台重要的组成部分,我们将从以下几个方面来讲解: 一Audio基础知识讲解 二、Android系统中Audio框架 Audio基础知识讲解 我们大家知道声音是由物体振动产生的声波。是通过介质(空气或固体、液体)传播并…

CrossOver Games For Mac官方下载_2024电脑最新版软件安装包下载

CrossOver Pro For Mac是由codewaver公司开发的类虚拟机软件,目的是使linux和Mac OS X操作系统和window系统兼容。CrossOver Pro For Mac能够直接在Mac上运行Windows软件与游戏,而不需虚拟机,功能是非常强大的,值得大家下载使用。…

Linux系统基本知识----1

1.什么是Linux中的权限,并举例说明。 ****Linux权限是操作系统用来控制特定用户或用户组可以对文件或目录执行的操作的一种机制。例如,chmod 755 filename 命令会设置filename文件的权限,使得拥有者可以读/写/执行,而组用户和其他…

Android Audio实战——声道信息回调(五)

在前面的 AudioTrack 构造中,我们传入了音频的声道信息,这一节我们就来详细介绍一下声道的配置信息。 一、声道介绍 音频中的声道配置从单声道到双声道(立体声)、再到多声道系统(如5.1和7.1),代表了声音录制和回放技术的发展,旨在提供越来越丰富和沉浸式的听觉体验。 …

在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行

在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行 很喜欢的一段话:别想太多,好好生活,也许日子过着过着就会有答案,努力走着走着就会有温柔的着落。 春在路上,花在枝上,所有的美好都在路上&#xff…

【测试专题】系统测试报告(原件Word)

软件测试报告在软件开发过程中起着至关重要的作用,主要有以下几个主要原因: 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…

程序猿大战Python——文件操作、异常、模块——os模块

查看目录 目标:了解查看目录的使用。 Python中的os模块包含有操作系统所具备的功能,如查看路径、创建目录、显示文件列表等。 os模块是Python标准库,可直接导入使用: # 导入os模块 import os 在Python中,os模块的常…

全面介绍Linux中的Vim编辑器

一、Vim简介 Vim(Vi IMproved)是从经典的Unix文本编辑器Vi发展而来的一个强大、可扩展的文本编辑器。Vim被设计为高度可配置的,并且具备强大的插件系统,使得它不仅适用于程序员,还适合日常文本编辑。与普通的文本编辑…

H5应用调用企业微信扫一扫API扫码方法

场景:自行开发的企微应用例如扫码入库、二维码资产盘点等等 官网地址:使用说明 - 接口文档 - 企业微信开发者中心 扫一扫接口说明:企业微信扫一扫 - 接口文档 - 企业微信开发者中心 使用Js版本: http://res.wx.qq.com/open/js/jweixin-1.2.0.js 前端JS代码&…

IO流(二)

IO流(二) 目录 IO流 —— 字符流IO流 —— 缓冲流IO流 —— 转换流IO流 —— 打印流IO流 —— 数据流IO流 —— 序列化流 1.IO流 —— 字符流 文件字符输入流 —— 读字符数据进来 字节流:适合复制文件等,不适合读写文本文件字…

nginx rewrite地址重写

目录 常用的nginx正则表达式 location和rewrite的区别 一、location 1.location常用匹配类型 2.location匹配机制 3.实际工作中三大匹配规则 1.网站首页匹配 2.网站静态页面,通过前缀匹配或通用匹配在nginx服务器本地处理 3.网站动态页面,通过匹…

TypeScript语法解析与进阶扩展

TypeScript 1、类型别名2、字符串字面量类型3、元组4、枚举5、类5.1、public private protected5.2、readonly5.3、抽象类5.4、静态成员5.5、类实现接口5.6、接口继承接口5.7、接口继承类 6、泛型6.1、多个类型参数6.2、泛型约束6.3、泛型接口6.4、泛型类6.5、泛型参数的默认类…

Veeam Backup Enterprise Manager身份验证绕过漏洞(CVE-2024-29849)

一、漏洞概述【漏洞通告】 漏洞名称 Veeam Backup Enterprise Manager身份验证绕过漏洞 CVE ID CVE-2024-29849 漏洞类型 身份验证绕过 发现时间 2024-05-22 漏洞评分 9.8 漏洞等级 严重 攻击向量 网络 所需权限 无 利用难度 低 用户交互 无 PoC/EXP 已…

PostgreSQL源码分析——initdb

数据库初始化 在安装完数据库后,需要进行初始化数据库操作,对应PostgreSQL数据库中就是需要进行initdb后,才能对数据库进行启动。initdb的过程,其实就是创建数据库实例的过程,生成模板数据库和相应的目录、文件信息&a…

uniapp小程序限制微信群访问(图文教程)

我有一个微信小程序 “程序员实用资源” 我现在只想让我的微信群可以访问这个小程序的所有功能 所以我必须对我小程序的来源进行限制,让部分功能在正常访问的时候提示没有加群,不可访问,只有从群内点击进入小程序的时候才可以访问这部分功能…

目标检测顶会新成果!20个突破性方法,更高性能,更强理解与分析能力!

【目标检测】在近年来的深度学习领域中备受关注,它通过识别和定位图像中的目标对象,提升了模型在图像理解和分析方面的能力。目标检测技术在自动驾驶、安防监控和医疗影像分析等任务中取得了显著成果。其独特的方法和卓越的表现使其成为研究热点之一。 为…

ESP32蓝牙串口通讯

文章目录 一、前言二、代码三、运行 一、前言 ESP32支持经典蓝牙和低功耗蓝牙(BLE),经典蓝牙可在计算机上模拟出一个串口,使得ESP32可以以串口的方式和计算机通信。 二、代码 #include "BluetoothSerial.h"String device_name …

2025计算机毕业设计选题题目推荐-毕设题目汇总大全

选题在于精,以下是推荐的容易答辩的选题: SpringBoot Vue选题: 基于SpringBoot Vue家政服务系统 基于SpringBoot Vue非物质文化遗产数字化传承 基于SpringBoot Vue兽医站管理系统 基于SpringBoot Vue毕业设计选题管理系统 基于SpringBoot Vue灾害应急救援…

004 AOP使用

文章目录 基于AspectJ的AOP的使用添加依赖编写目标类和目标方法使用XML实现实现步骤切入点表达式通知类型 使用注解实现实现步骤环绕通知注解配置定义通用切入点 纯注解方式 基于AspectJ的AOP的使用 其实就是指的SpringAspectJ整合,不过Spring已经将AspectJ收录到自…