Por que apt-get
não usa 100% da CPU, disco ou rede - ou mesmo perto dela? Mesmo em um sistema lento (Raspberry Pi 2+), estou recebendo no máximo 30% de carga da CPU. Eu só estou pensando que ou está sendo artificialmente acelerado, ou deve maximizar algo enquanto está trabalhando ... ou deve ser capaz de fazer suas coisas mais rapidamente do que faz.
Edit: Estou apenas medindo aproximadamente via monitores cpu / disk / net no meu painel e o aplicativo System Monitor do Ubuntu MATE.
Por favor, explique por que estou errado. :-)
Atualização: Entendo que é apt-get
necessário buscar suas atualizações (e pode ser limitado pela largura de banda upstream / provedor). Mas uma vez que está "descompactando" e assim por diante, o uso da CPU deve pelo menos aumentar (se não o máximo). Na minha estação de trabalho doméstica bastante 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.
apt-get
não é particularmente bom em otimizar isso. Eu imagino que ele possa ser instalado durante o download para que, quando o download for concluído, a maior parte da carga já esteja instalada, mas, infelizmente, não. De qualquer forma, a instalação autônoma geralmente extrai apenas dados para o disco. Essas operações são inerentemente vinculadas à E / S e simplesmente não há muito o que fazer, exceto aguardar na unidade de disco para concluir a leitura ou gravação.Respostas:
Os aplicativos só maximizarão a CPU se o aplicativo estiver associado à CPU . Um aplicativo é vinculado à CPU se puder obter rapidamente todos os seus dados e o que ele espera é o processador para processar os dados.
apt-get
, por outro lado, é vinculado a IO . Isso significa que ele pode processar seus dados rapidamente, mas carregar os dados (do disco ou da rede) leva tempo, durante o qual 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, o kernel o remove do processador até que os dados sejam carregados no kernel (= essas solicitações de E / S são chamadas de solicitações de bloqueio ).
fonte
apt
comandos, é agravado pelo fato de muitos arquivos serem abertos no modo de sincronização ou com solicitações frequentes e explícitas no disco para garantir que os dados permaneçam em um estado consistente, pois uma falha no sistema pode ter sérias conseqüências. Executandoapt
comandos comeatmydata
pode melhorar muitas vezes dramaticamente o desempenho em detrimento da confiabilidade reduzida (para não mencionar que os serviços começaram como parte de instalações de pacotes herdará as configurações eatmydata)O Raspberry Pi 2+ possui 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 é aproximadamente um núcleo usado a 100%, enquanto alguns processos estão em execução nos outros núcleos:
Como
apt-get
não é multiencadeado, nunca utilizará 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 ) executando o Ubuntu, lancei um thread com o
cat /dev/zero > /dev/null
comando para criar um processo infinito que utiliza um núcleo inteiramente.Agora, se dermos uma olhada no gráfico
htop
, podemos ver que a carga média (Avg
bar) é12.7%
, que corresponde a um núcleo usado a 100%, que também é 1/8 de todos os recursos da CPU:Também é possível observar que o comando tem um valor de
100%
naCPU%
coluna, porque é relativo a um núcleo e não a todos os núcleos.fonte
/dev/zero > /dev/null
um exemplo melhor, já que o urandom esgotará o pool de entropia?cat /dev/zero > /dev/null
dá o mesmo resultado, eu não conhecia esse dispositivo, obrigado. urandom esgotará o conjunto de entropia Eu não conheço o conjunto de entropia, como isso pode ser um problema?Eu acho que você realmente não está medindo% de IO. Não vi um widget% de IO do Linux. (Estou com muita inveja do gerenciador de tarefas do Windows 10 :). Verifique usando o
iotop
comando e você verá 100% IO.top
deve mostrar 100% emuser
+system
+iowait
, para valores de 100% divididos por sua contagem principal, conforme descrito por AL. Não estou dizendo quetop
seja 100% útil, mas pode ser uma ferramenta geral realmente útil para aprender.O rendimento será menor que o máximo, porque você está descompactando muitos arquivos pequenos, também conhecido como "E / S aleatório". Há também algumas liberações de sincronização / cache de disco, embora desde 2010 no Linux existam apenas algumas delas para cada pacote instalado. ( Costumava ser um por arquivo ).
fonte
iotop --only
a--only
opção de mostrar apenas processos ou threads realmente fazendo I / O .Na verdade, as solicitações de IO / Rede são realmente lentas em comparação com as operações da CPU. Isso significa que, enquanto sua placa de rede está buscando dados ou seu disco está gravando esses dados, sua CPU não faz absolutamente nada (para esse processo de qualquer maneira).
Se o seu disco rígido for mais rápido que a sua conexão de rede (o que provavelmente é verdade), ele não gravará mais do que recebeu.
Finalmente, a porcentagem da rede corresponde ao máximo possível de uso da placa de rede , não à conexão. Como você pode ter um adaptador de rede de 1 Gb / s, é improvável que você tenha uma conexão à Internet que atinja essa largura de banda.
fonte