DPDK Sample Applications User Guides(30)QoS Scheduler Sample Application

官方文檔查看地址:
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”一章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章