NTB調試常見問題指南

來源:互聯網
上載者:User

標籤:pcie   fabric   ntb   

NTB調試常見問題指南



作為實現不同PCI域乃至跨節點資料轉送的重要器件,NTB在伺服器和儲存領域實現雙控、記憶體互訪等方面發揮著重要的作用。由於它本身既作為virtualport出現,又可以被互聯的結點通過pciscan看到,作為一個linkport出現,加之其上實現的地址轉換和轉寄功能,在實際工程項目中,難免會碰到各種問題。本文結合筆者最近的工作,分享了NTB調試過程中常見的問題和解決思路和辦法。

從問題的現象來看,具體常見問題包括:

找不到NTB裝置;

NTBmailbox無法傳送資料;

ReqID無法探測到;

NTBbar size 不夠大;

資料轉送出錯

根據問題發生所在的PCIE相關的軟硬體層次,這些問題又可以歸納為下面的幾類:

硬體故障;

韌體故障;

PCIE設定錯誤;

程式錯誤。

下面針對上面列舉出來的幾種現象,逐一進行分析和討論:

找不到NTB裝置

這種情況下,運行應用程式的時候可能會發現用刀的庫中會提示找不到裝置,程式出錯或者退出。此時,可以首先通過lspci看看能否掃描到NTB裝置,如果找不到就說明系統沒有發現NTB硬體,此時需要檢查NTB的EEPROM是否已經使能NTB,以及板卡上是否有disable/enableNTB的跳線,如果有則還需要堅持它是否已經disable。如果裝置存在,並且能夠被lspci掃描到,但是應用程式就是提示看不到裝置,需要檢查裝置驅動是否載入成功。此時,可以通過重新載入NTB裝置驅動程式去解決。

2、NTBmailbox register無法傳送資料

根據NTB的使用說明,一般而言,NTB的mailbox和doorbell寄存器用來在多個節點之間傳遞資訊進而實現上層的同步。如果出現doorbell/mailbox寄存器讀回來的數是0xffffffff的話,那麼需要檢查映射doorbell/mailbox寄存器的bar0/1的設定是否正確。方法是通過lspci讀出bar0/1的值,檢查它是否和BIOS給它分配的物理地址一致。



3、ReqID無法探測到

具體的現象如下面的輸出所示意:

Communicatingfrom          : VIRTUAL side

DetermineNT connect type   : Standard (NTV <---> NTL)

GetBAR 2 properties       : Ok (Size:2048 KB)

MapBAR 2 to user space    : Ok (VA:0x7f5c1801d000)

Probefor write ReqID      : ERROR: Unable to probe ReqID, auto-add 0,0,0

Addwrite Req ID to LUT    : ERROR: Unable to add LUT entry

AllocatePCI buffer        : Ok (PCI:3638A000  Size:1000 B)

MapPCI buffer             : Ok (VA:0x7f5c18d01000)



ReqID是用來記錄發出PCIETLP請求的device的B:D:F,如果是由cpu發起的訪問,那麼它通常用北橋rootcmplex的B:D:F來表示,如果是DMA發起來的訪問,那麼它應該由發起訪問的DMA的B:D:F去表示。在應用程式中,可以通過出發一條特殊的TLP,然後根據報文協議,來提取它的B:D:F,進而得到它的ReqID。 一旦出現這種ReqID無法探測的情況,需要檢查用到的bar2/bar3或者bar4/bar5的基地址寄存器設定是否正確,檢查它的方法也是判斷bar的基地址寄存器的值是否和BIOS分配的地址一致。



4、用在地址轉換的barsize不夠大

受限於BIOS和EEPROM設定,用作地址轉換的barsize是固定的,對於實現全系統記憶體共用或者大地址互相訪問的應用而言,這個地址視窗可能太小。為此,就需要把地址調大。

首先,這需要bios給pci裝置分配地址空間的時候, 能夠支援足夠大的空間範圍,為此,需要確保BIOS裡一些相關的設定已經使能,以筆者手中的bIOS為例,它就需要使能56T以上的PCI地址空間,如所示意:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/83/80/wKioL1d0wg-ChMfVAAQcHZ20Sms370.png" title="High_MMIO_SIZE_setting.png" alt="wKioL1d0wg-ChMfVAAQcHZ20Sms370.png" />



其次,還需要修改用作地址轉換的bar的setup寄存器的值,這就需要尋找手冊,根據寄存中bitmap和mask的設定,來設定足夠大的地址空間。需要注意的是,這個地址也不能超過BIOS所能支援的最大地址空間,否則很可能導致在系統pciemulate的時候因為無法分配到足夠的地址空間而hang住。如果在某組地址轉換寄存器上無法實現視窗擴大的話,可以嘗試其他地址視窗。比如筆者手上的bar2/bar3的視窗大小隻有1M,但是通過觀察/proc/iomem的輸出,可以看到bar4/bar5的視窗足足有8G:

380000000000-383fffffffff: PCI Bus 0000:00

383c00000000-383e001fffff: PCI Bus 0000:04

  383c00000000-383e001fffff: PCI Bus 0000:05

    383c00000000-383e001fffff: PCI Bus 0000:06

      383c00000000-383dffffffff: 0000:06:00.0

      383e00000000-383e000fffff: 0000:06:00.0

載入對應的NTB驅動後,果然也能看到這個大視窗:

[86764.073933]LPC6500_NT:    Resource 01

[86764.073935]LPC6500_NT:      Type     : Memory

[86764.074004]LPC6500_NT:      PCI BAR 2: 383E0000000C

[86764.074006]LPC6500_NT:      Phys Addr: 383E00000000

[86764.074008]LPC6500_NT:      Size     :   200000 (2048 KB)

[86764.074010]LPC6500_NT:      Property : Prefetchable 64-bit

[86764.074206]LPC6500_NT:      Kernel VA: ffffc90017700000

[86764.074208]LPC6500_NT:    Resource 02

[86764.074209]LPC6500_NT:      Type     : Memory

[86764.074279]LPC6500_NT:      PCI BAR 4: 383C0000000C

[86764.074281]LPC6500_NT:      Phys Addr: 383C00000000

[86764.074283]LPC6500_NT:      Size     : 200000000 (8388608 KB)

[86764.074285]LPC6500_NT:      Property : Prefetchable 64-bit

[86764.487186]LPC6500_NT:      Kernel VA: ffffc90017e81000

[86764.487189]LPC6500_NT: Using PCI BAR 0 (VA=ffffc90016c80000) ==> PLX regs



根據上面的分析可以看到,NTB調試過程中,可能會碰到各種奇怪的問題,但萬變不離其宗,只要把握住了NTB地址轉換和資料轉送的原理,總不難逐層分析出問題的根源,找到對應的解決辦法。






本文出自 “儲存之廚” 部落格,轉載請與作者聯絡!

NTB調試常見問題指南

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.