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”一章。

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