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?

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.


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.


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]

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.