强力科普一下PCIe/CXL(Compute Express Link)

清晰展示一个简易CPU内部的处理流程

PCIe设备与CPU交互的流量有2种:控制流量,访存流量。其中控制流量又分为多种:配置信息读写,电源管理,中断传送等等。访存流量则是PCIe设备与Host交互的主要通道,Host通过访问PCIe设备内部的存储器来获取或者更改信息,或者传送数据,PCIe设备也会通过访问Host端的主存来获取或者更改信息。

通常来讲,如果有数据要被传送给PCIe设备,Host端程序预先将数据准备在主存中,PCIe设备主动通过PCIe通道读取主存;PCIe如果有数据要传送给Host,也需要Host端程序预先在主存中准备好缓冲区,PCIe设备主动将数据写入到该缓冲区。PCIe设备处于主动,Host端处于被动。为什么不让Host主动把数据推送到设备呢?原因有2个,一个是会增加Host端的管理压力,需要维护状态机,而是由于设备内部状态对外界不可知,Host主动推送数据,一旦设备内部并没有做好接收准备,各种阻塞就会出现,Host可没空再去管这些底层的破事儿的。

一般来讲,Host端程序(通常为PCIe设备的驱动程序)会预先在Host端主存中准备好收/发两个队列,并将队列的指针(队列位于主存中的地址)写入到PCIe设备内部某存储器/寄存器中,这个写入指针的过程也是访存操作,访问PCIe设备上的存储器。然后双方通过向队列中写入信息的方式来通告各自需要完成的任务,比如向队列中插入一条任务:”PCIe设备,请到主存中xx地址取数据和I/O指令“,或者”Host,我已完成xx号任务,处理完的数据已经写入xx地址“。

如果上面这段你看的云里雾里,那么证明你应该赶紧先去当当买一套《大话计算机》了,第8章详细讲解了PCIe原理以及设备与Host交互步骤分步详解。扫码直接购买:

仔细的读者可能已经注意到,除了将一些控制信息比如队列指针等写入PCIe存储器之外,好像Host很少主动写PCIe设备存储器?是的。主要原因就是:  Host主动把大量数据移动到设备的存储器,太慢。Host端程序可以使用Load/Stor指令直接访问PCIe设备端的存储器,向其中写入或者从中读出数据。这个过程会耗费CPU周期,如果需要移动的数据量非常庞大,CPU核心会被耗死。所以,需要采用DMA(Direct Memory Access)的方式后台异步进行,也就是采用独立于Host CPU之外的执行单元来负责,这个执行单元叫做DMA Controller,几乎所有的主流PCIe设备都会在自己的主控芯片内继承DMA Controller。Host CPU为何不集成?两个原因,之前说了,PCIe设备处于主动角色,所以DMA控制器放在自己这里是最佳方案。再就是CPU内部集成DMA控制器,选用什么样的规格不好界定,有些需要高并发DMA,有些则完全不需要太高的性能,所以还是设备自主集成比较好。所以,移动数据的任务就交给设备自身了。

既然数据可以放到Host端主存中,那么为何PCIe设备非要把数据拿到自己存储器里再处理呢?这得看是什么类型的设备,比如SAS HBA,它原本就是要把主存中的数据写入到硬盘,它的作用并不是数据处理,而是把数据在不同总线/协议通道上传送,同样的还有网卡。

而对于一些数据处理类设备,比如GPU/FPGA等等,又分为两种情况,第一种情况是需要处理的数据量较大,迭代次数较高,频繁访存,典型的比如AI训练,图形渲染。此时如果让设备每次访存都访问主存,就会非常慢,因为访问本地存储器可以走DDR4/5接口甚至本地缓存&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值