From 53d7e05fd5c0523b98d3339d3a6e7362a999db9e Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Mon, 15 Jun 2020 16:49:05 +0800 Subject: [PATCH 01/10] [db_migrator] Support migrate to single ingress buffer pool mode db_migrator supports migrating old configuration who has 2 ingress pools into the new configuration who has 1 ingress pool, including BUFFER_POOL, BUFFER_PROFILE and BUFFER_PORT_INGRESS_PROFILE_LIST Signed-off-by: Stephen Sun --- scripts/db_migrator.py | 519 +++++++++++++++++++++++++++++++++++------ 1 file changed, 446 insertions(+), 73 deletions(-) diff --git a/scripts/db_migrator.py b/scripts/db_migrator.py index 17ec3ea6e6..bd8c8a672c 100755 --- a/scripts/db_migrator.py +++ b/scripts/db_migrator.py @@ -37,7 +37,7 @@ def __init__(self, namespace, socket=None): none-zero values. build: sequentially increase within a minor version domain. """ - self.CURRENT_VERSION = 'version_1_0_3' + self.CURRENT_VERSION = 'version_1_0_4' self.TABLE_NAME = 'VERSIONS' self.TABLE_KEY = 'DATABASE' @@ -143,50 +143,300 @@ def migrate_intf_table(self): self.appDB.set(self.appDB.APPL_DB, table, 'NULL', 'NULL') if_db.append(if_name) - def mlnx_migrate_buffer_pool_size(self): + def mlnx_default_buffer_parameters(self, db_version, table): """ - On Mellanox platform the buffer pool size changed since - version with new SDK 4.3.3052, SONiC to SONiC update + We extract buffer configurations to a common function + so that it can be reused among different migration + This + The logic of buffer parameters migrating: + 1. Compare the current buffer configuration with the default settings + 2. If there is a match, map the old setting to a new one acording to the map "pool_mapped_from_old_version" + 3. Insert the new setting into database + Each settings defined below (except that for version_1_0_2) will be used twice: + 1. It is referenced as new setting when database is migrated to that version + 2. It is referenced as old setting when database is migrated from that version + """ + mellanox_default_parameter = { + "version_1_0_2": { + # Buffer pool configuration info + "buffer_pool_list" : ['ingress_lossless_pool', 'egress_lossless_pool', 'ingress_lossy_pool', 'egress_lossy_pool'], + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "4194304", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "7340032", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "16777152", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "7340032", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2097152", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "5242880", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "16777152", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "5242880", "type": "egress", "mode": "dynamic" } }, + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "8224768", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "8224768", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "35966016", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "8224768", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "12042240", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "12042240", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "35966016", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "12042240", "type": "egress", "mode": "dynamic" } }, + + # Buffer pool migration control info + "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool"] + }, + "version_1_0_3": { + # On Mellanox platform the buffer pool size changed since + # version with new SDK 4.3.3052, SONiC to SONiC update + # from version with old SDK will be broken without migration. + # + # Buffer pool migration control info + # v1.0.2 hwsku/platform configuration set in v1.0.3 + # spc1_t0_pool spc1_t0_pool + # + # spc1_t1_pool spc1_t1_pool + # + # spc2_t0_pool--platform---x86_64-mlnx_msn3800-r0-------------spc2_3800_t0_pool + # | + # +------other spc2 platforms---------------spc2_t0_pool + # + # spc2_t1_pool--platform---platform: x86_64-mlnx_msn3800-r0---spc2_3800_t1_pool + # | + # +------other spc2 platforms---------------spc2_t1_pool + # + "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool", "spc2_3800_t0_pool", "spc2_3800_t1_pool"], + "pool_mapped_from_old_version": { + "spc2_t0_pool": ("platform", {"x86_64-mlnx_msn3800-r0": "spc2_3800_t0_pool"}), + "spc2_t1_pool": ("platform", {"x86_64-mlnx_msn3800-r0": "spc2_3800_t1_pool"}) + }, + + # Buffer pool configuration info + "buffer_pool_list" : ['ingress_lossless_pool', 'egress_lossless_pool', 'ingress_lossy_pool', 'egress_lossy_pool'], + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "5029836", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "2097100", "type": "egress", "mode": "dynamic" } }, + + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "14983147", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "9158635", "type": "egress", "mode": "dynamic" } }, + + # 3800 platform has gearbox installed so the buffer pool size is different with other Spectrum2 platform + "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "28196784", "type": "egress", "mode": "dynamic" } }, + "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "17891280", "type": "egress", "mode": "dynamic" } }, + + # Lossless headroom info + "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_25000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_40000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_50000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_100000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_10000_40m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_25000_40m_profile": {"size": "39936", "xon": "18432"}, + "pg_lossless_40000_40m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_50000_40m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_100000_40m_profile": {"size": "54272", "xon": "18432"}, + "pg_lossless_10000_300m_profile": {"size": "49152", "xon": "18432"}, + "pg_lossless_25000_300m_profile": {"size": "71680", "xon": "18432"}, + "pg_lossless_40000_300m_profile": {"size": "94208", "xon": "18432"}, + "pg_lossless_50000_300m_profile": {"size": "94208", "xon": "18432"}, + "pg_lossless_100000_300m_profile": {"size": "184320", "xon": "18432"}}, + "spc2_headroom": {"pg_lossless_1000_5m_profile": {"size": "35840", "xon": "18432"}, + "pg_lossless_10000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_25000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_40000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_50000_5m_profile": {"size": "37888", "xon": "18432"}, + "pg_lossless_100000_5m_profile": {"size": "38912", "xon": "18432"}, + "pg_lossless_200000_5m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_1000_40m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_10000_40m_profile": {"size": "38912", "xon": "18432"}, + "pg_lossless_25000_40m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_40000_40m_profile": {"size": "45056", "xon": "18432"}, + "pg_lossless_50000_40m_profile": {"size": "47104", "xon": "18432"}, + "pg_lossless_100000_40m_profile": {"size": "59392", "xon": "18432"}, + "pg_lossless_200000_40m_profile": {"size": "81920", "xon": "18432"}, + "pg_lossless_1000_300m_profile": {"size": "37888", "xon": "18432"}, + "pg_lossless_10000_300m_profile": {"size": "53248", "xon": "18432"}, + "pg_lossless_25000_300m_profile": {"size": "78848", "xon": "18432"}, + "pg_lossless_40000_300m_profile": {"size": "104448", "xon": "18432"}, + "pg_lossless_50000_300m_profile": {"size": "121856", "xon": "18432"}, + "pg_lossless_100000_300m_profile": {"size": "206848", "xon": "18432"}, + "pg_lossless_200000_300m_profile": {"size": "376832", "xon": "18432"}}, + "spc2_3800_headroom": {"pg_lossless_1000_5m_profile": {"size": "32768", "xon": "18432"}, + "pg_lossless_10000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_25000_5m_profile": {"size": "38912", "xon": "18432"}, + "pg_lossless_40000_5m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_50000_5m_profile": {"size": "44032", "xon": "18432"}, + "pg_lossless_100000_5m_profile": {"size": "55296", "xon": "18432"}, + "pg_lossless_200000_5m_profile": {"size": "77824", "xon": "18432"}, + "pg_lossless_1000_40m_profile": {"size": "33792", "xon": "18432"}, + "pg_lossless_10000_40m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_25000_40m_profile": {"size": "43008", "xon": "18432"}, + "pg_lossless_40000_40m_profile": {"size": "49152", "xon": "18432"}, + "pg_lossless_50000_40m_profile": {"size": "53248", "xon": "18432"}, + "pg_lossless_100000_40m_profile": {"size": "72704", "xon": "18432"}, + "pg_lossless_200000_40m_profile": {"size": "112640", "xon": "18432"}, + "pg_lossless_1000_300m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_10000_300m_profile": {"size": "50176", "xon": "18432"}, + "pg_lossless_25000_300m_profile": {"size": "75776", "xon": "18432"}, + "pg_lossless_40000_300m_profile": {"size": "101376", "xon": "18432"}, + "pg_lossless_50000_300m_profile": {"size": "117760", "xon": "18432"}, + "pg_lossless_100000_300m_profile": {"size": "202752", "xon": "18432"}, + "pg_lossless_200000_300m_profile": {"size": "373760", "xon": "18432"}}, + + # Buffer profile info + "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "0", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, + "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossy_pool]", "size": "0"}, + "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, + "egress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "4096"}, + "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}} + }, + "version_1_0_4": { + # version 1.0.4 is introduced for: + # 1. Supporting single ingress buffer pool for MSFT SKUs + # 2. Updating the buffer settings + # + # Buffer pool migration control info + # v1.0.3 hwsku/platform v1.0.4 + # spc1_t0_pool----hwsku------Mellanox-SN2700-C28D8-------spc1_t0_pool_single_pool + # | + # +--------Mellanox-SN2700-D48C8-------spc1_t0_pool_single_pool + # | + # +--------all other spc1 hwskus-------spc1_t0_pool + # + # spc1_t1_pool----hwsku------Mellanox-SN2700-C28D8-------spc1_t1_pool_single_pool + # | + # +--------Mellanox-SN2700-D48C8-------spc1_t1_pool_single_pool + # | + # +--------all other spc1 hwskus-------spc1_t1_pool + # + # spc2_3800_t0_pool--hwsku---Mellanox-SN3800-D112C8------spc2_3800_t0_pool_single_pool + # | + # +-----Mellanox-SN3800-C64---------spc2_3800_t0_pool_single_pool + # | + # +-----Mellanox-SN3800-D24C52------spc2_3800_t0_pool_single_pool + # | + # +-----Mellanox-SN3800-D28C50------spc2_3800_t0_pool_single_pool + # | + # +-----other 3800 hwskus-----------spc2_3800_t0_pool + # + # spc2_3800_t1_pool--hwsku---Mellanox-SN3800-D112C8------spc2_3800_t1_pool_single_pool + # | + # +-----Mellanox-SN3800-C64---------spc2_3800_t1_pool_single_pool + # | + # +-----Mellanox-SN3800-D24C52------spc2_3800_t1_pool_single_pool + # | + # +-----Mellanox-SN3800-D28C50------spc2_3800_t1_pool_single_pool + # | + # +-----other 3800 hwskus-----------spc2_3800_t1_pool + # + "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool", "spc2_3800_t0_pool", "spc2_3800_t1_pool", + "spc1_t0_pool_single_pool", "spc1_t1_pool_single_pool", "spc2_3800_t0_pool_single_pool", "spc2_3800_t1_pool_single_pool"], + "pool_mapped_from_old_version": { + "spc1_t0_pool": ("sku", + {"Mellanox-SN2700-C28D8": "spc1_t0_pool_single_pool", + "Mellanox-SN2700-D48C8": "spc1_t0_pool_single_pool"}), + "spc1_t1_pool": ("sku", + {"Mellanox-SN2700-C28D8": "spc1_t1_pool_single_pool", + "Mellanox-SN2700-D48C8": "spc1_t1_pool_single_pool"}), + "spc2_3800_t0_pool": ("sku", + {"Mellanox-SN3800-D112C8": "spc2_3800_t0_pool_single_pool", + "Mellanox-SN3800-C64": "spc2_3800_t0_pool_single_pool", + "Mellanox-SN3800-D24C52": "spc2_3800_t0_pool_single_pool", + "Mellanox-SN3800-D28C50": "spc2_3800_t0_pool_single_pool"}), + "spc2_3800_t1_pool": ("sku", + {"Mellanox-SN3800-D112C8": "spc2_3800_t1_pool_single_pool", + "Mellanox-SN3800-C64": "spc2_3800_t1_pool_single_pool", + "Mellanox-SN3800-D24C52": "spc2_3800_t1_pool_single_pool", + "Mellanox-SN3800-D28C50": "spc2_3800_t1_pool_single_pool"}) + }, + + # Buffer pool info for single pool mode + "buffer_pool_list_single_pool" : ['ingress_lossless_pool', 'egress_lossless_pool', 'egress_lossy_pool'], + "spc1_t0_pool_single_pool": {"ingress_lossless_pool": { "size": "10608640", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "10608640", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool_single_pool": {"ingress_lossless_pool": { "size": "7553024", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "7553024", "type": "egress", "mode": "dynamic" } }, + + "spc2_3800_t0_pool_single_pool": {"ingress_lossless_pool": { "size": "27598848", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "27598848", "type": "egress", "mode": "dynamic" } }, + "spc2_3800_t1_pool_single_pool": {"ingress_lossless_pool": { "size": "20627456", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "20627456", "type": "egress", "mode": "dynamic" } }, + + "buffer_profiles_single_pool": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, + "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, + "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, + "egress_lossy_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "9216"}, + "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}}, + + # Buffer pool info for normal mode + "buffer_pool_list" : ['ingress_lossless_pool', 'ingress_lossy_pool', 'egress_lossless_pool', 'egress_lossy_pool'], + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "5304320", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "2736128", "type": "egress", "mode": "dynamic" } }, + + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "15241216", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "9388032", "type": "egress", "mode": "dynamic" } }, + + "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "13799424", "type": "egress", "mode": "dynamic" } }, + "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "7946240", "type": "egress", "mode": "dynamic" } }, + + # Buffer profile info + "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, + "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossy_pool]", "size": "0"}, + "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, + "egress_lossy_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "9216"}, + "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}} + } + } + + if table in mellanox_default_parameter[db_version].keys(): + return mellanox_default_parameter[db_version][table] + else: + return None + + def mlnx_migrate_buffer_pool_size(self, old_version, new_version): + """ + v1.0.3: + On Mellanox platform the buffer pool size changed since + version with new SDK 4.3.3052, SONiC to SONiC update from version with old SDK will be broken without migration. - This migration is specifically for Mellanox platform. + This migration is specifically for Mellanox platform. + v1.0.4: + Single ingress buffer is supported, which also affects the + buffer pool settings on some SKUs """ - # Buffer pools defined in version 1_0_2 - buffer_pools = ['ingress_lossless_pool', 'egress_lossless_pool', 'ingress_lossy_pool', 'egress_lossy_pool'] - - # Old default buffer pool values on Mellanox platform - spc1_t0_default_value = [{'ingress_lossless_pool': '4194304'}, {'egress_lossless_pool': '16777152'}, {'ingress_lossy_pool': '7340032'}, {'egress_lossy_pool': '7340032'}] - spc1_t1_default_value = [{'ingress_lossless_pool': '2097152'}, {'egress_lossless_pool': '16777152'}, {'ingress_lossy_pool': '5242880'}, {'egress_lossy_pool': '5242880'}] - spc2_t0_default_value = [{'ingress_lossless_pool': '8224768'}, {'egress_lossless_pool': '35966016'}, {'ingress_lossy_pool': '8224768'}, {'egress_lossy_pool': '8224768'}] - spc2_t1_default_value = [{'ingress_lossless_pool': '12042240'}, {'egress_lossless_pool': '35966016'}, {'ingress_lossy_pool': '12042240'}, {'egress_lossy_pool': '12042240'}] - - # New default buffer pool configuration on Mellanox platform - spc1_t0_default_config = {"ingress_lossless_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "5029836", "type": "egress", "mode": "dynamic" } } - spc1_t1_default_config = {"ingress_lossless_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "2097100", "type": "egress", "mode": "dynamic" } } - spc2_t0_default_config = {"ingress_lossless_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "14983147", "type": "egress", "mode": "dynamic" } } - spc2_t1_default_config = {"ingress_lossless_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "9158635", "type": "egress", "mode": "dynamic" } } - # 3800 platform has gearbox installed so the buffer pool size is different with other Spectrum2 platform - spc2_3800_t0_default_config = {"ingress_lossless_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "28196784", "type": "egress", "mode": "dynamic" } } - spc2_3800_t1_default_config = {"ingress_lossless_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "17891280", "type": "egress", "mode": "dynamic" } } - - # Try to get related info from DB buffer_pool_conf = {} device_data = self.configDB.get_table('DEVICE_METADATA') if 'localhost' in device_data.keys(): @@ -195,49 +445,158 @@ def mlnx_migrate_buffer_pool_size(self): else: log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") return False + + # Buffer pools defined in old version + single_ingress_pool_skus = [ + 'Mellanox-SN2700-C28D8', 'Mellanox-SN2700-D48C8', + 'Mellanox-SN3800-D112C8', 'Mellanox-SN3800-C64', 'Mellanox-SN3800-D24C52', 'Mellanox-SN3800-D28C50' + ] + old_buffer_pools = None + if hwsku in single_ingress_pool_skus: + old_buffer_pools = self.mlnx_default_buffer_parameters(old_version, "buffer_pool_list_single_pool") + if not old_buffer_pools: + # Two cases that old_buffer_pools is None + # 1. It's not the single ingress pool SKU + # 2. The old_version is 1.0.2/1.0.3 in which the single buffer hasn't been introduced + old_buffer_pools = self.mlnx_default_buffer_parameters(old_version, "buffer_pool_list") + + # Try to get related info from DB buffer_pool_conf = self.configDB.get_table('BUFFER_POOL') # Get current buffer pool configuration, only migrate configuration which # with default values, if it's not default, leave it as is. - pool_size_in_db_list = [] + config_of_default_pools_in_db = {} pools_in_db = buffer_pool_conf.keys() # Buffer pool numbers is different with default, don't need migrate - if len(pools_in_db) != len(buffer_pools): + if len(pools_in_db) != len(old_buffer_pools): return True # If some buffer pool is not default ones, don't need migrate - for buffer_pool in buffer_pools: + for buffer_pool in old_buffer_pools: if buffer_pool not in pools_in_db: return True - pool_size_in_db_list.append({buffer_pool: buffer_pool_conf[buffer_pool]['size']}) - - # To check if the buffer pool size is equal to old default values - new_buffer_pool_conf = None - if pool_size_in_db_list == spc1_t0_default_value: - new_buffer_pool_conf = spc1_t0_default_config - elif pool_size_in_db_list == spc1_t1_default_value: - new_buffer_pool_conf = spc1_t1_default_config - elif pool_size_in_db_list == spc2_t0_default_value: - if platform == 'x86_64-mlnx_msn3800-r0': - new_buffer_pool_conf = spc2_3800_t0_default_config - else: - new_buffer_pool_conf = spc2_t0_default_config - elif pool_size_in_db_list == spc2_t1_default_value: - if platform == 'x86_64-mlnx_msn3800-r0': - new_buffer_pool_conf = spc2_3800_t1_default_config - else: - new_buffer_pool_conf = spc2_t1_default_config - else: - # It's not using default buffer pool configuration, no migration needed. - log_info("buffer pool size is not old default value, no need to migrate") + config_of_default_pools_in_db[buffer_pool] = buffer_pool_conf[buffer_pool] + + old_pool_configuration_list = self.mlnx_default_buffer_parameters(old_version, "pool_configuration_list") + pool_migration_control = self.mlnx_default_buffer_parameters(new_version, "pool_mapped_from_old_version") + if not old_pool_configuration_list or not pool_migration_control: + log_error("Trying to get pool configuration list or migration control failed, skip migration") + return False + new_config_name = None + for old_pool_name in old_pool_configuration_list: + old_config = self.mlnx_default_buffer_parameters(old_version, old_pool_name) + log_info("Checking old pool configuration {}".format(old_pool_name)) + if config_of_default_pools_in_db == old_config: + if old_pool_name in pool_migration_control.keys(): + method, mapping = pool_migration_control[old_pool_name] + if method == "platform": + new_config_name = mapping.find(platform) + elif method == "sku": + new_config_name = mapping.get(hwsku) + else: + log_info("Can't find new pool configuration for {}".format(old_pool_name)) + return False + if not new_config_name: + new_config_name = old_pool_name + log_info("Old buffer pool configuration {} will be migrate to {} according to {}".format(old_pool_name, new_config_name, method)) + else: + log_info("Old buffer pool configuration {} will be migrate to new one".format(old_pool_name)) + new_config_name = old_pool_name + break + + if not new_config_name: + log_info("The configuration doesn't match any default configuration, migration for pool isn't required") return True + + new_buffer_pool_conf = self.mlnx_default_buffer_parameters(new_version, new_config_name) + if not new_buffer_pool_conf: + log_error("Can't find the buffer pool configuration for {}".format(new_config_name)) + return False + # Migrate old buffer conf to latest. - for pool in buffer_pools: - self.configDB.set_entry('BUFFER_POOL', pool, new_buffer_pool_conf[pool]) - log_info("Successfully migrate mlnx buffer pool size to the latest.") + for pool in old_buffer_pools: + if pool in new_buffer_pool_conf.keys(): + self.configDB.set_entry('BUFFER_POOL', pool, new_buffer_pool_conf[pool]) + else: + self.configDB.set_entry('BUFFER_POOL', pool, None) + log_info("Successfully migrate mlnx buffer pool size to the latest.") + return True + def mlnx_migrate_buffer_profile(self, old_version, new_version): + """ + This is to migrate BUFFER_PROFILE and BUFFER_PORT_INGRESS_PROFILE_LIST tables + to single ingress pool mode for Mellanox SKU. + """ + device_data = self.configDB.get_table('DEVICE_METADATA') + if 'localhost' in device_data.keys(): + hwsku = device_data['localhost']['hwsku'] + platform = device_data['localhost']['platform'] + else: + log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") + return False + + # SKUs that have single ingress buffer pool + single_ingress_pool_skus = ['Mellanox-SN2700-C28D8', 'Mellanox-SN2700-D48C8', 'Mellanox-SN3800-D112C8', 'Mellanox-SN3800-C64', 'Mellanox-SN3800-D24C52', 'Mellanox-SN3800-D28C50'] + spc1_skus = ['Mellanox-SN2700-C28D8', 'Mellanox-SN2700-D48C8'] + + need_migrate_buffer_profile_list = False + + # get profile + if hwsku in single_ingress_pool_skus: + buffer_profile_old_configure = self.mlnx_default_buffer_parameters(old_version, "buffer_profiles_single_pool") + if not buffer_profile_old_configure: + # there is no single pool info in the old version + buffer_profile_old_configure = self.mlnx_default_buffer_parameters(old_version, "buffer_profiles") + need_migrate_buffer_profile_list = True + buffer_port_ingress_profile_list_old = "[BUFFER_PROFILE|ingress_lossless_profile],[BUFFER_PROFILE|ingress_lossy_profile]" + buffer_port_ingress_profile_list_new = "[BUFFER_PROFILE|ingress_lossless_profile]" + buffer_profile_new_configure = self.mlnx_default_buffer_parameters(new_version, "buffer_profiles_single_pool") + else: + buffer_profile_old_configure = self.mlnx_default_buffer_parameters(old_version, "buffer_profiles") + buffer_profile_new_configure = self.mlnx_default_buffer_parameters(new_version, "buffer_profiles") + + buffer_profile_conf = self.configDB.get_table('BUFFER_PROFILE') + + # we need to transform lossless pg profiles to new settings + # to achieve that, we just need to remove this kind of profiles, buffermgrd will generate them automatically + if platform == 'x86_64-mlnx_msn3800-r0': + default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_3800_headroom") + elif platform in ["x86_64-mlnx_msn3700-r0", "x86_64-mlnx_msn3700c-r0"]: + default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_headroom") + else: + default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc1_headroom") + for name, profile in buffer_profile_conf.iteritems(): + if name in default_lossless_profiles.keys(): + default_profile = default_lossless_profiles[name] + default_profile['dynamic_th'] = '0' + default_profile['xoff'] = str(int(default_profile['size']) - int(default_profile['xon'])) + default_profile['pool'] = '[BUFFER_POOL|ingress_lossless_pool]' + if profile == default_profile: + self.configDB.set_entry('BUFFER_PROFILE', name, None) + + for name, profile in buffer_profile_old_configure.iteritems(): + if name in buffer_profile_conf.keys() and profile == buffer_profile_old_configure[name]: + continue + # return if any default profile isn't in cofiguration + return True + + if need_migrate_buffer_profile_list: + buffer_port_ingress_profile_list_conf = self.configDB.get_table('BUFFER_PORT_INGRESS_PROFILE_LIST') + for profile_list, profiles in buffer_port_ingress_profile_list_conf.iteritems(): + if profiles['profile_list'] == buffer_port_ingress_profile_list_old: + continue + # return if any port's profile list isn't default + return True + + for name in buffer_port_ingress_profile_list_conf.keys(): + self.configDB.set_entry('BUFFER_PORT_INGRESS_PROFILE_LIST', name, + {'profile_list': buffer_port_ingress_profile_list_new}) + + for name, profile in buffer_profile_new_configure.iteritems(): + self.configDB.set_entry('BUFFER_PROFILE', name, profile) + def version_unknown(self): """ version_unknown tracks all SONiC versions that doesn't have a version @@ -280,19 +639,33 @@ def version_1_0_2(self): # Check ASIC type, if Mellanox platform then need DB migration version_info = sonic_device_util.get_sonic_version_info() if version_info['asic_type'] == "mellanox": - if self.mlnx_migrate_buffer_pool_size(): + if self.mlnx_migrate_buffer_pool_size('version_1_0_2', 'version_1_0_3'): self.set_version('version_1_0_3') else: self.set_version('version_1_0_3') - return None + return 'version_1_0_3' def version_1_0_3(self): """ - Current latest version. Nothing to do here. + Version 1_0_3. """ log_info('Handling version_1_0_3') - return None + # Check ASIC type, if Mellanox platform then need DB migration + version_info = sonic_device_util.get_sonic_version_info() + if version_info['asic_type'] == "mellanox": + if self.mlnx_migrate_buffer_pool_size('version_1_0_3', 'version_1_0_4') and self.mlnx_migrate_buffer_profile('version_1_0_3', 'version_1_0_4'): + self.set_version('version_1_0_4') + else: + self.set_version('version_1_0_4') + + return 'version_1_0_4' + + def version_1_0_4(self): + """ + Current latest version. Nothing to do here. + """ + log_info('Handling version_1_0_4') def get_version(self): version = self.configDB.get_entry(self.TABLE_NAME, self.TABLE_KEY) From e16a8e71b8f93567e2c5a0729820e08526d5393c Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Thu, 16 Jul 2020 13:52:48 +0000 Subject: [PATCH 02/10] Update according to MSFT comments 1. Don't need to migrate for single buffer pool mode 2. Move buffer setting migration to another file 3. Remove unnecessary code/upgrading flows Signed-off-by: Stephen Sun --- scripts/db_migrator.py | 472 +------------------------------- scripts/mellanox_db_migrator.py | 335 +++++++++++++++++++++++ 2 files changed, 347 insertions(+), 460 deletions(-) create mode 100644 scripts/mellanox_db_migrator.py diff --git a/scripts/db_migrator.py b/scripts/db_migrator.py index bd8c8a672c..f05d99a481 100755 --- a/scripts/db_migrator.py +++ b/scripts/db_migrator.py @@ -57,6 +57,14 @@ def __init__(self, namespace, socket=None): if self.appDB is not None: self.appDB.connect(self.appDB.APPL_DB) + version_info = sonic_device_util.get_sonic_version_info() + asic_type = version_info.get('asic_type') + self.asic_type = asic_type + + if asic_type == "mellanox": + from mellanox_db_migrator import MellanoxDbMigrator + self.mellanox_migrator = MellanoxDbMigrator(self.configDB) + def migrate_pfc_wd_table(self): ''' Migrate all data entries from table PFC_WD_TABLE to PFC_WD @@ -143,460 +151,6 @@ def migrate_intf_table(self): self.appDB.set(self.appDB.APPL_DB, table, 'NULL', 'NULL') if_db.append(if_name) - def mlnx_default_buffer_parameters(self, db_version, table): - """ - We extract buffer configurations to a common function - so that it can be reused among different migration - This - The logic of buffer parameters migrating: - 1. Compare the current buffer configuration with the default settings - 2. If there is a match, map the old setting to a new one acording to the map "pool_mapped_from_old_version" - 3. Insert the new setting into database - Each settings defined below (except that for version_1_0_2) will be used twice: - 1. It is referenced as new setting when database is migrated to that version - 2. It is referenced as old setting when database is migrated from that version - """ - mellanox_default_parameter = { - "version_1_0_2": { - # Buffer pool configuration info - "buffer_pool_list" : ['ingress_lossless_pool', 'egress_lossless_pool', 'ingress_lossy_pool', 'egress_lossy_pool'], - "spc1_t0_pool": {"ingress_lossless_pool": { "size": "4194304", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "7340032", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "16777152", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "7340032", "type": "egress", "mode": "dynamic" } }, - "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2097152", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "5242880", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "16777152", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "5242880", "type": "egress", "mode": "dynamic" } }, - "spc2_t0_pool": {"ingress_lossless_pool": { "size": "8224768", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "8224768", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "35966016", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "8224768", "type": "egress", "mode": "dynamic" } }, - "spc2_t1_pool": {"ingress_lossless_pool": { "size": "12042240", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "12042240", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "35966016", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "12042240", "type": "egress", "mode": "dynamic" } }, - - # Buffer pool migration control info - "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool"] - }, - "version_1_0_3": { - # On Mellanox platform the buffer pool size changed since - # version with new SDK 4.3.3052, SONiC to SONiC update - # from version with old SDK will be broken without migration. - # - # Buffer pool migration control info - # v1.0.2 hwsku/platform configuration set in v1.0.3 - # spc1_t0_pool spc1_t0_pool - # - # spc1_t1_pool spc1_t1_pool - # - # spc2_t0_pool--platform---x86_64-mlnx_msn3800-r0-------------spc2_3800_t0_pool - # | - # +------other spc2 platforms---------------spc2_t0_pool - # - # spc2_t1_pool--platform---platform: x86_64-mlnx_msn3800-r0---spc2_3800_t1_pool - # | - # +------other spc2 platforms---------------spc2_t1_pool - # - "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool", "spc2_3800_t0_pool", "spc2_3800_t1_pool"], - "pool_mapped_from_old_version": { - "spc2_t0_pool": ("platform", {"x86_64-mlnx_msn3800-r0": "spc2_3800_t0_pool"}), - "spc2_t1_pool": ("platform", {"x86_64-mlnx_msn3800-r0": "spc2_3800_t1_pool"}) - }, - - # Buffer pool configuration info - "buffer_pool_list" : ['ingress_lossless_pool', 'egress_lossless_pool', 'ingress_lossy_pool', 'egress_lossy_pool'], - "spc1_t0_pool": {"ingress_lossless_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "5029836", "type": "egress", "mode": "dynamic" } }, - "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "2097100", "type": "egress", "mode": "dynamic" } }, - - "spc2_t0_pool": {"ingress_lossless_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "14983147", "type": "egress", "mode": "dynamic" } }, - "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "9158635", "type": "egress", "mode": "dynamic" } }, - - # 3800 platform has gearbox installed so the buffer pool size is different with other Spectrum2 platform - "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "28196784", "type": "egress", "mode": "dynamic" } }, - "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "17891280", "type": "egress", "mode": "dynamic" } }, - - # Lossless headroom info - "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "34816", "xon": "18432"}, - "pg_lossless_25000_5m_profile": {"size": "34816", "xon": "18432"}, - "pg_lossless_40000_5m_profile": {"size": "34816", "xon": "18432"}, - "pg_lossless_50000_5m_profile": {"size": "34816", "xon": "18432"}, - "pg_lossless_100000_5m_profile": {"size": "36864", "xon": "18432"}, - "pg_lossless_10000_40m_profile": {"size": "36864", "xon": "18432"}, - "pg_lossless_25000_40m_profile": {"size": "39936", "xon": "18432"}, - "pg_lossless_40000_40m_profile": {"size": "41984", "xon": "18432"}, - "pg_lossless_50000_40m_profile": {"size": "41984", "xon": "18432"}, - "pg_lossless_100000_40m_profile": {"size": "54272", "xon": "18432"}, - "pg_lossless_10000_300m_profile": {"size": "49152", "xon": "18432"}, - "pg_lossless_25000_300m_profile": {"size": "71680", "xon": "18432"}, - "pg_lossless_40000_300m_profile": {"size": "94208", "xon": "18432"}, - "pg_lossless_50000_300m_profile": {"size": "94208", "xon": "18432"}, - "pg_lossless_100000_300m_profile": {"size": "184320", "xon": "18432"}}, - "spc2_headroom": {"pg_lossless_1000_5m_profile": {"size": "35840", "xon": "18432"}, - "pg_lossless_10000_5m_profile": {"size": "36864", "xon": "18432"}, - "pg_lossless_25000_5m_profile": {"size": "36864", "xon": "18432"}, - "pg_lossless_40000_5m_profile": {"size": "36864", "xon": "18432"}, - "pg_lossless_50000_5m_profile": {"size": "37888", "xon": "18432"}, - "pg_lossless_100000_5m_profile": {"size": "38912", "xon": "18432"}, - "pg_lossless_200000_5m_profile": {"size": "41984", "xon": "18432"}, - "pg_lossless_1000_40m_profile": {"size": "36864", "xon": "18432"}, - "pg_lossless_10000_40m_profile": {"size": "38912", "xon": "18432"}, - "pg_lossless_25000_40m_profile": {"size": "41984", "xon": "18432"}, - "pg_lossless_40000_40m_profile": {"size": "45056", "xon": "18432"}, - "pg_lossless_50000_40m_profile": {"size": "47104", "xon": "18432"}, - "pg_lossless_100000_40m_profile": {"size": "59392", "xon": "18432"}, - "pg_lossless_200000_40m_profile": {"size": "81920", "xon": "18432"}, - "pg_lossless_1000_300m_profile": {"size": "37888", "xon": "18432"}, - "pg_lossless_10000_300m_profile": {"size": "53248", "xon": "18432"}, - "pg_lossless_25000_300m_profile": {"size": "78848", "xon": "18432"}, - "pg_lossless_40000_300m_profile": {"size": "104448", "xon": "18432"}, - "pg_lossless_50000_300m_profile": {"size": "121856", "xon": "18432"}, - "pg_lossless_100000_300m_profile": {"size": "206848", "xon": "18432"}, - "pg_lossless_200000_300m_profile": {"size": "376832", "xon": "18432"}}, - "spc2_3800_headroom": {"pg_lossless_1000_5m_profile": {"size": "32768", "xon": "18432"}, - "pg_lossless_10000_5m_profile": {"size": "34816", "xon": "18432"}, - "pg_lossless_25000_5m_profile": {"size": "38912", "xon": "18432"}, - "pg_lossless_40000_5m_profile": {"size": "41984", "xon": "18432"}, - "pg_lossless_50000_5m_profile": {"size": "44032", "xon": "18432"}, - "pg_lossless_100000_5m_profile": {"size": "55296", "xon": "18432"}, - "pg_lossless_200000_5m_profile": {"size": "77824", "xon": "18432"}, - "pg_lossless_1000_40m_profile": {"size": "33792", "xon": "18432"}, - "pg_lossless_10000_40m_profile": {"size": "36864", "xon": "18432"}, - "pg_lossless_25000_40m_profile": {"size": "43008", "xon": "18432"}, - "pg_lossless_40000_40m_profile": {"size": "49152", "xon": "18432"}, - "pg_lossless_50000_40m_profile": {"size": "53248", "xon": "18432"}, - "pg_lossless_100000_40m_profile": {"size": "72704", "xon": "18432"}, - "pg_lossless_200000_40m_profile": {"size": "112640", "xon": "18432"}, - "pg_lossless_1000_300m_profile": {"size": "34816", "xon": "18432"}, - "pg_lossless_10000_300m_profile": {"size": "50176", "xon": "18432"}, - "pg_lossless_25000_300m_profile": {"size": "75776", "xon": "18432"}, - "pg_lossless_40000_300m_profile": {"size": "101376", "xon": "18432"}, - "pg_lossless_50000_300m_profile": {"size": "117760", "xon": "18432"}, - "pg_lossless_100000_300m_profile": {"size": "202752", "xon": "18432"}, - "pg_lossless_200000_300m_profile": {"size": "373760", "xon": "18432"}}, - - # Buffer profile info - "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "0", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, - "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossy_pool]", "size": "0"}, - "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, - "egress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "4096"}, - "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}} - }, - "version_1_0_4": { - # version 1.0.4 is introduced for: - # 1. Supporting single ingress buffer pool for MSFT SKUs - # 2. Updating the buffer settings - # - # Buffer pool migration control info - # v1.0.3 hwsku/platform v1.0.4 - # spc1_t0_pool----hwsku------Mellanox-SN2700-C28D8-------spc1_t0_pool_single_pool - # | - # +--------Mellanox-SN2700-D48C8-------spc1_t0_pool_single_pool - # | - # +--------all other spc1 hwskus-------spc1_t0_pool - # - # spc1_t1_pool----hwsku------Mellanox-SN2700-C28D8-------spc1_t1_pool_single_pool - # | - # +--------Mellanox-SN2700-D48C8-------spc1_t1_pool_single_pool - # | - # +--------all other spc1 hwskus-------spc1_t1_pool - # - # spc2_3800_t0_pool--hwsku---Mellanox-SN3800-D112C8------spc2_3800_t0_pool_single_pool - # | - # +-----Mellanox-SN3800-C64---------spc2_3800_t0_pool_single_pool - # | - # +-----Mellanox-SN3800-D24C52------spc2_3800_t0_pool_single_pool - # | - # +-----Mellanox-SN3800-D28C50------spc2_3800_t0_pool_single_pool - # | - # +-----other 3800 hwskus-----------spc2_3800_t0_pool - # - # spc2_3800_t1_pool--hwsku---Mellanox-SN3800-D112C8------spc2_3800_t1_pool_single_pool - # | - # +-----Mellanox-SN3800-C64---------spc2_3800_t1_pool_single_pool - # | - # +-----Mellanox-SN3800-D24C52------spc2_3800_t1_pool_single_pool - # | - # +-----Mellanox-SN3800-D28C50------spc2_3800_t1_pool_single_pool - # | - # +-----other 3800 hwskus-----------spc2_3800_t1_pool - # - "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool", "spc2_3800_t0_pool", "spc2_3800_t1_pool", - "spc1_t0_pool_single_pool", "spc1_t1_pool_single_pool", "spc2_3800_t0_pool_single_pool", "spc2_3800_t1_pool_single_pool"], - "pool_mapped_from_old_version": { - "spc1_t0_pool": ("sku", - {"Mellanox-SN2700-C28D8": "spc1_t0_pool_single_pool", - "Mellanox-SN2700-D48C8": "spc1_t0_pool_single_pool"}), - "spc1_t1_pool": ("sku", - {"Mellanox-SN2700-C28D8": "spc1_t1_pool_single_pool", - "Mellanox-SN2700-D48C8": "spc1_t1_pool_single_pool"}), - "spc2_3800_t0_pool": ("sku", - {"Mellanox-SN3800-D112C8": "spc2_3800_t0_pool_single_pool", - "Mellanox-SN3800-C64": "spc2_3800_t0_pool_single_pool", - "Mellanox-SN3800-D24C52": "spc2_3800_t0_pool_single_pool", - "Mellanox-SN3800-D28C50": "spc2_3800_t0_pool_single_pool"}), - "spc2_3800_t1_pool": ("sku", - {"Mellanox-SN3800-D112C8": "spc2_3800_t1_pool_single_pool", - "Mellanox-SN3800-C64": "spc2_3800_t1_pool_single_pool", - "Mellanox-SN3800-D24C52": "spc2_3800_t1_pool_single_pool", - "Mellanox-SN3800-D28C50": "spc2_3800_t1_pool_single_pool"}) - }, - - # Buffer pool info for single pool mode - "buffer_pool_list_single_pool" : ['ingress_lossless_pool', 'egress_lossless_pool', 'egress_lossy_pool'], - "spc1_t0_pool_single_pool": {"ingress_lossless_pool": { "size": "10608640", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "10608640", "type": "egress", "mode": "dynamic" } }, - "spc1_t1_pool_single_pool": {"ingress_lossless_pool": { "size": "7553024", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "7553024", "type": "egress", "mode": "dynamic" } }, - - "spc2_3800_t0_pool_single_pool": {"ingress_lossless_pool": { "size": "27598848", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "27598848", "type": "egress", "mode": "dynamic" } }, - "spc2_3800_t1_pool_single_pool": {"ingress_lossless_pool": { "size": "20627456", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "20627456", "type": "egress", "mode": "dynamic" } }, - - "buffer_profiles_single_pool": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, - "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, - "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, - "egress_lossy_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "9216"}, - "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}}, - - # Buffer pool info for normal mode - "buffer_pool_list" : ['ingress_lossless_pool', 'ingress_lossy_pool', 'egress_lossless_pool', 'egress_lossy_pool'], - "spc1_t0_pool": {"ingress_lossless_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "5304320", "type": "egress", "mode": "dynamic" } }, - "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "2736128", "type": "egress", "mode": "dynamic" } }, - - "spc2_t0_pool": {"ingress_lossless_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "15241216", "type": "egress", "mode": "dynamic" } }, - "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "9388032", "type": "egress", "mode": "dynamic" } }, - - "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "13799424", "type": "egress", "mode": "dynamic" } }, - "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "7946240", "type": "egress", "mode": "dynamic" } }, - - # Buffer profile info - "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, - "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossy_pool]", "size": "0"}, - "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, - "egress_lossy_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "9216"}, - "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}} - } - } - - if table in mellanox_default_parameter[db_version].keys(): - return mellanox_default_parameter[db_version][table] - else: - return None - - def mlnx_migrate_buffer_pool_size(self, old_version, new_version): - """ - v1.0.3: - On Mellanox platform the buffer pool size changed since - version with new SDK 4.3.3052, SONiC to SONiC update - from version with old SDK will be broken without migration. - This migration is specifically for Mellanox platform. - v1.0.4: - Single ingress buffer is supported, which also affects the - buffer pool settings on some SKUs - """ - buffer_pool_conf = {} - device_data = self.configDB.get_table('DEVICE_METADATA') - if 'localhost' in device_data.keys(): - hwsku = device_data['localhost']['hwsku'] - platform = device_data['localhost']['platform'] - else: - log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") - return False - - # Buffer pools defined in old version - single_ingress_pool_skus = [ - 'Mellanox-SN2700-C28D8', 'Mellanox-SN2700-D48C8', - 'Mellanox-SN3800-D112C8', 'Mellanox-SN3800-C64', 'Mellanox-SN3800-D24C52', 'Mellanox-SN3800-D28C50' - ] - old_buffer_pools = None - if hwsku in single_ingress_pool_skus: - old_buffer_pools = self.mlnx_default_buffer_parameters(old_version, "buffer_pool_list_single_pool") - if not old_buffer_pools: - # Two cases that old_buffer_pools is None - # 1. It's not the single ingress pool SKU - # 2. The old_version is 1.0.2/1.0.3 in which the single buffer hasn't been introduced - old_buffer_pools = self.mlnx_default_buffer_parameters(old_version, "buffer_pool_list") - - # Try to get related info from DB - buffer_pool_conf = self.configDB.get_table('BUFFER_POOL') - - # Get current buffer pool configuration, only migrate configuration which - # with default values, if it's not default, leave it as is. - config_of_default_pools_in_db = {} - pools_in_db = buffer_pool_conf.keys() - - # Buffer pool numbers is different with default, don't need migrate - if len(pools_in_db) != len(old_buffer_pools): - return True - - # If some buffer pool is not default ones, don't need migrate - for buffer_pool in old_buffer_pools: - if buffer_pool not in pools_in_db: - return True - config_of_default_pools_in_db[buffer_pool] = buffer_pool_conf[buffer_pool] - - old_pool_configuration_list = self.mlnx_default_buffer_parameters(old_version, "pool_configuration_list") - pool_migration_control = self.mlnx_default_buffer_parameters(new_version, "pool_mapped_from_old_version") - if not old_pool_configuration_list or not pool_migration_control: - log_error("Trying to get pool configuration list or migration control failed, skip migration") - return False - new_config_name = None - for old_pool_name in old_pool_configuration_list: - old_config = self.mlnx_default_buffer_parameters(old_version, old_pool_name) - log_info("Checking old pool configuration {}".format(old_pool_name)) - if config_of_default_pools_in_db == old_config: - if old_pool_name in pool_migration_control.keys(): - method, mapping = pool_migration_control[old_pool_name] - if method == "platform": - new_config_name = mapping.find(platform) - elif method == "sku": - new_config_name = mapping.get(hwsku) - else: - log_info("Can't find new pool configuration for {}".format(old_pool_name)) - return False - if not new_config_name: - new_config_name = old_pool_name - log_info("Old buffer pool configuration {} will be migrate to {} according to {}".format(old_pool_name, new_config_name, method)) - else: - log_info("Old buffer pool configuration {} will be migrate to new one".format(old_pool_name)) - new_config_name = old_pool_name - break - - if not new_config_name: - log_info("The configuration doesn't match any default configuration, migration for pool isn't required") - return True - - new_buffer_pool_conf = self.mlnx_default_buffer_parameters(new_version, new_config_name) - if not new_buffer_pool_conf: - log_error("Can't find the buffer pool configuration for {}".format(new_config_name)) - return False - - # Migrate old buffer conf to latest. - for pool in old_buffer_pools: - if pool in new_buffer_pool_conf.keys(): - self.configDB.set_entry('BUFFER_POOL', pool, new_buffer_pool_conf[pool]) - else: - self.configDB.set_entry('BUFFER_POOL', pool, None) - log_info("Successfully migrate mlnx buffer pool size to the latest.") - - return True - - def mlnx_migrate_buffer_profile(self, old_version, new_version): - """ - This is to migrate BUFFER_PROFILE and BUFFER_PORT_INGRESS_PROFILE_LIST tables - to single ingress pool mode for Mellanox SKU. - """ - device_data = self.configDB.get_table('DEVICE_METADATA') - if 'localhost' in device_data.keys(): - hwsku = device_data['localhost']['hwsku'] - platform = device_data['localhost']['platform'] - else: - log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") - return False - - # SKUs that have single ingress buffer pool - single_ingress_pool_skus = ['Mellanox-SN2700-C28D8', 'Mellanox-SN2700-D48C8', 'Mellanox-SN3800-D112C8', 'Mellanox-SN3800-C64', 'Mellanox-SN3800-D24C52', 'Mellanox-SN3800-D28C50'] - spc1_skus = ['Mellanox-SN2700-C28D8', 'Mellanox-SN2700-D48C8'] - - need_migrate_buffer_profile_list = False - - # get profile - if hwsku in single_ingress_pool_skus: - buffer_profile_old_configure = self.mlnx_default_buffer_parameters(old_version, "buffer_profiles_single_pool") - if not buffer_profile_old_configure: - # there is no single pool info in the old version - buffer_profile_old_configure = self.mlnx_default_buffer_parameters(old_version, "buffer_profiles") - need_migrate_buffer_profile_list = True - buffer_port_ingress_profile_list_old = "[BUFFER_PROFILE|ingress_lossless_profile],[BUFFER_PROFILE|ingress_lossy_profile]" - buffer_port_ingress_profile_list_new = "[BUFFER_PROFILE|ingress_lossless_profile]" - buffer_profile_new_configure = self.mlnx_default_buffer_parameters(new_version, "buffer_profiles_single_pool") - else: - buffer_profile_old_configure = self.mlnx_default_buffer_parameters(old_version, "buffer_profiles") - buffer_profile_new_configure = self.mlnx_default_buffer_parameters(new_version, "buffer_profiles") - - buffer_profile_conf = self.configDB.get_table('BUFFER_PROFILE') - - # we need to transform lossless pg profiles to new settings - # to achieve that, we just need to remove this kind of profiles, buffermgrd will generate them automatically - if platform == 'x86_64-mlnx_msn3800-r0': - default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_3800_headroom") - elif platform in ["x86_64-mlnx_msn3700-r0", "x86_64-mlnx_msn3700c-r0"]: - default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_headroom") - else: - default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc1_headroom") - for name, profile in buffer_profile_conf.iteritems(): - if name in default_lossless_profiles.keys(): - default_profile = default_lossless_profiles[name] - default_profile['dynamic_th'] = '0' - default_profile['xoff'] = str(int(default_profile['size']) - int(default_profile['xon'])) - default_profile['pool'] = '[BUFFER_POOL|ingress_lossless_pool]' - if profile == default_profile: - self.configDB.set_entry('BUFFER_PROFILE', name, None) - - for name, profile in buffer_profile_old_configure.iteritems(): - if name in buffer_profile_conf.keys() and profile == buffer_profile_old_configure[name]: - continue - # return if any default profile isn't in cofiguration - return True - - if need_migrate_buffer_profile_list: - buffer_port_ingress_profile_list_conf = self.configDB.get_table('BUFFER_PORT_INGRESS_PROFILE_LIST') - for profile_list, profiles in buffer_port_ingress_profile_list_conf.iteritems(): - if profiles['profile_list'] == buffer_port_ingress_profile_list_old: - continue - # return if any port's profile list isn't default - return True - - for name in buffer_port_ingress_profile_list_conf.keys(): - self.configDB.set_entry('BUFFER_PORT_INGRESS_PROFILE_LIST', name, - {'profile_list': buffer_port_ingress_profile_list_new}) - - for name, profile in buffer_profile_new_configure.iteritems(): - self.configDB.set_entry('BUFFER_PROFILE', name, profile) - def version_unknown(self): """ version_unknown tracks all SONiC versions that doesn't have a version @@ -637,9 +191,8 @@ def version_1_0_2(self): """ log_info('Handling version_1_0_2') # Check ASIC type, if Mellanox platform then need DB migration - version_info = sonic_device_util.get_sonic_version_info() - if version_info['asic_type'] == "mellanox": - if self.mlnx_migrate_buffer_pool_size('version_1_0_2', 'version_1_0_3'): + if self.asic_type == "mellanox": + if self.mellanox_migrator.mlnx_migrate_buffer_pool_size('version_1_0_2', 'version_1_0_3'): self.set_version('version_1_0_3') else: self.set_version('version_1_0_3') @@ -652,9 +205,8 @@ def version_1_0_3(self): log_info('Handling version_1_0_3') # Check ASIC type, if Mellanox platform then need DB migration - version_info = sonic_device_util.get_sonic_version_info() - if version_info['asic_type'] == "mellanox": - if self.mlnx_migrate_buffer_pool_size('version_1_0_3', 'version_1_0_4') and self.mlnx_migrate_buffer_profile('version_1_0_3', 'version_1_0_4'): + if self.asic_type == "mellanox": + if self.mellanox_migrator.mlnx_migrate_buffer_pool_size('version_1_0_3', 'version_1_0_4') and self.mellanox_migrator.mlnx_migrate_buffer_profile('version_1_0_3', 'version_1_0_4'): self.set_version('version_1_0_4') else: self.set_version('version_1_0_4') diff --git a/scripts/mellanox_db_migrator.py b/scripts/mellanox_db_migrator.py new file mode 100644 index 0000000000..9c424fb65d --- /dev/null +++ b/scripts/mellanox_db_migrator.py @@ -0,0 +1,335 @@ +import syslog + +SYSLOG_IDENTIFIER = 'db_migrator' + +def log_info(msg): + syslog.openlog(SYSLOG_IDENTIFIER) + syslog.syslog(syslog.LOG_INFO, msg) + syslog.closelog() + + +def log_notice(msg): + syslog.openlog(SYSLOG_IDENTIFIER) + syslog.syslog(syslog.LOG_NOTICE, msg) + syslog.closelog() + + +def log_error(msg): + syslog.openlog(SYSLOG_IDENTIFIER) + syslog.syslog(syslog.LOG_ERR, msg) + syslog.closelog() + + +class MellanoxDbMigrator(): + def __init__(self, configDB): + self.configDB = configDB + + mellanox_default_parameter = { + "version_1_0_2": { + # Buffer pool migration control info + "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool"], + + # Buffer pool configuration info + "buffer_pool_list" : ['ingress_lossless_pool', 'egress_lossless_pool', 'ingress_lossy_pool', 'egress_lossy_pool'], + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "4194304", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "7340032", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "16777152", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "7340032", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2097152", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "5242880", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "16777152", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "5242880", "type": "egress", "mode": "dynamic" } }, + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "8224768", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "8224768", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "35966016", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "8224768", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "12042240", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "12042240", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "35966016", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "12042240", "type": "egress", "mode": "dynamic" } }, + }, + "version_1_0_3": { + # On Mellanox platform the buffer pool size changed since + # version with new SDK 4.3.3052, SONiC to SONiC update + # from version with old SDK will be broken without migration. + # + "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool", "spc2_3800_t0_pool", "spc2_3800_t1_pool"], + + # Buffer pool configuration info + "buffer_pool_list" : ['ingress_lossless_pool', 'egress_lossless_pool', 'ingress_lossy_pool', 'egress_lossy_pool'], + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "5029836", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "5029836", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "2097100", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024599", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "2097100", "type": "egress", "mode": "dynamic" } }, + + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "14983147", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "14983147", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "9158635", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340822", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "9158635", "type": "egress", "mode": "dynamic" } }, + + # 3800 platform has gearbox installed so the buffer pool size is different with other Spectrum2 platform + "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "28196784", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "28196784", "type": "egress", "mode": "dynamic" } }, + "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "17891280", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "17891280", "type": "egress", "mode": "dynamic" } }, + + # Lossless headroom info + "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_25000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_40000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_50000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_100000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_10000_40m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_25000_40m_profile": {"size": "39936", "xon": "18432"}, + "pg_lossless_40000_40m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_50000_40m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_100000_40m_profile": {"size": "54272", "xon": "18432"}, + "pg_lossless_10000_300m_profile": {"size": "49152", "xon": "18432"}, + "pg_lossless_25000_300m_profile": {"size": "71680", "xon": "18432"}, + "pg_lossless_40000_300m_profile": {"size": "94208", "xon": "18432"}, + "pg_lossless_50000_300m_profile": {"size": "94208", "xon": "18432"}, + "pg_lossless_100000_300m_profile": {"size": "184320", "xon": "18432"}}, + "spc2_headroom": {"pg_lossless_1000_5m_profile": {"size": "35840", "xon": "18432"}, + "pg_lossless_10000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_25000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_40000_5m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_50000_5m_profile": {"size": "37888", "xon": "18432"}, + "pg_lossless_100000_5m_profile": {"size": "38912", "xon": "18432"}, + "pg_lossless_200000_5m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_1000_40m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_10000_40m_profile": {"size": "38912", "xon": "18432"}, + "pg_lossless_25000_40m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_40000_40m_profile": {"size": "45056", "xon": "18432"}, + "pg_lossless_50000_40m_profile": {"size": "47104", "xon": "18432"}, + "pg_lossless_100000_40m_profile": {"size": "59392", "xon": "18432"}, + "pg_lossless_200000_40m_profile": {"size": "81920", "xon": "18432"}, + "pg_lossless_1000_300m_profile": {"size": "37888", "xon": "18432"}, + "pg_lossless_10000_300m_profile": {"size": "53248", "xon": "18432"}, + "pg_lossless_25000_300m_profile": {"size": "78848", "xon": "18432"}, + "pg_lossless_40000_300m_profile": {"size": "104448", "xon": "18432"}, + "pg_lossless_50000_300m_profile": {"size": "121856", "xon": "18432"}, + "pg_lossless_100000_300m_profile": {"size": "206848", "xon": "18432"}, + "pg_lossless_200000_300m_profile": {"size": "376832", "xon": "18432"}}, + "spc2_3800_headroom": {"pg_lossless_1000_5m_profile": {"size": "32768", "xon": "18432"}, + "pg_lossless_10000_5m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_25000_5m_profile": {"size": "38912", "xon": "18432"}, + "pg_lossless_40000_5m_profile": {"size": "41984", "xon": "18432"}, + "pg_lossless_50000_5m_profile": {"size": "44032", "xon": "18432"}, + "pg_lossless_100000_5m_profile": {"size": "55296", "xon": "18432"}, + "pg_lossless_200000_5m_profile": {"size": "77824", "xon": "18432"}, + "pg_lossless_1000_40m_profile": {"size": "33792", "xon": "18432"}, + "pg_lossless_10000_40m_profile": {"size": "36864", "xon": "18432"}, + "pg_lossless_25000_40m_profile": {"size": "43008", "xon": "18432"}, + "pg_lossless_40000_40m_profile": {"size": "49152", "xon": "18432"}, + "pg_lossless_50000_40m_profile": {"size": "53248", "xon": "18432"}, + "pg_lossless_100000_40m_profile": {"size": "72704", "xon": "18432"}, + "pg_lossless_200000_40m_profile": {"size": "112640", "xon": "18432"}, + "pg_lossless_1000_300m_profile": {"size": "34816", "xon": "18432"}, + "pg_lossless_10000_300m_profile": {"size": "50176", "xon": "18432"}, + "pg_lossless_25000_300m_profile": {"size": "75776", "xon": "18432"}, + "pg_lossless_40000_300m_profile": {"size": "101376", "xon": "18432"}, + "pg_lossless_50000_300m_profile": {"size": "117760", "xon": "18432"}, + "pg_lossless_100000_300m_profile": {"size": "202752", "xon": "18432"}, + "pg_lossless_200000_300m_profile": {"size": "373760", "xon": "18432"}}, + + # Buffer profile info + "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "0", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, + "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossy_pool]", "size": "0"}, + "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, + "egress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "4096"}, + "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}} + }, + "version_1_0_4": { + # version 1.0.4 is introduced for: + # 1. Supporting single ingress buffer pool for MSFT SKUs + # 2. Updating the buffer settings + # + # Buffer pool migration control info + # No new buffer setting introduced. + # + "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool", "spc2_3800_t0_pool", "spc2_3800_t1_pool"], + + # Buffer pool info for normal mode + "buffer_pool_list" : ['ingress_lossless_pool', 'ingress_lossy_pool', 'egress_lossless_pool', 'egress_lossy_pool'], + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "5304320", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "2736128", "type": "egress", "mode": "dynamic" } }, + + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "15241216", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "9388032", "type": "egress", "mode": "dynamic" } }, + + "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "13799424", "type": "egress", "mode": "dynamic" } }, + "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "7946240", "type": "egress", "mode": "dynamic" } }, + + # Buffer profile info + "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, + "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossy_pool]", "size": "0"}, + "egress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossless_pool]", "size": "0"}, + "egress_lossy_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "9216"}, + "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}} + } + } + + def mlnx_default_buffer_parameters(self, db_version, table): + """ + We extract buffer configurations to a common function + so that it can be reused among different migration + The logic of buffer parameters migrating: + 1. Compare the current buffer configuration with the default settings + 2. If there is a match, migrate the old value to the new one + 3. Insert the new setting into database + Each settings defined below (except that for version_1_0_2) will be used twice: + 1. It is referenced as new setting when database is migrated to that version + 2. It is referenced as old setting when database is migrated from that version + """ + + return self.mellanox_default_parameter[db_version].get(table) + + def mlnx_migrate_buffer_pool_size(self, old_version, new_version): + """ + To migrate buffer pool configuration + """ + buffer_pool_conf_in_db = {} + device_data = self.configDB.get_table('DEVICE_METADATA') + if 'localhost' in device_data.keys(): + platform = device_data['localhost']['platform'] + else: + log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") + return False + + # Buffer pools defined in old version + old_default_buffer_pools = self.mlnx_default_buffer_parameters(old_version, "buffer_pool_list") + + # Try to get related info from DB + buffer_pool_conf_in_db = self.configDB.get_table('BUFFER_POOL') + + # Get current buffer pool configuration, only migrate configuration which + # with default values, if it's not default, leave it as is. + name_list_of_pools_in_db = buffer_pool_conf_in_db.keys() + + # Buffer pool numbers is different with default, don't need migrate + if len(name_list_of_pools_in_db) != len(old_default_buffer_pools): + log_notice("Pools in CONFIG_DB ({}) don't match default ({}), skip buffer pool migration".format(name_list_of_pools_in_db, old_default_buffer_pools)) + return True + + # If some buffer pool is not default ones, don't need migrate + for buffer_pool in old_default_buffer_pools: + if buffer_pool not in name_list_of_pools_in_db: + log_notice("Default pool {} isn't in CONFIG_DB, skip buffer pool migration".format(buffer_pool)) + return True + + old_pool_configuration_list = self.mlnx_default_buffer_parameters(old_version, "pool_configuration_list") + if not old_pool_configuration_list: + log_error("Trying to get pool configuration list or migration control failed, skip migration") + return False + + new_config_name = None + for old_config_name in old_pool_configuration_list: + old_config = self.mlnx_default_buffer_parameters(old_version, old_config_name) + log_info("Checking old pool configuration {}".format(old_config_name)) + if buffer_pool_conf_in_db == old_config: + new_config_name = old_config_name + log_info("Old buffer pool configuration {} will be migrate to new one".format(old_config_name, new_config_name)) + break + + if not new_config_name: + log_notice("The configuration doesn't match any default configuration, migration for pool isn't required") + return True + + new_buffer_pool_conf = self.mlnx_default_buffer_parameters(new_version, new_config_name) + if not new_buffer_pool_conf: + log_error("Can't find the buffer pool configuration for {} in {}".format(new_config_name, new_version)) + return False + + # Migrate old buffer conf to latest. + for pool in old_default_buffer_pools: + self.configDB.set_entry('BUFFER_POOL', pool, new_buffer_pool_conf.get(pool)) + + log_info("Successfully migrate mlnx buffer pool {} size to the latest.".format(pool)) + + return True + + def mlnx_migrate_buffer_profile(self, old_version, new_version): + """ + This is to migrate BUFFER_PROFILE configuration + """ + device_data = self.configDB.get_table('DEVICE_METADATA') + if 'localhost' in device_data.keys(): + platform = device_data['localhost']['platform'] + else: + log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") + return False + + spc1_platforms = ["x86_64-mlnx_msn2010-r0", "x86_64-mlnx_msn2100-r0", "x86_64-mlnx_msn2410-r0", "x86_64-mlnx_msn2700-r0", "x86_64-mlnx_msn2740-r0"] + spc2_platforms = ["x86_64-mlnx_msn3700-r0", "x86_64-mlnx_msn3700c-r0"] + + # get profile + buffer_profile_old_configure = self.mlnx_default_buffer_parameters(old_version, "buffer_profiles") + buffer_profile_new_configure = self.mlnx_default_buffer_parameters(new_version, "buffer_profiles") + + buffer_profile_conf = self.configDB.get_table('BUFFER_PROFILE') + + # we need to transform lossless pg profiles to new settings + # to achieve that, we just need to remove this kind of profiles, buffermgrd will generate them automatically + default_lossless_profiles = None + if platform == 'x86_64-mlnx_msn3800-r0': + default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_3800_headroom") + elif platform in spc2_platforms: + default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_headroom") + elif platform in spc1_platforms: + default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc1_headroom") + + if default_lossless_profiles: + for name, profile in buffer_profile_conf.iteritems(): + if name in default_lossless_profiles.keys(): + default_profile = default_lossless_profiles[name] + default_profile['dynamic_th'] = '0' + default_profile['xoff'] = str(int(default_profile['size']) - int(default_profile['xon'])) + default_profile['pool'] = '[BUFFER_POOL|ingress_lossless_pool]' + if profile == default_profile: + self.configDB.set_entry('BUFFER_PROFILE', name, None) + + if not buffer_profile_new_configure: + # Not providing new profile configure in new version means they do need to be changed + log_notice("No buffer profile in {}, don't need to migrate non-lossless profiles".format(new_version)) + return True + + for name, profile in buffer_profile_old_configure.iteritems(): + if name in buffer_profile_conf.keys() and profile == buffer_profile_old_configure[name]: + continue + # return if any default profile isn't in cofiguration + log_notice("Default profile {} isn't in database or doesn't match default value".format(name)) + return True + + for name, profile in buffer_profile_new_configure.iteritems(): + log_info("Successfully migrate profile {}".format(name)) + self.configDB.set_entry('BUFFER_PROFILE', name, profile) From 955eac296c8293ffb89b5c36b96c5ec03cc5c417 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Fri, 17 Jul 2020 14:05:05 +0800 Subject: [PATCH 03/10] Fix LGTM warning Signed-off-by: Stephen Sun --- scripts/mellanox_db_migrator.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/scripts/mellanox_db_migrator.py b/scripts/mellanox_db_migrator.py index 9c424fb65d..460fe5275d 100644 --- a/scripts/mellanox_db_migrator.py +++ b/scripts/mellanox_db_migrator.py @@ -218,14 +218,6 @@ def mlnx_migrate_buffer_pool_size(self, old_version, new_version): """ To migrate buffer pool configuration """ - buffer_pool_conf_in_db = {} - device_data = self.configDB.get_table('DEVICE_METADATA') - if 'localhost' in device_data.keys(): - platform = device_data['localhost']['platform'] - else: - log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") - return False - # Buffer pools defined in old version old_default_buffer_pools = self.mlnx_default_buffer_parameters(old_version, "buffer_pool_list") @@ -258,7 +250,7 @@ def mlnx_migrate_buffer_pool_size(self, old_version, new_version): log_info("Checking old pool configuration {}".format(old_config_name)) if buffer_pool_conf_in_db == old_config: new_config_name = old_config_name - log_info("Old buffer pool configuration {} will be migrate to new one".format(old_config_name, new_config_name)) + log_info("Old buffer pool configuration {} will be migrate to new one".format(old_config_name)) break if not new_config_name: From daf8b8a8942199aa4dcc3f602fd4353d4ecb5ae1 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Fri, 17 Jul 2020 15:20:43 +0800 Subject: [PATCH 04/10] Fix an error Signed-off-by: Stephen Sun --- scripts/mellanox_db_migrator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mellanox_db_migrator.py b/scripts/mellanox_db_migrator.py index 460fe5275d..8c2e7a7257 100644 --- a/scripts/mellanox_db_migrator.py +++ b/scripts/mellanox_db_migrator.py @@ -178,7 +178,7 @@ def __init__(self, configDB): "egress_lossy_pool": {"size": "15241216", "type": "egress", "mode": "dynamic" } }, "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, "ingress_lossy_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, "egress_lossy_pool": {"size": "9388032", "type": "egress", "mode": "dynamic" } }, "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, From 36ee64ec047da7431fa59e1b8088205678bf262b Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Sat, 18 Jul 2020 09:15:26 +0800 Subject: [PATCH 05/10] mellanox_db_migrator => mellanox_buffer_migrator --- scripts/db_migrator.py | 8 ++++---- ...ellanox_db_migrator.py => mellanox_buffer_migrator.py} | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) rename scripts/{mellanox_db_migrator.py => mellanox_buffer_migrator.py} (99%) diff --git a/scripts/db_migrator.py b/scripts/db_migrator.py index f05d99a481..9aa2fb6a12 100755 --- a/scripts/db_migrator.py +++ b/scripts/db_migrator.py @@ -62,8 +62,8 @@ def __init__(self, namespace, socket=None): self.asic_type = asic_type if asic_type == "mellanox": - from mellanox_db_migrator import MellanoxDbMigrator - self.mellanox_migrator = MellanoxDbMigrator(self.configDB) + from mellanox_buffer_migrator import MellanoxBufferMigrator + self.mellanox_buffer_migrator = MellanoxBufferMigrator(self.configDB) def migrate_pfc_wd_table(self): ''' @@ -192,7 +192,7 @@ def version_1_0_2(self): log_info('Handling version_1_0_2') # Check ASIC type, if Mellanox platform then need DB migration if self.asic_type == "mellanox": - if self.mellanox_migrator.mlnx_migrate_buffer_pool_size('version_1_0_2', 'version_1_0_3'): + if self.mellanox_buffer_migrator.mlnx_migrate_buffer_pool_size('version_1_0_2', 'version_1_0_3'): self.set_version('version_1_0_3') else: self.set_version('version_1_0_3') @@ -206,7 +206,7 @@ def version_1_0_3(self): # Check ASIC type, if Mellanox platform then need DB migration if self.asic_type == "mellanox": - if self.mellanox_migrator.mlnx_migrate_buffer_pool_size('version_1_0_3', 'version_1_0_4') and self.mellanox_migrator.mlnx_migrate_buffer_profile('version_1_0_3', 'version_1_0_4'): + if self.mellanox_buffer_migrator.mlnx_migrate_buffer_pool_size('version_1_0_3', 'version_1_0_4') and self.mellanox_buffer_migrator.mlnx_migrate_buffer_profile('version_1_0_3', 'version_1_0_4'): self.set_version('version_1_0_4') else: self.set_version('version_1_0_4') diff --git a/scripts/mellanox_db_migrator.py b/scripts/mellanox_buffer_migrator.py similarity index 99% rename from scripts/mellanox_db_migrator.py rename to scripts/mellanox_buffer_migrator.py index 8c2e7a7257..184df18bc6 100644 --- a/scripts/mellanox_db_migrator.py +++ b/scripts/mellanox_buffer_migrator.py @@ -20,7 +20,7 @@ def log_error(msg): syslog.closelog() -class MellanoxDbMigrator(): +class MellanoxBufferMigrator(): def __init__(self, configDB): self.configDB = configDB From 30f7faa3622aaf402c0bf0a94c08e64bf88b9bab Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Sat, 18 Jul 2020 14:41:41 +0000 Subject: [PATCH 06/10] Fix issue: after migration the lossless profiles are lost This issue can fail warm reboot because after warm reboot the buffermgr doesn't have time to generate lossless profiles and the following orchagent bake can fail due to this Signed-off-by: Stephen Sun --- scripts/mellanox_buffer_migrator.py | 74 +++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/scripts/mellanox_buffer_migrator.py b/scripts/mellanox_buffer_migrator.py index 184df18bc6..93c8031de3 100644 --- a/scripts/mellanox_buffer_migrator.py +++ b/scripts/mellanox_buffer_migrator.py @@ -190,6 +190,65 @@ def __init__(self, configDB): "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, "egress_lossy_pool": {"size": "7946240", "type": "egress", "mode": "dynamic" } }, + # Lossless headroom info + "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "33792", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "34816", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "34816", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "34816", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "36864", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "35840", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "38912", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "41984", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "44032", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "54272", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "49152", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "71680", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "94208", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "108544", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "184320", "xon":"19456"}}, + "spc2_headroom": {"pg_lossless_1000_5m_profile": {"size": "33792", "xon":"19456"}, + "pg_lossless_10000_5m_profile": {"size": "35840", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "35840", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "36864", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "36864", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "37888", "xon":"19456"}, + "pg_lossless_200000_5m_profile": {"size": "40960", "xon":"19456"}, + "pg_lossless_1000_40m_profile": {"size": "33792", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "37888", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "40960", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "45056", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "47104", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_200000_40m_profile": {"size": "80896", "xon":"19456"}, + "pg_lossless_1000_300m_profile": {"size": "35840", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "52224", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "77824", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "103424", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "120832", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "205824", "xon":"19456"}, + "pg_lossless_200000_300m_profile": {"size": "376832", "xon":"19456"}}, + "spc2_3800_headroom": {"pg_lossless_1000_5m_profile": {"size": "33792", "xon":"19456"}, + "pg_lossless_10000_5m_profile": {"size": "37888", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "41984", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "46080", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "48128", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "60416", "xon":"19456"}, + "pg_lossless_200000_5m_profile": {"size": "86016", "xon":"19456"}, + "pg_lossless_1000_40m_profile": {"size": "34816", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "39936", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "47104", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "53248", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "80896", "xon":"19456"}, + "pg_lossless_200000_40m_profile": {"size": "125952", "xon":"19456"}, + "pg_lossless_1000_300m_profile": {"size": "35840", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "55296", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "83968", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "112640", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "132096", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "228352", "xon":"19456"}, + "pg_lossless_200000_300m_profile": {"size": "421888", "xon":"19456"}}, + # Buffer profile info "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, "ingress_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|ingress_lossy_pool]", "size": "0"}, @@ -295,20 +354,29 @@ def mlnx_migrate_buffer_profile(self, old_version, new_version): default_lossless_profiles = None if platform == 'x86_64-mlnx_msn3800-r0': default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_3800_headroom") + new_lossless_profiles = self.mlnx_default_buffer_parameters(new_version, "spc2_3800_headroom") elif platform in spc2_platforms: default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc2_headroom") + new_lossless_profiles = self.mlnx_default_buffer_parameters(new_version, "spc2_headroom") elif platform in spc1_platforms: default_lossless_profiles = self.mlnx_default_buffer_parameters(old_version, "spc1_headroom") + new_lossless_profiles = self.mlnx_default_buffer_parameters(new_version, "spc1_headroom") - if default_lossless_profiles: + if default_lossless_profiles and new_lossless_profiles: for name, profile in buffer_profile_conf.iteritems(): if name in default_lossless_profiles.keys(): - default_profile = default_lossless_profiles[name] + default_profile = default_lossless_profiles.get(name) + new_profile = new_lossless_profiles.get(name) + if not default_profile or not new_profile: + continue default_profile['dynamic_th'] = '0' default_profile['xoff'] = str(int(default_profile['size']) - int(default_profile['xon'])) default_profile['pool'] = '[BUFFER_POOL|ingress_lossless_pool]' if profile == default_profile: - self.configDB.set_entry('BUFFER_PROFILE', name, None) + default_profile['size'] = new_profile['size'] + default_profile['xon'] = new_profile['xon'] + default_profile['xoff'] = str(int(default_profile['size']) - int(default_profile['xon'])) + self.configDB.set_entry('BUFFER_PROFILE', name, default_profile) if not buffer_profile_new_configure: # Not providing new profile configure in new version means they do need to be changed From e28c8236a4bd8ed9b7ae987fc28a6e7b0c77c3b0 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Wed, 22 Jul 2020 08:38:41 +0000 Subject: [PATCH 07/10] Update buffer configuration for version 1.0.4 Signed-off-by: Stephen Sun --- scripts/mellanox_buffer_migrator.py | 144 +++++++++++++--------------- 1 file changed, 69 insertions(+), 75 deletions(-) diff --git a/scripts/mellanox_buffer_migrator.py b/scripts/mellanox_buffer_migrator.py index 93c8031de3..3ead240fa5 100644 --- a/scripts/mellanox_buffer_migrator.py +++ b/scripts/mellanox_buffer_migrator.py @@ -163,91 +163,85 @@ def __init__(self, configDB): # Buffer pool info for normal mode "buffer_pool_list" : ['ingress_lossless_pool', 'ingress_lossy_pool', 'egress_lossless_pool', 'egress_lossy_pool'], - "spc1_t0_pool": {"ingress_lossless_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "5304320", "type": "ingress", "mode": "dynamic" }, + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "4579328", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "4579328", "type": "ingress", "mode": "dynamic" }, "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "5304320", "type": "egress", "mode": "dynamic" } }, - "spc1_t1_pool": {"ingress_lossless_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "2736128", "type": "ingress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "4579328", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "1998848", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "1998848", "type": "ingress", "mode": "dynamic" }, "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "2736128", "type": "egress", "mode": "dynamic" } }, + "egress_lossy_pool": {"size": "1998848", "type": "egress", "mode": "dynamic" } }, - "spc2_t0_pool": {"ingress_lossless_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "15241216", "type": "ingress", "mode": "dynamic" }, + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "14422016", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "14422016", "type": "ingress", "mode": "dynamic" }, "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "15241216", "type": "egress", "mode": "dynamic" } }, - "spc2_t1_pool": {"ingress_lossless_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "9388032", "type": "ingress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "14422016", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "8384512", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "8384512", "type": "ingress", "mode": "dynamic" }, "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "9388032", "type": "egress", "mode": "dynamic" } }, + "egress_lossy_pool": {"size": "8384512", "type": "egress", "mode": "dynamic" } }, - "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "13799424", "type": "ingress", "mode": "dynamic" }, + "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "12980224", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "12980224", "type": "ingress", "mode": "dynamic" }, "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "13799424", "type": "egress", "mode": "dynamic" } }, - "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "7946240", "type": "ingress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "12980224", "type": "egress", "mode": "dynamic" } }, + "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "7127040", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "7127040", "type": "ingress", "mode": "dynamic" }, "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "7946240", "type": "egress", "mode": "dynamic" } }, + "egress_lossy_pool": {"size": "7127040", "type": "egress", "mode": "dynamic" } }, # Lossless headroom info - "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "33792", "xon":"19456"}, - "pg_lossless_25000_5m_profile": {"size": "34816", "xon":"19456"}, - "pg_lossless_40000_5m_profile": {"size": "34816", "xon":"19456"}, - "pg_lossless_50000_5m_profile": {"size": "34816", "xon":"19456"}, - "pg_lossless_100000_5m_profile": {"size": "36864", "xon":"19456"}, - "pg_lossless_10000_40m_profile": {"size": "35840", "xon":"19456"}, - "pg_lossless_25000_40m_profile": {"size": "38912", "xon":"19456"}, - "pg_lossless_40000_40m_profile": {"size": "41984", "xon":"19456"}, - "pg_lossless_50000_40m_profile": {"size": "44032", "xon":"19456"}, - "pg_lossless_100000_40m_profile": {"size": "54272", "xon":"19456"}, - "pg_lossless_10000_300m_profile": {"size": "49152", "xon":"19456"}, - "pg_lossless_25000_300m_profile": {"size": "71680", "xon":"19456"}, - "pg_lossless_40000_300m_profile": {"size": "94208", "xon":"19456"}, - "pg_lossless_50000_300m_profile": {"size": "108544", "xon":"19456"}, - "pg_lossless_100000_300m_profile": {"size": "184320", "xon":"19456"}}, - "spc2_headroom": {"pg_lossless_1000_5m_profile": {"size": "33792", "xon":"19456"}, - "pg_lossless_10000_5m_profile": {"size": "35840", "xon":"19456"}, - "pg_lossless_25000_5m_profile": {"size": "35840", "xon":"19456"}, - "pg_lossless_40000_5m_profile": {"size": "36864", "xon":"19456"}, - "pg_lossless_50000_5m_profile": {"size": "36864", "xon":"19456"}, - "pg_lossless_100000_5m_profile": {"size": "37888", "xon":"19456"}, - "pg_lossless_200000_5m_profile": {"size": "40960", "xon":"19456"}, - "pg_lossless_1000_40m_profile": {"size": "33792", "xon":"19456"}, - "pg_lossless_10000_40m_profile": {"size": "37888", "xon":"19456"}, - "pg_lossless_25000_40m_profile": {"size": "40960", "xon":"19456"}, - "pg_lossless_40000_40m_profile": {"size": "45056", "xon":"19456"}, - "pg_lossless_50000_40m_profile": {"size": "47104", "xon":"19456"}, - "pg_lossless_100000_40m_profile": {"size": "58368", "xon":"19456"}, - "pg_lossless_200000_40m_profile": {"size": "80896", "xon":"19456"}, - "pg_lossless_1000_300m_profile": {"size": "35840", "xon":"19456"}, - "pg_lossless_10000_300m_profile": {"size": "52224", "xon":"19456"}, - "pg_lossless_25000_300m_profile": {"size": "77824", "xon":"19456"}, - "pg_lossless_40000_300m_profile": {"size": "103424", "xon":"19456"}, - "pg_lossless_50000_300m_profile": {"size": "120832", "xon":"19456"}, - "pg_lossless_100000_300m_profile": {"size": "205824", "xon":"19456"}, - "pg_lossless_200000_300m_profile": {"size": "376832", "xon":"19456"}}, - "spc2_3800_headroom": {"pg_lossless_1000_5m_profile": {"size": "33792", "xon":"19456"}, - "pg_lossless_10000_5m_profile": {"size": "37888", "xon":"19456"}, - "pg_lossless_25000_5m_profile": {"size": "41984", "xon":"19456"}, - "pg_lossless_40000_5m_profile": {"size": "46080", "xon":"19456"}, - "pg_lossless_50000_5m_profile": {"size": "48128", "xon":"19456"}, - "pg_lossless_100000_5m_profile": {"size": "60416", "xon":"19456"}, - "pg_lossless_200000_5m_profile": {"size": "86016", "xon":"19456"}, - "pg_lossless_1000_40m_profile": {"size": "34816", "xon":"19456"}, - "pg_lossless_10000_40m_profile": {"size": "39936", "xon":"19456"}, - "pg_lossless_25000_40m_profile": {"size": "47104", "xon":"19456"}, - "pg_lossless_40000_40m_profile": {"size": "53248", "xon":"19456"}, - "pg_lossless_50000_40m_profile": {"size": "58368", "xon":"19456"}, - "pg_lossless_100000_40m_profile": {"size": "80896", "xon":"19456"}, - "pg_lossless_200000_40m_profile": {"size": "125952", "xon":"19456"}, - "pg_lossless_1000_300m_profile": {"size": "35840", "xon":"19456"}, - "pg_lossless_10000_300m_profile": {"size": "55296", "xon":"19456"}, - "pg_lossless_25000_300m_profile": {"size": "83968", "xon":"19456"}, - "pg_lossless_40000_300m_profile": {"size": "112640", "xon":"19456"}, - "pg_lossless_50000_300m_profile": {"size": "132096", "xon":"19456"}, - "pg_lossless_100000_300m_profile": {"size": "228352", "xon":"19456"}, - "pg_lossless_200000_300m_profile": {"size": "421888", "xon":"19456"}}, + "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "57344", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "59392", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "59392", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "62464", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "65536", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "67584", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "77824", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "72704", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "95232", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "117760", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "132096", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "206848", "xon":"19456"}}, + "spc2_headroom": {"pg_lossless_10000_5m_profile": {"size": "61440", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "61440", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "62464", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "62464", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "64512", "xon":"19456"}, + "pg_lossless_200000_5m_profile": {"size": "66560", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "63488", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "66560", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "70656", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "72704", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "83968", "xon":"19456"}, + "pg_lossless_200000_40m_profile": {"size": "106496", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "77824", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "103424", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "129024", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "146432", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "231424", "xon":"19456"}, + "pg_lossless_200000_300m_profile": {"size": "402432", "xon":"19456"}}, + "spc2_3800_headroom": {"pg_lossless_10000_5m_profile": {"size": "63488", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "67584", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "71680", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "73728", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "86016", "xon":"19456"}, + "pg_lossless_200000_5m_profile": {"size": "111616", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "65536", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "72704", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "78848", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "83968", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "106496", "xon":"19456"}, + "pg_lossless_200000_40m_profile": {"size": "151552", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "80896", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "109568", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "138240", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "157696", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "253952", "xon":"19456"}, + "pg_lossless_200000_300m_profile": {"size": "447488", "xon":"19456"}}, # Buffer profile info "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, From 2a7b8093e6998d626634fb683276f54fed7c8976 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Wed, 29 Jul 2020 06:10:17 +0000 Subject: [PATCH 08/10] Update the buffer setting for version 1.0.4 Signed-off-by: Stephen Sun --- scripts/mellanox_buffer_migrator.py | 159 +++++++++++++--------------- setup.py | 1 + 2 files changed, 76 insertions(+), 84 deletions(-) diff --git a/scripts/mellanox_buffer_migrator.py b/scripts/mellanox_buffer_migrator.py index 3ead240fa5..bb25a0eeb7 100644 --- a/scripts/mellanox_buffer_migrator.py +++ b/scripts/mellanox_buffer_migrator.py @@ -152,96 +152,87 @@ def __init__(self, configDB): "q_lossy_profile": {"dynamic_th": "3", "pool": "[BUFFER_POOL|egress_lossy_pool]", "size": "0"}} }, "version_1_0_4": { - # version 1.0.4 is introduced for: - # 1. Supporting single ingress buffer pool for MSFT SKUs - # 2. Updating the buffer settings - # - # Buffer pool migration control info - # No new buffer setting introduced. - # + # version 1.0.4 is introduced for updating the buffer settings "pool_configuration_list": ["spc1_t0_pool", "spc1_t1_pool", "spc2_t0_pool", "spc2_t1_pool", "spc2_3800_t0_pool", "spc2_3800_t1_pool"], # Buffer pool info for normal mode "buffer_pool_list" : ['ingress_lossless_pool', 'ingress_lossy_pool', 'egress_lossless_pool', 'egress_lossy_pool'], - "spc1_t0_pool": {"ingress_lossless_pool": { "size": "4579328", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "4579328", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "4579328", "type": "egress", "mode": "dynamic" } }, - "spc1_t1_pool": {"ingress_lossless_pool": { "size": "1998848", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "1998848", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "14024640", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "1998848", "type": "egress", "mode": "dynamic" } }, - - "spc2_t0_pool": {"ingress_lossless_pool": { "size": "14422016", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "14422016", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "14422016", "type": "egress", "mode": "dynamic" } }, - "spc2_t1_pool": {"ingress_lossless_pool": { "size": "8384512", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "8384512", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "8384512", "type": "egress", "mode": "dynamic" } }, - - "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "12980224", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "12980224", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "12980224", "type": "egress", "mode": "dynamic" } }, - "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "7127040", "type": "ingress", "mode": "dynamic" }, - "ingress_lossy_pool": { "size": "7127040", "type": "ingress", "mode": "dynamic" }, - "egress_lossless_pool": { "size": "34340832", "type": "egress", "mode": "dynamic" }, - "egress_lossy_pool": {"size": "7127040", "type": "egress", "mode": "dynamic" } }, + "spc1_t0_pool": {"ingress_lossless_pool": { "size": "4580864", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "4580864", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "13945824", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "4580864", "type": "egress", "mode": "dynamic" } }, + "spc1_t1_pool": {"ingress_lossless_pool": { "size": "3302912", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "3302912", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "13945824", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "3302912", "type": "egress", "mode": "dynamic" } }, + + "spc2_t0_pool": {"ingress_lossless_pool": { "size": "14542848", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "14542848", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34287552", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "14542848", "type": "egress", "mode": "dynamic" } }, + "spc2_t1_pool": {"ingress_lossless_pool": { "size": "11622400", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "11622400", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34287552", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "11622400", "type": "egress", "mode": "dynamic" } }, + + "spc2_3800_t0_pool": {"ingress_lossless_pool": { "size": "13924352", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "13924352", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34287552", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "13924352", "type": "egress", "mode": "dynamic" } }, + "spc2_3800_t1_pool": {"ingress_lossless_pool": { "size": "12457984", "type": "ingress", "mode": "dynamic" }, + "ingress_lossy_pool": { "size": "12457984", "type": "ingress", "mode": "dynamic" }, + "egress_lossless_pool": { "size": "34287552", "type": "egress", "mode": "dynamic" }, + "egress_lossy_pool": {"size": "12457984", "type": "egress", "mode": "dynamic" } }, # Lossless headroom info - "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "57344", "xon":"19456"}, - "pg_lossless_25000_5m_profile": {"size": "58368", "xon":"19456"}, - "pg_lossless_40000_5m_profile": {"size": "58368", "xon":"19456"}, - "pg_lossless_50000_5m_profile": {"size": "58368", "xon":"19456"}, - "pg_lossless_100000_5m_profile": {"size": "59392", "xon":"19456"}, - "pg_lossless_10000_40m_profile": {"size": "59392", "xon":"19456"}, - "pg_lossless_25000_40m_profile": {"size": "62464", "xon":"19456"}, - "pg_lossless_40000_40m_profile": {"size": "65536", "xon":"19456"}, - "pg_lossless_50000_40m_profile": {"size": "67584", "xon":"19456"}, - "pg_lossless_100000_40m_profile": {"size": "77824", "xon":"19456"}, - "pg_lossless_10000_300m_profile": {"size": "72704", "xon":"19456"}, - "pg_lossless_25000_300m_profile": {"size": "95232", "xon":"19456"}, - "pg_lossless_40000_300m_profile": {"size": "117760", "xon":"19456"}, - "pg_lossless_50000_300m_profile": {"size": "132096", "xon":"19456"}, - "pg_lossless_100000_300m_profile": {"size": "206848", "xon":"19456"}}, - "spc2_headroom": {"pg_lossless_10000_5m_profile": {"size": "61440", "xon":"19456"}, - "pg_lossless_25000_5m_profile": {"size": "61440", "xon":"19456"}, - "pg_lossless_40000_5m_profile": {"size": "62464", "xon":"19456"}, - "pg_lossless_50000_5m_profile": {"size": "62464", "xon":"19456"}, - "pg_lossless_100000_5m_profile": {"size": "64512", "xon":"19456"}, - "pg_lossless_200000_5m_profile": {"size": "66560", "xon":"19456"}, - "pg_lossless_10000_40m_profile": {"size": "63488", "xon":"19456"}, - "pg_lossless_25000_40m_profile": {"size": "66560", "xon":"19456"}, - "pg_lossless_40000_40m_profile": {"size": "70656", "xon":"19456"}, - "pg_lossless_50000_40m_profile": {"size": "72704", "xon":"19456"}, - "pg_lossless_100000_40m_profile": {"size": "83968", "xon":"19456"}, - "pg_lossless_200000_40m_profile": {"size": "106496", "xon":"19456"}, - "pg_lossless_10000_300m_profile": {"size": "77824", "xon":"19456"}, - "pg_lossless_25000_300m_profile": {"size": "103424", "xon":"19456"}, - "pg_lossless_40000_300m_profile": {"size": "129024", "xon":"19456"}, - "pg_lossless_50000_300m_profile": {"size": "146432", "xon":"19456"}, - "pg_lossless_100000_300m_profile": {"size": "231424", "xon":"19456"}, - "pg_lossless_200000_300m_profile": {"size": "402432", "xon":"19456"}}, - "spc2_3800_headroom": {"pg_lossless_10000_5m_profile": {"size": "63488", "xon":"19456"}, - "pg_lossless_25000_5m_profile": {"size": "67584", "xon":"19456"}, - "pg_lossless_40000_5m_profile": {"size": "71680", "xon":"19456"}, - "pg_lossless_50000_5m_profile": {"size": "73728", "xon":"19456"}, - "pg_lossless_100000_5m_profile": {"size": "86016", "xon":"19456"}, - "pg_lossless_200000_5m_profile": {"size": "111616", "xon":"19456"}, - "pg_lossless_10000_40m_profile": {"size": "65536", "xon":"19456"}, - "pg_lossless_25000_40m_profile": {"size": "72704", "xon":"19456"}, - "pg_lossless_40000_40m_profile": {"size": "78848", "xon":"19456"}, - "pg_lossless_50000_40m_profile": {"size": "83968", "xon":"19456"}, - "pg_lossless_100000_40m_profile": {"size": "106496", "xon":"19456"}, - "pg_lossless_200000_40m_profile": {"size": "151552", "xon":"19456"}, - "pg_lossless_10000_300m_profile": {"size": "80896", "xon":"19456"}, - "pg_lossless_25000_300m_profile": {"size": "109568", "xon":"19456"}, - "pg_lossless_40000_300m_profile": {"size": "138240", "xon":"19456"}, - "pg_lossless_50000_300m_profile": {"size": "157696", "xon":"19456"}, - "pg_lossless_100000_300m_profile": {"size": "253952", "xon":"19456"}, - "pg_lossless_200000_300m_profile": {"size": "447488", "xon":"19456"}}, + "spc1_headroom": {"pg_lossless_10000_5m_profile": {"size": "49152", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "49152", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "49152", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "49152", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "50176", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "49152", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "51200", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "52224", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "53248", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "56320", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "67584", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "78848", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "86016", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "123904", "xon":"19456"}}, + "spc2_headroom": {"pg_lossless_10000_5m_profile": {"size": "52224", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "52224", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "53248", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "53248", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "53248", "xon":"19456"}, + "pg_lossless_200000_5m_profile": {"size": "55296", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "53248", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "55296", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "57344", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "63488", "xon":"19456"}, + "pg_lossless_200000_40m_profile": {"size": "74752", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "60416", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "73728", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "86016", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "95232", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "137216", "xon":"19456"}, + "pg_lossless_200000_300m_profile": {"size": "223232", "xon":"19456"}}, + "spc2_3800_headroom": {"pg_lossless_10000_5m_profile": {"size": "54272", "xon":"19456"}, + "pg_lossless_25000_5m_profile": {"size": "58368", "xon":"19456"}, + "pg_lossless_40000_5m_profile": {"size": "61440", "xon":"19456"}, + "pg_lossless_50000_5m_profile": {"size": "64512", "xon":"19456"}, + "pg_lossless_100000_5m_profile": {"size": "75776", "xon":"19456"}, + "pg_lossless_10000_40m_profile": {"size": "55296", "xon":"19456"}, + "pg_lossless_25000_40m_profile": {"size": "60416", "xon":"19456"}, + "pg_lossless_40000_40m_profile": {"size": "65536", "xon":"19456"}, + "pg_lossless_50000_40m_profile": {"size": "69632", "xon":"19456"}, + "pg_lossless_100000_40m_profile": {"size": "86016", "xon":"19456"}, + "pg_lossless_10000_300m_profile": {"size": "63488", "xon":"19456"}, + "pg_lossless_25000_300m_profile": {"size": "78848", "xon":"19456"}, + "pg_lossless_40000_300m_profile": {"size": "95232", "xon":"19456"}, + "pg_lossless_50000_300m_profile": {"size": "106496", "xon":"19456"}, + "pg_lossless_100000_300m_profile": {"size": "159744", "xon":"19456"}}, # Buffer profile info "buffer_profiles": {"ingress_lossless_profile": {"dynamic_th": "7", "pool": "[BUFFER_POOL|ingress_lossless_pool]", "size": "0"}, diff --git a/setup.py b/setup.py index b593eedd48..aa3fb9a6aa 100644 --- a/setup.py +++ b/setup.py @@ -84,6 +84,7 @@ 'scripts/intfstat', 'scripts/lldpshow', 'scripts/log_ssd_health', + 'scripts/mellanox_buffer_migrator.py', 'scripts/mmuconfig', 'scripts/natclear', 'scripts/natconfig', From e256e93c9c6fb5ece87ec2fcb56262055efe69d0 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Wed, 5 Aug 2020 07:06:48 +0800 Subject: [PATCH 09/10] [mellanox_buffer_migrator] log identifier updated from 'db_migrator' to 'mellanox_buffer_identifier' Signed-off-by: Stephen Sun --- scripts/mellanox_buffer_migrator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mellanox_buffer_migrator.py b/scripts/mellanox_buffer_migrator.py index bb25a0eeb7..041c9bfe34 100644 --- a/scripts/mellanox_buffer_migrator.py +++ b/scripts/mellanox_buffer_migrator.py @@ -1,6 +1,6 @@ import syslog -SYSLOG_IDENTIFIER = 'db_migrator' +SYSLOG_IDENTIFIER = 'mellanox_buffer_migrator' def log_info(msg): syslog.openlog(SYSLOG_IDENTIFIER) From 66229e5a469efdaf624b2fa5c5fd83eac9961d46 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Tue, 11 Aug 2020 11:19:44 +0800 Subject: [PATCH 10/10] [db_migrator] Adjust db_migrator according to the latest master change Signed-off-by: Stephen Sun --- scripts/db_migrator.py | 6 ++-- scripts/mellanox_buffer_migrator.py | 45 ++++++++++------------------- 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/scripts/db_migrator.py b/scripts/db_migrator.py index 18dd822c16..7ac65bb041 100755 --- a/scripts/db_migrator.py +++ b/scripts/db_migrator.py @@ -48,7 +48,7 @@ def __init__(self, namespace, socket=None): if self.appDB is not None: self.appDB.connect(self.appDB.APPL_DB) - version_info = sonic_device_util.get_sonic_version_info() + version_info = device_info.get_sonic_version_info() asic_type = version_info.get('asic_type') self.asic_type = asic_type @@ -208,7 +208,9 @@ def version_1_0_4(self): """ Current latest version. Nothing to do here. """ - log_info('Handling version_1_0_4') + log.log_info('Handling version_1_0_4') + + return None def get_version(self): version = self.configDB.get_entry(self.TABLE_NAME, self.TABLE_KEY) diff --git a/scripts/mellanox_buffer_migrator.py b/scripts/mellanox_buffer_migrator.py index 041c9bfe34..bc8cc6382b 100644 --- a/scripts/mellanox_buffer_migrator.py +++ b/scripts/mellanox_buffer_migrator.py @@ -1,24 +1,9 @@ -import syslog +from sonic_py_common import logger SYSLOG_IDENTIFIER = 'mellanox_buffer_migrator' -def log_info(msg): - syslog.openlog(SYSLOG_IDENTIFIER) - syslog.syslog(syslog.LOG_INFO, msg) - syslog.closelog() - - -def log_notice(msg): - syslog.openlog(SYSLOG_IDENTIFIER) - syslog.syslog(syslog.LOG_NOTICE, msg) - syslog.closelog() - - -def log_error(msg): - syslog.openlog(SYSLOG_IDENTIFIER) - syslog.syslog(syslog.LOG_ERR, msg) - syslog.closelog() - +# Global logger instance +log = logger.Logger(SYSLOG_IDENTIFIER) class MellanoxBufferMigrator(): def __init__(self, configDB): @@ -274,43 +259,43 @@ def mlnx_migrate_buffer_pool_size(self, old_version, new_version): # Buffer pool numbers is different with default, don't need migrate if len(name_list_of_pools_in_db) != len(old_default_buffer_pools): - log_notice("Pools in CONFIG_DB ({}) don't match default ({}), skip buffer pool migration".format(name_list_of_pools_in_db, old_default_buffer_pools)) + log.log_notice("Pools in CONFIG_DB ({}) don't match default ({}), skip buffer pool migration".format(name_list_of_pools_in_db, old_default_buffer_pools)) return True # If some buffer pool is not default ones, don't need migrate for buffer_pool in old_default_buffer_pools: if buffer_pool not in name_list_of_pools_in_db: - log_notice("Default pool {} isn't in CONFIG_DB, skip buffer pool migration".format(buffer_pool)) + log.log_notice("Default pool {} isn't in CONFIG_DB, skip buffer pool migration".format(buffer_pool)) return True old_pool_configuration_list = self.mlnx_default_buffer_parameters(old_version, "pool_configuration_list") if not old_pool_configuration_list: - log_error("Trying to get pool configuration list or migration control failed, skip migration") + log.log_error("Trying to get pool configuration list or migration control failed, skip migration") return False new_config_name = None for old_config_name in old_pool_configuration_list: old_config = self.mlnx_default_buffer_parameters(old_version, old_config_name) - log_info("Checking old pool configuration {}".format(old_config_name)) + log.log_info("Checking old pool configuration {}".format(old_config_name)) if buffer_pool_conf_in_db == old_config: new_config_name = old_config_name - log_info("Old buffer pool configuration {} will be migrate to new one".format(old_config_name)) + log.log_info("Old buffer pool configuration {} will be migrate to new one".format(old_config_name)) break if not new_config_name: - log_notice("The configuration doesn't match any default configuration, migration for pool isn't required") + log.log_notice("The configuration doesn't match any default configuration, migration for pool isn't required") return True new_buffer_pool_conf = self.mlnx_default_buffer_parameters(new_version, new_config_name) if not new_buffer_pool_conf: - log_error("Can't find the buffer pool configuration for {} in {}".format(new_config_name, new_version)) + log.log_error("Can't find the buffer pool configuration for {} in {}".format(new_config_name, new_version)) return False # Migrate old buffer conf to latest. for pool in old_default_buffer_pools: self.configDB.set_entry('BUFFER_POOL', pool, new_buffer_pool_conf.get(pool)) - log_info("Successfully migrate mlnx buffer pool {} size to the latest.".format(pool)) + log.log_info("Successfully migrate mlnx buffer pool {} size to the latest.".format(pool)) return True @@ -322,7 +307,7 @@ def mlnx_migrate_buffer_profile(self, old_version, new_version): if 'localhost' in device_data.keys(): platform = device_data['localhost']['platform'] else: - log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") + log.log_error("Trying to get DEVICE_METADATA from DB but doesn't exist, skip migration") return False spc1_platforms = ["x86_64-mlnx_msn2010-r0", "x86_64-mlnx_msn2100-r0", "x86_64-mlnx_msn2410-r0", "x86_64-mlnx_msn2700-r0", "x86_64-mlnx_msn2740-r0"] @@ -365,16 +350,16 @@ def mlnx_migrate_buffer_profile(self, old_version, new_version): if not buffer_profile_new_configure: # Not providing new profile configure in new version means they do need to be changed - log_notice("No buffer profile in {}, don't need to migrate non-lossless profiles".format(new_version)) + log.log_notice("No buffer profile in {}, don't need to migrate non-lossless profiles".format(new_version)) return True for name, profile in buffer_profile_old_configure.iteritems(): if name in buffer_profile_conf.keys() and profile == buffer_profile_old_configure[name]: continue # return if any default profile isn't in cofiguration - log_notice("Default profile {} isn't in database or doesn't match default value".format(name)) + log.log_notice("Default profile {} isn't in database or doesn't match default value".format(name)) return True for name, profile in buffer_profile_new_configure.iteritems(): - log_info("Successfully migrate profile {}".format(name)) + log.log_info("Successfully migrate profile {}".format(name)) self.configDB.set_entry('BUFFER_PROFILE', name, profile)