《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(6)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(5)

13.2 ATS(Address Translation Services)

单纯使用IOMMU并不能充分发挥处理器系统的效率,从图13-2中可以发现,

所有的PCI设备在进行DMA操作时,需要经过TA和ATPT进行地址翻译,然后才能访问主存储器。因而TA和ATPT很容易成为瓶颈,从而影响虚拟化系统的整体效率

除此之外,在图13-2中,EP1和EP2分别隶属于Domain1和Domain2。在正常情况下,一个Domain并不能访问其它Domain的PCI设备。但是如果处理器系统中存在一个恶意的虚拟机,而且EP1隶属于该虚拟机(Domain1)。当EP1进行DMA写操作时,该虚拟机填写的DMA写地址可以与EP2的BAR地址空间重合,那么启动DMA写操作时,Domain1可以将数据传递到EP2,从而影响Domain2的正常运行。

解决这种异常最合理的方法是,隶属于Domain1的PCI设备只能访问GPA1的空间,而仅使用IOMMU并不能解决该问题。解决该问题较为有效的方法是PCI设备进行数据传送的同时也进行地址转换,从而使该PCI设备使用的地址是经过转换的HPA地址此时再进行DMA写时,该数据将传递到与Domain1对应的HPA是地址空间中,而不会将数据传送到EP2。这样,这个恶意的虚拟机并不会影响其它正常工作的虚拟机。

PCIe总线使用ATS(Address Translation Services)机制实现PCIe设备的地址转换。支持ATS机制的PCIe设备,内部含有ATC(Address Translation Cache),ATC在PCIe设备中的位置如图13-8所示:

在ATC中存放ATPT的部分内容,当PCIe设备使用地址路由方式发送TLP时,其地址首先通过ATC转换为HPA地址。如果PCIe设备使用的地址没有在ATC中命中时,PCIe设备将通过存储器读取TLP从ATPT中获得相应的地址转换信息,更新ATC后,再发送TLP

与其它Cache类似,ATC还可以被Invalidate。当ATPT被更改时,处理器系统将发送Invalidate报文,同步在不同PCIe中的ATC。

PCIe总线在TLP中设置了AT字段以支持ATS机制在PCIe总线中,只有与存储器相关的TLP支持AT字段。值得注意的是,只有处理器系统支持IOMMU时,PCIe设备才可以使用ATS机制

13.2.1 TLP的AT字段

TLP的AT字段与ATS机制直接相关。根据AT字段的不同,PCIe设备可以发送三种类型的TLP

1. AT字段为0b00

当AT字段为0b00时,当前TLP的Address字段没有通过ATC进行转换,存放的是PCI总线域的物理地址

如果PCIe设备不支持ATS机制,而且处理器系统也没有使能IOMMU时,当前TLP的Address字段为PCI总线域的物理地址。PCIe设备进行DMA操作时,该地址被RC转换为存储器域的物理地址,然后对存储器进行读写操作;

如果PCIe设备不支持ATS机制,但是当前处理器支持IOMMU时,当前TLP的Address字段依然为PCI总线域的物理地址。PCIe设备进行DMA操作时,该地址将被TA根据I/O页表的设置,转换为合适的存储器域物理地址

如果当前处理器系统支持虚拟化技术,当前PCIe设备将隶属于某一个Domain,此时该PCIe设备进行DMA操作时,数据将被传送到属于该Domain的存储器域中。

2. AT字段为0b01

当AT字段为0b01时,表示当前TLP报文为“Translation Request”报文支持ATS机制的PCIe设备,必须支持这类报文

该报文由PCIe设备通过存储器读请求TLP发出,其目的地为TA。TA收到报文后,将根据I/O页表的设置,将合适的地址转换关系,通过存储器读完成TLP,发送给PCIe设备。而PCIe设备收到此地址转换关系后,将更新ATC。

3. AT字段为0b10

当AT字段为0b10时,表示当前TLP的Address字段已经通过ATC进行地址转换。当PCIe设备使用存储器读写报文进行DMA操作,而RC收到这些报文时,将不再通过TA和ATPT进行地址转换,而直接将数据发送给存储器。从而减轻了ATPT进行地址转换的压力。

值得注意的是,经过ATC进行地址转换后,在TLP的Address字段中存放的依然是PCI总线域的物理地址,该物理地址为HPA地址在PCI总线域中的映像

如果TLP中的Address字段没有经过ATC进行地址转换,并且处理器系统支持虚拟化技术,该地址为仍然对应GPA地址在PCI总线域中的映像。此时该TLP使用的AT字段为0b00。这些地址在经过RC后,将被转换为存储器域的地址,然后进入TA和ATPT再次进行地址转换。由以上描述可以发现,PCIe设备无论是否使用ATC机制,在TLP中存放的Address字段仍然保存的是PCI总线域地址

更多内容请看下回。

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

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

相关文章

Java基于微信小程序的医院挂号小程序,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

ERP系统扫盲:B端系统的集大成,其他系统都是弟弟。

B端管理系统扫盲的最后一篇,留给ERP吧。ERP可说是B端管理系统的集大成者,貌似什么功能都可以纳入ERP中,也貌似其他B端管理系统也就是ERP的一个分支而已。 一、ERP定义 ERP(Enterprise Resource Planning)是企业资源计…

第13章 网络 Page738~741 13.8.3 TCP/UDP简述

libcurl是C语言写成的网络编程工具库,asio是C写的网络编程的基础类型库 libcurl只用于客户端,asio既可以写客户端,也可以写服务端 libcurl实现了HTTP\FTP等应用层协议,但asio却只实现了传输层TCP/UDP等协议。 在学习http时介绍…

深入探讨Lambda表达式转换为委托类型的编译过程

了解了,如果要深入探讨Lambda表达式转换为委托类型的编译过程,我们需要关注C#编译器如何处理这个转换。这个过程涉及到编译时的类型推断、匿名方法的创建,以及生成对应的委托实例。我们来更详细地分析这个过程: 编译阶段 1. 解…

猫头虎分享:一文带你搞懂什么是SaaS、PaaS、LaaS、CaaS、FaaS、MBaaS

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

NodeLocal DNS介绍及部署应用

1 NodeLocal DNS是什么? NodeLocal DNSCache 通过在集群节点上运行一个 DaemonSet 来提高 clusterDNS 性能和可靠性。处于 ClusterFirst 的 DNS 模式下的 Pod 可以连接到 kube-dns 的 serviceIP 进行 DNS 查询。通过 kube-proxy 组件添加的 iptables 规则将其转换为…

463. Island Perimeter(岛屿的周长)

问题描述 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有…

肆拾玖坊泰斗酒,春节佳节送礼首选

眼看着童年春节就要到来了,作为一家人难得团团圆圆的日子,除了和家人一同吃团圆饭看春晚以外,很多人还会在正月里开始走亲访友,这时候也是礼尚往来的好时机,选择一瓶上好的美酒,带着和家人美好的祝福,去拜访难得一见的亲朋好友,共度佳节,这样才有着浓浓的年味。 很多人不知道肆…

Unity类银河恶魔城学习记录7-6 P72 Bouncy sword源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Sword_Skill_Controller.cs using System.Collections; using System.Colle…

[AIGC] 利用 chatgpt 深入理解 Java 虚拟机(JVM)

Java 虚拟机(JVM)是 Java 编程语言的核心运行环境,它负责解释和执行 Java 字节码。它是 Java 程序能够跨平台运行的关键,因为不同的操作系统和硬件平台都有自己的指令集和体系结构,而 JVM 则提供了一个统一的运行环境&…

梵宁教育:虚假宣传不实控诉,真相公布于众

近期,网络上出现了一些关于梵宁教育虚假宣传的言论,给梵宁教育及广大消费者带来了困扰和误解。作为负责任的教育机构,梵宁教育有必要站出来澄清这些不实言论,还原事实真相。 一、梵宁教育的基本情况 梵宁教育是一家致力于为学生…

多线程---创建线程

1.概述 多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段,每个线程都有独立的执行流程,可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提…