解決策 1:
これは、「ファイル I/O」、つまり、マウントされたファイルシステムにあるファイルに対する読み取り/書き込み呼び出しを待機することを意味しますが、おそらくスワップインまたはメモリへのページのデマンドロードを待機する時間もカウントします。まだメモリにないライブラリ、または RAM にない mmap() されたファイルのページ。
ソケット、パイプ、tty、select()、poll()、sleep()、pause() などの IPC オブジェクトの待機に費やされた時間はカウントされません。
基本的には、スレッドが同期ディスク IO の待機に費やす時間です。この間、理論的には実行できますが、必要なデータがまだ存在しないため実行できません。このようなプロセスは通常、「D」状態で表示され、ボックスの負荷平均に寄与します。
紛らわしいことに、これにはおそらくネットワーク ファイル システム上のファイル IO が含まれると思います。
解決策 2:
iowait 時間は、プロセスがカーネル I/O スケジューラで費やす時間です。私の知る限り、通常のソケット接続に関する限り、これはネットワーク I/O とは何の関係もありません。ただし、NFS などのネットワーク ファイル システムの待機時間も含まれます。
解決策 3:
します。
ちなみに、私が管理しているサーバーの 1 つで、不適切な NFS マウントが原因で iowait が高くなっています。
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
D
のプロセスを見てください。 州。
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]
解決策 4:
iowait にはネットワーク呼び出しが含まれます。私がこれを言うのは、NFS はカーネルの観点から多くの Linux ローカル ファイルシステムとして処理されるからです:
$ 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,
};
プロセスがファイル記述子 5 で書き込みを呼び出すと、次のようなことが起こります:
files->fd_array[5]->f_op->write(argv.......)
そのため、プロセスは使用しているファイルシステムの種類を認識せず (vfs マジック)、iowait はローカル ファイルシステムと同じです。