From cfb9db951084524ca8bb66ce05583a4eaa3383a6 Mon Sep 17 00:00:00 2001 From: Mac Mollison Date: Wed, 10 Feb 2010 00:24:14 -0500 Subject: Add sanitizer module to sanitize goofy sched_trace input --- run.py | 2 ++ sanitizer.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 sanitizer.py diff --git a/run.py b/run.py index 3d7e2ab..4db5c0a 100755 --- a/run.py +++ b/run.py @@ -13,6 +13,7 @@ ############################################################################### import trace_reader +import sanitizer import stdout_printer ############################################################################### @@ -31,4 +32,5 @@ g6 = [ ############################################################################### stream = trace_reader.trace_reader(g6) +stream = sanitizer.sanitizer(stream) stdout_printer.stdout_printer(stream) diff --git a/sanitizer.py b/sanitizer.py new file mode 100644 index 0000000..d1764dd --- /dev/null +++ b/sanitizer.py @@ -0,0 +1,46 @@ +############################################################################### +# Description +############################################################################### + +# Sanitize input. (There are a number of goofy issues with the sched_trace +# output.) + +############################################################################### +# Public functions +############################################################################### + +def sanitizer(stream): + jobs_released = [] + for record in stream: + + # All records with job < 2 are garbage + if record.job < 2: + continue + + # Some records with job == 2 are garbage + if record.job==2: + + # There is a duplicate release of every job 2 + # This will throw away the second one + if (record.type_name == 'release' and + (record.pid,record.job) in jobs_released): + continue + + # Job 2 has a resume that is garbage + if record.type_name == 'resume': + continue + + # Record job releases. This helps with filtering out + # the second release of job 2 and renumbering final switch_aways + # (see below). + if record.type_name == 'release': + jobs_released.append((record.pid,record.job)) + + # By default, the switch_away for a job (after it has completed) + # is maked as being for job+1, which has not been released. + # Correct this. + if record.type_name == 'switch_away': + if (record.pid,record.job) not in jobs_released: + record.job -= 1 + + yield record -- cgit v1.2.2