O iowait inclui tempo de espera para chamadas de rede?

19

A página de proc(5)manual descreve o iowait como "tempo aguardando a conclusão do IO". Isso foi explicado principalmente em uma pergunta anterior. Minha pergunta é: enquanto aguarda o bloqueio de E / S, isso inclui esperar o bloqueio de E / S de rede ou apenas E / S local?

Alex J
fonte

Respostas:

20

Significa aguardar "E / S de arquivo", ou seja, qualquer chamada de leitura / gravação em um arquivo que esteja no sistema de arquivos montado, mas provavelmente também conta o tempo de espera para trocar ou exigir o carregamento de páginas na memória, por exemplo, bibliotecas não na memória ainda, ou páginas de arquivos mmap () que não estão no RAM.

NÃO conta o tempo gasto na espera de objetos IPC, como soquetes, tubos, ttys, select (), poll (), suspensão (), pausa () etc.)

Basicamente, é hora de um encadeamento esperar pela IO de disco síncrona - durante esse período, teoricamente, ele é capaz de executar, mas não pode, porque alguns dados de que precisa ainda não estão disponíveis. Esses processos geralmente aparecem no estado "D" e contribuem para a média de carga de uma caixa.

Confuso, acho que isso provavelmente inclui E / S de arquivos em sistemas de arquivos de rede.

MarkR
fonte
Como NFS IO é File I / O também, eu acho que você está certo ;-)
wzzrd
E as interfaces de loopback? Como o linux trata esse tipo de interface?
Jalal Mostafa
3

o tempo de iowait é a quantidade de tempo que um processo gasta no planejador de E / S do kernel. Até onde eu sei, isso não tem nada a ver com a E / S de rede, na medida em que as conexões de soquete regulares acontecem. No entanto, incluirá o tempo gasto na espera de sistemas de arquivos de rede como o NFS.

Kamil Kisiel
fonte
2

Faz.

Aliás, um dos servidores que eu gerencio está com um alto nível de iowait, causado por uma montagem incorreta do 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

E olhe para os processos no Destado.

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
fonte
2

O iowait inclui as chamadas de rede. Digo isso, porque o NFS é tratado como muitos sistemas de arquivos locais Linux do ponto de vista do 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,
};

Quando os processos chamam uma gravação no descritor de arquivo 5, algo como isso acontecerá:

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

Portanto, o processo não sabe que tipo de sistema de arquivos está usando (vfs magic) e o iowait é o mesmo para um sistema de arquivos local.

c4f4t0r
fonte