文章目录
PCIe 中的 ATC 和 ATS
ATC 概述
在 PCIe 体系结构中,ATC(Address Translation Cache)和 ATS(Address Translation Services)是用于优化地址翻译和内存访问性能的重要技术。它们主要应用于高性能计算和虚拟化环境中,以减少翻译延迟和提高内存访问效率。
ATC(Address Translation Cache)
ATC 是地址翻译缓存,类似于处理器中的 TLB(Translation Lookaside Buffer),用于缓存地址翻译结果。ATC 通常位于 PCIe 设备端点(Endpoint)上,以减少频繁的地址翻译请求,提高内存访问性能。
一般地,在PCIe体系下,发起地址翻译请求的设备叫请求者,也叫client,而处理地址翻译请求的(即CPU)叫完成者,也叫home。
ATC 作用
- 缓存地址翻译结果:减少重复翻译相同地址的开销。
- 提高性能:通过缓存,减少从设备到 IOMMU(Input-Output Memory Management Unit)的翻译请求数量,降低延迟。
ATS(Address Translation Services)
ATS 是地址翻译服务,允许 PCIe 设备(如端点)通过 PCIe 总线向 IOMMU 请求地址翻译,并缓存结果到 ATC 中。ATS 提供了一种机制,使设备能够主动管理其地址翻译缓存,从而提高系统性能。
ATS 作用
- 请求地址翻译:设备可以主动向 IOMMU 请求地址翻译。
- 缓存翻译结果:将翻译结果缓存到 ATC 中,减少重复请求。
ATC 与 ATS 的关系
- ATS 是一种服务,允许设备向 IOMMU 请求地址翻译。
- ATC 是缓存,用于存储通过 ATS 请求到的地址翻译结果。
- 协同工作:ATS 负责请求并获得地址翻译结果,ATC 负责缓存这些结果,以便后续快速访问。
示例应用
示例 1:高性能网络适配器
假设我们有一个支持 ATS 的高性能网络适配器,适配器内包含 ATC,用于缓存地址翻译结果。
- 网络适配器发出翻译请求:
- 网络适配器通过 ATS 向 IOMMU 请求虚拟地址
0x1000
的物理地址。
- 网络适配器通过 ATS 向 IOMMU 请求虚拟地址
- IOMMU 处理请求:
- IOMMU 翻译虚拟地址
0x1000
,得到物理地址0x2000
,并返回给网络适配器。
- IOMMU 翻译虚拟地址
- 网络适配器缓存结果:
- 网络适配器将翻译结果(虚拟地址
0x1000
对应物理地址0x2000
)缓存到 ATC 中。
- 网络适配器将翻译结果(虚拟地址
- 后续访问:
- 网络适配器后续访问虚拟地址
0x1000
时,无需再次请求 IOMMU,直接从 ATC 中获取物理地址0x2000
。
- 网络适配器后续访问虚拟地址
示例 2:虚拟化环境中的 GPU 资源管理
在虚拟化环境中,多个虚拟机共享同一个 GPU,每个虚拟机通过 ATS 请求地址翻译并将结果缓存到 ATC 中。
- 虚拟机 VM1 请求翻译:
- VM1 通过 GPU 的 ATS 向 IOMMU 请求地址翻译。
- IOMMU 返回翻译结果:
- IOMMU 翻译虚拟地址并返回物理地址,结果缓存到 GPU 的 ATC 中。
- 虚拟机 VM2 请求翻译:
- VM2 也通过 GPU 的 ATS 向 IOMMU 请求地址翻译,并缓存结果到 ATC 中。
- 优化访问:
- 后续访问相同地址时,GPU 可以直接从 ATC 中获取翻译结果,减少翻译请求的延迟和开销。
总结
- ATC(Address Translation Cache):缓存地址翻译结果,提高内存访问性能。
- ATS(Address Translation Services):允许设备向 IOMMU 请求地址翻译,并将结果缓存到 ATC 中。
- 协同工作:ATS 请求翻译,ATC 缓存结果,减少重复翻译请求,提高系统性能。