1919from dmi import DMI
2020
2121
22+ o_verbose = 0
23+
24+
2225S = cmn_json .system_from_json_file ()
2326C = S .CMNs [0 ]
2427
@@ -91,22 +94,27 @@ def cmn_frequency():
9194
9295class MemoryProperties :
9396 """
94- Get system memory properties by decoding DMI table
97+ Get system memory properties by decoding DMI table.
98+ Will generally require root privilege.
9599 """
96100 def __init__ (self ):
97101 self .speed = None # MT/s
98- self .n_channels = 0
102+ self .n_channels = None
99103 self .data_width = None
100104 try :
101105 for d in DMI ().memory ():
102106 self .speed = d .c_speed
103107 self .data_width = d .d_width
104108 # DDR5 have 2 channels
109+ if self .n_channels is None :
110+ self .n_channels = 0
105111 self .n_channels += (2 if d .mem_type >= 0x20 else 1 )
106112 except FileNotFoundError :
107113 pass
108114
109115 def total_bandwidth (self ):
116+ if self .data_width is None :
117+ return None
110118 n_bytes = self .data_width // 8
111119 return n_bytes * self .n_channels * (self .speed * 1000000 )
112120
@@ -176,8 +184,10 @@ def mem_bandwidth():
176184
177185if __name__ == "__main__" :
178186 import argparse
179- parser = argparse .ArgumentParser ()
187+ parser = argparse .ArgumentParser (description = "Show major system parameters" )
188+ parser .add_argument ("-v" , "--verbose" , action = "count" , default = 0 , help = "increase verbosity" )
180189 opts = parser .parse_args ()
190+ o_verbose = opts .verbose
181191 for (gname , group ) in groups :
182192 gname_printed = False
183193 for (pname , par ) in group :
@@ -189,6 +199,10 @@ def mem_bandwidth():
189199 par = par ()
190200 except PermissionError :
191201 par = "<no permission - rerun as sudo>"
202+ except Exception as e :
203+ par = None
204+ if o_verbose :
205+ par = "<exception in script: %s>" % (type (e ).__name__ )
192206 if par is None :
193207 par = "<not available>"
194208 print (" %30s: %s" % (pname , par ))
0 commit comments