Apakah iowait termasuk waktu menunggu panggilan jaringan?

19

Halaman proc(5)manual menggambarkan iowait sebagai "waktu menunggu IO untuk selesai". Ini sebagian besar dijelaskan dalam pertanyaan sebelumnya. Pertanyaan saya adalah: ketika menunggu dalam memblokir IO, apakah ini termasuk menunggu di memblokir jaringan IO, atau hanya IO lokal?

Alex J
sumber

Jawaban:

20

Ini berarti menunggu "File I / O", artinya, setiap panggilan baca / tulis pada file yang ada di sistem file yang di-mount, tetapi juga mungkin menghitung waktu menunggu untuk bertukar atau meminta memuat halaman ke dalam memori, mis. Perpustakaan tidak dalam memori, atau halaman file mmap () yang tidak ada dalam ram.

Ini TIDAK menghitung waktu yang dihabiskan menunggu objek IPC seperti soket, pipa, ttys, pilih (), polling (), sleep (), pause () dll.

Pada dasarnya ini saatnya thread menghabiskan menunggu disk-IO sinkron - selama ini secara teoritis dapat berjalan tetapi tidak bisa karena beberapa data yang dibutuhkan belum ada. Proses seperti itu biasanya muncul dalam keadaan "D" dan berkontribusi pada rata-rata beban kotak.

Secara membingungkan saya pikir ini mungkin termasuk file IO pada sistem file jaringan.

MarkR
sumber
Seperti nfs IO adalah File I / O juga, saya kira Anda benar ;-)
wzzrd
Bagaimana dengan antarmuka loopback? Bagaimana linux memperlakukan antarmuka seperti ini?
Jalal Mostafa
3

waktu iowait adalah jumlah waktu yang dihabiskan suatu proses dalam penjadwal I / O kernel. Sejauh yang saya tahu, ini tidak ada hubungannya dengan jaringan I / O sejauh koneksi soket biasa pergi. Namun, itu akan termasuk waktu yang dihabiskan untuk menunggu sistem file jaringan seperti NFS.

Kamil Kisiel
sumber
2

Itu benar.

Kebetulan, salah satu server yang saya kelola mengalami iowait tinggi yang disebabkan oleh NFS mount 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 lihatlah proses di Dnegara bagian.

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]
Sree
sumber
2

Iowait termasuk panggilan jaringan. Saya mengatakan ini, karena NFS ditangani sebanyak sistem berkas 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,
};

Ketika proses memanggil tulis pada file descriptor 5, sesuatu seperti ini akan terjadi:

files->fd_array[5]->f_op->write(argv.......)

Jadi, prosesnya tidak tahu jenis filesystem apa yang digunakan (vfs magic) dan iowait sama dengan sistem file lokal.

c4f4t0r
sumber