DPDK Sample Applications User Guides(30)QoS调度器示例应用程序

官方文档查看地址:
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 NameSiblings per ParentQoS Functional DescriptionSelected By
Port-Ethernet portPhysical port
SubportConfig (8)Traffic shaped (token bucket)Outer VLAN tag
PipeConfig (4k)Traffic shaped (token bucket)Inner VLAN tag
Traffic Class4TCs of the same pipe services in strict priorityDestination IP address (0.0.X.0)
Queue4Queue of the same TC serviced in WRRDestination IP address (0.0.0.X)

有关这些参数的更多信息,请参阅DPDK程序员指南(DPDK Programmer’s Guide )中的“QoS Scheduler”一章。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值