web-dev-qa-db-fra.com

Est-ce que Ileait inclure le temps en attente d'appels réseau?

Le proc(5) MANPAGE décrit l'ioeil comme "Time attendre IO= à terminer". Ceci était principalement expliqué dans une question précédente. Ma question est la suivante: En attendant de bloquer IO, cela inclut-t-il en attente de bloquer le réseau IO ou seulement IO local?

20
Alex J

Cela signifie qu'attendre "fichier E/S", c'est-à-dire n'importe quel appel de lecture/écriture sur un fichier situé dans le système de fichiers monté, mais compte également du temps en attente d'échanger ou de dépendre des pages de chargement de la demande dans la mémoire, par exemple. Les bibliothèques ne sont pas encore en mémoire, ou des pages de fichiers D MMAP () qui ne sont pas en RAM.

Il ne compte pas le temps passé à attendre IPC objets tels que des prises, des tuyaux, des tys, de sélectionner (), du sondage (), une pause (), une pause (), etc.

Fondamentalement, il est temps qu'un fil dépense en attente de disc-io synchrone - pendant ce temps, il est théoriquement capable de fonctionner mais ne peut pas parce que certaines données dont il a besoin n'est pas encore là. De tels procédés apparaissent généralement dans l'état "D" et contribuent à la moyenne de la charge d'une boîte.

Confondamment, je pense que cela inclut probablement le fichier IO sur les systèmes de fichiers réseau.

21
MarkR

Cela fait.

Incidemment, l'un des serveurs que je gère consiste à vivre à High Iowait qui est causé par un mauvais montage NFS.

top - 06:19:03 up 14 days, 10:15,  3 users,  load average: 9.67, 11.83, 12.31
Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.2%sy,  0.0%ni,  0.0%id, 99.7%wa,  0.0%hi,  0.0%si,  0.0%st

top - 06:22:55 up 14 days, 10:19,  3 users,  load average: 10.58, 11.13, 11.89
Tasks: 137 total,   1 running, 136 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni,  0.0%id, 99.8%wa,  0.0%hi,  0.0%si,  0.0%st

Et regardez les processus de l'état D.

root     27011  0.0  0.0      0     0 ?        S    03:12   0:00 [nfsd4]
root     27012  0.0  0.0      0     0 ?        S    03:12   0:00 [nfsd4_callbacks]
root     27013  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]
root     27014  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]
root     27015  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]
root     27016  0.0  0.0      0     0 ?        D    03:12   0:01 [nfsd]
2
Sree

L'Iowait inclut les appels réseau. Je dis cela, car NFS est géré autant de systèmes de fichiers locaux Linux du point de vue du noyau:

$ vim linux-2.6.38.2/fs/nfs/file.c 

const struct file_operations nfs_file_operations = {
        .llseek         = nfs_file_llseek,
        .read           = do_sync_read,
        .write          = do_sync_write,
        .aio_read       = nfs_file_read,
        .aio_write      = nfs_file_write,
        .mmap           = nfs_file_mmap,
        .open           = nfs_file_open,
        .flush          = nfs_file_flush,
        .release        = nfs_file_release,
        .fsync          = nfs_file_fsync,
        .lock           = nfs_lock,
        .flock          = nfs_flock,
        .splice_read    = nfs_file_splice_read,
        .splice_write   = nfs_file_splice_write,
        .check_flags    = nfs_check_flags,
        .setlease       = nfs_setlease,
};

Lorsque les processus appellent une écriture sur le descripteur de fichier 5, quelque chose comme cela se produira:

files->fd_array[5]->f_op->write(argv.......)

Ainsi, les processus ne sillent pas quel type de système de fichiers utilise (magie VFS) et l'IOWAIT est le même à un système de fichiers local.

2
c4f4t0r