From e92bb395a2de9fc0caaac7379648176c603be976 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Thu, 6 Jun 2024 02:22:05 +0000 Subject: [PATCH 1/4] Support yang model for buffer pool percentage Signed-off-by: Stephen Sun --- .../tests/files/sample_config_db.json | 5 ++ .../yang_model_tests/tests/buffer_pool.json | 19 +++++ .../tests_config/buffer_pool.json | 71 +++++++++++++++++++ .../yang-models/sonic-buffer-pool.yang | 10 +++ 4 files changed, 105 insertions(+) diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 8ebb1d655675..3591ed415d25 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -36,6 +36,11 @@ "size": "12766208", "type": "egress", "mode": "dynamic" + }, + "ingress_percentage_pool": { + "type": "ingress", + "mode": "dynamic", + "percentage": "90" } }, "BUFFER_PROFILE": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json index 974ece55dd79..d8b3298d78fb 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json @@ -39,5 +39,24 @@ "BUFFER_POOL_WRONG_SIZE_VALUE": { "desc": "BUFFER_POOL_WRONG_SIZE_VALUE pattern failure.", "eStr": "wrong" + }, + "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE": { + "desc": "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE no failure." + }, + "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_100": { + "desc": "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_100 pattern failure.", + "eStr": "does not satisfy the constraint" + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE": { + "desc": "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE pattern failure.", + "eStr": "Invalid value" + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NOT_A_NUMBER_VALUE": { + "desc": "BUFFER_POOL_WRONG_PERCENTAGE_NOT_A_NUMBER_VALUE pattern failure.", + "eStr": "Invalid value" + }, + "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_WITH_SIZE": { + "desc": "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_WITH_SIZE pattern failure.", + "eStr": "Percentage should not be configured along with size" } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json index a2a4d6fc1f0e..b0deaea536d3 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json @@ -167,5 +167,76 @@ ] } } + }, + "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "dynamic", + "percentage": "99", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_100": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "static", + "percentage": "100", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "static", + "percentage": "-10", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NOT_A_NUMBER_VALUE": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "static", + "percentage": "NaN", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_WITH_SIZE": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "static", + "percentage": "90", + "size": "12766208", + "type": "ingress" + } + ] + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang index dd8c74c13ab5..af2db8380092 100644 --- a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang +++ b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang @@ -57,6 +57,16 @@ module sonic-buffer-pool { type uint64; description "Buffer Pool Xoff Threshold (in Bytes)"; } + + leaf percentage { + type uint8 { + range "1..99"; + } + description "Buffer Pool percentage"; + must "(not(current()/../size))" { + error-message "Percentage should not be configured along with size"; + } + } } } } From 2e3ae0a897e9c012947973a1f594c74d57530366 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Mon, 17 Jun 2024 10:16:30 +0000 Subject: [PATCH 2/4] Percentage should be configured in dynamic buffer model only Signed-off-by: Stephen Sun --- .../tests/files/sample_config_db.json | 1 + .../yang_model_tests/tests/buffer_pool.json | 4 ---- .../tests_config/buffer_pool.json | 21 +++++++------------ .../yang-models/sonic-buffer-pool.yang | 11 +++++++--- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 3591ed415d25..534a0d986480 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -356,6 +356,7 @@ }, "DEVICE_METADATA": { "localhost": { + "buffer_model": "dynamic", "type": "ToRRouter", "asic_id": "06:00.0", "mac": "00:11:22:33:dd:5a", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json index d8b3298d78fb..28e57410b33e 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json @@ -43,10 +43,6 @@ "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE": { "desc": "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE no failure." }, - "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_100": { - "desc": "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_100 pattern failure.", - "eStr": "does not satisfy the constraint" - }, "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE": { "desc": "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE pattern failure.", "eStr": "Invalid value" diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json index b0deaea536d3..26a638631bad 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json @@ -169,27 +169,20 @@ } }, "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE": { - "sonic-buffer-pool:sonic-buffer-pool": { - "sonic-buffer-pool:BUFFER_POOL": { - "BUFFER_POOL_LIST": [ - { - "name": "ingress_lossless_pool", - "mode": "dynamic", - "percentage": "99", - "type": "ingress" + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "localhost":{ + "buffer_model": "dynamic" } - ] } - } - }, - "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_100": { + }, "sonic-buffer-pool:sonic-buffer-pool": { "sonic-buffer-pool:BUFFER_POOL": { "BUFFER_POOL_LIST": [ { "name": "ingress_lossless_pool", - "mode": "static", - "percentage": "100", + "mode": "dynamic", + "percentage": "99", "type": "ingress" } ] diff --git a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang index af2db8380092..7dc130b551ec 100644 --- a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang +++ b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang @@ -2,6 +2,10 @@ module sonic-buffer-pool { namespace "http://github.com/sonic-net/sonic-buffer-pool"; prefix bpl; + import sonic-device_metadata { + prefix device_metadata; + } + organization "SONiC"; @@ -59,13 +63,14 @@ module sonic-buffer-pool { } leaf percentage { - type uint8 { - range "1..99"; - } + type uint8; description "Buffer Pool percentage"; must "(not(current()/../size))" { error-message "Percentage should not be configured along with size"; } + must "/device_metadata:sonic-device_metadata/device_metadata:DEVICE_METADATA/device_metadata:localhost/device_metadata:buffer_model = 'dynamic'" { + error-message "Percentage must be configured in dynamic buffer model"; + } } } } From 5423a6784c573a93c21215601c9b9e6fb663a802 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Thu, 25 Jul 2024 04:59:40 +0000 Subject: [PATCH 3/4] Update document Signed-off-by: Stephen Sun --- src/sonic-yang-models/doc/Configuration.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index cafc4fcaac16..6c70b5c707ad 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -573,6 +573,7 @@ When the system is running in traditional buffer model, the size of all of the b ``` When the system is running in dynamic buffer model, the size of some of the buffer pools can be omitted and will be dynamically calculated. +In this case, A percentage can be configured on a pool, representing how many the available buffer can be allloced to the pool. ``` { @@ -584,11 +585,12 @@ When the system is running in dynamic buffer model, the size of some of the buff }, "egress_lossy_pool": { "type": "egress", - "mode": "dynamic", + "mode": "dynamic" }, "ingress_lossless_pool": { "type": "ingress", "mode": "dynamic", + "percentage": "80" } } } From a338de9e0d28b6a1080b9a9a4f01b726712f3107 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Fri, 26 Jul 2024 00:54:55 +0000 Subject: [PATCH 4/4] Fix review comments Signed-off-by: Stephen Sun --- .../yang_model_tests/tests/buffer_pool.json | 3 +++ .../tests_config/buffer_pool.json | 21 +++++++++++++++++++ .../yang-models/sonic-buffer-pool.yang | 5 ++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json index 28e57410b33e..ff35fc7357d1 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json @@ -43,6 +43,9 @@ "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE": { "desc": "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE no failure." }, + "BUFFER_POOL_CORRECT_LARGE_PERCENTAGE_VALUE": { + "desc": "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE no failure." + }, "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE": { "desc": "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE pattern failure.", "eStr": "Invalid value" diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json index 26a638631bad..47ce26357d4b 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json @@ -189,6 +189,27 @@ } } }, + "BUFFER_POOL_CORRECT_LARGE_PERCENTAGE_VALUE": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "localhost":{ + "buffer_model": "dynamic" + } + } + }, + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "dynamic", + "percentage": "200", + "type": "ingress" + } + ] + } + } + }, "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE": { "sonic-buffer-pool:sonic-buffer-pool": { "sonic-buffer-pool:BUFFER_POOL": { diff --git a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang index 7dc130b551ec..174e6b2a0b38 100644 --- a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang +++ b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang @@ -64,7 +64,10 @@ module sonic-buffer-pool { leaf percentage { type uint8; - description "Buffer Pool percentage"; + description " + Buffer Pool percentage. + The buffer pool size will be available_buffer * percentage / 100 if percentage is provided. + It is valid in dynamic buffer model only."; must "(not(current()/../size))" { error-message "Percentage should not be configured along with size"; }