Changeset 999

Show
Ignore:
Timestamp:
04/18/08 08:36:39 (13 years ago)
Author:
ppalmers
Message:

start of user diag (ticket #13)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/support/tools/listirqinfo.py

    r926 r999  
    2222import re 
    2323 
    24 VERSION="0.2" 
    25  
    26 class IRQ: 
    27         def __init__(self): 
    28                 self.number = None 
    29                 self.scheduling_class = None 
    30                 self.scheduling_priority = None 
    31                 self.process_id = None 
    32                 self.drivers = [] 
    33                 self.cpu_counts = [] 
    34         def __str__(self): 
    35                 s = " IRQ %4s: PID: %5s, count: %18s, Sched %4s (priority %4s), drivers: %s" % \ 
    36                     (self.number, self.process_id, self.cpu_counts, 
    37                      self.scheduling_class, self.scheduling_priority, 
    38                      self.drivers) 
    39                 return s 
    40  
    41 class SoftIRQ: 
    42         def __init__(self): 
    43                 self.name = None 
    44                 self.fullname = None 
    45                 self.scheduling_class = None 
    46                 self.scheduling_priority = None 
    47                 self.process_id = None 
    48                 self.cpu_counts = [] 
    49         def __str__(self): 
    50                 s = " SoftIRQ %12s: PID %6s, Sched %4s (priority %4s), name: %s" % \ 
    51                     (self.name, self.process_id ,self.scheduling_class, self.scheduling_priority, self.fullname) 
    52                 return s 
     24LISTIRQINFO_VERSION="0.3" 
    5325 
    5426def sortedDictValues(adict): 
     
    5729    return [value for key, value in items] 
    5830 
    59 print "" 
    60 print "Interrupt list utility " + VERSION 
    61 print "==========================" 
    62 print "(C) 2008 Pieter Palmers" 
    63 print "" 
     31class IRQ: 
     32    def __init__(self): 
     33        self.number = None 
     34        self.scheduling_class = None 
     35        self.scheduling_priority = None 
     36        self.process_id = None 
     37        self.drivers = [] 
     38        self.cpu_counts = [] 
     39    def __str__(self): 
     40        s = " IRQ %4s: PID: %5s, count: %18s, Sched %4s (priority %4s), drivers: %s" % \ 
     41            (self.number, self.process_id, self.cpu_counts, 
     42             self.scheduling_class, self.scheduling_priority, 
     43             self.drivers) 
     44        return s 
    6445 
    65 # get PID info 
    66 (exitstatus, outtext) = commands.getstatusoutput('ps -eLo pid,cmd,class,rtprio | grep IRQ') 
     46class SoftIRQ: 
     47    def __init__(self): 
     48        self.name = None 
     49        self.fullname = None 
     50        self.scheduling_class = None 
     51        self.scheduling_priority = None 
     52        self.process_id = None 
     53        self.cpu_counts = [] 
     54    def __str__(self): 
     55        s = " SoftIRQ %12s: PID %6s, Sched %4s (priority %4s), name: %s" % \ 
     56            (self.name, self.process_id ,self.scheduling_class, self.scheduling_priority, self.fullname) 
     57        return s 
    6758 
    68 rawstr = r"""([0-9]+) +\[IRQ-([0-9]+)\] +([A-Z]{2}) +([-0-9]+)""" 
    69 compile_obj = re.compile(rawstr) 
     59class IRQInfo: 
     60    def __init__(self): 
     61        self.softIRQs = {} 
     62        self.IRQs = {} 
    7063 
    71 IRQs = {} 
    72 for line in outtext.splitlines(): 
    73         match_obj = compile_obj.search(line) 
    74         if match_obj: 
    75                 irq = IRQ() 
    76                 irq.process_id = int(match_obj.group(1)) 
    77                 irq.number = int(match_obj.group(2)) 
    78                 irq.scheduling_class = match_obj.group(3) 
    79                 if match_obj.group(4) != '-': 
    80                         irq.scheduling_priority = int(match_obj.group(4)) 
    81                 else: 
    82                         irq.scheduling_priority = None 
    83                 IRQs[irq.number] = irq 
     64    def load(self): 
     65        # get PID info 
     66        (exitstatus, outtext) = commands.getstatusoutput('ps -eLo pid,cmd,class,rtprio | grep IRQ') 
     67         
     68        rawstr = r"""([0-9]+) +\[IRQ-([0-9]+)\] +([A-Z]{2}) +([-0-9]+)""" 
     69        compile_obj = re.compile(rawstr) 
     70         
     71        IRQs = {} 
     72        for line in outtext.splitlines(): 
     73            match_obj = compile_obj.search(line) 
     74            if match_obj: 
     75                irq = IRQ() 
     76                irq.process_id = int(match_obj.group(1)) 
     77                irq.number = int(match_obj.group(2)) 
     78                irq.scheduling_class = match_obj.group(3) 
     79                if match_obj.group(4) != '-': 
     80                    irq.scheduling_priority = int(match_obj.group(4)) 
     81                else: 
     82                    irq.scheduling_priority = None 
     83                IRQs[irq.number] = irq 
     84         
     85        (exitstatus, outtext) = commands.getstatusoutput('ps -eLo pid,cmd,class,rtprio | grep softirq') 
     86         
     87        rawstr = r"""([0-9]+) +\[softirq-(.*)\] +([A-Z]+) +([-0-9]+)""" 
     88        compile_obj = re.compile(rawstr) 
     89         
     90        softIRQs = {} 
     91        for line in outtext.splitlines(): 
     92            match_obj = compile_obj.search(line) 
     93            if match_obj: 
     94                irq = SoftIRQ() 
     95                irq.process_id = int(match_obj.group(1)) 
     96                irq.name = "%s-%s" % (match_obj.group(2),irq.process_id) 
     97                irq.fullname = "softirq-%s" % match_obj.group(2) 
     98                irq.scheduling_class = match_obj.group(3) 
     99                if match_obj.group(4) != '-': 
     100                    irq.scheduling_priority = int(match_obj.group(4)) 
     101                else: 
     102                    irq.scheduling_priority = None 
     103                softIRQs[irq.name] = irq 
     104         
     105        # get irq info 
     106        (exitstatus, outtext) = commands.getstatusoutput('cat /proc/interrupts') 
     107        lines = outtext.splitlines() 
     108        nb_cpus = len(lines[0].split()) 
     109        str0 = "([0-9]+): +"; 
     110        str_cpu = "([0-9]+) +" 
     111        str1="([\w\-]+) +([\w\-, :]+)" 
     112         
     113        rawstr = str0; 
     114        for i in range(nb_cpus): 
     115            rawstr += str_cpu 
     116        rawstr += str1 
     117        compile_obj = re.compile(rawstr) 
     118         
     119        for line in outtext.splitlines(): 
     120            match_obj = compile_obj.search(line) 
     121            if match_obj: 
     122                irq_number = int(match_obj.group(1)) 
     123                if not irq_number in IRQs.keys(): 
     124                    IRQs[irq_number] = IRQ() 
     125                    IRQs[irq_number].number = irq_number 
     126                 
     127                irq = IRQs[irq_number] 
     128                cpu_counts = [] 
     129                for i in range(nb_cpus): 
     130                    cpu_counts.append(int(match_obj.group(1 + 1))) 
     131                irq.cpu_counts = cpu_counts 
     132                irq.type = match_obj.group(nb_cpus + 2) 
     133                drivers = match_obj.group(nb_cpus + 3).split(',') 
     134                for driver in drivers: 
     135                    irq.drivers.append(driver.strip()) 
     136         
     137                IRQs[irq.number] = irq 
    84138 
    85 (exitstatus, outtext) = commands.getstatusoutput('ps -eLo pid,cmd,class,rtprio | grep softirq') 
     139        self.softIRQs = softIRQs 
     140        self.IRQs = IRQs 
    86141 
    87 rawstr = r"""([0-9]+) +\[softirq-(.*)\] +([A-Z]+) +([-0-9]+)""" 
    88 compile_obj = re.compile(rawstr) 
     142    def __str__(self): 
     143        s  = "" 
     144        s += "Hardware Interrupts:\n" 
     145        s += "--------------------\n" 
    89146 
    90 softIRQs = {} 
    91 for line in outtext.splitlines(): 
    92         match_obj = compile_obj.search(line) 
    93         if match_obj: 
    94                 irq = SoftIRQ() 
    95                 irq.process_id = int(match_obj.group(1)) 
    96                 irq.name = "%s-%s" % (match_obj.group(2),irq.process_id) 
    97                 irq.fullname = "softirq-%s" % match_obj.group(2) 
    98                 irq.scheduling_class = match_obj.group(3) 
    99                 if match_obj.group(4) != '-': 
    100                         irq.scheduling_priority = int(match_obj.group(4)) 
    101                 else: 
    102                         irq.scheduling_priority = None 
    103                 softIRQs[irq.name] = irq 
     147        for irq in sortedDictValues(self.IRQs): 
     148            s += str(irq) + "\n" 
    104149 
    105 # get irq info 
    106 (exitstatus, outtext) = commands.getstatusoutput('cat /proc/interrupts') 
    107 lines = outtext.splitlines() 
    108 nb_cpus = len(lines[0].split()) 
    109 str0 = "([0-9]+): +"; 
    110 str_cpu = "([0-9]+) +" 
    111 str1="([\w\-]+) +([\w\-, :]+)" 
     150        s += "\n" 
     151        s += "Software Interrupts:\n" 
     152        s += "--------------------\n" 
     153        for irq in sortedDictValues(self.softIRQs): 
     154            s += str(irq) + "\n" 
    112155 
    113 rawstr = str0; 
    114 for i in range(nb_cpus): 
    115         rawstr += str_cpu 
    116 rawstr += str1 
    117 compile_obj = re.compile(rawstr) 
     156        return s 
    118157 
    119 for line in outtext.splitlines(): 
    120         match_obj = compile_obj.search(line) 
    121         if match_obj: 
    122                 irq_number = int(match_obj.group(1)) 
    123                 if not irq_number in IRQs.keys(): 
    124                         IRQs[irq_number] = IRQ() 
    125                         IRQs[irq_number].number = irq_number 
    126                  
    127                 irq = IRQs[irq_number] 
    128                 cpu_counts = [] 
    129                 for i in range(nb_cpus): 
    130                         cpu_counts.append(int(match_obj.group(1 + 1))) 
    131                 irq.cpu_counts = cpu_counts 
    132                 irq.type = match_obj.group(nb_cpus + 2) 
    133                 drivers = match_obj.group(nb_cpus + 3).split(',') 
    134                 for driver in drivers: 
    135                         irq.drivers.append(driver.strip()) 
     158if __name__== '__main__': 
    136159 
    137                 IRQs[irq.number] = irq 
     160    print "" 
     161    print "Interrupt list utility " + LISTIRQINFO_VERSION 
     162    print "==========================" 
     163    print "(C) 2008 Pieter Palmers" 
     164    print "" 
     165     
     166    info = IRQInfo() 
    138167 
    139 print "Hardware Interrupts:" 
    140 print "--------------------" 
    141  
    142 for irq in sortedDictValues(IRQs): 
    143         print irq 
    144  
    145 print "" 
    146 print "Software Interrupts:" 
    147 print "--------------------" 
    148 for irq in sortedDictValues(softIRQs): 
    149         print irq 
    150          
    151 print "" 
     168    info.load() 
     169    print str(info) 
     170     
     171    print ""