iowait是否包括等待网络呼叫的时间?


19

该手册proc(5)页将iowait描述为“等待IO完成的时间”。这在前面的问题中已得到大部分解释。我的问题是:在等待阻塞IO时,这包括等待阻塞网络IO还是仅等待本地IO?

Answers:


20

这意味着要等待“文件I / O”,也就是说,对已挂载文件系统中的文件的任何读/写调用,但也可能需要花费时间等待将页面换入或将页面加载到内存中,例如,库不在内存中,或者不在ram中的mmap()文件页面。

它不计算等待IPC对象(例如套接字,管道,ttys,select(),poll(),sleep(),pause()等)所花费的时间。

基本上是线程花时间等待同步磁盘IO的时候了-在这段时间内理论上它可以运行,但由于尚不存在所需的某些数据而无法运行。此类过程通常以“ D”状态显示,并有助于提高箱子的平均负载。

令人困惑的是,我认为这可能包括网络文件系统上的文件IO。


由于nfs IO也是文件I / O,我想你是对的;-)
wzzrd

环回接口呢?linux如何处理这种接口?
Jalal Mostafa

3

iowait时间是进程在内核I / O调度程序中花费的时间。据我所知,就常规的套接字连接而言,这与网络I / O没有任何关系。但是,这将包括等待NFS之类的网络文件系统所花费的时间。


2

是的

顺便说一句,我管理的一台服务器遇到了高iowait,这是由错误的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

并查看状态下的流程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]

2

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 magic),并且iowait与本地文件系统相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.