Bootstrap

【PCIe 总线及设备入门学习专栏 3.2.3 -- PCIe 中的 ATC 与 ATS】

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,用于缓存地址翻译结果。

  1. 网络适配器发出翻译请求
    • 网络适配器通过 ATS 向 IOMMU 请求虚拟地址 0x1000 的物理地址。
  2. IOMMU 处理请求
    • IOMMU 翻译虚拟地址 0x1000,得到物理地址 0x2000,并返回给网络适配器。
  3. 网络适配器缓存结果
    • 网络适配器将翻译结果(虚拟地址 0x1000 对应物理地址 0x2000)缓存到 ATC 中。
  4. 后续访问
    • 网络适配器后续访问虚拟地址 0x1000 时,无需再次请求 IOMMU,直接从 ATC 中获取物理地址 0x2000

示例 2:虚拟化环境中的 GPU 资源管理

在虚拟化环境中,多个虚拟机共享同一个 GPU,每个虚拟机通过 ATS 请求地址翻译并将结果缓存到 ATC 中。

  1. 虚拟机 VM1 请求翻译
    • VM1 通过 GPU 的 ATS 向 IOMMU 请求地址翻译。
  2. IOMMU 返回翻译结果
    • IOMMU 翻译虚拟地址并返回物理地址,结果缓存到 GPU 的 ATC 中。
  3. 虚拟机 VM2 请求翻译
    • VM2 也通过 GPU 的 ATS 向 IOMMU 请求地址翻译,并缓存结果到 ATC 中。
  4. 优化访问
    • 后续访问相同地址时,GPU 可以直接从 ATC 中获取翻译结果,减少翻译请求的延迟和开销。

总结

  • ATC(Address Translation Cache):缓存地址翻译结果,提高内存访问性能。
  • ATS(Address Translation Services):允许设备向 IOMMU 请求地址翻译,并将结果缓存到 ATC 中。
  • 协同工作:ATS 请求翻译,ATC 缓存结果,减少重复翻译请求,提高系统性能。
;