Beinhaltet iowait die Wartezeit auf Netzwerkanrufe?

19

Die proc(5)Manpage beschreibt iowait als "Zeit, die auf den Abschluss von IO wartet". Dies wurde größtenteils in einer früheren Frage erklärt. Meine Frage ist: während des Wartens beim Blockieren von E / A, schließt dies das Warten auf das Blockieren von Netzwerk-E / A oder nur von lokalen E / A ein?

Alex J
quelle

Antworten:

20

Es bedeutet, auf "File I / O" zu warten, das heißt, jeden Lese- / Schreibaufruf für eine Datei, die sich im angehängten Dateisystem befindet, aber wahrscheinlich auch die Wartezeit für das Einlagern oder Laden von Seiten in den Speicher, z. B. Bibliotheken, nicht noch im Speicher oder Seiten mit mmap () -Dateien, die sich nicht im RAM befinden.

Das Warten auf IPC-Objekte wie Sockets, Pipes, ttys, select (), poll (), sleep (), pause () usw. wird NICHT gezählt.

Grundsätzlich ist es an der Zeit, dass ein Thread auf synchrones Disc-IO wartet. Während dieser Zeit kann er theoretisch ausgeführt werden, kann jedoch nicht, da einige Daten, die er benötigt, noch nicht vorhanden sind. Solche Prozesse werden normalerweise im "D" -Zustand angezeigt und tragen zum Lastdurchschnitt einer Box bei.

Verwirrenderweise denke ich, dass dies wahrscheinlich Datei-E / A auf Netzwerk-Dateisystemen beinhaltet.

MarkR
quelle
Da nfs IO auch File I / O ist, haben Sie wohl recht ;-)
wzzrd
Was ist mit Loopback-Schnittstellen? Wie geht Linux mit solchen Schnittstellen um?
Jalal Mostafa
3

Die iowait-Zeit ist die Zeit, die ein Prozess im Kernel-E / A-Scheduler verbringt. Soweit ich weiß, hat dies nichts mit Netzwerk-E / A zu tun, sofern es sich um reguläre Socket-Verbindungen handelt. Das Warten auf Netzwerkdateisysteme wie NFS wird jedoch einige Zeit in Anspruch nehmen.

Kamil Kisiel
quelle
2

Es tut.

Im Übrigen ist auf einem der von mir verwalteten Server ein hoher iowait-Wert zu verzeichnen, der durch eine fehlerhafte NFS-Bereitstellung verursacht wird.

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

Und schauen Sie sich die Prozesse im DStaat an.

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]
Sree
quelle
2

Das iowait beinhaltet die Netzwerkanrufe. Ich sage dies, weil NFS aus der Sicht des Kernels genauso viele lokale Linux-Dateisysteme behandelt:

$ 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,
};

Wenn Prozesse einen Write-On-Dateideskriptor 5 aufrufen, geschieht Folgendes:

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

Die Prozesse wissen also nicht, welche Art von Dateisystem verwendet wird (vfs magic), und das iowait ist dasselbe wie bei einem lokalen Dateisystem.

c4f4t0r
quelle