Solusi 1:
Itu berarti menunggu "File I/O", artinya, panggilan baca/tulis apa pun pada file yang ada di sistem file yang terpasang, tetapi juga mungkin menghitung waktu menunggu untuk menukar atau memuat halaman permintaan ke dalam memori, mis. perpustakaan belum ada di memori, atau halaman file mmap()'d yang tidak ada di ram.
TIDAK menghitung waktu yang dihabiskan untuk menunggu objek IPC seperti soket, pipa, tty, pilih(), poll(), tidur(), jeda() dll.
Pada dasarnya ini adalah waktu yang dihabiskan oleh utas untuk menunggu disc-IO sinkron - selama ini secara teoritis dapat berjalan tetapi tidak bisa karena beberapa data yang diperlukan belum ada. Proses seperti itu biasanya muncul dalam status "D" dan berkontribusi pada rata-rata pemuatan sebuah kotak.
Yang membingungkan saya pikir ini mungkin termasuk file IO pada sistem file jaringan.
Solusi 2:
waktu iowait adalah jumlah waktu yang dihabiskan proses di penjadwal kernel I/O. Sejauh yang saya tahu, ini tidak ada hubungannya dengan I/O jaringan sejauh koneksi soket biasa berjalan. Namun, ini termasuk waktu yang dihabiskan untuk menunggu sistem file jaringan seperti NFS.
Solusi 3:
Ya.
Kebetulan, salah satu server yang saya kelola mengalami iowait tinggi yang disebabkan oleh pemasangan NFS yang buruk.
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
Dan lihat proses di D
negara.
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]
Solusi 4:
Iowait menyertakan panggilan jaringan. Saya mengatakan ini, karena NFS menangani sebanyak mungkin sistem file lokal linux dari sudut pandang kernel:
$ 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,
};
Saat proses memanggil penulisan pada deskriptor file 5, hal seperti ini akan terjadi:
files->fd_array[5]->f_op->write(argv.......)
Jadi, prosesnya tidak tahu jenis sistem file apa yang digunakan (vfs magic) dan iowait sama dengan sistem file lokal.