区别:PCIe实质上就是一种高速IO,而DMA(direct memory access)的主要作用是做大规模的数据搬运。PCIe有规定的协议、数据包格式、时钟配比、电压规范,不同的PCIe设备之间理论上是可以互相通信的,DMA并没有绝对规范的接口协议,DMA一般都集成在片内。
PCIe实质上就是一种高速IO,而DMA(direct memory access)的主要作用是做大规模的数据搬运。
PCIe有规定的协议,数据包格式,时钟配比,电压规范,不同的PCIe设备之间理论上是可以互相通信的,DMA并没有绝对规范的接口协议,大部分公司的DMA一般都对接私有总线,所以DMA一般都集成在片内。
综上所述,PCIe的input/output ,基本都对接IO,而DMA的input/output,对应的是诸如noc之类的片内总线。
上面说的是PCIe和DMA的区别,我们进一步抽象,将他们的实现细节全部悬置起来,最后会发现,PCIe对应的是一种具有完整规定性的总线协议,而DMA对应的其实只是一种功能本身,即Direct Memory Access,除此之外并没有给出更多的规定性。至于DMA是对接的是何种总线,如何设置src/dst address,可以工作在主频多少的系统中,能够容纳outstanding的个数是多少,不好意思,各家公司的实现都不相同,无可奉告。
回到问题本身,PCIe和DMA传输有区别吗?不知这里问的是对host/device的memory访问吗?仅仅只是从数据传输的结果来看,二者没有任何区别,DMA能做的,PCIe都能做。但是,如果从效率上来看,DMA的效率无疑远远高于PCIe。
首先,以访问device memory为例,pcie作为master发起了,将memory A中的数据copy到memory B中的访问,需要copy的data大约是1GB,需要将A中的数据读出,再写到B中。假设pcie一次读访问的return data非常多是4KB(具体多少我不记得了……),读请求从IO进入,经noc,到cache,如果cache miss,则再进入memory controller(总共读的数据量太大,所以一定会去memory,别想逃),经ddr,到达dram,数据读出,再一路返回,如此过程重复250000次……然后再以类似的过程发起写请求,不过pcie的write tlp是posted的,所以,不需要等response,理论上会快不少。但是,在此过程中,你的pcie总线可是被memory访问的工作全程占用的!host可是需要用它进行系统管理的,这种“搬砖”的活岂能让你这么玩?
接下来我们看用片内dma,访问由dma发起,直接经内部总线,到cache,到memory controller(如果cache miss的话),到ddr 和 dram ,然后!不需要等到所有的read return全回来,只要有数据返回,dma会直接将它写到目标地址中去(路径同上),全程的bubble很小,带宽利用率极高。而且,一般片内会有多个dma!可以同时做这种数据搬运的工作!同时,dma的访问是直接在片内发起的,省去了从IO到noc这一段的path delay,这一读一写,效应更明显了(当然在outstanding的读和写中,这一段path delay的影响可能不会很大)。别以为pcie的速度有多快(gen5能到32GT/s),IO的速度即使再快,和片内这种大规模并行总线相比仍然只是弟弟,关键是此时pcie可以更多的聚焦于系统管理的任务(而不是琐碎的存储操作),整个系统运行的效率,大大提升。
最后,很多pcie controller本身也包含了dma功能(host和device做memory交互时很常见),比单纯地使用pcie发读TLP + 写TLP的方式确实要高效多了。但是和片内DMA比,只能说…仍然还是个弟弟。术业有专攻,pcie很强大,主要强在通用性,兼容性,以及背靠x86庞大的生态系统,但在很多特殊场景中,不见得有多么高效。
延伸阅读:
什么是PCIe?
PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。
PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。
PCIe交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”,简称“PCI-e”。它的主要优势就是数据传输速率高,而且还有相当大的发展潜力。
PCI Express也有多种规格,从PCI Express x1到PCI Express x32,能满足将来一定时间内出现的低速设备和高速设备的需求。PCI-Express的接口是PCIe 3.0接口,其比特率为8Gbps,约为上一代产品带宽的两倍,并且包含发射器和接收器均衡、PLL改善以及时钟数据恢复等一系列重要的新功能,用以改善数据传输和数据保护性能。
文章标题:PCIe传输和DMA传输有什么区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38333