官方文檔查看地址:
http://doc.dpdk.org/guides/sample_app_ug/qos_scheduler.html
PDF下載地址:
https://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-sample-applications-user-guide.html?eu-cookie-notice
本篇難度係數:
翻譯:☆☆☆☆☆
理解:★★☆☆☆
30.QoS調度程序示例應用程序
示例應用程序演示了使用DPDK提供QoS調度的方法。
30.1.概述
QoS調度程序應用程序的體系結構如下圖所示。
Fig. 1 QoS Scheduler Application Architecture
這個應用程序有兩種運行時執行方式,每個數據包流配置使用兩個或三個線程。RX線程從RX端口讀取數據包,根據雙VLAN(外部和內部)以及IP目標地址的低兩個字節對數據包進行分類,並將它們放入環形隊列。工作線程將數據包從環中取出,並調用QoS調度程序入列/出列函數。如果使用單獨的TX核,這些包將被髮送到TX環。否則,它們將被直接發送到TX端口。如果存在TX線程,則從TX環讀取數據包並將其寫入TX端口。
30.2.編譯應用程序
要編譯示例應用程序,請參見Compiling the Sample Applications。
應用程序位於qos_sched子目錄中。
- 請注意
此應用程序僅適用於linux。 - 請注意
要使用下一節中描述的命令行接口獲取示例應用程序的統計信息,必須編譯DPDK,定義CONFIG_RTE_SCHED_COLLECT_STATS,這可以通過更改要編譯的特定目標的配置文件來完成。
30.3.運行應用程序
- 請注意
爲了運行應用程序,必須爲每個使用的套接字(取決於使用的內核)總共設置至少4 G的大頁面。
應用程序有許多命令行選項:
./qos_sched [EAL options] -- <APP PARAMS>
強制應用參數包括:
- –pfc “RX PORT, TX PORT, RX LCORE, WT LCORE, TX CORE”:包流配置。可以在命令行中配置多個pfc實體,有4個或5個條目(無論是否定義了TX core)。
可選的應用程序參數包括:
- -i:它使應用程序以交互模式啓動。在這種模式下,應用程序顯示了一個命令行,該命令行可用於在進行調度時獲取統計信息(有關更多信息,請參閱下面的交互模式)。
- -mst n:主核心索引(默認值爲1)。
- -rsz“A, B, C”:ring尺寸:
- A = I/O RX lcore讀取的每個NIC RX環的大小(以緩衝區描述符的數量爲單位)(默認值爲128)。
- B = I/O RX lcore用於向worker lcore發送數據包的每個軟件環的大小(以元素數量爲單位)(默認值爲8192)。
- C = worker lcore寫的每個NIC TX環的大小(以緩衝區描述符的數量爲單位)(默認值爲256)
- -bsz " A, B, C, D ":突發大小
- A = I/O RX lcore從NIC RX讀取突發大小(默認值爲64)
- B = I/O RX lcore向輸出軟件環寫入突發大小,worker lcore從輸入軟件環讀取突發大小,QoS隊列大小(默認值爲64)
- C = QoS退隊列大小(默認值爲32)
- D = Worker lcore將突發大小寫入NIC TX(默認值爲64)
- -msz M:每個pfc的內存池大小(以mbufs的數量爲單位)(默認爲2097152)
- –rth “A, B, C”:RX隊列閾值參數
- A = RX預取閾值(默認值爲8)
- B = RX主機閾值(默認值爲8)
- C = RX回寫閾值(默認值爲4)
- -tth“A, B, C”:TX隊列閾值參數
- A = TX預取閾值(默認值爲36)
- B = TX主機閾值(默認值爲0)
- C = TX回寫閾值(默認值爲0)
- -cfg文件:要加載的配置文件
有關運行應用程序和環境抽象層(EAL)選項的一般信息,請參閱DPDK入門指南(DPDK Getting Started Guide)。
概要配置文件定義了QoS調度程序配置所需的所有端口/子端口/管道/流量類/隊列參數。
概要文件的格式如下:
; port configuration [port]
frame overhead = 24
number of subports per port = 1
number of pipes per subport = 4096
queue sizes = 64 64 64 64
; Subport configuration
[subport 0]
tb rate = 1250000000; Bytes per second
tb size = 1000000; Bytes
tc 0 rate = 1250000000; Bytes per second
tc 1 rate = 1250000000; Bytes per second
tc 2 rate = 1250000000; Bytes per second
tc 3 rate = 1250000000; Bytes per second
tc period = 10; Milliseconds
tc oversubscription period = 10; Milliseconds
pipe 0-4095 = 0; These pipes are configured with pipe profile 0
; Pipe configuration
[pipe profile 0]
tb rate = 305175; Bytes per second
tb size = 1000000; Bytes
tc 0 rate = 305175; Bytes per second
tc 1 rate = 305175; Bytes per second
tc 2 rate = 305175; Bytes per second
tc 3 rate = 305175; Bytes per second
tc period = 40; Milliseconds
tc 0 oversubscription weight = 1
tc 1 oversubscription weight = 1
tc 2 oversubscription weight = 1
tc 3 oversubscription weight = 1
tc 0 wrr weights = 1 1 1 1
tc 1 wrr weights = 1 1 1 1
tc 2 wrr weights = 1 1 1 1
tc 3 wrr weights = 1 1 1 1
; RED params per traffic class and color (Green / Yellow / Red)
[red]
tc 0 wred min = 48 40 32
tc 0 wred max = 64 64 64
tc 0 wred inv prob = 10 10 10
tc 0 wred weight = 9 9 9
tc 1 wred min = 48 40 32
tc 1 wred max = 64 64 64
tc 1 wred inv prob = 10 10 10
tc 1 wred weight = 9 9 9
tc 2 wred min = 48 40 32
tc 2 wred max = 64 64 64
tc 2 wred inv prob = 10 10 10
tc 2 wred weight = 9 9 9
tc 3 wred min = 48 40 32
tc 3 wred max = 64 64 64
tc 3 wred inv prob = 10 10 10
tc 3 wred weight = 9 9 9
30.3.1交互模式
以下是當前在命令行界面下工作的命令:
控制命令
- -quit:退出application。
- 一般的統計數據
- stats app:顯示一個包含應用程序內計算的統計數據的表。
- stats port X subport Y:對於特定的子端口,它顯示正確通過調度程序的包的數量和被刪除的包的數量。同樣的信息以字節表示。信息顯示在一個表中,該表將信息分隔在不同的流量類中。
- stats port X subport Y pipe Z:對於特定的管道,它顯示正確通過調度程序的包的數量和被刪除的包的數量。同樣的信息以字節表示。此信息顯示在一個表中,該表將其分隔在各個隊列中。
- 平均隊列大小
所有這些命令的工作方式都是相同的,平均每個特定隊列子集中的數據包數量。
在調用這些命令之前,可以爲此配置兩個參數:
- qavg n X: n是計算髮生的次數。數字越大,精確度越高。默認值是10。
- qavg period(週期) X:週期是每次計算之間允許的微秒數。默認值是100。
可用於測量平均隊列大小的命令有:
- qavg port X subport Y:顯示每個子端口的平均隊列大小。
- qavg port X subport Y tc Z:顯示特定流量類的每個子端口的平均隊列大小。
- qavg port X subport Y pipe Z:顯示每個管道的平均隊列大小。
- qavg port X subport Y pipe Z tc A:顯示特定流量類的每個管道的平均隊列大小。
- qavg port X subport Y pipe Z tc A q B:顯示特定隊列的平均隊列大小。
30.3.2例子
下面是一個單包流配置的命令示例:
./qos_sched -l 1,5,7 -n 4 -- --pfc "3,2,5,7" --cfg ./profile.cfg
本例使用一個包流配置,它在lcore 5上創建一個RX線程,從端口3讀取數據,在lcore 7上創建一個工作線程,從端口2寫入數據。
另一個例子是兩個包流配置使用不同的端口,但共享相同的核心QoS調度如下:
./qos_sched -l 1,2,6,7 -n 4 -- --pfc "3,2,2,6,7" --pfc "1,0,2,6,7" --cfg ./profile.cfg
注意,還支持每個RX、WT和TX線程的包流配置的獨立內核,提供了平衡工作的靈活性。
EAL coremask/corelist被限制只包含默認的主內核1和RX、WT和TX內核。
30.4.解釋
端口/子端口/管道/流量類/隊列(Port/Subport/Pipe/Traffic Class/Queu)是典型QoS應用中的層次實體:
- 子端口表示預定義的用戶組。
- 管道表示單個用戶/訂閱者。
- 流量類是具有特定丟包率、延遲和抖動要求的不同流量類型的表示;如數據語音、視頻或數據傳輸。
- 隊列承載來自屬於同一用戶的同一類型的一個或多個連接的包。
需要配置的流量( traffic flows)依賴於應用程序。此應用程序基於QinQ雙VLAN標籤和IP目的地址進行分類,如下表所示。
Level Name | Siblings per Parent | QoS Functional Description | Selected By |
---|---|---|---|
Port | - | Ethernet port | Physical port |
Subport | Config (8) | Traffic shaped (token bucket) | Outer VLAN tag |
Pipe | Config (4k) | Traffic shaped (token bucket) | Inner VLAN tag |
Traffic Class | 4 | TCs of the same pipe services in strict priority | Destination IP address (0.0.X.0) |
Queue | 4 | Queue of the same TC serviced in WRR | Destination IP address (0.0.0.X) |
有關這些參數的更多信息,請參閱DPDK程序員指南(DPDK Programmer’s Guide )中的“QoS Scheduler”一章。