Czy iowait obejmuje czas oczekiwania na połączenia sieciowe?

19

Strona proc(5)man opisuje iowait jako „czas oczekiwania na zakończenie IO”. Zostało to głównie wyjaśnione we wcześniejszym pytaniu. Moje pytanie brzmi: podczas oczekiwania na blokowanie IO, czy obejmuje to czekanie na blokowanie IO sieci, czy tylko lokalne IO?

Alex J.
źródło

Odpowiedzi:

20

Oznacza czekanie na „File I / O”, to znaczy każde wywołanie odczytu / zapisu dla pliku znajdującego się w zamontowanym systemie plików, ale prawdopodobnie również liczy czas oczekiwania na zamianę lub załadowanie stron do pamięci, np. Biblioteki nie w pamięci lub strony plików mmap (), których nie ma w ram.

NIE liczy czasu spędzonego na oczekiwaniu na obiekty IPC, takie jak gniazda, potoki, tty, select (), poll (), sleep (), pause () itp.

Zasadniczo nadszedł czas, aby wątek czekał na synchroniczne we / wy dysku - w tym czasie teoretycznie jest on w stanie działać, ale nie może, ponieważ niektórych potrzebnych danych jeszcze nie ma. Takie procesy zwykle pojawiają się w stanie „D” i przyczyniają się do średniej obciążenia skrzynki.

Mylące wydaje mi się, że prawdopodobnie dotyczy to we / wy plików w sieciowych systemach plików.

MarkR
źródło
Ponieważ nfs IO jest również plikiem I / O, myślę, że masz rację ;-)
wzzrd
Co z interfejsami sprzężenia zwrotnego? Jak linux traktuje tego rodzaju interfejsy?
Jalal Mostafa
3

czas iowait to czas, jaki proces spędza w harmonogramie we / wy jądra. O ile mi wiadomo, nie ma to nic wspólnego z I / O sieci, o ile idą zwykłe połączenia gniazd. Będzie to jednak obejmować czas oczekiwania na sieciowe systemy plików, takie jak NFS.

Kamil Kisiel
źródło
2

To robi.

Nawiasem mówiąc, na jednym z zarządzanych przeze mnie serwerów występuje wysoki poziom oczekiwania, spowodowany złym podłączeniem 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

I spójrz na procesy w Dpaństwie.

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
źródło
2

Iowait obejmuje połączenia sieciowe. Mówię to, ponieważ NFS jest obsługiwany przez wiele lokalnych systemów plików Linux z punktu widzenia jądra:

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

Gdy procesy wywołają deskryptor zapisu w pliku 5, wydarzy się coś takiego:

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

Tak więc procesy nie wiedzą, jakiego systemu plików używa (magia vfs), a iowait jest taki sam jak w lokalnym systemie plików.

c4f4t0r
źródło