2010-07-25 2 views
5

Я хотел бы отслеживать загрузку системы IO из программы python, обращаясь к статистике, подобной той, что указана в /proc/diskstats в linux (хотя, очевидно, библиотека с кросс-платформой будет замечательной). Есть ли существующая библиотека python, которую я мог бы использовать для запроса статистики IO на диске в Linux?Python библиотека для мониторинга/proc/diskstats?

ответ

10

В случае, если кто-то пытается разобрать/Proc/diskstats с Python, как Алекс предложил:

def diskstats_parse(dev=None): 
    file_path = '/proc/diskstats' 
    result = {} 

    # ref: http://lxr.osuosl.org/source/Documentation/iostats.txt 
    columns_disk = ['m', 'mm', 'dev', 'reads', 'rd_mrg', 'rd_sectors', 
        'ms_reading', 'writes', 'wr_mrg', 'wr_sectors', 
        'ms_writing', 'cur_ios', 'ms_doing_io', 'ms_weighted'] 

    columns_partition = ['m', 'mm', 'dev', 'reads', 'rd_sectors', 'writes', 'wr_sectors'] 

    lines = open(file_path, 'r').readlines() 
    for line in lines: 
     if line == '': continue 
     split = line.split() 
     if len(split) == len(columns_disk): 
      columns = columns_disk 
     elif len(split) == len(columns_partition): 
      columns = columns_partition 
     else: 
      # No match 
      continue 

     data = dict(zip(columns, split)) 
     if dev != None and dev != data['dev']: 
      continue 
     for key in data: 
      if key != 'dev': 
       data[key] = int(data[key]) 
     result[data['dev']] = data 

    return result 
2

Что не так с периодическим чтением /proc/diskstats, например. используя sched, чтобы повторять операцию каждую минуту или что-то еще? Linux procfs хорош именно потому, что он предоставляет текстовый способ для ядра предоставлять информацию для пользовательских программ, так как текст проще всего читать и использовать на огромном множестве языков ...!

1

Я не видел библиотеки, но вы можете проверить инструмент Python с именем «dstat» [1] для чтения статистики ядра Linux.

[1] - http://dag.wieers.com/home-made/dstat/

5

PSUtil обеспечивает ряд дисковых и фс статистике, а также кросс-платформенный.

Вы должны смотреть на psutil.disk_io_counters(perdisk=True), которая возвращает количество полезных метрик:

 
read_count: number of reads 
write_count: number of writes 
read_bytes: number of bytes read 
write_bytes: number of bytes written 
read_time: time spent reading from disk (in milliseconds) 
write_time: time spent writing to disk (in milliseconds) 

Эти показатели приходят от /proc/diskstats (на Linux)

+0

хотя psutil может использовать '/ Proc/diskstats' она имеет гораздо меньше метрики, чем raw '/ proc/diskstats'. Я лично сталкивался с этим вопросом, потому что мы уже использовали psutil, но, к сожалению, пропустили некоторые важные части. –

Смежные вопросы