Como o Debian usa muitos núcleos de CPU?

3

Acabei de ter uma conta em um VPS de 24 núcleos (de acordo com o UnixBench, existem 24 CPUs).

  1. Em termos gerais, como posso fazer bom uso de todos esses núcleos para computação de shell de propósito geral no Debian?
  2. Preciso digitar algo especial ao emitir aplicativos de longa duração do shell para que cada processo seja executado em um núcleo separado, se houver um disponível? Ou o Debian apenas lida com tudo isso, invisível para mim?
por themirror 26.09.2013 / 23:14

2 respostas

5

Você não precisa fazer nada especial: é a tarefa do kernel decidir qual encadeamento vai para qual CPU, e faz um trabalho muito melhor do que um humano poderia.

No entanto, não faz sentido ter 24 CPUs se você não tiver pelo menos 24 threads simultâneos para rodar. Os programas não serão magicamente mais rápidos se mais CPUs estiverem disponíveis: apenas os programas codificados para múltiplos threads paralelos serão beneficiados, e muitos programas não serão beneficiados, não porque sejam escritos de maneira inferior, mas porque o que eles fazem é inerentemente não paralelizável.

Um programa com N threads de computação concorrentes se beneficiará de até N CPUs (embora possa não ser N vezes mais rápido, porque a sincronização entre os threads leva tempo). A execução de M programas diferentes que não interagem muito, se de alguma forma semelhante, aproveitam as CPUs M (ou mais do que isso, se os programas forem multiencadeados).

Existem alguns casos em que a intervenção manual é necessária para aproveitar o paralelismo. Se você estiver iniciando várias tarefas de processamento de dados, cuide para que elas sejam geradas em paralelo (com pouco mais de uma tarefa por CPU) em vez de uma após a outra. Por exemplo, ao criar software, passe a opção -j para make . Veja alguns outros exemplos e explicações:

Se você estiver executando um servidor da Web, todos os servidores da Web projetados para cargas pesadas são bons para explorar o paralelismo. O Apache é usado como um caso de teste ao avaliar o desempenho das otimizações no kernel do Linux. No entanto, esteja ciente de que o paralelismo na CPU só ajuda se não houver nenhum outro gargalo, como a contenção devido ao acesso ao banco de dados ou à largura de banda de entrada-saída.

    
por 27.09.2013 / 01:06
2

O uso de muitos núcleos para acelerar o desempenho depende muito do seu aplicativo. Alguns aplicativos precisam ser executados passo a passo: simplesmente não há maneira de dividir o cálculo em paralelo entre muitos núcleos, pois, para calcular uma determinada etapa, é necessário conhecer os resultados das etapas anteriores. Se for esse o caso, usar 24 núcleos é tão bom quanto usar apenas um.

Em outros casos, onde o aplicativo precisa fazer muitas coisas que não dependem umas das outras, ter muitos núcleos pode acelerar consideravelmente as coisas. Como um exemplo pertinente, se você estiver compilando um projeto com muitos arquivos de origem, poderá compilar cada arquivo de origem independentemente antes de vincular os diferentes arquivos. Nesse caso, você pode fazer o compilador compilar cada arquivo em um núcleo separado. Aplicativos que podem usar vários núcleos de CPU geralmente têm um switch para você solicitar isso. Por exemplo, ao compilar um projeto usando o GNU make , você pode passar o -j seguido por um número. Esse número especifica o número de trabalhos que o make deve iniciar simultaneamente (leia-se: em núcleos diferentes).

    
por 26.09.2013 / 23:27