Řešení 1:
Znamená to čekání na "File I/O", to jest jakékoli volání pro čtení/zápis na soubor, který je v připojeném souborovém systému, ale také pravděpodobně počítá čas čekání na odložení nebo vyžádané načtení stránek do paměti, např. knihovny, které ještě nejsou v paměti, nebo stránky souborů mmap()'d, které nejsou v paměti RAM.
NEPOČÍTÁ čas strávený čekáním na IPC objekty, jako jsou sockety, roury, ttys, select(), poll(), sleep(), pause() atd.
V zásadě jde o čas, který vlákno stráví čekáním na synchronní disk-IO - během této doby je teoreticky schopno běžet, ale nemůže, protože některá data, která potřebuje, tam ještě nejsou. Takové procesy se obvykle zobrazují ve stavu „D“ a přispívají k průměrnému zatížení krabice.
Je matoucí, že si myslím, že to pravděpodobně zahrnuje IO souboru na síťových souborových systémech.
Řešení 2:
doba iowait je doba, kterou proces stráví v plánovači I/O jádra. Pokud vím, nemá to nic společného se síťovými I/O, pokud jde o běžná soketová připojení. Bude však zahrnovat čas strávený čekáním na síťové systémy souborů, jako je NFS.
Řešení 3:
To ano.
Mimochodem, jeden ze serverů, které spravuji, má vysokou iowait, což je způsobeno špatným připojením 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
A podívejte se na procesy v D
Stát.
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]
Řešení 4:
iowait zahrnuje síťová volání. Říkám to, protože NFS je z pohledu jádra zpracováváno jako mnoho linuxových lokálních souborových systémů:
$ 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,
};
Když procesy volají zápis na deskriptor souboru 5, stane se něco takového:
files->fd_array[5]->f_op->write(argv.......)
Procesy tedy nevědí, jaký typ souborového systému používají (vfs magic) a iowait je stejný jako u lokálního souborového systému.