From d9cd1a135594650564ca4b586c2578ac3290a50f Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Wed, 29 Jun 2022 03:50:33 +0800 Subject: [PATCH] Add extra lossy PG profile for ports between T1 and T2 (#11157) Signed-off-by: bingwang Why I did it This PR brings two changes Add lossy PG profile for PG2 and PG6 on T1 for ports between T1 and T2. After PR Update qos config to clear queues for bounced back traffic #10176 , the DSCP_TO_TC_MAP and TC_TO_PG_MAP is updated when remapping is enable DSCP_TO_TC_MAP Before After Why do this change "2" : "1" "2" : "2" Only change for leaf router to map DSCP 2 to TC 2 as TC 2 will be used for lossless TC "6" : "1" "6" : "6" Only change for leaf router to map DSCP 6 to TC 6 as TC 6 will be used for lossless TC TC_TO_PRIORITY_GROUP_MAP Before After Why do this change "2" : "0" "2" : "2" Only change for leaf router to map TC 2 to PG 2 as PG 2 will be used for lossless PG "6" : "0" "6" : "6" Only change for leaf router to map TC 6 to PG 6 as PG 6 will be used for lossless PG So, we have two new lossy PGs (2 and 6) for the T2 facing ports on T1, and two new lossless PGs (2 and 6) for the T0 facing port on T1. However, there is no lossy PG profile for the T2 facing ports on T1. The lossless PGs for ports between T1 and T0 have been handled by buffermgrd .Therefore, We need to add lossy PG profiles for T2 facing ports on T1. We don't have this issue on T0 because PG 2 and PG 6 are lossless PGs, and there is no lossy traffic mapped to PG 2 and PG 6 Map port level TC7 to PG0 Before the PCBB change, DSCP48 -> TC 6 -> PG 0. After the PCBB change, DSCP48 -> TC 7 -> PG 7 Actually, we can map TC7 to PG0 to save a lossy PG. How I did it Update the qos and buffer template. How to verify it Verified by UT. --- .../Arista-7050CX3-32S-D48C8/qos.json.j2 | 2 +- .../Arista-7260CX3-C64/buffers_defaults_t1.j2 | 8 +++- .../Arista-7260CX3-C64/buffers_extra_pgs.j2 | 20 ++++++++ .../Arista-7260CX3-C64/qos.json.j2 | 4 +- .../Arista-7260CX3-Q64/buffers_defaults_t1.j2 | 8 +++- .../Arista-7260CX3-Q64/buffers_extra_pgs.j2 | 1 + files/build_templates/buffers_config.j2 | 4 ++ .../py3/buffer-arista7260-t1.json | 48 +++++++++++++++++++ .../py3/qos-arista7050cx3-dualtor.json | 2 +- .../py3/qos-arista7260-dualtor.json | 2 +- .../sample_output/py3/qos-arista7260-t1.json | 2 +- 11 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 index e0aca4f8dd..6719911b29 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 @@ -145,7 +145,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 index c5d390668a..469f5fc400 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 @@ -55,8 +55,12 @@ }, {%- endmacro %} -{% import 'buffers_extra_queues.j2' as defs with context %} +{% import 'buffers_extra_queues.j2' as defs1 with context %} +{% import 'buffers_extra_pgs.j2' as defs2 with context %} {%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} +{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} {%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 new file mode 100644 index 0000000000..73c1c1a9b3 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 @@ -0,0 +1,20 @@ +{% if DEVICE_METADATA is defined and 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter' %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pg) %} + "BUFFER_PG": { +{% for port in port_names.split(',') %} +{% if port not in port_names_require_no_extra_pg.split(',') %} + "{{ port }}|2": { + "profile" : "ingress_lossy_profile" + }, + "{{ port }}|6": { + "profile" : "ingress_lossy_profile" + }, +{% endif %} + "{{ port }}|0": { + "profile" : "ingress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} + }, +{% endmacro %} +{% endif %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 index 4d82382817..cb3ad17faa 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 @@ -79,7 +79,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7" + "7": "0" } }, {%- endmacro %} @@ -230,7 +230,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 index f531b5e208..c73fde7356 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 @@ -49,8 +49,12 @@ }, {%- endmacro %} -{% import 'buffers_extra_queues.j2' as defs with context %} +{% import 'buffers_extra_queues.j2' as defs1 with context %} +{% import 'buffers_extra_pgs.j2' as defs2 with context %} {%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} +{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} {%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 new file mode 120000 index 0000000000..7dfb03cbc9 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/buffers_extra_pgs.j2 \ No newline at end of file diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index 814e470d02..f03a7f9f63 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -172,6 +172,10 @@ def {{ defs.generate_pg_profils(port_names_active) }} {% elif defs.generate_pg_profiles_with_inactive_ports is defined %} {{ defs.generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) }}, +{% elif (defs.generate_pg_buffers_with_extra_lossy_pgs is defined) and (port_names_extra_queues != '') %} +{{ defs.generate_pg_buffers_with_extra_lossy_pgs(port_names_active, port_names_extra_queues) }} +{% elif (defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports is defined) and (port_names_extra_queues != '') %} +{{ defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }} {% else %} "BUFFER_PG": { {% for port in PORT_ACTIVE %} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json index 702076249a..1ce8a99e4f 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json @@ -112,9 +112,21 @@ "Ethernet0|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet0|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet4|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet4|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet144|0": { "profile" : "ingress_lossy_profile" }, @@ -124,9 +136,21 @@ "Ethernet16|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet16|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet20|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet20|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet152|0": { "profile" : "ingress_lossy_profile" }, @@ -136,9 +160,21 @@ "Ethernet64|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet64|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet68|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet68|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet168|0": { "profile" : "ingress_lossy_profile" }, @@ -148,9 +184,21 @@ "Ethernet80|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet80|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet84|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet84|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet180|0": { "profile" : "ingress_lossy_profile" }, diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json index a48656d57c..8e1d376f19 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json @@ -178,7 +178,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json index cad403c93d..85339be6d1 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json @@ -178,7 +178,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json index f850e3285b..eff232ab17 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json @@ -100,7 +100,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7" + "7": "0" } }, "SCHEDULER": {