Traffic shaping with queuing using a traffic shaping profile
You can use the weighted random early detection (WRED) queuing function within traffic shaping.
This topic includes two parts:
You cannot configure or view WRED in the GUI; you must use the CLI.
WRED is not supported when traffic is offloaded to an NPU. |
Traffic shaping with queuing
Traffic shaping has a queuing option. Use this option to fine-tune the queue by setting the profile queue size or performing random early drop (RED) according to queue usage.
This example shows setting the profile queue size limit to 5 so that the queue can contain a maximum of five packets and more packets are dropped.
To set the profile queue size limit:
config firewall shaping-profile edit "profile" set type queuing set default-class-id 31 config shaping-entries edit 31 set class-id 31 set guaranteed-bandwidth-percentage 5 set maximum-bandwidth-percentage 10 set limit 5 <range from 5 to 10000; default: 1000> next end next end
This example shows performing RED according to queue usage by setting red-probability
, min
, and max
. Setting red-probability
to 10
means start to drop packets when queue usage reaches the min
setting. When queue usage reaches the max
setting, drop 10% of the packets.
-
Level 1: when queue is less than
min
packets, drop 0% of packets. -
Level 2: when queue reaches
min
packets, start to drop packets. -
Level 3: when queue usage is between
min
andmax
packets, drop 0–10% of packets by proportion. -
Level 4: when queue (average queue size) is more than
max
packets, drop 100% of packets.
To set RED according to queue usage:
config firewall shaping-profile edit "profile" set type queuing set default-class-id 31 config shaping-entries edit 31 set class-id 31 set guaranteed-bandwidth-percentage 5 set maximum-bandwidth-percentage 10 set red-probability 10 <range from 0 to 20; default: 0 no drop> set min 100 <range from 3 to 3000> set max 300 <range from 3 to 3000> next end next end
To troubleshoot this function, use the following diagnose commands:
diagnose netlink intf-class list <intf> diagnose netlink intf-qdisc list <intf>
Burst control in queuing mode
In a hierarchical token bucket (HTB) algorithm, each traffic class has buckets to allow a burst of traffic. The maximum burst is determined by the bucket size burst
(for guaranteed bandwidth) and cburst
(for maximum bandwidth). The shaping profile has burst-in-msec
and cburst-in-msec
parameters for each shaping entry (class id
) to control the bucket size.
This example uses the outbandwidth of the interface as 1 Mbps and the maximum bandwidth of class is 50%.
burst = burst-in-msec * guaranteed bandwidth = 100 ms × 1 Mbps x 50% = 50000 b = 6250 B
cburst = cburst-in-msec * maximum bandwidth = 200 ms × 1 Mbps x 50% = 100000 b = 12500 B
The following example sets burst-in-msec
to 100 and cburst-in-msec
to 200.
To set burst control in queuing mode:
config firewall shaping-profile edit "profile" set type queuing set default-class-id 31 config shaping-entries edit 31 set class-id 31 set guaranteed-bandwidth-percentage 5 set maximum-bandwidth-percentage 50 set burst-in-msec 100 <range from 0 to 2000> set cburst-in-msec 200 <range from 0 to 2000> next end next end
Example
Enabling RED for FTP traffic from QA
This example shows how to enable RED for FTP traffic from QA. This example sets a maximum of 10% of the packets to be dropped when queue usage reaches the maximum value.
To configure the firewall address:
config firewall address edit QA_team set subnet 10.1.100.0/24 next end
To set the shaping policy to classify traffic into different class IDs:
config firewall shaping-policy edit 1 set service HTTPS HTTP set dstintf port1 set srcaddr QA_team set dstaddr all set class-id 10 next edit 2 set service FTP set dstintf port1 set srcaddr QA_team set dstaddr all set class-id 20 next end
To set the shaping policy to define the speed of each class ID:
config firewall shaping-profile edit QA_team_profile set type queuing set default-class-id 30 config shaping-entries edit 1 set class-id 10 set guaranteed-bandwidth-percentage 50 set maximum-bandwidth-percentage 100 next edit 2 set class-id 20 set guaranteed-bandwidth-percentage 30 set maximum-bandwidth-percentage 60 set red-probability 10 next edit 3 set class-id 30 set guaranteed-bandwidth-percentage 20 set maximum-bandwidth-percentage 50 next end next end
To apply the shaping policy to the interface:
config sys interface edit port1 set outbandwidth 10000 set egress-shaping-profile QA_team_profile next end
To use diagnose commands to troubleshoot:
# diagnose netlink intf-class list port1 class htb 1:1 root rate 1250000Bps ceil 1250000Bps burst 1600B/8 mpu 0B overhead 0B cburst 1600B/8 mpu 0B overhead 0B level 7 buffer [00004e20] cbuffer [00004e20] Sent 11709 bytes 69 pkt (dropped 0, overlimits 0 requeues 0) rate 226Bps 2pps backlog 0B 0p lended: 3 borrowed: 0 giants: 0 tokens: 18500 ctokens: 18500 class htb 1:10 parent 1:1 leaf 10: prio 1 quantum 62500 rate 625000Bps ceil 1250000Bps burst 1600B/8 mpu 0B overhead 0B cburst 1600B/8 mpu 0B overhead 0B level 0 buffer [00009c40] cbuffer [00004e20] Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0Bps 0pps backlog 0B 0p lended: 0 borrowed: 0 giants: 0 tokens: 40000 ctokens: 20000 class htb 1:20 parent 1:1 leaf 20: prio 1 quantum 37500 rate 375000Bps ceil 750000Bps burst 1599B/8 mpu 0B overhead 0B cburst 1599B/8 mpu 0B overhead 0B level 0 buffer [0001046a] cbuffer [00008235] Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0Bps 0pps backlog 0B 0p lended: 0 borrowed: 0 giants: 0 tokens: 66666 ctokens: 33333 class htb 1:30 parent 1:1 leaf 30: prio 1 quantum 25000 rate 250000Bps ceil 625000Bps burst 1600B/8 mpu 0B overhead 0B cburst 1600B/8 mpu 0B overhead 0B level 0 buffer [000186a0] cbuffer [00009c40] Sent 11709 bytes 69 pkt (dropped 0, overlimits 0 requeues 0) rate 226Bps 2pps backlog 0B 0p lended: 66 borrowed: 3 giants: 0 tokens: 92500 ctokens: 37000 class red 20:1 parent 20:0
# diagnose netlink intf-qdisc list port1 qdisc htb 1: root refcnt 5 r2q 10 default 30 direct_packets_stat 0 ver 3.17 Sent 18874 bytes 109 pkt (dropped 0, overlimits 5 requeues 0) backlog 0B 0p qdisc pfifo 10: parent 1:10 refcnt 1 limit 1000p Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0B 0p qdisc red 20: parent 1:20 refcnt 1 limit 4000000B min 300000B max 1000000B ewma 9 Plog 23 Scell_log 20 flags 0 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0B 0p marked 0 early 0 pdrop 0 other 0 qdisc pfifo 30: parent 1:30 refcnt 1 limit 1000p Sent 18874 bytes 109 pkt (dropped 0, overlimits 0 requeues 0) backlog 0B 0p