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

news2024/12/24 8:14:55

接前一篇文章:《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.coloradmin.cn/o/1452138.html

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

相关文章

WordPress站点如何实现发布文章即主动推送到百度快速收录和普通收录?

我们在WordPress后台成功发布文章之后,如果靠搜索引擎来抓取的话,可能会比较慢,所以十分有必要将我们成功发布的文章马上提交到百度、必应等搜索引擎中。下面boke112百科就跟大家说一说WordPress站点如何实现发布文章即主动推送到百度快速收录…

基于SpringBoot的教学管理app的开发65449-计算机毕业设计项目选题推荐(附源码)

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对教学管理等问题,对其进行研究分…

Electron实战之进程间通信

进程间通信(IPC)并非仅限于 Electron,而是源自甚至早于 Unix 诞生的概念。尽管“进程间通信”这个术语的确创造于何时并不清楚,但将数据传递给另一个程序或进程的理念可以追溯至 1964 年,当时 Douglas McIlroy 在 Unix…

centos中docker操作+安装配置django+mysql5.7并使用simpleui美化管理后台

一、安装docker 确保系统是CentOS 7并且内核版本高于3.10,可以通过uname -r命令查看内核版本。 更新系统软件包到最新版本,可以使用命令yum update -y。 安装必要的软件包,包括yum-utils、device-mapper-persistent-data和lvm2。使用命令yum install -y yum-utils devic…

【51单片机】如何【手搓】定时器寄存器配置【低8位TL0(low)】和【高8位TH0(high)】

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 本文是【【51单片机】从零开始手把手带你【查手册】配置定时器,并完成小项目(定时器&中断的应用)】博…

C++,stl,常用排序算法,常用拷贝和替换算法

目录 1.常用排序算法 sort random_shuffle merge reverse 2.常用拷贝和替换算法 copy replace replace_if swap 1.常用排序算法 sort 默认从小到大排序 #include<bits/stdc.h> using namespace std;int main() {vector<int> v;v.push_back(1);v.push_ba…

cpp杂项知识点(一)

大小端验证 代码如下&#xff1a; #include <iostream> #include <stdio.h> #include <memory> #include <string.h> #include <string>using namespace std;void hexdump(void *pSrc, int len ) {unsigned char *line;int i;int thisline;in…

Java的集合框架和泛型

文章目录 集合框架什么是集合框架类和接口总览 集合框架的重要性背后所涉及的数据结构以及算法什么是数据结构容器背后对应的数据结构什么是算法 包装类基本数据类型和对应的包装类装箱和拆箱自动装箱和自动拆箱 泛型什么是泛型引出泛型语法泛型类泛型的上界(没有下界)泛型方法…

Vue2学习第三天

Vue2 学习第三天 1. 计算属性 computed 计算属性实现 定义&#xff1a;要用的属性不存在&#xff0c;要通过已有属性计算得来。 原理&#xff1a;底层借助了Objcet.defineproperty方法提供的getter和setter。 get函数什么时候执行&#xff1f; 初次读取时会执行一次。当依赖…

知识图谱:py2neo将csv文件导入neo4j

文章目录 安装py2neo创建节点-连线关系图导入csv文件删除重复节点并连接边 安装py2neo 安装python中的neo4j操作库&#xff1a;pip install py2neo 安装py2neo后我们可以使用其中的函数对neo4j进行操作。 图数据库Neo4j中最重要的就是结点和边&#xff08;关系&#xff09;&a…

数字经济政策 | ZF工作报告-60个文本词频

根据各省政府工作报告&#xff0c;参考金灿阳(2022)和陶长琪(2022)&#xff0c;借助Python软件&#xff0c;统计数字经济相关的关键词词频&#xff0c;分别记为数字经济政策词频A、数字经济政策词频B A文献参考 B文献参考 年度趋势 一、数据介绍 数据名称&#xff1a; 政府工…

OpenAI首个文生视频模型亮相,你觉得咋样?

2月16日凌晨&#xff0c;OpenAI再次扔出一枚深水炸弹&#xff0c;发布了首个文生视频模型Sora。据介绍&#xff0c;Sora可以直接输出长达60秒的视频&#xff0c;并且包含高度细致的背景、复杂的多角度镜头&#xff0c;以及富有情感的多个角色。 目前官网上已经更新了48个视频d…

QGIS004:【08图层工具箱】-导出到电子表格、提取图层范围

摘要&#xff1a;QGIS图层工具箱常用工具有导出到电子表格、提取图层范围等选项&#xff0c;本文介绍各选项的基本操作。 实验数据&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ZK4_ShrQ5BsbyWfJ6fVW4A?pwdpiap 提取码&#xff1a;piap 一、导出到电子表格 工具…

集团企业大数据应用:突破痛点,释放数据价值

在数字经济日益崛起的背景下&#xff0c;集团企业以其管理范围广泛、业务领域多元化和分支机构复杂化的特性&#xff0c;在市场竞争中扮演着重要角色。为了维持和提升这种竞争力&#xff0c;大数据应用成为了集团企业不可或缺的战略工具。然而&#xff0c;在实际应用中&#xf…

图表示学习 Graph Representation Learning chapter1 引言

图表示学习 Graph Representation Learning chapter1 引言 前言1.1图的定义1.1.1多关系图1.1.2特征信息 1.2机器学习在图中的应用1.2.1 节点分类1.2.2 关系预测1.2.3 聚类和组织检测1.2.4 图分类、回归、聚类 前言 虽然我并不研究图神经网络&#xff0c;但是我认为图高效的表示…

javascript+css+html购物车案例

javascript代码部分主要实现三部分功能 1、商品数量增加&#xff08;减少&#xff09;同时小计增加&#xff08;减少&#xff09; 这部分主要是通过for循环给增加&#xff08;减少&#xff09;按钮绑定点击事件 1&#xff09;点击后计数器自增&#xff08;自减&#xff09;…

【深度学习:开源数据注释】开源数据注释完整指南

【深度学习&#xff1a;Automated Data Annotation】开源数据注释完整指南 什么是开源数据标注工具&#xff1f;您会使用开源标签工具做什么&#xff1f;主要的开源数据标注工具有哪些&#xff1f;CVATMONAI LabelLabelMeRIL-ContourSefexa 使用开源注释工具的优点和缺点是什么…

Sora:将文本转化为视频的创新之旅

一.能力 我们正致力于让 AI 掌握理解和模拟物理世界动态的能力&#xff0c;旨在培养能够协助人们解决现实世界互动问题的模型。 介绍 Sora——我们开发的文本到视频转换模型。Sora 能够根据用户的输入提示&#xff0c;生成最长达一分钟的高质量视频内容。 目前&#xff0c;Sora…

Gitee入门之工具的安装

一、gitee是什么&#xff1f; Gitee&#xff08;码云&#xff09;是由开源中国社区在2013年推出的一个基于Git的代码托管平台&#xff0c;它提供中国本土化的代码托管服务。它旨在为个人、团队和企业提供稳定、高效、安全的云端软件开发协作平台&#xff0c;具备代码质量分析、…

揭开Markdown的秘籍:引用|代码块|超链接

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Markdown指南、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️Markdown 引用1.1 &#x1f514;引用1.2 &#x1f514;嵌套引用1.3 &…