Skip to content

Commit 8ed918b

Browse files
committed
Merge branch '517' into stage
2 parents 733cf2e + 693503f commit 8ed918b

2 files changed

Lines changed: 110 additions & 2 deletions

File tree

  • content/cumulus-linux-517

content/cumulus-linux-517/Layer-1-and-Switch-Ports/Quality-of-Service/_index.md

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,7 +821,7 @@ To show the small packet probability configuration, run the `nv show interface <
821821

822822
Explicit Congestion Notification (ECN) is an end-to-end layer 3 congestion control protocol. Defined by RFC 3168, ECN relies on bits in the IPv4 header Traffic Class to signal congestion conditions. ECN requires one or both server endpoints to support ECN to be effective.
823823

824-
Instead of telling adjacent devices to stop transmitting during times of buffer congestion, ECN sets the ECN bits of the transit IPv4 or IPv6 header to indicate to end hosts that congestion might occur. As a result, the sending hosts reduce their sending rate until the transit switch no longer sets ECN bits.
824+
Instead of signaling to adjacent devices to stop transmitting during times of buffer congestion, ECN sets the ECN bits of the transit IPv4 or IPv6 header to indicate to end hosts that congestion might occur. As a result, the sending hosts reduce their sending rate until the transit switch no longer sets ECN bits.
825825

826826
You use ECN with {{<link title="RDMA over Converged Ethernet - RoCE" text="RDMA over Converged Ethernet - RoCE">}}. The RoCE section describes how to deploy PFC and ECN for RoCE environments.
827827

@@ -913,6 +913,114 @@ default_ecn_red_conf.ecn_enable = false
913913

914914
To apply a custom ECN profile to specific interfaces, see [Port Groups](#ecn).
915915

916+
### Dynamic ECN
917+
918+
{{%notice note%}}
919+
Dynamic ECN is a Beta feature.
920+
{{%/notice%}}
921+
922+
Dynamic ECN is a congestion marking mechanism optimized for high-performance traffic, where bursty traffic requires immediate congestion signals to prevent buffer exhaustion. This feature provides extremely fast and aggressive feedback to mitigate microbursts and sudden congestion by triggering ECN marking based on the percentage of available shared buffer instead of static byte thresholds.
923+
924+
{{%notice note%}}
925+
- Cumulus Linux supports dynamic ECN on switches with Spectrum-4 and later.
926+
- ECN marking probability has a hardware granularity of 1 percent; effective probabilities below 1 percent do not produce any marking.
927+
{{%/notice%}}
928+
929+
To configure dynamic ECN:
930+
- Set the dynamic ECN mode to `relative` for the `default-global` profile to apply system-wide default settings or for a custom profile for specific port groups. The default value is `absolute`.
931+
932+
When you set the dynamic ECN mode to `relative`, the switch hardware ignores existing byte thresholds and the ASIC immediately begins marking based on the dynamic buffer calculation: threshold = (alpha_quota * percent) / 100. When you set the dynamic ECN mode to `absolute`, the switch hardware ignores percentage thresholds and the ASIC reverts to marking based on static cell counts derived from the configured byte values.
933+
934+
- Configure the minumum ECN marking threshold as a percentage (0 through 100) of the dynamic buffer allowance. The switch marks packets when queue occupancy exceeds this percentage. The default value is 0.
935+
- Configure the maximum ECN marking threshold as a percentage (0 through 100) of the dynamic buffer allowance. The value must be greater than or equal to the minumum threshold percent. The default value is 100.
936+
<!--
937+
{{%notice note%}}
938+
To maintain statistical integrity and prevent mixing `absolute` mark counts with `relative` mark counts in historical data, Cumulus Linux resets ECN counters for the affected traffic class to zero for any mode transition.
939+
{{%/notice%}}
940+
-->
941+
The following commands set dynamic ECN mode to `relative` for the default profile, configure the minumum ECN marking threshold to 20 percent and the maximum ECN marking threshold to 80 percent:
942+
943+
{{< tabs "TabID936 ">}}
944+
{{< tab "NVUE Commands ">}}
945+
946+
```
947+
cumulus@switch:~$ nv set qos congestion-control default-global traffic-class 3 mode relative
948+
cumulus@switch:~$ nv set qos congestion-control default-global traffic-class 3 min-threshold-percent 20
949+
cumulus@switch:~$ nv set qos congestion-control default-global traffic-class 3 max-threshold-percent 80
950+
cumulus@switch:~$ nv config apply
951+
```
952+
953+
To disable dynamic ECN, set the mode to `absolute` with the `nv set qos congestion-control <profile> traffic-class 3 mode absolute` command. Reconfigure the {{<link title="#congestion-control-(ecn)" text="byte thresholds">}} if you do not want to use the default values.
954+
955+
```
956+
cumulus@switch:~$ nv set qos congestion-control default-global traffic-class 3 mode absolute
957+
cumulus@switch:~$ nv config apply
958+
```
959+
960+
{{< /tab >}}
961+
{{< tab "Linux Commands ">}}
962+
963+
Edit the `Explicit Congestion Notification` section of the `/etc/cumulus/datapath/qos/qos_features.conf` file to add relative mode, and the minimum and maximum threshold percentages.
964+
965+
```
966+
default_ecn_red_conf.egress_queue_list = [4,5,7]
967+
default_ecn_red_conf.ecn_enable = true
968+
default_ecn_red_conf.red_enable = false
969+
# Mode Setting
970+
default_ecn_red_conf.mode = relative
971+
# Byte Thresholds (Ignored/Zero)
972+
default_ecn_red_conf.min_threshold_bytes = 0
973+
default_ecn_red_conf.max_threshold_bytes = 0
974+
# Percent Thresholds (Active)
975+
default_ecn_red_conf.min_threshold_percent = 20
976+
default_ecn_red_conf.max_threshold_percent = 80
977+
default_ecn_red_conf.probability = 100
978+
```
979+
980+
To disable dynamic ECN, set the mode to `absolute`, and configure the `min_threshold_bytes` and `max_threshold_bytes` parameters.
981+
982+
```
983+
default_ecn_red_conf.egress_queue_list = [4,5,7]
984+
default_ecn_red_conf.ecn_enable = true
985+
default_ecn_red_conf.red_enable = false
986+
# Mode Setting
987+
default_ecn_red_conf.mode = absolute
988+
# Byte Thresholds (Active)
989+
default_ecn_red_conf.min_threshold_bytes = 150000
990+
default_ecn_red_conf.max_threshold_bytes = 1500000
991+
# Percent Thresholds (Ignored/Zero)
992+
default_ecn_red_conf.min_threshold_percent = 0
993+
default_ecn_red_conf.max_threshold_percent = 0
994+
default_ecn_red_conf.probability = 100
995+
```
996+
997+
{{< /tab >}}
998+
{{< /tabs >}}
999+
1000+
To show dynamic ECN configuration in the default profile, run the `nv show qos congestion-control default-global` command:
1001+
1002+
```
1003+
cumulus@switch:~$ nv show qos congestion-control default-global
1004+
ECN Configurations
1005+
=====================
1006+
traffic-class Mode ECN RED Min Th Max Th Min Th % Max Th % Probability
1007+
------------- -------- ------ ------ --------- ------- -------- -------- -----------
1008+
0 relative enable enable 0 Bytes 0 Bytes 35 80 2
1009+
3 absolute enable enable 143.05 KB 1.40 MB 0 0 2
1010+
```
1011+
1012+
To show dynamic ECN configuration for an interface, run the `nv show interface <interface-id> qos congestion-control` command:
1013+
1014+
```
1015+
cumulus@switch:~$ nv show interface swp1 qos congestion-control
1016+
ECN configuration for Interface: swp1
1017+
=======================================================================
1018+
traffic-class ECN RED Mode Min Th Max Th Min Th % Max Th % Probability
1019+
------------- ------ ------- --------- --------- --------- --------- --------- -----------
1020+
0 enable disable relative 0 B 0 B 10 90 100
1021+
3 enable disable relative 0 B 0 B 10 90 100
1022+
```
1023+
9161024
## Egress Queues
9171025

9181026
Cumulus Linux supports eight egress queues to provide different classes of service. By default switch priority values map directly to the matching egress queue. For example, switch priority value 0 maps to egress queue 0.

content/cumulus-linux-517/Whats-New/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Cumulus Linux 5.17 contains new features and improvements, and provides bug fixe
1616

1717
- {{<link url="TACACS/#server-side-per-command-authorization" text="TACACS+ Server-side Per-command Authorization">}}
1818
- {{<link url="Quality-of-Service/#lossless-headroom-based-on-small-packet-probability" text="Lossless headroom size based on small packet probability">}} (Beta)
19-
- Dynamic ECN (Beta)
19+
- {{<link url="Quality-of-Service/#dynamic-ecn" text="Dynamic ECN">}} (Beta)
2020
- Instant Retransmission System (Beta)
2121
- LLDP BGP Route Redistribution Extension (Beta)
2222
- Open Telemetry Granular metric selection (Beta)

0 commit comments

Comments
 (0)