GNU/Linux >> Linux の 問題 >  >> Linux

iowait にはネットワーク呼び出しの待機時間が含まれますか?

解決策 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 はローカル ファイルシステムと同じです。


Linux
  1. Linuxサーバー時間をネットワークタイムサーバーと同期する

  2. Nutty –Ubuntu用のネットワーク診断ツール

  3. 「cd -」は何の略ですか?

  1. ネットワーク診断用の10のLinuxコマンド

  2. 特定の時間の「tail -f」

  3. サーバー用に構成された RSA 証明書には、サーバー名と一致する ID が含まれていません

  1. ネットワークのトラブルシューティングにSSツールを使用する

  2. Linux –現在のプロセスでネットワークの共有を解除する方法は?

  3. ネットワーク図をナビゲートするためのソフトウェア?