05.24 「博文連載」PCIe掃盲——Quality of Service簡介

「博文連載」PCIe掃盲——Quality of Service簡介

前面的文章中介紹過,為了保證視頻、音頻等數據得到優先傳輸,PCIe總線實現了一種叫做Quality of Service(QoS)的機制。QoS可以滿足視頻、音頻等對Latency和實時性(Isochronous)要求比較高(一般不可以被打斷)的應用需求。QoS主要通過VC(Virtual Channel)和TC(Traffic Class)來實現。

VC的相關寄存器位於PCIe配置空間的擴展部分(PCIe Extended Capability Space),如下圖所示:

「博文连载」PCIe扫盲——Quality of Service简介

前面的文章中介紹過,每一個VC都有獨立的Buffer,某一個VC Buffer滿了並不會影響其他VC的使用。但是隻靠VC並不能實現QoS中的優先級的功能,這還需要TC(Traffic Class)的支持。TC的值由TLP Header中的Byte1的bit[6:4]定義,如下圖所示。顯然TC值的範圍為0~7,值越大優先級越高,默認為0(優先級最低)。在初始化的時候,PCIe驅動程序會為每一種類型的包分配好合適的TC值(優先級)。

「博文连载」PCIe扫盲——Quality of Service简介

如果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。如下圖所示:

「博文连载」PCIe扫盲——Quality of Service简介

圖中的例子,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扫盲——Quality of Service简介

PCIe驅動程序可以通過查詢擴展配置空間中的Extended VC Count來確定該端口支持的VC數量,如下圖所示:

「博文连载」PCIe扫盲——Quality of Service简介「博文连载」PCIe扫盲——Quality of Service简介
「博文连载」PCIe扫盲——Quality of Service简介


分享到:


相關文章: