############################################################################### # Description ############################################################################### # Prints records to standard out ############################################################################### # Public functions ############################################################################### def stdout_printer(stream,csize): for record in stream: if record.record_type == "event": _print_event(csize,record) elif record.record_type == "error" and record.type_name == 'Task_inversion_start': _print_inversion_start(csize,record,"Task_") elif record.record_type == "error" and record.type_name == 'Task_inversion_end': _print_inversion_end(csize,record,"Task_") elif record.record_type == "error" and record.type_name == 'Tasklet_inversion_start': _print_inversion_start(csize,record,"Tasklet_") elif record.record_type == "error" and record.type_name == 'Tasklet_inversion_end': _print_inversion_end(csize,record,"Tasklet_") elif record.record_type == "error" and record.type_name == 'Work_Item_inversion_start': _print_inversion_start(csize,record,"Work_Item_") elif record.record_type == "error" and record.type_name == 'Work_Item_inversion_end': _print_inversion_end(csize,record,"Work_Item_") elif record.record_type == "error" and record.type_name == 'Tasklet_simultaneous_start': _print_simultaneous_start(csize,record,"Tasklet_") elif record.record_type == "error" and record.type_name == 'Tasklet_simultaneous_end': _print_simultaneous_end(csize,record,"Tasklet_") elif record.record_type == "error" and record.type_name == 'Work_Item_simultaneous_start': _print_simultaneous_start(csize,record,"Work_Item_") elif record.record_type == "error" and record.type_name == 'Work_Item_simultaneous_end': _print_simultaneous_end(csize,record,"Work_Item_") else: continue print "" ############################################################################### # Private functions ############################################################################### def _print_event(csize,record): print "Event ID: %d" % (record.id) print "Job: %d.%d" % (record.pid,record.job) print "CPU(cluster): %d(%d)" %(record.cpu, int(record.cpu/csize)) if record.type_name == "release": print "Deadline: %d" % (record.deadline) elif record.type_name == 'tasklet_begin' or record.type_name == 'work_begin': print "Handling Klit thrread: %d" % (record.exe_pid) print "Type: %s" % (record.type_name) print "Time: %d" % (record.when) def _print_inversion_start(csize,record,pi_type): print "Type: %s" % (pi_type+"Inversion start") print "Inversion Record IDs: (%d, U)" % (record.id) print "Triggering Event IDs: (%d, U)" % (record.triggering_event_id) print "Time: %d" % (record.job.inversion_start) print "Job: %d.%d" % (record.job.pid,record.job.job) print "Deadline: %d" % (record.job.deadline) print "Cluster: %d" % (record.job.cluster) if pi_type == "Tasklet_" or pi_type == "Work_Item_": print "Handling Klit thread: %d" % (record.job.exe_pid) print "Off CPU: ", for job in record.off_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print print "On CPU: ", for job in record.on_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print #newline def _print_inversion_end(csize,record,pi_type): print "Type: %s" % (pi_type+"Inversion end") print "Inversion record IDs: (%d, %d)" % (record.inversion_start_id, record.id) print("Triggering Event IDs: (%d, %d)" % (record.inversion_start_triggering_event_id, record.triggering_event_id)) print "Time: %d" % (record.job.inversion_end) # NOTE: Here, we assume nanoseconds as the time unit. # May have to be changed in the future. print "Duration: %f ms" % ( float(record.job.inversion_end - record.job.inversion_start)/1000000) print "Job: %d.%d" % (record.job.pid,record.job.job) print "Deadline: %d" % (record.job.deadline) print "Cluster: %d" % (record.job.cluster) if pi_type == "Tasklet_" or pi_type == "Work_Item_": print "Handling Klit thread: %d" % (record.job.exe_pid) print "Off CPU: ", for job in record.off_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print print "On CPU: ", for job in record.on_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print #newline def _print_simultaneous_start(csize,record,irq_type): print "Type: %s" % (irq_type+"Simultaneous start") print "Inversion Record IDs: (%d, U)" % (record.id) print "Triggering Event IDs: (%d, U)" % (record.triggering_event_id) print "Time: %d" % (record.job.simultaneous_start) print "Job: %d.%d" % (record.job.pid,record.job.job) print "Deadline: %d" % (record.job.deadline) print "Cluster: %d" % (record.job.cluster) print "Handling Klit thread: %d" % (record.job.exe_pid) print "Off CPU: ", for job in record.off_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print print "On CPU: ", for job in record.on_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print #newline def _print_simultaneous_end(csize,record,irq_type): print "Type: %s" % (irq_type+"Simultaneous end") print "Inversion record IDs: (%d, %d)" % (record.simultaneous_start_id, record.id) print("Triggering Event IDs: (%d, %d)" % (record.simultaneous_start_triggering_event_id, record.triggering_event_id)) print "Time: %d" % (record.job.simultaneous_end) # NOTE: Here, we assume nanoseconds as the time unit. # May have to be changed in the future. print "Duration: %f ms" % ( float(record.job.simultaneous_end - record.job.simultaneous_start)/1000000) print "Job: %d.%d" % (record.job.pid,record.job.job) print "Deadline: %d" % (record.job.deadline) print "Cluster: %d" % (record.job.cluster) print "Handling Klit thread: %d" % (record.job.exe_pid) print "Off CPU: ", for job in record.off_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print print "On CPU: ", for job in record.on_cpu: if job.cluster==record.job.cluster : print str(job) + " ", print #newline