iowait에 네트워크 통화 대기 시간이 포함됩니까?


19

proc(5)맨은 "전체에 대한 IO 시간 대기"로 iowait가 설명합니다. 이것은 대부분 초기 질문에서 설명 되었습니다. 내 질문은 : IO 차단 대기 중 네트워크 IO 차단 대기 또는 로컬 IO 만 포함합니까?

답변:


20

즉, "파일 I / O"대기, 즉 마운트 된 파일 시스템에있는 파일에 대한 모든 읽기 / 쓰기 호출을 의미하지만 페이지를 메모리로 스왑 또는로드하기 위해 대기중인 시간을 계산합니다. 아직 메모리에 없거나 램에없는 mmap () 'd 파일의 페이지.

소켓, 파이프, ttys, select (), poll (), sleep (), pause () 등과 같은 IPC 객체를 기다리는 데 걸린 시간은 계산하지 않습니다.

기본적으로 스레드가 동기 디스크 -IO를 기다리는 데 소요되는 시간입니다.이 시간 동안 이론적으로는 실행할 수 있지만 필요한 일부 데이터가 없기 때문에 실행할 수 없습니다. 이러한 프로세스는 일반적으로 "D"상태로 표시되며 박스의 평균로드에 기여합니다.

혼란스럽게도 네트워크 파일 시스템의 파일 IO가 포함되어 있다고 생각합니다.


nfs IO도 파일 I / O이므로, 당신이 옳은 것 같아요 ;-)
wzzrd

루프백 인터페이스는 어떻습니까? 리눅스는 이런 종류의 인터페이스를 어떻게 취급합니까?
Jalal Mostafa

3

iowait 시간은 프로세스가 커널 I / O 스케줄러에서 보내는 시간입니다. 내가 아는 한, 이것은 일반적인 소켓 연결이 이루어지는 한 네트워크 I / O와 관련이 없습니다. 그러나 NFS와 같은 네트워크 파일 시스템을 기다리는 데 소요 된 시간이 포함됩니다.


2

그렇습니다.

또한, 내가 관리하는 서버 중 하나에 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는 커널의 관점에서 많은 리눅스 로컬 파일 시스템을 처리하기 때문에 이렇게 말합니다.

$ 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는 로컬 파일 시스템과 동일합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.