PCIe總線設計之初,主要是針對于音頻和視頻傳輸等這些對時間要求特別敏感的應用的。為了保證這些特殊應用的數據包能夠得到優先發送,PCIe Spec中為每一個包都分配了一個優先級,通過TLP的Header中的3位(即TC,Traffic Class)。
如下圖所示:
TC值越大,表示優先級越高,對應的包也就會得到優先發送。一般來說,支持QoS(Quality of Service)的PCIe總線系統,對于每一個TC值都會有一個獨立Virtual Channel(VC)與之對應。這個Virtual Channel實際上就是一個Buffer,用于緩存數據包。
注:當然也有那些只有一個VC Buffer的,此時不管包的TC值如何,都只能緩存在同一個VC Buffer中,自然也就沒有辦法保證按優先級傳輸了。這樣的PCIe設備稱之為不支持QoS的PCIe設備。
一個簡單的QoS的例子如下圖所示:
圖中左下角的Endpoint(即Isochronous Traffic)的優先級比右邊的Endpoint(即Ordinary Traffic)的優先級要高。因此,在Switch中,來自左邊的Endpoint的包會得到優先傳輸。而Switch的這種判決操作叫做端口仲裁(Port Arbitration)。
默認情況下,VC Buffer中的數據包是按照包達到的時間順序,依次放入VC Buffer中的。但是也并不是總是這樣,PCIe總線繼承了PCI/PCI-X總線關于Transaction-Ordering和Relaxed-Ordering的架構,但也只是針對相同的TC值才有效。關于Transaction-Ordering和Relaxed-Ordering,大家可以去參考PCI-X的Spec,這里不再詳細地介紹。
對于大部分的串行傳輸協議而言,發送方能夠有效地將數據發送至接收方的前提是,接收方有足夠的接收Buffer來接收數據。在PCI總線中,發送方在發送前并不知道接收法是否有足夠的Buffer來接收數據(即接收方是否就緒),因此經常需要一些Disconnects和Retries的操作,這將會嚴重地影響到總線的傳輸效率(性能)。
PCIe總線為了解決這一問題,提出了Flow Control的概念,如下圖所示。PCIe總線中要求接收方必須經常(在特定時間)向發送方報告其VC Buffer的使用情況。而報告的方式是,接收方向發送方發送Flow Control的DLLP(數據鏈路層包),且這種DLLP的收發是由硬件層面上自動完成的,并不需要人為的干預。需要注意的是,雖然這一操作旨在數據鏈路層之間進行,但是這些VC Buffer的使用情況對于應用層(軟件層)也是可見的。
采用Flow Control機制的PCIe總線,相對于PCI總線獲得了更高的總線利用率。雖然增加了Flow Control DLLP,但是這些DLLP對帶寬的占用極小,幾乎對總線利用率沒有什么影響。
-
總線
+關注
關注
10文章
2866瀏覽量
87984 -
PCIe
+關注
關注
15文章
1217瀏覽量
82437
原文標題:【博文連載】PCIe掃盲——PCIe總線事務層入門(三)
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論