Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3433328
  • 博文数量: 198
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7246
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-23 18:56
个人简介

将晦涩难懂的技术讲的通俗易懂

文章分类

全部博文(198)

文章存档

2023年(9)

2022年(4)

2021年(12)

2020年(8)

2019年(18)

2018年(19)

2017年(9)

2016年(26)

2015年(18)

2014年(54)

2013年(20)

分类: LINUX

2023-05-14 17:11:07

iotlbATS

——lvyilong316

我们知道iommu的一个关键功能就是做DMA remapping,类似CPUmmu功能,而类比CPU mmu为了加快地址转换引入了TLBiommu也也有类似技术,叫做IOTLB

由于IOTLB的特殊性(TLB只服务于CPU,并且同时只有设备访问。而IOTLB则会有多个I/O设备同时访问)PCI Express{BANNED}最佳近有一个草案,叫做ATS(Address Translation Services)。主要思想就是为了加快转换,避免集中式的IOTLB带来性能上的影响,在每个PCI Express设备中加入转换用的cache

ATS的思想是:每个PCI Express设备都拥有自己的ATC,这样就无需去查询iotlb,因而可以缓解iotlb的压力,提高访存性能。如下图所示。

 

这里需要说明的是TAiommu的一部分,它主要负责iova的转换以及通过ATPT来判断某个设备是否有权限access 某段内存;另外,从上图可以看到支持ATC 功能的设备在拓扑结构上可分为三类:一类是直接链接到RC上,一类是直接链接到root port上,{BANNED}最佳后一类是通过Switch链接到RP上。后两类拓扑结构如果PCIe 设备要enable ATS功能则Root Port必须要支持ATS功能。

PCIe DeviceATC无法完成地址映射时,此刻就需要PCIe Device发送ATS RequestTATA完成地址映射后,会将结果返还给PCIe Device,这样,PCIe Device中的ATC就有地址映射项了。如下图

 

TA中对内存地址更改之后,会发送ATS Invalidate RequestPCIe DeviceDevice会取消该映射项,并将结果返还给TA如下图:

下面我们看一下如果支持ATS需要哪些条件,软件侧的使能。ATSenable是在intel iommu侧执行的,相关代码如下

点击(此处)折叠或打开

  1. if (ecap_dev_iotlb_support(iommu->ecap) &&
  2.         pci_ats_supported(pdev) && dmar_find_matched_atsr_unit(pdev))
  3.     info->ats_supported = 1;

即使能ATS需要三个条件:

1.ecap_dev_iotlb_support(iommu->ecap)// 即判断iommu 硬件 ecapDT位是否为1

2. pci_ats_supported(pdev) // 判断pcie 设备有没有ats capability

3. dmar_find_matched_atsr_unit(pdev) //如果该pcie设备直接挂在RC上则返回true,如果该设备挂在RP上则判断RP是否支持ATS

如果上面三个条件都为真时则表示这个设备是可以eanble ATS的,然后在iommu_enable_dev_iotlb 函数里面会调用pci_enable_ats 在设备侧使能ATS feature(ATS Control Register 15位置1)

ATS之于iommu就相当于TLB之于cpu,其起到的作用不言自明。但是目前支持ATS的设备并不多,一方面是因为大部分业务场景下对这一块感知并不明显,那部分感知比较明显的比如HPC,机器学习这些业务主要依赖GPUNV针对这些limit也早就做了优化比如gpudirect等;还有就是在设备上增加cache也是需要成本的,本来设备上的SRAM也没有多大,另外就是非虚拟化场景intel iommu也支持PT的方式从而避免了iova的转换的开销。

但是随着云原生和serverless的出现,可能就不一样了。比如一台128核的icelake(后面的SPR256){BANNED}最佳多能启动512kata容器,按照每个容器一块磁盘一张网卡那么在dpu架构上也是需要1024块设备的,这种场景下对iommu侧的冲击就比较大了,此时ATS的作用就比较明显了。

参考:

阅读(8281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~