Skip to content

Commit 0282c25

Browse files
authored
[decode-syseeprom] Optimize startup performance with lazy imports (#4092)
The background is decode-syseeprom script had slow startup time due to expensive imports at the top level. - What I did Moved sonic_platform imports into the function that use it. For the command "show platform syseeprom", sonic_platform is never imported, saving ~200ms. - How I did it Implemented lazy import pattern for sonic_platform. Because TlvInfoDecoder still need to be used in command "show platform syseeprom", so still keep it. - How to verify it Before lazy import update: admin@sonic:~$ time show platform syseeprom ... real 0m2.064s user 0m1.242s sys 0m0.269s After lazy import update: admin@sonic:~$ time show platform syseeprom ... real 0m1.807s user 0m1.255s sys 0m0.285s Can save ~200ms.
1 parent 3035299 commit 0282c25

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

scripts/decode-syseeprom

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import re
1616
import sys
1717
import errno
1818

19-
import sonic_platform
2019
from sonic_platform_base.sonic_eeprom.eeprom_tlvinfo import TlvInfoDecoder
2120
from sonic_py_common import device_info, logger
2221
from swsscommon.swsscommon import SonicV2Connector
@@ -32,6 +31,7 @@ def instantiate_eeprom_object():
3231
eeprom = None
3332

3433
try:
34+
import sonic_platform
3535
eeprom = sonic_platform.platform.Platform().get_chassis().get_eeprom()
3636
except Exception as e:
3737
log.log_error('Failed to obtain EEPROM object due to {}'.format(repr(e)))

tests/decode_syseeprom_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,3 +212,9 @@ def test_support_platforms_not_db_based(self, mockDbBased, mockNotDbBased):
212212
def test_support_platforms_no_eeprom(self, mockDbBased, mockNotDbBased):
213213
ret = decode_syseeprom.main()
214214
assert ret == errno.ENODEV
215+
216+
def test_instantiate_eeprom_object(self):
217+
"""Test instantiate_eeprom_object to cover lazy import of sonic_platform"""
218+
eeprom = decode_syseeprom.instantiate_eeprom_object()
219+
# Since sonic_platform is mocked, this should return the mocked eeprom object
220+
assert eeprom is not None

0 commit comments

Comments
 (0)