2010-07-25 33 views
5

Tôi muốn theo dõi tải hệ thống IO từ một chương trình python, truy cập số liệu thống kê tương tự như được cung cấp trong /proc/diskstats trong linux (mặc dù rõ ràng là một thư viện đa nền tảng sẽ là tuyệt vời). Có một thư viện python hiện có mà tôi có thể sử dụng để truy vấn số liệu thống kê đĩa IO trên Linux?Thư viện Python để theo dõi/proc/diskstats?

Trả lời

10

Trong trường hợp bất cứ ai khác đang cố gắng để phân tích/proc/diskstats với Python như Alex gợi ý:

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

Có gì sai khi chỉ đọc định kỳ /proc/diskstats, ví dụ: sử dụng sched để lặp lại thao tác mỗi phút hoặc bất cứ thứ gì? Linux procfs là tốt đẹp chính xác bởi vì nó cung cấp một cách văn bản cho hạt nhân để cung cấp thông tin cho các chương trình userland, như văn bản là dễ đọc và sử dụng trong một loạt lớn các ngôn ngữ ...!

1

Tôi chưa thấy thư viện, nhưng bạn có thể muốn xem công cụ Python có tên "dstat" [1] để đọc số liệu thống kê hạt nhân Linux.

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

5

PSUtil cung cấp một số số liệu thống kê đĩa và fs và cũng là đa nền tảng.

Bạn nên nhìn vào psutil.disk_io_counters(perdisk=True) mà trả về một số số liệu hữu ích:

 
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) 

Những số liệu đến từ /proc/diskstats (trên Linux)

+0

mặc dù psutil có thể sử dụng '/ proc/diskstats' nó có ít hơn nhiều số liệu so với nguyên '/ proc/diskstats'. Cá nhân tôi đi qua câu hỏi này, bởi vì chúng tôi đã sử dụng psutil, nhưng buồn bã bỏ lỡ một số phần quan trọng. –

Các vấn đề liên quan