前面的文章中介紹過,為了保證視頻、音頻等數據得到優先傳輸,PCIe總線實現了一種叫做Quality of Service(QoS)的機制。QoS可以滿足視頻、音頻等對Latency和實時性(Isochronous)要求比較高(一般不可以被打斷)的應用需求。QoS主要通過VC(Virtual Channel)和TC(Traffic Class)來實現。
VC的相關寄存器位于PCIe配置空間的擴展部分(PCIe Extended Capability Space),如下圖所示:
前面的文章中介紹過,每一個VC都有獨立的Buffer,某一個VC Buffer滿了并不會影響其他VC的使用。但是只靠VC并不能實現QoS中的優先級的功能,這還需要TC(Traffic Class)的支持。TC的值由TLP Header中的Byte1的bit[6:4]定義,如下圖所示。顯然TC值的范圍為0~7,值越大優先級越高,默認為0(優先級最低)。在初始化的時候,PCIe驅動程序會為每一種類型的包分配好合適的TC值(優先級)。
如果PCIe驅動程序沒有找到PCIe Extended Capability Space,則認為該設備只有一個VC,即VC0。此時再為每一個TLP分配不同的TC值,顯然是沒有意義的。因此會默認采用TC0/VC0組合,即不支持QoS功能。換一句話說,如果某一個PCIe設備只支持一個VC(VC0),那么就沒有QoS什么事了。
注:本次連載的博客只是簡單地介紹QoS的功能和應用,關于QoS的詳細內容,如VC仲裁,端口仲裁,實時性(Isochronous)等相關內容,還請參考PCIe Spec的相關章節。
PCIe驅動程序(配置軟件)通過修改VC資源控制寄存器(VC Resource Control Register)中的TC/VC Map位來實現TC/VC Mapping。同時通過VC ID位來選擇相應的VC。如下圖所示:
圖中的例子,TC0、TC1對應VC0,而TC2~TC4對應的是VC3。
TC/VC Mapping采用了一種靈活的機制,但是仍然需要注意以下幾點:
· TC/VC Mapping是針對Link兩端的端口(Ports)的;
· TC0會被自動地Map到VC0,且只能Map到VC0;
· 其他的TC可以被Map到任意的VC上;
· 一個TC一般最多只能Map到一個VC上;
· 可以有TC或者VC不被使用。
如果Link的兩個端口(Ports)中,VC數量不一致,則該Link只能服從VC數量少的端口,如下圖所示:
PCIe驅動程序可以通過查詢擴展配置空間中的Extended VC Count來確定該端口支持的VC數量,如下圖所示:
-
寄存器
+關注
關注
31文章
5336瀏覽量
120244 -
總線
+關注
關注
10文章
2878瀏覽量
88055 -
PCIe
+關注
關注
15文章
1235瀏覽量
82591
原文標題:【博文連載】PCIe掃盲——Quality of Service簡介
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論