0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PCIe相關(guān)問(wèn)題解答

Linux閱碼場(chǎng) ? 來(lái)源:Linux閱碼場(chǎng) ? 2023-09-15 09:39 ? 次閱讀

PCIe設(shè)備的數(shù)據(jù)流有哪些,分別是什么場(chǎng)景?

PCIe設(shè)備的數(shù)據(jù)流主要為4大類:

1.CPU發(fā)起的,訪問(wèn)PCIe設(shè)備配置空間的數(shù)據(jù)流。這種數(shù)據(jù)流主要是BIOS/Linux PCIedriver 對(duì)設(shè)備進(jìn)行初始化、資源分配時(shí),讀寫配置空間的。包括PCIe 枚舉,BAR空間分配, MSI 分配等。 設(shè)備驅(qū)動(dòng)通過(guò) pci_wirte_config() / pci_read_config() 發(fā)起配置空間訪問(wèn)。 lspci /setpci 也是對(duì)應(yīng)到配置空間訪問(wèn)。

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

2.CPU發(fā)起的,訪問(wèn)PCIe設(shè)備MMIO/IO的數(shù)據(jù)流。將Bar空間mmap 到系統(tǒng)地址空間后,設(shè)備驅(qū)動(dòng)可通過(guò)地址訪問(wèn)PCIe設(shè)備的 Bar/ MMIO 空間。 一般的,設(shè)備會(huì)將特定的寄存器和存儲(chǔ)實(shí)現(xiàn)在MMIO空間內(nèi)。CPU可使用 iowrite32() / ioread32() 等方式訪問(wèn) MMIO空間。這是一種效率較低的PCIe使用方式.

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

3.PCIe設(shè)備發(fā)起的,訪問(wèn) HostMemory 的 DMA數(shù)據(jù)流。這種數(shù)據(jù)流由PCIe設(shè)備的DMAEngine 發(fā)起,是一種常見的、高性能的PCIe數(shù)據(jù)流。CPU通過(guò)配置 PCIe設(shè)備內(nèi)的DMAEngine (通過(guò)MMIO寄存器),啟動(dòng)設(shè)備PCIeDMA。網(wǎng)卡,GPU等PCIe設(shè)備,數(shù)據(jù)通路均有PCIeDMA完成。

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

4.PCIe設(shè)備發(fā)起的,訪問(wèn)PCIe設(shè)備MMIO/IO的數(shù)據(jù)流, 亦稱P2P (Peer to Peer)。同(3)類似,也是利用PCIe設(shè)備的DMAengine, 但是數(shù)據(jù)訪問(wèn)的是其他PCIe設(shè)備的MMIO地址空間而非HostMemory. CPU須配置橋片端口路由地址。 GDR (GPU directRDMA) 就是利用這種數(shù)據(jù)流,避免主機(jī)內(nèi)存的數(shù)據(jù)拷貝。

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

CPU訪問(wèn)設(shè)備內(nèi)存(Bar空間)和訪問(wèn)主機(jī)內(nèi)存,有什么不同?

Prefetchable MMIO 映射到系統(tǒng)地址空間后,軟件可以通過(guò)地址對(duì)PCIeMMIO空間進(jìn)行直接訪問(wèn)(CPU使用MOV指令),這一點(diǎn)與系統(tǒng)內(nèi)存訪問(wèn)在操作上是一致的。

RootComplex 會(huì)根據(jù)CPU訪問(wèn)的地址決定數(shù)據(jù)訪問(wèn)路由,對(duì)于系統(tǒng)內(nèi)存地址空間,數(shù)據(jù)會(huì)被路由到iMC(integrated Memory Controller) 訪問(wèn)DDR;對(duì)于MMIO地址空間,數(shù)據(jù)會(huì)被路由到HostBridge 轉(zhuǎn)換為 TLP發(fā)起對(duì)設(shè)備的PCIe通信。

一般的,HostMemory 分配都是Cacheable(writeback) 的,而 MMIO通常是Uncacheable的,加之兩者帶寬和通信機(jī)理的不同,導(dǎo)致了CPU使用地址直接訪問(wèn)PCIeMMIO空間無(wú)法達(dá)到訪問(wèn)系統(tǒng)內(nèi)存的性能,也無(wú)法用滿PCIe帶寬。使用memcpy() 在HostMemory 和MMIO 地址拷貝數(shù)據(jù)也是一種低效方式。

對(duì)于連續(xù)的MMIO空間訪問(wèn),可以通過(guò)支持writecombine的方式( mmap_wc() )來(lái)提升性能。

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

為什么需要使用PCIe DMA,在設(shè)備與主機(jī)間搬運(yùn)數(shù)據(jù)?

PCIe DMA 能夠?qū)崿F(xiàn)高性能的數(shù)據(jù)搬運(yùn)。

1.CPU僅需要配置DMAEngine, 大塊的數(shù)據(jù)搬運(yùn)過(guò)程無(wú)需CPU參與,CPU占用率低;

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

3.支持descriptor的DMA能夠?qū)崿F(xiàn)用戶態(tài)數(shù)據(jù)的零拷貝,減小內(nèi)存帶寬消耗;

4.支持多隊(duì)列的DMA,能夠提高系統(tǒng)并行度,支持多核,多進(jìn)程應(yīng)用,硬件解決IO搶占和調(diào)度問(wèn)題,軟件編程簡(jiǎn)單;

如何使用PCIe設(shè)備的中斷?

PCIe協(xié)議定義了三種中斷:INTx (legacy), MSI, MSIX

1.INTx中斷是相對(duì)古老的PCIe設(shè)備中斷方式,整個(gè)系統(tǒng)僅支持8個(gè)INTx 中斷,所有設(shè)備共用。PCIe中的INTx 中斷是通過(guò)PCIemessage發(fā)送到 switch和 IOAPIC的。CPU收到 IOAPIC轉(zhuǎn)發(fā)到 localAPIC 的 INTx 中斷后,需要查詢ISR確定中斷源設(shè)備,并進(jìn)一步查詢中斷含義,才能執(zhí)行中斷處理函數(shù)。中斷數(shù)量少,中斷查詢復(fù)雜,響應(yīng)延遲大,與數(shù)據(jù)流不保序等問(wèn)題的存在,是INTx的主要缺陷。

2.MSI是實(shí)現(xiàn)在配置空間的消息中斷,每個(gè)PCIefunction可支持最多32個(gè)MSI中斷。MSI中斷是一筆PCIe寫報(bào)文,向APIC地址域?qū)懭胩囟ǖ臄?shù)據(jù),觸發(fā)CPU中斷。因?yàn)槠渫ㄟ^(guò)PCIewriteTLP 實(shí)現(xiàn),中斷與業(yè)務(wù)數(shù)據(jù)的保序性容易實(shí)現(xiàn),硬件處理RacingCondition的代價(jià)更小。MSI中斷可以具備特定的含義,設(shè)備之間不耦合,中斷響應(yīng)快。

3.MSIx是實(shí)現(xiàn)在Bar空間的消息中斷,優(yōu)點(diǎn)與MSI類似,但其數(shù)量支持更多,每個(gè)function最多可以支持2K條中斷向量。

MSI和MSIx 是目前主流的中斷實(shí)現(xiàn)方式,在虛擬化的場(chǎng)景下,中斷可以通過(guò)IOMMU 實(shí)現(xiàn)remap和 posting, 進(jìn)一步提升系統(tǒng)性能。

網(wǎng)卡接收方向性能低,進(jìn)行調(diào)優(yōu)有哪些思路?

網(wǎng)卡收包性能性能調(diào)優(yōu),需先識(shí)別出性能瓶頸,可通過(guò)performance監(jiān)控工具(如IntelPCM),查看 CPU利用率,內(nèi)存帶寬使用,PCIe流量等。

一般的,優(yōu)化方向包括:

1.確定NUMA的親和性,保證CPU/Memory/PCIe 三者的親和性

2.確定PCIe全鏈路的帶寬匹配,確保內(nèi)存帶寬(讀+寫雙向)有余量

3.設(shè)備合理的PCIe通路MPS/MRRS

4.查看并打開IDO/RO (需注意應(yīng)用場(chǎng)景無(wú)保序風(fēng)險(xiǎn))

5.DMAEngine 參數(shù)的調(diào)優(yōu),Batch操作的閾值配置(隊(duì)列doorbell, completion notify等)

6.中斷頻率的調(diào)優(yōu)和控制(一般在20K/100k 每秒,需結(jié)合應(yīng)用和CPU)

7.DDIO和 cacheable /uncacheable 內(nèi)存空間的分配

具體原理和操作可參考課程中的有關(guān)介紹。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10807

    瀏覽量

    210852
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208721
  • PCIe
    +關(guān)注

    關(guān)注

    15

    文章

    1200

    瀏覽量

    82354
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    558

    瀏覽量

    100348
  • 數(shù)據(jù)流
    +關(guān)注

    關(guān)注

    0

    文章

    119

    瀏覽量

    14318

原文標(biāo)題:PCIe 課程典型問(wèn)題解答

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    常見以太網(wǎng)饋問(wèn)題解答

    常見以太網(wǎng)饋問(wèn)題解答
    發(fā)表于 10-24 13:12 ?14次下載
    常見以太網(wǎng)饋<b class='flag-5'>問(wèn)題解答</b>

    VxWorks常見問(wèn)題解答

    VxWorks常見問(wèn)題解答
    發(fā)表于 03-28 09:53 ?18次下載

    TOPSwitch-HX常見問(wèn)題解答

    TOPSwitch-HX常見問(wèn)題解答
    發(fā)表于 04-27 14:05 ?48次下載

    CCS問(wèn)題解答

    CCS問(wèn)題解答
    發(fā)表于 08-03 08:13 ?43次下載

    PC 音質(zhì)常見問(wèn)題解答

    PC 音質(zhì)常見問(wèn)題解答 。
    發(fā)表于 08-02 14:24 ?18次下載

    新手-iPhone/touch常見問(wèn)題解答

    新手-iPhone/touch常見問(wèn)題解答 來(lái)源于蘋果官方最權(quán)威的基本常見問(wèn)題解答,對(duì)于剛剛接觸iPhone/iPod touch的新手來(lái)說(shuō)非常有幫助。
    發(fā)表于 02-02 17:29 ?509次閱讀

    廣州大彩串口屏技術(shù)文檔—硬件問(wèn)題解答

    串口屏技術(shù)文檔之關(guān)于串口屏的硬件問(wèn)題解答說(shuō)明詳情
    發(fā)表于 07-01 17:35 ?19次下載

    晶閘管實(shí)用技術(shù)問(wèn)題解答

    晶閘管實(shí)用技術(shù)問(wèn)題解答
    發(fā)表于 09-12 08:27 ?6次下載
    晶閘管實(shí)用技術(shù)<b class='flag-5'>問(wèn)題解答</b>

    AN-1291:數(shù)字電位計(jì):常見問(wèn)題解答

    AN-1291:數(shù)字電位計(jì):常見問(wèn)題解答
    發(fā)表于 03-19 04:51 ?8次下載
    AN-1291:數(shù)字電位計(jì):常見<b class='flag-5'>問(wèn)題解答</b>

    PDIUSBD12常見問(wèn)題解答資料下載

    PDIUSBD12常見問(wèn)題解答資料下載
    發(fā)表于 05-14 10:10 ?11次下載

    CAN總線常見問(wèn)題解答

    CAN總線常見問(wèn)題解答,面試中常問(wèn)。
    的頭像 發(fā)表于 12-27 13:47 ?1405次閱讀
    CAN總線常見<b class='flag-5'>問(wèn)題解答</b>

    CLOCK常見問(wèn)題解答

    電子發(fā)燒友網(wǎng)站提供《CLOCK常見問(wèn)題解答.pdf》資料免費(fèi)下載
    發(fā)表于 11-23 10:23 ?0次下載
    CLOCK常見<b class='flag-5'>問(wèn)題解答</b>

    TFPxxx常見問(wèn)題解答

    電子發(fā)燒友網(wǎng)站提供《TFPxxx常見問(wèn)題解答.pdf》資料免費(fèi)下載
    發(fā)表于 09-29 09:56 ?0次下載
    TFPxxx常見<b class='flag-5'>問(wèn)題解答</b>

    Keystone EDMA常見問(wèn)題解答

    電子發(fā)燒友網(wǎng)站提供《Keystone EDMA常見問(wèn)題解答.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 10:43 ?0次下載
    Keystone EDMA常見<b class='flag-5'>問(wèn)題解答</b>

    Keystone NDK常見問(wèn)題解答

    電子發(fā)燒友網(wǎng)站提供《Keystone NDK常見問(wèn)題解答.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 10:41 ?0次下載
    Keystone NDK常見<b class='flag-5'>問(wèn)題解答</b>