Beispiel #1
0
    def handle_etw_trace(self, etw_file):
        sea.prepare_environ(self.args)
        sea_itf = sea.ITT('tools')
        if sea_itf.can_parse_standard_source():
            save = (self.args.input, self.args.output, self.args.trace)
            (self.args.input, self.args.output,
             self.args.trace) = (etw_file, etw_file, None)
            res = get_importers()['etl'](self.args)
            (self.args.input, self.args.output, self.args.trace) = save
        else:
            etw_xml = etw_file + ".xml"
            proc = subprocess.Popen(
                'tracerpt "%s" -of XML -rts -lr -o "%s" -y' %
                (etw_file, etw_xml),
                shell=True,
                stderr=subprocess.PIPE)
            (out, err) = proc.communicate()
            if err:
                return None

            save = (self.args.input, self.args.output, self.args.trace)
            (self.args.input, self.args.output,
             self.args.trace) = (etw_xml, etw_xml, None)
            res = get_importers()['xml'](self.args)
            (self.args.input, self.args.output, self.args.trace) = save

        self.targets += res
        return res
Beispiel #2
0
 def handle_dtrace(self, trace):
     save = (self.args.input, self.args.output, self.args.trace)
     (self.args.input, self.args.output, self.args.trace) = (trace, trace, None)
     res = get_importers()['dtrace'](self.args)
     (self.args.input, self.args.output, self.args.trace) = save
     self.targets += res
     return res
Beispiel #3
0
 def handle_dtrace(self, trace):
     save = (self.args.input, self.args.output, self.args.trace)
     (self.args.input, self.args.output, self.args.trace) = (trace, trace, None)
     res = get_importers()['dtrace'](self.args)
     (self.args.input, self.args.output, self.args.trace) = save
     self.targets += res
     return res
Beispiel #4
0
    def __init__(self, args, gt, callbacks):
        GPUQueue.__init__(self, args, callbacks)
        self.cs = None
        self.ignore_gpu = True  # workaround for incomplete dtrace ring
        self.cpu_packets = {}
        self.gpu_packets = {}
        self.thread_names = {}
        self.gpu_transition = {}
        self.prepares = {}
        self.pid_names = {}
        self.tid_map = {}
        self.event_tracker = {
        }  # key is ring+channel => key is tracking stamp => [events]
        self.contexts = {u'0': 'System'}  # id to type map
        callbacks.set_process_name(-1, 'GPU Contexts')
        self.stat = {}

        self.decoders = []
        decoders = get_decoders()
        if 'dtrace' in decoders:
            for decoder in decoders['dtrace']:
                self.decoders.append(decoder(args, callbacks))

        importers = get_importers()
        self.read_system_info()
        self.collected_domains = set()
Beispiel #5
0
 def handle_perf(self, trace):
     save = (self.args.input, self.args.output, self.args.trace)
     (self.args.input, self.args.output, self.args.trace) = (trace, trace, None)
     self.args.sync = [0, 0, 1. / 1000]  # perf ticks in ftrace time units
     res = get_importers()['perf'](self.args)
     (self.args.input, self.args.output, self.args.trace) = save
     self.targets += res
     return res
Beispiel #6
0
    def handle_etw_trace(self, etw_file):
        etw_xml = etw_file + ".xml"
        proc = subprocess.Popen('tracerpt "%s" -of XML -rts -lr -o "%s" -y' % (etw_file, etw_xml), shell=True, stderr=subprocess.PIPE)
        (out, err) = proc.communicate()
        if err:
            return None

        save = (self.args.input, self.args.output, self.args.trace)
        (self.args.input, self.args.output, self.args.trace) = (etw_xml, etw_xml, None)
        res = get_importers()['xml'](self.args)
        (self.args.input, self.args.output, self.args.trace) = save

        self.targets += res
        return res
Beispiel #7
0
    def handle_etw_trace(self, etw_file):
        etw_xml = etw_file + ".xml"
        proc = subprocess.Popen('tracerpt "%s" -of XML -rts -lr -o "%s" -y' % (etw_file, etw_xml), shell=True, stderr=subprocess.PIPE)
        (out, err) = proc.communicate()
        if err:
            return None

        save = (self.args.input, self.args.output, self.args.trace)
        (self.args.input, self.args.output, self.args.trace) = (etw_xml, etw_xml, None)
        res = get_importers()['xml'](self.args)
        (self.args.input, self.args.output, self.args.trace) = save

        self.targets += res
        return res
Beispiel #8
0
    def handle_ftrace(self, trace):
        time_sync = []
        self.targets.append(self.args.output + '.cut.ftrace')
        with open(self.targets[-1], 'w') as file:
            for line in GoogleTrace.read_ftrace_lines(trace, time_sync):
                file.write(line)
        sync = self.apply_time_sync(time_sync)

        save = (self.args.input, self.args.output, self.args.trace)
        (self.args.input, self.args.output, self.args.trace) = (trace, trace, None)
        self.args.sync = [0, 0, 1. / 1000]  # since ftrace is already set as time sync the events coming from it shall have source time
        res = get_importers()['ftrace'](self.args)
        self.args.sync = sync
        (self.args.input, self.args.output, self.args.trace) = save

        self.set_sync(*sync)
        self.targets += res
Beispiel #9
0
    def handle_ftrace(self, trace):
        time_sync = []
        self.targets.append(self.args.output + '.cut.ftrace')
        with open(self.targets[-1], 'w') as file:
            for line in GoogleTrace.read_ftrace_lines(trace, time_sync):
                file.write(line)
        sync = self.apply_time_sync(time_sync)

        save = (self.args.input, self.args.output, self.args.trace)
        (self.args.input, self.args.output, self.args.trace) = (trace, trace, None)
        self.args.sync = [0, 0, 1. / 1000]  # since ftrace is already set as time sync the events coming from it shall have source time
        res = get_importers()['ftrace'](self.args)
        self.args.sync = sync
        (self.args.input, self.args.output, self.args.trace) = save

        self.set_sync(*sync)
        self.targets += res