Como saber se um processo é intensivo de E / S de rede ou não está no modo de usuário no Linux?

3

Atualmente, estou escrevendo um programa no Linux que precisa informar se um processo específico é intensivo de E / S de rede ou não em tempo de execução. Eu tentei algumas ferramentas, como iotop e iftop , mas nenhuma delas pode monitorar um processo específico. Portanto, há alguma maneira de saber se um processo é intensivo de E / S de rede ou não está no nível do usuário? Qualquer ajuda seria muito apreciada!

    
por Jenson 07.06.2016 / 17:11

1 resposta

0

Você pode verificar o seu canal de espera com alguma frequência. O canal médio de espera que você encontra deve ser indicativo de onde o tempo é gasto no processo.

Por exemplo: faça o download de uma imagem do Ubuntu como um processo típico do net-io-bound:

$ url='http://mirror.dkm.cz/ubuntu-releases/16.04/ubuntu-16.04-desktop-amd64.iso'
$ wget "$url" & pid=$!

Quando você faz:

$ ps h -p $pid  -o wchan

Você deve obter poll_schedule_timeout praticamente o tempo todo, por isso é um processo ligado a net-io que provavelmente usa epoll para net io.

Em contraste, para um processo tipicamente ligado à CPU, como:

$ ( while :; do :; done )& pid=$!

você deve obter um canal de espera - (= none = está no núcleo da CPU) praticamente o tempo todo.

    
por 07.06.2016 / 23:11