Por que o apt-get NÃO usa 100% (cpu OU disco OU net)?

19

Por que apt-get não usa 100% de cpu, disco ou rede - ou até mesmo perto dela? Mesmo em um sistema lento (Raspberry Pi 2+) eu estou conseguindo no máximo 30% de carga da CPU. Eu só estou pensando que ou ele está sendo artificialmente acelerado, ou deveria estar fora de algo enquanto está funcionando ... ou deveria ser capaz de fazer as coisas mais rápido do que isso.

Edit: Eu estou apenas medindo aproximadamente através de monitores de cpu / disk / net no meu painel, e o aplicativo System Monitor do Ubuntu MATE.

Por favor, explique por que estou errado. : -)

Atualização: Eu entendo que apt-get precisa buscar suas atualizações (e pode ser limitado pela largura de banda do upstream / provedor). Mas uma vez que é "descompactar" e assim por diante, o uso da CPU deve, pelo menos, subir (se não o máximo). Na minha estação de trabalho doméstica razoavelmente decente, que usa um SSD para sua unidade principal, e um ramdisk para / tmp, esse não é o caso.

Ou talvez eu precise dar uma olhada mais de perto.

    
por KlaymenDK 25.05.2016 / 13:09

4 respostas

28

Os aplicativos só maximizam a CPU se o aplicativo estiver limitado pela CPU . Um aplicativo é limitado pela CPU se puder obter rapidamente todos os seus dados e o que esperar é que o processador processe os dados.

apt-get , por outro lado, é IO-bound . Isso significa que ele pode processar seus dados rapidamente, mas o carregamento dos dados (do disco ou da rede) leva tempo, durante os quais o processador pode fazer outras coisas ou ficar ocioso se nenhum outro processo precisar.

Normalmente, todas as solicitações de E / S (disco, rede) são lentas e sempre que um encadeamento de aplicativo faz uma delas, o kernel a removerá do processador até que os dados sejam carregados no kernel (essas solicitações de E / S são chamadas solicitações de bloqueio ).

    
por 25.05.2016 / 13:19
13

Even on a slow system (Raspberry Pi 2+) I'm getting at most 30% CPU load.

O Raspberry Pi 2+ tem 4 núcleos. Para algumas ferramentas de monitoramento, um uso de 100% corresponde a todos os núcleos usados em 100%. Se apenas um núcleo em um processador de código quádruplo for usado, a carga da CPU será de 25%. A carga de 30% da CPU mencionada é de aproximadamente um núcleo usado em 100%, enquanto alguns processos estão sendo executados nos outros núcleos:

(100% on one core out of 4 = 100 / 4 = 25%) + some processes ≃ 30%

Como apt-get não é multiencadeado, ele nunca usará mais de um processador, o que representa 25% de todos os recursos da CPU.

Aqui está um exemplo na minha máquina de 8 núcleos (4 núcleos com Hyper-Threading ) rodando Ubuntu, eu lançou um thread com o comando cat /dev/zero > /dev/null para criar um processo infinito que utiliza um núcleo inteiramente.

Agora, se olharmos para o gráfico de htop , podemos ver que a carga média ( Avg bar) é 12.7% , que corresponde a um núcleo usado em 100%, que também é 1/8 de todos os recursos da CPU:

(100% = 100 / 8 = 12.5%) + some background processes ≃ 12.7%.

Também pode ser notado que o comando tem um valor de 100% na coluna CPU% , porque é relativo a um núcleo e não a todos os núcleos.

    
por 25.05.2016 / 15:44
2

Eu acho que você não está medindo IO%. Eu não vi um widget Linux IO%. (Estou com muita inveja do gerenciador de tarefas do Windows 10 :). Verifique usando o comando iotop e você verá 100% IO.

top deve mostrar 100% em user + system + iowait , para valores de 100% divididos por sua contagem principal, conforme descrito por AL, não estou dizendo top é 100% útil, mas pode ser uma ferramenta versátil muito útil para aprender.

A taxa de transferência será menor do que a máxima, porque você está descompactando vários arquivos pequenos, também conhecidos como "E / S aleatório". Há também alguns fluxos de sincronização de disco / cache, embora desde 2010 no Linux haja apenas alguns deles para cada pacote instalado. ( costumava ser um por arquivo ).

    
por 25.05.2016 / 14:26
2

Na verdade, as solicitações IO / Network são realmente lentas em comparação com as operações de CPU. Isto significa que, enquanto a sua placa de rede está buscando dados, ou o seu disco está gravando estes dados, sua CPU não faz absolutamente nada (para este processo).

Se o seu disco rígido estiver mais veloz que a sua conexão de rede (o que provavelmente é verdade), ele não gravará mais do que recebeu.

Por fim, a porcentagem de rede corresponde ao máximo possível de uso de cartão de rede, não de conexão. Então você pode ter um adaptador de rede de 1Gb / s, é muito improvável que você tenha uma conexão com a Internet que atinja essa largura de banda.

    
por 26.05.2016 / 00:51

Tags