0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCIe相关问题解答

Linux阅码场 来源:Linux阅码场 2023-09-15 09:39 次阅读

PCIe设备的数据流有哪些,分别是什么场景?

PCIe设备的数据流主要为4大类:

1.CPU发起的,访问PCIe设备配置空间的数据流。这种数据流主要是BIOS/Linux PCIedriver 对设备进行初始化、资源分配时,读写配置空间的。包括PCIe 枚举,BAR空间分配, MSI 分配等。 设备驱动通过 pci_wirte_config() / pci_read_config() 发起配置空间访问。 lspci /setpci 也是对应到配置空间访问。

aae3793c-5364-11ee-a25d-92fbcf53809c.png

2.CPU发起的,访问PCIe设备MMIO/IO的数据流。将Bar空间mmap 到系统地址空间后,设备驱动可通过地址访问PCIe设备的 Bar/ MMIO 空间。 一般的,设备会将特定的寄存器和存储实现在MMIO空间内。CPU可使用 iowrite32() / ioread32() 等方式访问 MMIO空间。这是一种效率较低的PCIe使用方式.

aafde218-5364-11ee-a25d-92fbcf53809c.png

3.PCIe设备发起的,访问 HostMemory 的 DMA数据流。这种数据流由PCIe设备的DMAEngine 发起,是一种常见的、高性能的PCIe数据流。CPU通过配置 PCIe设备内的DMAEngine (通过MMIO寄存器),启动设备PCIeDMA。网卡,GPU等PCIe设备,数据通路均有PCIeDMA完成。

ab0d3934-5364-11ee-a25d-92fbcf53809c.png

4.PCIe设备发起的,访问PCIe设备MMIO/IO的数据流, 亦称P2P (Peer to Peer)。同(3)类似,也是利用PCIe设备的DMAengine, 但是数据访问的是其他PCIe设备的MMIO地址空间而非HostMemory. CPU须配置桥片端口路由地址。 GDR (GPU directRDMA) 就是利用这种数据流,避免主机内存的数据拷贝。

ab21e992-5364-11ee-a25d-92fbcf53809c.png

CPU访问设备内存(Bar空间)和访问主机内存,有什么不同?

Prefetchable MMIO 映射到系统地址空间后,软件可以通过地址对PCIeMMIO空间进行直接访问(CPU使用MOV指令),这一点与系统内存访问在操作上是一致的。

RootComplex 会根据CPU访问的地址决定数据访问路由,对于系统内存地址空间,数据会被路由到iMC(integrated Memory Controller) 访问DDR;对于MMIO地址空间,数据会被路由到HostBridge 转换为 TLP发起对设备的PCIe通信

一般的,HostMemory 分配都是Cacheable(writeback) 的,而 MMIO通常是Uncacheable的,加之两者带宽和通信机理的不同,导致了CPU使用地址直接访问PCIeMMIO空间无法达到访问系统内存的性能,也无法用满PCIe带宽。使用memcpy() 在HostMemory 和MMIO 地址拷贝数据也是一种低效方式。

对于连续的MMIO空间访问,可以通过支持writecombine的方式( mmap_wc() )来提升性能。

ab45ddde-5364-11ee-a25d-92fbcf53809c.png

为什么需要使用PCIe DMA,在设备与主机间搬运数据?

PCIe DMA 能够实现高性能的数据搬运。

1.CPU仅需要配置DMAEngine, 大块的数据搬运过程无需CPU参与,CPU占用率低;

2.DMAEngine 是全硬件化的通信方式,TLPpayload 大overhead小,PCIe链路使用率高;

3.支持descriptor的DMA能够实现用户态数据的零拷贝,减小内存带宽消耗;

4.支持多队列的DMA,能够提高系统并行度,支持多核,多进程应用,硬件解决IO抢占和调度问题,软件编程简单;

如何使用PCIe设备的中断?

PCIe协议定义了三种中断:INTx (legacy), MSI, MSIX

1.INTx中断是相对古老的PCIe设备中断方式,整个系统仅支持8个INTx 中断,所有设备共用。PCIe中的INTx 中断是通过PCIemessage发送到 switch和 IOAPIC的。CPU收到 IOAPIC转发到 localAPIC 的 INTx 中断后,需要查询ISR确定中断源设备,并进一步查询中断含义,才能执行中断处理函数。中断数量少,中断查询复杂,响应延迟大,与数据流不保序等问题的存在,是INTx的主要缺陷。

2.MSI是实现在配置空间的消息中断,每个PCIefunction可支持最多32个MSI中断。MSI中断是一笔PCIe写报文,向APIC地址域写入特定的数据,触发CPU中断。因为其通过PCIewriteTLP 实现,中断与业务数据的保序性容易实现,硬件处理RacingCondition的代价更小。MSI中断可以具备特定的含义,设备之间不耦合,中断响应快。

3.MSIx是实现在Bar空间的消息中断,优点与MSI类似,但其数量支持更多,每个function最多可以支持2K条中断向量。

MSI和MSIx 是目前主流的中断实现方式,在虚拟化的场景下,中断可以通过IOMMU 实现remap和 posting, 进一步提升系统性能。

网卡接收方向性能低,进行调优有哪些思路?

网卡收包性能性能调优,需先识别出性能瓶颈,可通过performance监控工具(如IntelPCM),查看 CPU利用率,内存带宽使用,PCIe流量等。

一般的,优化方向包括:

1.确定NUMA的亲和性,保证CPU/Memory/PCIe 三者的亲和性

2.确定PCIe全链路的带宽匹配,确保内存带宽(读+写双向)有余量

3.设备合理的PCIe通路MPS/MRRS

4.查看并打开IDO/RO (需注意应用场景无保序风险)

5.DMAEngine 参数的调优,Batch操作的阈值配置(队列doorbell, completion notify等)

6.中断频率的调优和控制(一般在20K/100k 每秒,需结合应用和CPU)

7.DDIO和 cacheable /uncacheable 内存空间的分配

具体原理和操作可参考课程中的有关介绍。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10854

    浏览量

    211578
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209328
  • PCIe
    +关注

    关注

    15

    文章

    1234

    浏览量

    82579
  • dma
    dma
    +关注

    关注

    3

    文章

    560

    浏览量

    100546
  • 数据流
    +关注

    关注

    0

    文章

    119

    浏览量

    14349

原文标题:PCIe 课程典型问题解答

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    常见以太网馈问题解答

    常见以太网馈问题解答
    发表于 10-24 13:12 14次下载
    常见以太网馈<b class='flag-5'>问题解答</b>

    VxWorks常见问题解答

    VxWorks常见问题解答
    发表于 03-28 09:53 18次下载

    TOPSwitch-HX常见问题解答

    TOPSwitch-HX常见问题解答
    发表于 04-27 14:05 48次下载

    CCS问题解答

    CCS问题解答
    发表于 08-03 08:13 43次下载

    PC 音质常见问题解答

    PC 音质常见问题解答
    发表于 08-02 14:24 18次下载

    新手-iPhone/touch常见问题解答

    新手-iPhone/touch常见问题解答 来源于苹果官方最权威的基本常见问题解答,对于刚刚接触iPhone/iPod touch的新手来说非常有帮助。
    发表于 02-02 17:29 514次阅读

    广州大彩串口屏技术文档—硬件问题解答

    串口屏技术文档之关于串口屏的硬件问题解答说明详情
    发表于 07-01 17:35 19次下载

    晶闸管实用技术问题解答

    晶闸管实用技术问题解答
    发表于 09-12 08:27 6次下载
    晶闸管实用技术<b class='flag-5'>问题解答</b>

    AN-1291:数字电位计:常见问题解答

    AN-1291:数字电位计:常见问题解答
    发表于 03-19 04:51 8次下载
    AN-1291:数字电位计:常见<b class='flag-5'>问题解答</b>

    PDIUSBD12常见问题解答资料下载

    PDIUSBD12常见问题解答资料下载
    发表于 05-14 10:10 11次下载

    CAN总线常见问题解答

    CAN总线常见问题解答,面试中常问。
    的头像 发表于 12-27 13:47 1470次阅读
    CAN总线常见<b class='flag-5'>问题解答</b>

    CLOCK常见问题解答

    电子发烧友网站提供《CLOCK常见问题解答.pdf》资料免费下载
    发表于 11-23 10:23 0次下载
    CLOCK常见<b class='flag-5'>问题解答</b>

    TFPxxx常见问题解答

    电子发烧友网站提供《TFPxxx常见问题解答.pdf》资料免费下载
    发表于 09-29 09:56 0次下载
    TFPxxx常见<b class='flag-5'>问题解答</b>

    Keystone EDMA常见问题解答

    电子发烧友网站提供《Keystone EDMA常见问题解答.pdf》资料免费下载
    发表于 10-11 10:43 0次下载
    Keystone EDMA常见<b class='flag-5'>问题解答</b>

    Keystone NDK常见问题解答

    电子发烧友网站提供《Keystone NDK常见问题解答.pdf》资料免费下载
    发表于 10-11 10:41 0次下载
    Keystone NDK常见<b class='flag-5'>问题解答</b>