Skip to content

Commit c9ca57e

Browse files
committed
Simplyfing the average calculation
1 parent 7e5da09 commit c9ca57e

File tree

1 file changed

+10
-22
lines changed

1 file changed

+10
-22
lines changed

chipsec/modules/tools/smm/smm_ptr.py

+10-22
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,6 @@ def clear(self):
251251
self.max = smi_info(0)
252252
self.min = smi_info(2**32-1)
253253
self.outlier = smi_info(0)
254-
self.acc_smi_duration = 0
255-
self.acc_smi_num = 0
256254
self.avg_smi_duration = 0
257255
self.avg_smi_num = 0
258256
self.outliers = 0
@@ -271,8 +269,6 @@ def add(self, duration, time, code, data, gprs, confirmed=False):
271269
outlier = self.is_outlier(duration)
272270
self.records['deltas'].append(duration)
273271
self.records['times'].append(time)
274-
self.acc_smi_duration += duration
275-
self.acc_smi_num += 1
276272
self.update_stdev(duration)
277273
if not outlier:
278274
if duration > self.max.duration:
@@ -285,21 +281,15 @@ def add(self, duration, time, code, data, gprs, confirmed=False):
285281
self.outlier.update(duration, code, data, gprs.copy())
286282
self.confirmed = confirmed
287283

288-
def avg(self):
289-
if self.avg_smi_num or self.acc_smi_num:
290-
self.avg_smi_duration = ((self.avg_smi_duration * self.avg_smi_num) + self.acc_smi_duration) / (self.avg_smi_num + self.acc_smi_num)
291-
self.avg_smi_num += self.acc_smi_num
292-
self.hist_smi_duration = ((self.hist_smi_duration * self.hist_smi_num) + self.acc_smi_duration) / (self.hist_smi_num + self.acc_smi_num)
293-
self.hist_smi_num += self.acc_smi_num
294-
self.acc_smi_duration = 0
295-
self.acc_smi_num = 0
296-
297-
def update_stdev(self, value):
298-
difference = value - self.avg_smi_duration
299-
difference_hist = value - self.hist_smi_duration
300-
self.avg()
301-
self.m2 += difference * (value - self.avg_smi_duration)
302-
self.m2_hist += difference_hist * (value - self.hist_smi_duration)
284+
def update_stdev(self, duration):
285+
self.avg_smi_num += 1
286+
self.hist_smi_num += 1
287+
difference = duration - self.avg_smi_duration
288+
difference_hist = duration - self.hist_smi_duration
289+
self.avg_smi_duration += difference / self.avg_smi_num
290+
self.hist_smi_duration += difference_hist / self.hist_smi_num
291+
self.m2 += difference * (duration - self.avg_smi_duration)
292+
self.m2_hist += difference_hist * (duration - self.hist_smi_duration)
303293
variance = self.m2 / self.avg_smi_num
304294
variance_hist = self.m2_hist / self.hist_smi_num
305295
self.stdev = math.sqrt(variance)
@@ -308,8 +298,6 @@ def update_stdev(self, value):
308298
def update_calibration(self, duration):
309299
if not self.needs_calibration:
310300
return
311-
self.acc_smi_duration += duration
312-
self.acc_smi_num += 1
313301
self.update_stdev(duration)
314302
self.calib_samples += 1
315303
if self.calib_samples >= SCAN_CALIB_SAMPLES:
@@ -354,7 +342,7 @@ def get_total_outliers(self):
354342

355343
def get_info(self):
356344
avg = self.avg_smi_duration or self.hist_smi_duration
357-
info = f"average {round(avg)} checked {self.avg_smi_num + self.outliers}"
345+
info = f"average {round(avg)} stdev {self.stdev} checked {self.avg_smi_num + self.outliers}"
358346
if self.outliers:
359347
info += f"\n Identified outlier: {self.outlier.get_info()}"
360348
info += f"\nDeltas: {self.records}"

0 commit comments

Comments
 (0)