问题 DMA如何与PCI Express设备配合使用?


假设CPU想要从PCI Express设备进行DMA读传输。与PCI Express设备的通信由事务层分组(TLP)提供。从理论上讲,TLP的最大有效载荷大小为1024双字。那么,当CPU向PCI Express设备提供4兆字节的DMA读取命令时,DMA控制器如何动作?


5583
2017-12-14 15:37


起源



答案:


在PCIe枚举阶段,确定最大允许有效载荷大小(它可以低于设备的最大有效载荷大小:例如,中间PCIe交换机具有较低的最大有效载荷大小)。

大多数PCIe设备都是DMA主设备,因此驱动程序将命令传输到设备。设备将发送多个写入数据包,以xx最大尺寸的TLP块传输4 MiB。

编辑1回复评论1:

基于PCI的总线在芯片组中没有芯片或子电路形式的“DMA控制器”。总线上的每个设备都可以成为总线主设备。主存储器始终是从器件。

假设您已经构建了自己的PCIe设备卡,它可以充当PCI主设备,并且您的程序(在CPU上运行)希望将数据从该卡发送到主存储器(4 MiB)。

设备驱动程序从操作系统知道该特定内存区域的内存映射(某些关键字:内存映射I / O,PCI总线枚举,PCI BAR)。

驱动程序将命令(写入),源地址,目标地址和长度传输到设备。这可以通过将字节发送到预定义BAR内的特殊地址或写入PCI配置空间来完成。卡上的DMA主机检查这些特殊区域的新任务(分散 - 收集列表)。如果是这样,这些任务就会被排队。

现在,DMA主控器知道发送的位置,数据量。他将从本地存储器中读取数据并将其包装为最大有效载荷大小的512字节TLP(路径设备<--->主存储器上的最大有效载荷大小从枚举中得知)并将其发送到目标地址。基于PCI地址的路由机制将这些TLP引导到主存储器。


14
2017-12-15 00:06



坦克回答,你说的; “该设备将发送几个写入数据包,以xx最大尺寸的TLP块传输4 MiB。”但是这个过程将如何完成,我的意思是假设pcie设备的最大有效载荷大小是512字节,当它成为DMA的总线主机时,它会将这些TLP数据包发送到dma控制器或主存储器?如果asnwer是主内存,设备和内存之间的接口在哪里?最后,设备本身将如何知道发送TLP数据包需要等待多长时间? - spartacus
@spartacus我扩展了你对你的评论问题的答案。 - Paebbels


答案:


在PCIe枚举阶段,确定最大允许有效载荷大小(它可以低于设备的最大有效载荷大小:例如,中间PCIe交换机具有较低的最大有效载荷大小)。

大多数PCIe设备都是DMA主设备,因此驱动程序将命令传输到设备。设备将发送多个写入数据包,以xx最大尺寸的TLP块传输4 MiB。

编辑1回复评论1:

基于PCI的总线在芯片组中没有芯片或子电路形式的“DMA控制器”。总线上的每个设备都可以成为总线主设备。主存储器始终是从器件。

假设您已经构建了自己的PCIe设备卡,它可以充当PCI主设备,并且您的程序(在CPU上运行)希望将数据从该卡发送到主存储器(4 MiB)。

设备驱动程序从操作系统知道该特定内存区域的内存映射(某些关键字:内存映射I / O,PCI总线枚举,PCI BAR)。

驱动程序将命令(写入),源地址,目标地址和长度传输到设备。这可以通过将字节发送到预定义BAR内的特殊地址或写入PCI配置空间来完成。卡上的DMA主机检查这些特殊区域的新任务(分散 - 收集列表)。如果是这样,这些任务就会被排队。

现在,DMA主控器知道发送的位置,数据量。他将从本地存储器中读取数据并将其包装为最大有效载荷大小的512字节TLP(路径设备<--->主存储器上的最大有效载荷大小从枚举中得知)并将其发送到目标地址。基于PCI地址的路由机制将这些TLP引导到主存储器。


14
2017-12-15 00:06



坦克回答,你说的; “该设备将发送几个写入数据包,以xx最大尺寸的TLP块传输4 MiB。”但是这个过程将如何完成,我的意思是假设pcie设备的最大有效载荷大小是512字节,当它成为DMA的总线主机时,它会将这些TLP数据包发送到dma控制器或主存储器?如果asnwer是主内存,设备和内存之间的接口在哪里?最后,设备本身将如何知道发送TLP数据包需要等待多长时间? - spartacus
@spartacus我扩展了你对你的评论问题的答案。 - Paebbels