Respondendo p/ a lista - p/ contribuir com o histórico; não temos muitas
dessas discussões por aqui.
Jeronimo Bezerra schrieb:
Olá Marcos, obrigado pela informação.
Com o parâmetro informado o tempo total caiu de 16m55s para 6m29s.
Eu acreditava que o kernel SMP fazia isso automaticamente, mas vi que não.
O kernel faz sim, quem não faz é o make. Se vc colocasse outras 2 ou 3
instâncias de compilação do kernel nessa hora, vc iria observar tempos de
compilação muito próximos de todos, e não um aumento generalizado como num
sistema com uma unica CPU - evidenciando uma característica dos programas de
hoje em dia de lidar com apenas uma CPU (mais sobre isso abaixo).
Você saberia dizer o que acontecerá por padrão quando eu instalar o Apache
por exemplo? Vai usar os 4 processadores ou terei que fazer alguma
adaptação?
Rapaz, eu não saberia dizer... mas acho que as outras coisas se adaptam
melhor (ou pior).
O problema com compilações é que elas são muito 'CPU-intensive'. Pra não
entupir sua memória de CPU com processos desnecessários, o make limita a
concorrencia da coisa. Como a maioria absoluta das máquinas é
mono-processada, esse limite vem em 1.
No caso do apache, cada requisição é atendida por um processo, então eu acho
que acaba não atrapalhando tanto. Mas acho que o uso de CPU do apache não é
tão grande, a não ser que vc tenha bastante SSL + PHP + MYSQL + CGI + outras
coisas... me parece que o apache em geral sofre mais com operações de I/O do
que CPU.
Outro exemplo: se vc instalar um programa p/ converter wav em mp3,
provavelmente terá que habilitar a funcionalidade de multi-cpu, isso se ele
suportar.
Converter um video de um formato para outro? Renderização em 3D? Até mesmo
um joguinho sofre do mesmo problema - para que um programa específico passem
realmente a se beneficiar de um sistema multi-processado, seu algoritmo
precisa ser reescrito de modo a tirar vantagens dessa caracterísitca.
Paralelismo, distribuição, concorrência, etc são coisas ainda bastante
nebulosas/antagônicas quando são necessários ferramentas tipo lock,
centralização, sincronização... sem contar que é infinitamente mais difícil
debugar um programa que roda de maneira distribuida.
Se você roda várias coisas ao mesmo tempo, o sistema se encarrega de
distribuí-las, mesmo sendo coisas 'monolíticas'. Mas se vc quer que todos
trabalhem em conjunto p/ resolver o mesmo problema, a coisa precisa ser
retrabalhada. (no caso do make é fácil, pois a compilação de programas
envolve muitos passos menores com pouca dependencia entre si - ai basta ir
disparando um processo em cada canto que é liberado e pronto).
Espero ter ajudado e não piorado :-)
--
Marcos
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]