pcie 设备的数据流有哪些,分别是什么场景?
pcie 设备的数据流主要为4大类:
1.cpu 发起的,访问pcie设备配置空间的数据流。这种数据流主要是bios/linux pcie driver 对设备进行初始化、资源分配时,读写配置空间的。包括pcie 枚举,bar 空间分配, msi 分配等。 设备驱动通过 pci_wirte_config() / pci_read_config() 发起配置空间访问。 lspci / setpci 也是对应到配置空间访问。
2.cpu 发起的,访问pcie设备mmio/io的数据流。将bar空间mmap 到系统地址空间后,设备驱动可通过地址访问pcie 设备的 bar / mmio 空间。 一般的,设备会将特定的寄存器和存储实现在mmio空间内。cpu可使用 iowrite32() / ioread32() 等方式访问 mmio 空间。这是一种效率较低的pcie使用方式.
3.pcie 设备发起的,访问 host memory 的 dma 数据流。这种数据流由pcie 设备的dma engine 发起,是一种常见的、高性能的pcie 数据流。cpu通过配置 pcie 设备内的dma engine (通过mmio寄存器),启动设备pcie dma。网卡,gpu 等pcie 设备,数据通路均有pcie dma完成。
4.pcie 设备发起的,访问pcie设备mmio/io的数据流, 亦称p2p (peer to peer)。同(3)类似,也是利用pcie 设备的dma engine, 但是数据访问的是其他pcie 设备的mmio地址空间而非host memory. cpu须配置桥片端口路由地址。 gdr (gpu direct rdma) 就是利用这种数据流,避免主机内存的数据拷贝。
cpu访问设备内存(bar空间)和访问主机内存,有什么不同?
prefetchable mmio 映射到系统地址空间后,软件可以通过地址对pcie mmio空间进行直接访问(cpu使用mov指令),这一点与系统内存访问在操作上是一致的。
root complex 会根据cpu 访问的地址决定数据访问路由,对于系统内存地址空间,数据会被路由到imc (integrated memory controller) 访问ddr;对于mmio地址空间,数据会被路由到host bridge 转换为 tlp 发起对设备的pcie 通信。
一般的,host memory 分配都是cacheable (writeback) 的,而 mmio 通常是uncacheable的,加之两者带宽和通信机理的不同,导致了cpu 使用地址直接访问pcie mmio空间无法达到访问系统内存的性能,也无法用满pcie带宽。使用memcpy() 在host memory 和mmio 地址拷贝数据也是一种低效方式。
对于连续的mmio 空间访问,可以通过支持write combine的方式( mmap_wc() )来提升性能。
为什么需要使用pcie dma,在设备与主机间搬运数据?
pcie dma 能够实现高性能的数据搬运。
1.cpu 仅需要配置dma engine, 大块的数据搬运过程无需cpu参与,cpu占用率低;
2.dma engine 是全硬件化的通信方式,tlp payload 大overhead 小,pcie链路使用率高;
3.支持descriptor 的dma 能够实现用户态数据的零拷贝,减小内存带宽消耗;
4.支持多队列的dma,能够提高系统并行度,支持多核,多进程应用,硬件解决io抢占和调度问题,软件编程简单;
如何使用pcie设备的中断?
pcie 协议定义了三种中断:intx (legacy), msi, msix
1.intx 中断是相对古老的pcie设备中断方式,整个系统仅支持8个intx 中断,所有设备共用。pcie 中的intx 中断是通过pcie message发送到 switch 和 io apic的。cpu收到 io apic 转发到 local apic 的 intx 中断后,需要查询isr确定中断源设备,并进一步查询中断含义,才能执行中断处理函数。中断数量少,中断查询复杂,响应延迟大,与数据流不保序等问题的存在,是intx的主要缺陷。
2.msi 是实现在配置空间的消息中断,每个pcie function可支持最多32个msi 中断。msi 中断是一笔pcie 写报文,向apic 地址域写入特定的数据,触发cpu中断。因为其通过pcie write tlp 实现,中断与业务数据的保序性容易实现,硬件处理racing condition的代价更小。msi中断可以具备特定的含义,设备之间不耦合,中断响应快。
3.msix 是实现在bar空间的消息中断,优点与msi类似,但其数量支持更多,每个function 最多可以支持2k条中断向量。
msi 和msix 是目前主流的中断实现方式,在虚拟化的场景下,中断可以通过iommu 实现remap 和 posting, 进一步提升系统性能。
网卡接收方向性能低,进行调优有哪些思路?
网卡收包性能性能调优,需先识别出性能瓶颈,可通过performance监控工具(如intel pcm), 查看 cpu 利用率,内存带宽使用,pcie流量等。
一般的,优化方向包括:
1.确定numa的亲和性,保证cpu/memory/pcie 三者的亲和性
2.确定pcie全链路的带宽匹配,确保内存带宽(读+写双向)有余量
3.设备合理的pcie通路mps/mrrs
4.查看并打开ido/ro (需注意应用场景无保序风险)
5.dma engine 参数的调优,batch 操作的阈值配置(队列doorbell, completion notify等)
6.中断频率的调优和控制(一般在20k/100k 每秒,需结合应用和cpu)
7.ddio 和 cacheable / uncacheable 内存空间的分配
具体原理和操作可参考课程中的有关介绍。
没有灯泡也能亮的一款神奇玻璃灯!
信号完整性-阻抗与模型浅析
STM32单片机读写保护功能的设置方法解析
移动式DR设备是什么,有哪些优势
MD8002A音频放大器的电路/特点/应用
PCIe相关问题解答
OPPO K7x上市,搭载联发科天机720处理器
71%的以色列人工智能公司专注于企业应用,以色列成全球AI新竞争者
嵌入式技术在无人驾驶中的应用
数字功率计WT300E系列产品的功能特点及应用范围
新传感器系统助力无人机避开电源线
数据中心常见故障如何处理?
三相异步电动机的调速方法_三相异步电动机的制动方法有哪些
SOLARLOK 2.0直流快速连接器有效提高光伏发电站的安装效率
iPhoneX和iPhoneXR的区别
荣耀传闻背后 华为战略收缩调整
amoled屏幕优缺点
Jeep e-Bike山地自行车已开启预购售价为5899美元
那些人工智能化的机器视觉技术的应用
美光宣布已经开始批量出货基于1αnm工艺的DRAM内存芯片