基于PCIe總線的多路復用DMA高速傳輸系統(tǒng)的設計
摘要:文章針對雙處理器設備問的數(shù)據(jù)通信提出了基于PCIe非透明橋的高速傳輸系統(tǒng)的設計方法。該方法應用于視頻轉碼設備,實驗結果表明當轉碼設備作為外設與PC主機進行通信時,采用多路虛擬DMA方法的數(shù)據(jù)傳輸總帶寬可以穩(wěn)定的達到1100MB/s,為實現(xiàn)多路實時轉碼提供了前提保證。文中還重點介紹了虛擬DMA通道的實現(xiàn)、雙系統(tǒng)問通信模型的設計及傳輸系統(tǒng)性能優(yōu)化分析。
關鍵詞:PCIe總線 DMA傳輸 非透明橋 虛擬通道
0 引言
兩個處理器系統(tǒng)的數(shù)據(jù)通信方式可以采用網(wǎng)絡通信方式或者總線連接通信方式等。網(wǎng)絡通信的帶寬約為1Gbps~4Gbps即 128MB/s~512MB/s,在不同的工作條件下,網(wǎng)絡帶寬不同,網(wǎng)絡信號存在不穩(wěn)定性,這使得系統(tǒng)問建立的通信系統(tǒng)存在影響傳輸速率的不可控因素。 PCI Express作為目前使用最流行的總線,廣泛用于主機與外部設備間通信,16bit總線寬度的PCI Express2.0速率達到16GB/s(雙工),遠遠超過了網(wǎng)絡通信速率且不需要配置網(wǎng)絡環(huán)境。
本文設計的傳輸系統(tǒng)應至少提供8路傳輸通道供轉碼設備與主機進行通信,然而在以PCIe接口芯片設計傳輸系統(tǒng)時,芯片中有限的DMA通道(一般為4路)難以滿足轉碼設備多路實時轉碼的傳輸要求。因此,如何實現(xiàn)多路虛擬DMA通道、傳輸速率滿足要求且保證各通道傳輸速率均衡是軟件設計的重點。在此之上,文中將進一步探討如何降低傳輸系統(tǒng)對處理器系統(tǒng)CPU資源的占用率。
1 系統(tǒng)模型設計及系統(tǒng)通信機制
1.1 系統(tǒng)模型設計
數(shù)據(jù)傳輸系統(tǒng)軟件模型可分為3個層次,包括設備驅動層、系統(tǒng)應用層和用戶接口層。系統(tǒng)結構如圖1所示。
薛巨峰,副教授/碩士,主研領域:自動化控制技術和加工工程自動化技術。黃愛娟,碩士生,研究方向:計算機應用技術。
由圖1可知傳輸系統(tǒng)由設備驅動模塊、DMA管理模塊、系統(tǒng)通信模塊、客戶端通信模塊和客戶端API組成。
設備驅動程序用于在處理器系統(tǒng)中識別PCIe接口芯片設備;DMA管理模塊(只在主機端存在)用于管理和分配處理器系統(tǒng)需要進行數(shù)據(jù)傳輸時對DMA通道的使用請求并完成數(shù)據(jù)傳輸功能;系統(tǒng)通信模塊用于處理器系統(tǒng)間的消息傳遞;客戶端通信模塊負責響應客戶端與傳輸系統(tǒng)的鏈接請求和數(shù)據(jù)傳輸請求;客戶端 API(Client Register)是提供給用戶進行鏈接和傳輸請求的函數(shù)接口。
1.2 系統(tǒng)通信機制
在主從機端分別運行傳輸系統(tǒng)應用程序(Plx_Server)完成傳輸系統(tǒng)的建立,Plx_Server等待客戶端調用Client Register進行鏈接請求。當主從機端的Plx_Server都有可配對的客戶端鏈接請求,則為可配對客戶端建立1路虛擬DMA傳輸通道??蛻舳耸褂肞lx_Server為其分配的傳輸句柄(Client Socket)即可實現(xiàn)數(shù)據(jù)收發(fā)和斷開傳輸鏈接。
2 系統(tǒng)硬件設計
開發(fā)PCIe接口可以采用FPGA設計PCIe接口,但由于PCIe總線規(guī)范較復雜,這種開發(fā)方法難度很大;而采用專用PCIe接口芯片,可以免除繁瑣的時序分析,縮短開發(fā)周期,降低開發(fā)成本。本系統(tǒng)選擇后者,PCIe接口芯片選擇為PLX公司開發(fā)的PEX8619接口芯片。
PCIe橋連接方式有2種:透明橋(Transparent Bridge)和非透明橋(Non-Transparent Bridge)。總系統(tǒng)中存在兩個獨立的處理器,此時使用透明橋方式不利于整個系統(tǒng)的配置與管理,可能出現(xiàn)PCIe總線地址的映射沖突,此外不能使用PCIe透明橋連接兩個PCIe Agent設備,如x86處理器。采用非透明橋可有效的解決這些問題,提高PCIe傳輸系統(tǒng)的可移植性。非透明橋不是PCIe總線定義的標準橋片,但是這類橋片在連接兩個處理器系統(tǒng)中得到了廣泛的應用。
PEX8619支持NT橋功能,芯片在智能配置器模式下的軟件模型如圖2所示。
在圖2中有兩個用于設備識別的配置空間寄存器(CSR),離內部虛擬PCIe總線較近的稱之為虛擬接口(Virtual Interface),離得較遠的稱之為鏈路接口(Link Interface)。
在智能配置器模式中,NT橋鏈路端口連接的是從機的地址域,從機系統(tǒng)只管理NT橋鏈路接口Type 0功能(NT設備功能)。NT橋虛擬端口連接的是主機的地址域,主機管理所有NT橋虛擬接口Type 0功能和Type 1功能(DMA引擎功能)。跨域傳輸是通過地址轉換機制的路由來完成的。
3 系統(tǒng)軟件設計
3.1 設備驅動程序
主從機端分別安裝PLX公司提供的PLX_SDK_v7_11_Final設備驅動程序,從機端識別出NT橋的NT設備,主機端識別出NT橋的NT設備和DMA引擎。
3.2 系統(tǒng)應用程序
PCIe傳輸系統(tǒng)Plx_Server與客戶端API(Client_Register)是一對多的關系,傳輸系統(tǒng)最多允許128對客戶端進行鏈接和數(shù)據(jù)傳輸,傳輸系統(tǒng)的函數(shù)關聯(lián)圖如圖3所示。
3.2.1 系統(tǒng)初始化
系統(tǒng)初始化主要是對PCIe設備進行初始化配置 和地址映射等工作。調用系統(tǒng)庫函數(shù)PlxPci_Device Find找到NT設備和DMA設備(只在主機端有),并獲得設備描述符。使用PlxPci_PciBarMap函數(shù)將NTBar0、DMA Bar0(只在主機端有)和NT Bar2~NT Bar5映射到用戶虛地址空間。使用PlxPci_PhysicalMap函數(shù)申請128個大小為4MB的物理內存并將其映射到用戶虛地址空間作為DMA數(shù)據(jù)緩沖區(qū)使用。這些寄存器的作用如表1所示。
3.2.2 DMA管理模塊
使用規(guī)定傳輸系統(tǒng)最多允許建立128對傳輸通道,而PEX8619芯片上只有4個DMA通道。面對128路虛擬傳輸通道和4路DMA物理通道的不匹配,系統(tǒng)中使用分時復用DMA通道的方法解決這一矛盾。
首先,分時復用要解決共享內存資源的分配,DMA數(shù)據(jù)緩沖區(qū)大小為128x4MB。為達到資源利用最大化及公平性,每一次虛擬傳輸通道的建立與斷開都要為現(xiàn)存的每一路傳輸通道重新計算和分配DMA數(shù)據(jù)緩沖區(qū)。每一路傳輸通道可用于接收或發(fā)送數(shù)據(jù)的緩沖區(qū)大小計算公式為:128×4/channel total×1/2,其中channel_total為總通道數(shù)。[!--empirenews.page--]
其次,需要解決DMA通道的使用分配。在多線程機制下對DMA通道請求隊列的管理有2種方案,隊列管理方案如圖4所示。
在方案一中,每個虛擬通道的線程把自己的DMA請求(DMA_Req)放入DMA請求隊列(DAM_Queue)中,Oueue Read負責從隊列中取出DMA請求。在此使用鎖機制,將隊列寫操作作為臨界區(qū),在鎖定的臨界區(qū)只允許讓一個線程訪問,其它線程排隊等待。這樣的方案設計簡單易懂好管理,然而在實際的測試中,由于線程資源及調度是由操作系統(tǒng)來完成的,測試結果表明各個通道的DMA_Req并不能公平地寫入隊列,DMA物理通道并不能公平的服務于每一路虛擬通道,導致了各個通道間傳輸速率不均衡。
在方案二中,各個虛擬通道把自己的DMAReq寫入自己的DMA_Queue中,Queue_Read通過輪詢的方式讀取各個DMA_Queue的DMA 請求,測試結果表明DMA物理通道資源能被公平的分配且請求處理效率更高。因此傳輸系統(tǒng)的DMA請求隊列管理采用方案二實現(xiàn)。
3.2.3 系統(tǒng)通信模塊
主機與從機兩個處理器系統(tǒng)天然的分離特性,使得性能與正確性產(chǎn)生矛盾,如果兩端的消息通信只是簡單的發(fā)送/接收和處理,不能保證兩端不同時使用同一資源。因此為傳輸系統(tǒng)規(guī)定了一個有順序語義的通信機制如圖5所示。
圖5中黑色箭頭表示的是程序的執(zhí)行順序,白色部分代表了對主機端消息的處理,黑色部分代表了對從機端消息的處理。主從機端皆有一個消息隊列,所有需要發(fā)送的消息(msgQ)都先存入消息隊列中,主機和從機端通過令牌機制來輪流向對方遞送消息。如果一方消息隊列為空,也需要讓度令牌,使得對方能繼續(xù)遞送消息。以主機機端為例,其消息處理過程如下:(1)等待從機端發(fā)送讓度令牌的消息Ack;(2)收到Ack后接收從機端的發(fā)送的消息Req;(3)對消息進行處理并且準備要發(fā)送給對方的Ack和從消息隊列中取出msgQ(若消息隊列為空,則填入NULL);(4)向對方發(fā)送Ack和msgQ。從機端的消息處理與主機端是一一對應的。
系統(tǒng)中使用NT橋的8個32位的MailBox寄存器來實現(xiàn)主從機的消息通信,MailBox寄存器是NT橋的鏈路端口和虛擬端口共有的,都可見可讀可寫。
令牌跳躍式的消息傳遞機制是否會成為整個傳輸系統(tǒng)提升傳輸速率的瓶頸,將在下文的實驗測試中給出結論。
3.2.4 客戶端通信模塊
使用“Abstract”樣式。為了提供一個簡易通用的客戶端接口,Plx_Server和Client_Register的進程間通信使用Socket實現(xiàn)。傳輸系統(tǒng)的主程序Plx_Server通過創(chuàng)建服務器(Server Socket)未向連接服務器的客戶端(Client Register)提供服務。服務包括了數(shù)據(jù)收發(fā)請求,連接建立/端開請求等。Plx_Server處理Client_Register連接請求的流程如圖6所示。
在圖6中客戶端的連接注冊、客戶端配對和建立傳輸通道都是由主機端完成的,從機端的連接注冊需要交付給主機端來完成。
3.2.5 客戶端API
調用客戶端API(Client_Register)完成連接配對請求后,Client_Register將返回一個Socket描述符。用戶只需要參考標準Socket編程規(guī)范,即可使用Socket標準函數(shù)接口,比如read、write、close等進行數(shù)據(jù)通信。
4 系統(tǒng)性能優(yōu)化分析
為滿足視頻轉碼設備對數(shù)據(jù)傳輸性能的要求,傳輸系統(tǒng)除了要滿足傳輸速率、速率均衡的要求外,CPU資源使用率也要作為考慮的因素。在測試中當處理器系統(tǒng)的 CPU使用率超過50%后,傳輸系統(tǒng)的總帶寬隨之下降。為此,傳輸系統(tǒng)做了以下優(yōu)化:(1)設置Plx_Server的CPU相關性,使進程同時關聯(lián)多個 CPU;(2)線程在等待或空閑時適當掛起以釋放占用的CPU資源。
5 實驗結果分析
本傳輸系統(tǒng)結合視頻轉碼設備的使用做了大量的測試,首先測試傳輸系統(tǒng)數(shù)據(jù)傳輸帶寬,測試結果如圖7所示。實驗結果表明了系統(tǒng)傳輸性能穩(wěn)定,傳輸總帶寬約為1100MB /s。隨著傳輸通道數(shù)的增加,每一對正在傳輸?shù)耐ǖ缹⒅匦鹿椒峙滟Y源,分配到的資源將減少,使得單路傳輸帶寬將減小,但總帶寬基本保持不變。
另外驗證傳輸系統(tǒng)消息通信機制是否會成為限制傳輸速率的瓶頸。測試數(shù)據(jù)如表2所示。傳輸系統(tǒng)最少每秒可發(fā)送/接收一共1776個消息,完成一次傳輸(每次 DMA傳輸可發(fā)送4MB大小數(shù)據(jù))一共需要發(fā)送/接收5個消息,則經(jīng)換算傳輸系統(tǒng)消息通信帶寬為1776/5x4=2220MB/s,遠遠超過了傳輸系統(tǒng)數(shù)據(jù)傳輸總帶寬,不會成為限制傳輸速率的瓶頸。
在處理器型號為Intel Core i5系列,雙核4線程的主機上運行傳輸系統(tǒng)進程時,進程對主機CPU使用率低于20%,這使得主機在使用從機(視頻轉碼設備)時還有足夠的余力處理其它任務。
6 結語
本文基于PEx8619的PCIe接口芯片完成了跨PCIe NT橋的傳輸系統(tǒng)的設計,實現(xiàn)了雙處理器間的多通道數(shù)據(jù)傳輸功能。經(jīng)試驗測試,傳輸系統(tǒng)總帶寬達到1100MB/s,實時性好,性能優(yōu)越且可移植性強,在需要高速傳輸系統(tǒng)的領域如視頻實時轉碼等有很好的應用前景。