第三章 cxl事务层
3.1 cxl.io
cxl.io为io设备提供非一致性的load/strore接口。事务类型、事务数据包格式、信用流量控制、虚拟通道管理、事务顺序的规则等遵循pcie协议。cxl.io的事务层如下图中的黄色部分所示。
3.1.1 cxl.io端点(endpoint)
cxl设备需要支持在cxl 1.1和cxl 2.0模式下运行。当链路配置为在cxl 1.1模式下运行时,cxl.io端点必须作为pcie rciep;而当配置为在cxl 2.0模式下运行时,必须作为pci express端点。
rciep是root complex integrated endpoints的缩写,pcie端点的一种。
3.1.2 cxl电源管理vdm(vendor defined message)格式
cxl电源管理消息使用pcie的vdm type 0,带有4dw的负载数据,包括pmreq,pmrsp和pmgo消息。
cxl电源管理vdm的格式如下:
如果接收方cxl组件接收到“有毒”的电源管理vdm,则应丢弃此类消息。由于接收方在接收到此类vdm后能够继续正常运行,因此应将此事件视为非致命性错误(non-fatal)。如果接收方的电源管理单元(pmu)不理解电源管理vdm数据负载的内容,则应无声地丢弃该消息,并且不发出无法纠正错误(uncorrectableerror)的信号。
数据负载的字段定义比较多,就不贴图了。
电源管理信用和初始化过程是本地链接。设备和主机之间通过cxl.io通道发送的消息类型主要涉及两种,分别是credit_rtn和agent_info,其中pm2ip是主机发给设备的电源管理消息,而ip2pm是设备发给主机的电源管理消息。至于“信用”机制就不解释了,在前面讲ccix的时候已经介绍过了。
所谓的上游端口(upstream port)指的是设备的端口;而下游端口(downstream port)是主机端口。cxl上游端口pmu必须能够接收和处理credit_rtn消息,而不依赖于任何其它pm2ip消息。此外,credit_rtn消息不使用信用。credit_rtn消息用于初始化和更新每侧的tx信用,以便可以适当地管理流量控制。在pm初始化期间的第一条credit_rtn消息,通过num_credits字段发送的信用表示credit_rtn的发起方可以从另一端接收的信用相关pm消息的数量。在后续credit_rtn消息期间,num_credits字段表示自上一条credit_rtn消息以来在同一方向释放的pm信用数。下游端口pmu还使用第一条credit_rtn消息为上游端口pmu分配pm_agent_id。此id通过credit_rtn消息中的target_agent_id字段进行通信。在启动任何ip2pm消息之前,上游端口pmu必须等待来自下游端口pmu的credit_rtn消息
参考下图,第一条消息,pm2ip.credit_rtn(target_agent_id,num_credits=1) ,这个消息里面包含了2个内容,一个是target_agent_id,另一个是主机给了设备1个信用值。之后,设备也给主机发送了一个消息ip2pm. credit_rtn(num_credits=2),授权了主机2个信用值。在初始化的时候,设备必须先等待接受来自主机的credit_rtn消息,而不能先向主机发送消息。
上游端口pmu必须遵循的规则:
在启动任何ip2pm消息之前,上游端口pmu必须等待接收pm2ip.credit_rtn消息。
上游端口pmu必须从下游端口pmu接收到的第一条pm2ip消息中提取target_agent_id字段,并将其用作未来消息中的pm_agent_id。
上游端口pmu必须实现足够的资源来接收和处理任何credit_rtn消息,而不依赖于任何其他pm2ip或ip2pm消息或其他消息类。
上游端口pmu必须实现至少一个信用,以接收pm2ip消息。
上游端口pmu必须尽快向下游端口pmu返回信用,以防止通过cxl链路阻塞电源管理消息通信。
建议上游端口pmu占用信用额度不得超过10us。
插播一句,是不是看的晕晕的?这里简单介绍一下供应商定义的消息(vdm),pcie协议里是这么说的“thevendor defined messages allow expansion of pci express messaging capabilities,either as a general extension to the pci express specification or avendor-specific extension”。
3.1.3 cxl错误vdm格式
cxl错误消息使用pcie的vdm type 0,没有负载数据,格式如下。
3.1.4 cxl所需的可选pcie功能
3.1.5 错误传播
设备检测到的cxl.cache和cxl.mem错误通过cxl.io通信流传播到上游端口。这些错误在pcie aer寄存器中记录为可纠正(correctable)和不可纠正(uncorrectable)的内部错误。
3.1.6 ats上的存储器类型指示
对某些内存区域的请求只能在cxl.io上发出,而不能在cxl.cache上发出。由主机决定这些内存区域是什么。例如,在x86系统上,主机可以选择仅通过cxl.io限制对不可缓存(uncacheable)类型内存的访问。主机通过ats完成(ats completion)向设备来指示这些区域。
插播一句,ats是address translation services的缩写。pcie协议里面有一整章讲ats。为节省cpu资源,i/o function常采用dma方式访问内存。一般i/o function看到的物理地址空间与cpu一样。但有时候,i/o function看到的地址空间不是真实的物理地址,需要rc将dma请求进行处理,通过一次地址转换才能将访问到真实的物理地址。这种地址转换机制有利于访问权限检查。
一般pcie设备在本地实现一个地址缓存(address translation cache,atc),类似cpu中的tlb。function发送存储器读写请求前,先在本地的atc中查找是否有该地址的条目。如果在atc中查找成功,直接采用转换后地址进行访问。如果在atc中没有找到该地址的条码,则给ta(translationagent)发送该地址的地址转换请求。在arm体系中,ta的功能由smmu(system memory management unit)承担,此外smmu还要显式的负责同步tlb和与它相连的分布atc中的数据一致性。关于smmu,之前的文章介绍过。
3.1.7 可延迟写
cxl规范中定义的可延迟写入仅在cxl1.1模式下运行时适用。在cxl 2.0模式下操作时,请参阅pcie规范以了解此功能。
中国手机企业在海外市场被迫进行价格战
卓朗昆仑云加速构建国产化生态 与华为智能计算完成产品兼容性认证
如何判断RS232芯片好坏?详细方法介绍
农业测控探测器的作用是怎样的
胶体电池回充性好、极板耐硫化的机理
CXL事务层详解
低功耗 Lora模块中收发模块对电流有什么不同差异
电子元件放静电措施
RFID与条形码的区别是什么
基于51单片机的自行车测速系统
英特尔CEO:人工智能将引发十年热潮 美国将保持领先
减速机空载电流大是什么原因?
企业利用云MES系统如何实现“弯道超车”
GPS 定位器产品内置芯片,并可以对外通信?
宜科推出的新型紧凑型光电传感器有哪些特点?
M1版Mac能否运行ARM版Win10?
大功率开关—晶体管的重要任务电路图
Atom处理器正在被英特尔抛弃:造成网络完全瘫痪
NFC 控制器工作频率在 多少MHz?
因俄军苏-33战机出事 俄军航空母舰拦阻器内部构造被曝光