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

5
kdt 25 Июл 2010 в 16:21

4 ответа

Лучший ответ

В случае, если кто-то еще пытается проанализировать / 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
10
om-nom-nom 25 Ноя 2013 в 09:39

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

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

1
Vahid Pazirandeh 16 Авг 2010 в 19:33

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

2
Alex Martelli 25 Июл 2010 в 16:04

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)

5
Matt 21 Мар 2012 в 15:42