From a096363b4848ee464beab34ac87f7afb0bf72171 Mon Sep 17 00:00:00 2001 From: "Richard.Yu" Date: Tue, 31 Jan 2023 12:23:03 +0800 Subject: [PATCH] [broadcom]: Set default SYNCD_SHM_SIZE for Broadcom XGS devices (#13297) After upgrade to brcmsai 8.1, the sdk running environment (container) recommended with mininum memory size as below TH4/TD4(ltsw) uses 512MB TH3 used 300MB Helix4/TD2/TD3/TH/TH 256 MB Base on this requirement, adjust the default syncd share memory size and set the memory size for special ACISs in platform_env.conf file for different types of Broadcom ASICs. How I did it Add the platform_env.conf file if none of it for broadcom platform (base on platform_asic file) Add the 'SYNCD_SHM_SIZE' and set the value for ltsw(TD4/TH4) devices set to 512M at least (update the platform_env.conf) for Td2/TH2/TH devices set to 256M for TH3 set to 300M verify How to verify it verify the image with code fix Check with UT Check on lab devices On a problematic device which cannot start successfully Run with the command $ cat /proc/linux-kernel-bde Broadcom Device Enumerator (linux-kernel-bde) Module parameters: maxpayload=128 usemsi=0 dmasize=32M himem=(null) himemaddr=(null) DMA Memory (kernel): 33554432 bytes, 0 used, 33554432 free, local mmap No devices found $ docker rm -f syncd syncd $ sudo /usr/bin/syncd.sh start Cannot get Broadcom Chip Id. Skip set SYNCD_SHM_SIZE. Creating new syncd container with HWSKU Force10-S6000 a4862129a7fea04f00ed71a88715eac65a41cdae51c3158f9cdd7de3ccc3dd31 $ docker inspect syncd | grep -i shm "ShmSize": 67108864, "Tag": "fix_8.1_shm_issue.67873427-9f7ca60a0e", On Normal device $ docker inspect syncd | grep -i shm "ShmSize": 268435456, "Tag": "fix_8.1_shm_issue.67873427-9f7ca60a0e" change the config syncd_shm.ini to b85=128m $ docker rm -f syncd syncd $ sudo /usr/bin/syncd.sh start Creating new syncd container with HWSKU Force10-S6000 3209ffc1e5a7224b99640eb9a286c4c7aa66a2e6a322be32fb7fe2113bb9524c $ docker inspect syncd | grep -i shm "ShmSize": 134217728, "Tag": "fix_8.1_shm_issue.67873427-9f7ca60a0e", change the config under /usr/share/sonic/device/x86_64-dell_s6000_s1220-r0/Force10-S6000/platform_env.conf and run command $ cat /usr/share/sonic/device/x86_64-dell_s6000_s1220-r0/platform_env.conf SYNCD_SHM_SIZE=300m $ sudo /usr/bin/syncd.sh start Creating new syncd container with HWSKU Force10-S6000 897f6fcde1f669ad2caab7da4326079abd7e811bf73f018c6dacc24cf24bfda5 $ docker inspect syncd | grep -i shm "ShmSize": 314572800, "Tag": "fix_8.1_shm_issue.67873427-9f7ca60a0e", Signed-off-by: richardyu-ms --- .../platform_env.conf | 2 +- .../platform_env.conf | 2 +- .../platform_env.conf | 2 +- .../platform_env.conf | 2 +- .../x86_64-broadcom_common/syncd_shm.ini | 14 +++++++++++ files/build_templates/docker_image_ctl.j2 | 23 +++++++++++++++++++ 6 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 device/broadcom/x86_64-broadcom_common/syncd_shm.ini diff --git a/device/arista/x86_64-arista_7050dx4_32s/platform_env.conf b/device/arista/x86_64-arista_7050dx4_32s/platform_env.conf index d72ffde2f2..dd7cf4fe01 100644 --- a/device/arista/x86_64-arista_7050dx4_32s/platform_env.conf +++ b/device/arista/x86_64-arista_7050dx4_32s/platform_env.conf @@ -1,2 +1,2 @@ -SYNCD_SHM_SIZE=256m +SYNCD_SHM_SIZE=512m is_ltsw_chip=1 diff --git a/device/arista/x86_64-arista_7050px4_32s/platform_env.conf b/device/arista/x86_64-arista_7050px4_32s/platform_env.conf index d72ffde2f2..dd7cf4fe01 100644 --- a/device/arista/x86_64-arista_7050px4_32s/platform_env.conf +++ b/device/arista/x86_64-arista_7050px4_32s/platform_env.conf @@ -1,2 +1,2 @@ -SYNCD_SHM_SIZE=256m +SYNCD_SHM_SIZE=512m is_ltsw_chip=1 diff --git a/device/arista/x86_64-arista_7060dx5_64s/platform_env.conf b/device/arista/x86_64-arista_7060dx5_64s/platform_env.conf index 77174634dc..dd7cf4fe01 100644 --- a/device/arista/x86_64-arista_7060dx5_64s/platform_env.conf +++ b/device/arista/x86_64-arista_7060dx5_64s/platform_env.conf @@ -1,2 +1,2 @@ -SYNCD_SHM_SIZE=128m +SYNCD_SHM_SIZE=512m is_ltsw_chip=1 diff --git a/device/arista/x86_64-arista_7060px5_64s/platform_env.conf b/device/arista/x86_64-arista_7060px5_64s/platform_env.conf index 77174634dc..dd7cf4fe01 100644 --- a/device/arista/x86_64-arista_7060px5_64s/platform_env.conf +++ b/device/arista/x86_64-arista_7060px5_64s/platform_env.conf @@ -1,2 +1,2 @@ -SYNCD_SHM_SIZE=128m +SYNCD_SHM_SIZE=512m is_ltsw_chip=1 diff --git a/device/broadcom/x86_64-broadcom_common/syncd_shm.ini b/device/broadcom/x86_64-broadcom_common/syncd_shm.ini new file mode 100644 index 0000000000..07a68ca0f3 --- /dev/null +++ b/device/broadcom/x86_64-broadcom_common/syncd_shm.ini @@ -0,0 +1,14 @@ +# This file contains the default memory size for each ASICs in broadcom platform +# Format: ASIC_ID=Memory_size +#b77->td3 +b77=256m +#b85->td2 +b85=256m +#b87->td3 +b87=512m +#b96->th +b96=256m +#b97->th2 +b97=256m +#b98->th3 +b98=300m diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index 6ba11ce650..3017565e30 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -315,6 +315,29 @@ start() { source $PLATFORM_ENV_CONF fi + {%- if sonic_asic_platform == "broadcom" %} + {%- if docker_container_name == "syncd" %} + # Set the SYNCD_SHM_SIZE if this variable not defined + BRCM_PLATFORM_COMMON_DIR=/usr/share/sonic/device/x86_64-broadcom_common + SYNCD_SHM_INI=$BRCM_PLATFORM_COMMON_DIR/syncd_shm.ini + + readline=$(grep '0x14e4' /proc/linux-kernel-bde) + bcm_chip_id=${readline#*0x14e4:0x} + bcm_chip_id=${bcm_chip_id::3} + + if [ -z "$SYNCD_SHM_SIZE" ]; then + if [ -z "$bcm_chip_id" ]; then + echo "Cannot get Broadcom Chip Id. Skip set SYNCD_SHM_SIZE." + elif [ -f "$SYNCD_SHM_INI" ] && [ "$(grep -m1 "^${bcm_chip_id}=" $SYNCD_SHM_INI)" ]; then + SYNCD_SHM_SIZE=`grep -m1 "^${bcm_chip_id}=" $SYNCD_SHM_INI | awk -F= '{print $2}'` + else + echo "Cannot get SYNCD_SHM_SIZE for chip: [${bcm_chip_id}] in $SYNCD_SHM_INI. Skip set SYNCD_SHM_SIZE." + fi + + fi + {%- endif %} + {%- endif %} + {%- if docker_container_name == "gbsyncd" %} GBSYNCD_CONF=/usr/share/sonic/device/$PLATFORM/gbsyncd.ini GBSYNCD_PLATFORM=gbsyncd-vs