PCIe访问控制服务(ACS)

简介: PCIe访问控制服务(ACS)

✨ 1. 为何要用ACS ?


🌟1.1 P2P传输风险


ATS(Address Translation Services)是一种基于信任的服务协议。如果EP端ATC(Address Translation Cache)声称其发出的访问请求是经过转换后的地址,且该地址刚好落在PCIe交换开关的BAR范围内,则该访问请求不会到达RC,而是被交换开关路由到该地址所对应的EP。也就是说,该访问请求绕过了IOMMU的隔离,进行了P2P(peer-to-peer)传输。


fc11a1b2ff83490ab1d0e507ba47943c.png



PCIe协议允许P2P传输,这也就意味着同一个PCIe交换开关连接下不同EP可以在不流经RC的情况下互相通信。若使用过程中不希望P2P直接通信又不采取相关措施,则该漏洞很有可能被无意或有意触发,使得某些EP收到无效、非法甚至恶意的访问请求,从而引发一系列潜在问题。




🌟1.2 解决方案 - ACS


ACS协议提供了一种机制,能够决定一个TLP被正常路由、阻塞或重定向。在SR-IOV系统中,还能防止属于VI或者不同SI的设备Function之间直接通信。通过在交换节点上开启ACS服务,可以禁止P2P发送,强迫交换节点将所有地址的访问请求送到RC,从而避开P2P访问中的风险。ACS可以应用于PCIe桥、交换节点以及带有VF的PF等所有具有调度功能的节点,充当一个看门人的角色。




✨2. ACS服务介绍


🌟2.1 ACS支持的访问控制类型


⭐️2.1.1 ACS基本能力


ACS支持以下类型的PCIe访问控制:


  • ACS来源验证;


  • ACS转换阻塞;


  • ACS P2P请求事务重定向;


  • ACS完成事务重定向;


  • ACS上行转发;


  • ACS P2P出口控制;


  • ACS定向转换P2P。




⭐️2.1.2 ACS增强能力


  为了提升ACS的隔离及保护能力,在常规ACS控制机制外提供了ACS增强能力,主要有如下四种:


  • ACS I/O请求阻塞;


  • ACS DSP存储器目标访问;


  • ACS USP存储器目标访问;


  • ACS未声明请求重定向。



🌟2.2 ACS访问控制能力的适用范围


ACS服务是默认关闭的,想要使用ACS访问控制服务需要通过软件配置ACS控制寄存器来打开对应能力。在PCIe系统中可以选择关闭ACS,也可选择全部开启或部分开启ACS访问控制能力。不同PCIe组件对ACS访问控制功能的需求不同,不同的ACS访问控制功能也并非适用于所有的PCIe组件。至于要开启或关闭哪些特定的ACS访问控制能力,则取决于具体的Function类型及其在是否为多Function设备的组成部分。PCIe各组件对ACS访问控制功能的需求,或者说ACS各访问控制能力适用的PCIe组件范围,如下表所示:


表1 ACS访问控制能力的适用范围

image.png


表注: 考虑到开启了VF的单Function设备本质上表现与多Function设备无异,ACS也可以应用于具备SR-IOV能力的单Function设备。


   📌 除以上表格提到的之外,在ACS实现过程中还应注意:📢📢


  •        ACS绝不能用于PCIe-PCI桥之间以及RC事件收集器,这些地方也不能实现ACS扩展能力结构。


  •        除ACS源头验证外,ACS访问控制不适用于多播TLP。


  •        RCiEP可以实现ACS但不是必须。单个RC下的RCiEP可以部分开启ACS。



🌟2.3 ACS与非ACS组件间的互操作性


📌 为了确保开启了ACS与未开启ACS的PCIe组件之间互操作性,两者之间应遵循以下原则: 📢📢


   若不使用ACS组件的P2P请求重定向及P2P完成重定向功能,则ACS与非ACS组件可混合使用,不影响两者的互操作性,且ACS组件的子集仍然可开启ACS功能。


   若PCIe系统使用了ACS P2P请求重定向或/和ACS P2P完成重定向功能,则PCIe系统中使用这些功能的组件必须支持ACS上行重定向请求的上行转发,尤其是 -


       相关RP必须支持ACS上行转发,否则RP无法处理上行重定向请求或完成TLP,此时RC也必须实现重定向请求的验证。


       每个开启了P2P事务重定向的ACS组件及相关RP之间的所有中间交换节点必须支持ACS上行转发,否则这些交换节点无法处理上行重定向事务。



🌟2.4 ACS P2P控制交互


对于每一笔P2P请求,多个ACS控制机制会相互影响并最终决定将当前请求的处理方式:① 直接路由到P2P目标、② 视为ACS违例立即拦截 或③重定向上行至RC进行访问验证。P2P完成重定向不受制于ACS P2P 完成重定向机制。


 若Port/Function开启了ACS定向转换P2P功能,无论ACS P2P请求重定向及ACS P2P出口控制设置如何,AT域显示为转换后地址的P2P间存储器访问请求必须被正常路由至其P2P目的Port/Function。如果没有开启ACS定向转换P2P功能,P2P间存储器访问请求必须无条件服从ACS P2P请求重定向及ACS P2P出口控制设置相关机制。具体而言,就是出口控制向量比特、ACS P2P出口控制使能比特(E)及ACS P2P请求重定向比特(R)三者共决定如何处理该P2P请求,如下表所示。


表2 ACS P2P请求重定向及ACS P2P出口控制交互


image.png


⚠️ 注意:由于传统Device支持锁定访问,若ACS P2P请求重定向目标为传统Device,无法保证访问的原子性




🌟2.5 ACS违例错误处理



硬件或软件设计缺陷均有可能导致ACS违例。为便于隔离错误及分析错误原因,建议在ACS组件中实现AER(Advanced Error Reporting)能力。开启AER prefix/header记录功能后,若出现ACS违例,可通过分析违规请求的prefix/header来定位出现问题的原因。


 当出现ACS违例时,作为完成者的ACS组件应遵循以下规则进行处理:


       对于非转发请求,完成者需产生完成状态为CA的完成事务;


       完成者需记录并上报ACS违例错误。即便已经发出了CA完成事务,也应照常记录并上报ACS违例错误,并对错误进行记录;若该错误为非致命错误,则按照相关规则对该错误进行处理。




🌟2.6 ACS重定向对排序规则的影响


  开启了ACS P2P请求重定向功能后,重定向之后的P2P请求会出现违反常规的事务排序规则的情况。




⭐️2.6.1 排序违例1 - 完成事务超过转发请求事务


  排序违例:根据PCIe事务排序规则,非宽松排序的完成事务不允许超过转发请求事务。但当P2P转发请求被重定向后,其后续P2P非宽松完成事务会直接被路由到P2P目的地,从而超过了重定向后的转发请求事务。



解决方案:为了避免以上这种排序违例,可用开启ACS P2P完成重定向功能。开启了ACS P2P完成重定向功能后,所有的P2P非宽松排序完成事务会同P2P转发请求一样被重定向。由于相同TC的请求事务可用超过完成事务,开启完成事务重定向后,即便未开启P2P转发请求重定向,也不会影响排序规则。


 开启了ACS完成事务从定向后,所有的的P2P完成事务都会被先先送往RC再送往P2P目的地,显然这比直接送往P2P目的地要慢,影响传输性能。考虑到开启了宽松排序的完成事务不会被重定向,强烈建议请求者开启完成事务宽松排序,一次提升性能。




⭐️2.6.2 排序违例2 - 请求事务超过转发请求事务


 排序违例:根据PCIe事务排序规则,非转发请求事务或非宽松排序的转发请求事务不允许超过转发请求事务。若ACS P2P请求重定向功能及ACS定向转换P2P功能同时开启,很容易出现部分P2P请求被重定向、部分P2P请求直达P2P目的时的情况,从而引起排序规则违例。


解决方案:为避免这种排序违例的发生,只有在提前确定该违例不会发生的情况下才能同时开启这两种ACS功能。



✨3. ACS软件配置


 并不是所以的PCIe组件都具备ACS能力,也不是具备ACS能力的PCIe组件具备所有的ACS访问控制能力。在PCIe设备枚举时,软件查看PCIe ACS扩展能力结构寄存器(图2,图3)来确认PCIe组件是否具备ACS访问控制能力,软件读取ACS能力寄存器来获知其具备哪些ACS能力(图4)。ACS服务在硬件上是默认关闭的,想要使用ACS访问控制服务需要通过软件配置ACS控制寄存器(图5)来打开对应能力。


5be60e9253ad46ac95fc109c79dff63d.png


图2 ACS扩展能力结构

bb5ee80350ea46c9acca655869be6090.png

图3 ACS扩展能力结构头标

3f85aff3ee6840028262f54cf7d4398f.png


图4 ACS能力寄存器

e60e3c2743cd4f1ab9cef4fc8c7aa4a6.png



📚 参考


   PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)


   PCI-SIG, ACS Enhancement


   PCIE总线的地址问题


   PCI-SIG SR-IOV Primer


   IOMMU group and PCIe ACS问题


   Introduction to PCIe Access Control Services


   IOMMU是如何划分PCI device group的


   PCIe Glossary | PLDA


   PCI Passthrough with PCIe devices behind a non-ACS switch in vSphere  



相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
1月前
|
Web App开发 存储 Linux
Linux Apache服务详解——Apache服务访问控制
Linux Apache服务详解——Apache服务访问控制
329 7
|
Cloud Native 关系型数据库 Java
PolarDB-X 1.0-用户指南-访问控制-激活PolarDB-X访问RDS服务授权
PolarDB-X的部分操作会调用RDS的OpenAPI,因此在使用RAM之前,需要先激活PolarDB-X访问RDS服务的授权,创建一个供PolarDB-X访问RDS的RAM服务角色。本文将介绍如何通过控制台和OpenAPI激活授权。
170 0
PolarDB-X 1.0-用户指南-访问控制-激活PolarDB-X访问RDS服务授权
|
存储 运维 网络协议
阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制介绍
在本文中,我们首先简单介绍文件系统的用户认证和访问权限控制的概念,然后介绍阿里云SMB协议文件存储服务支持基于AD域系统的用户身份认证及访问权限控制的设计实现。
3819 0
阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制介绍
|
Shell API 数据安全/隐私保护
kubernetes API 访问控制在阿里云容器服务(ACK)上的实践
提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷的访问控制管理 访问控制简要说明 控制流程如上图所示,我们今天关注点在前两步,也就是图中的Au.
8545 0
|
安全 Unix Linux
阿里云NAS NFS服务的文件访问控制
本文介绍在阿里云NAS NFS服务上实现文件访问控制的方式。
3862 0
|
Apache 开发工具 数据安全/隐私保护
|
应用服务中间件 数据安全/隐私保护 nginx
|
网络协议 数据安全/隐私保护 Unix