2010-07-25 21 views
5

Je voudrais surveiller la charge d'E/S du système à partir d'un programme python, en accédant à des statistiques similaires à celles fournies dans /proc/diskstats sous linux (bien qu'une bibliothèque multiplateforme soit évidemment une bonne solution). Existe-t-il une bibliothèque python existante que je pourrais utiliser pour interroger les statistiques d'E/S disque sur Linux?Bibliothèque Python pour surveiller/proc/diskstats?

Répondre

10

Dans le cas où quelqu'un d'autre essaie d'analyser/proc/diskstats avec Python comme Alex suggéré:

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

Qu'est-ce qui ne va pas avec simplement la lecture périodique de /proc/diskstats, par ex. en utilisant sched pour répéter l'opération chaque minute ou quoi que ce soit? Le procfs de Linux est très bien car il fournit au noyau un moyen textuel de fournir des informations aux programmes de l'utilisateur, car le texte est plus facile à lire et à utiliser dans une grande variété de langues ...!

1

Je n'ai pas vu une bibliothèque, mais vous pouvez vouloir consulter l'outil Python nommé "dstat" [1] pour lire les statistiques du noyau Linux.

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

5

PSUtil fournit un certain nombre de statistiques de disque et fs et est également multi-plateforme.

Vous devriez regarder psutil.disk_io_counters(perdisk=True) qui retourne un certain nombre de mesures utiles:

 
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) 

Ces mesures proviennent de /proc/diskstats (sous Linux)

+0

bien psutil peut utiliser '/ proc/diskstats' il a beaucoup moins métriques que brut '/ proc/diskstats'. Je rencontre personnellement cette question, car nous utilisons déjà psutil, mais nous manquons malheureusement des parties importantes. –