O iowait inclui o tempo de espera pelas chamadas de rede?

17

A página proc(5) descreve o iowait como "tempo de espera para que o pedido de inserção seja concluído". Isso foi principalmente explicado em uma pergunta anterior. Minha pergunta é: enquanto espera no bloqueio de E / S, isso inclui esperar o bloqueio de E / S da rede ou apenas E / S local?

    
por Alex J 08.07.2009 / 04:29

4 respostas

15

Isso significa esperar por "File I / O", 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 carregar páginas na memória, por exemplo bibliotecas não na memória ainda, ou páginas de arquivos mmap () 'd que não estão em memória RAM.

Ele NÃO conta o tempo gasto esperando por objetos IPC como sockets, pipes, ttys, select (), poll (), sleep (), pause () etc.

Basicamente, é hora de um thread passar esperando por um disco-IO síncrono - durante esse tempo ele é teoricamente capaz de rodar, mas não pode, porque alguns dados que ele 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.

Confusamente acho que isso provavelmente inclui o arquivo IO em sistemas de arquivos de rede.

    
por 08.07.2009 / 09:17
3

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

    
por 08.07.2009 / 07:30
1

Sim.

A propósito, um dos servidores que eu gerencio está mostrando experimentando um alto iowait causado por uma má montagem 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 observe os processos no estado 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]
    
por 10.12.2014 / 10:01
1

O iowait inclui as chamadas de rede, eu digo isso, porque o nfs é tratado como muitos sistemas de arquivos locais do 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 assim acontece:

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

Assim, os processos não sabem que tipo de sistema de arquivos está usando (vfs magic) e o iowait é o mesmo para um sistema de arquivos local.

    
por 10.12.2014 / 11:35