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
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
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 ...!
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.
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)
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. –