tem como fazer o make-kpkg executar em multithread?[resolvido]

Iniciado por sboorbou, 26 de Outubro de 2009, 09:03

tópico anterior - próximo tópico

sboorbou

Boas!!!
Pode parecer boba a pergunta... mas ainda não consegui satisfazer minha curiosidade....
Por exemplo, com make poderia colocar um -j2 -j4 enfim.... um numero de thread simultaneos que gostaria de executar.
Porem com o make-kpkg o -j num funfa.. e na documentação, caso exista algo sobre isso lá, não devo ter percebido, mas não descobri ainda....

para deixar claro... quando vou compilar um novo kernel, a maneira antiga, com o make, posso colocar o -j4 no final e aproveitar os 4 nucleos de meu processador ( bem, quase, mas fica muito mais rápido )... com o make-kpkg como faço isso????



Quem responder ganha um peixe!!! xP

duvida eu em você sinto... duvida a raiva leva, raiva ao ódio leva, ódio é o lado negro da força - Mestre Yoda

Renato Krause

Conforme o man make-kpkg:

Citar
       CONCURRENCY_LEVEL
              If defined, this environment variable sets the concurrency level
              of make used to compile the kernel and the modules set using  -j
              flags  to the sub make in the build target of make-kpkg.  Should
              be a (small) integer, if used. You can get the current number of
              CPUs using the command:
               "grep -c '^processor' /proc/cpuinfo" WARNING: Do NOT set the -j
              option in MAKEFLAGS directly, this shall call the build to fail.

Utilizando o env (run a program in a modified environment) poderíamos otimizar da seguinte forma:

env CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo` make-kpkg [...]

Te serve?  Entendeu?

Abraço,

sboorbou

1° Obrigado por responder minha duvida.

deixa ver se entendi... para usar o make-kpkg em multithread é necessário colocar ""env CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo` make-kpkg "" e o resto do comando após isso?

Nossa, se funcionar, me ajudou muito mesmo.... agora, que é muiiiiiitooooooooooo mais trabalhoso que usar um -j e numero que precisa... isso é sim


Obrigado pela ajuda, vou testar para ver se funciona, se funcionar posto aqui....

Aproveitando a deixa.... tem uma forma mais facil? ( desculpa, sou humano adepto a facilidades!!! )
duvida eu em você sinto... duvida a raiva leva, raiva ao ódio leva, ódio é o lado negro da força - Mestre Yoda

Renato Krause

Desculpe-me, acho que fiz uma brincadeira sem graça, vamos por partes.

Pelo o que eu entendi o make-kpkg utiliza a variavel de ambiente CONCURRENCY_LEVEL. Ele pegaria o valor numérico inteiro dessa variável e utilizaria como se fosse o -j.
O env é um comando que cria um ambiente próprio para o programa que você vai executar, exemplo:

env a=1 ls

Isso cria uma variavel de ambiente a com o valor 1 só para a execução do ls. Sendo assim, caso você queira que o -j seja 4, bastaria:

env CONCURRENCY_LEVEL=4 make-kpkg [...]

A parte:

grep -c '^processor' /proc/cpuinfo

foi pura frescura pois esse comando serve para retornar o número de núcleos que você possui.

Dai eu uni tudo em um comando que verificaria quantos nucleos você possui e já passa para a variável de ambiente para ser utilizado com -j.
Mais uma vez desculpa a confuzão.

Grande abraço e boa sorte (depois me conta como foi pra eu te passar o endereço pra tu me mandar o meu salmão  ;D),

sboorbou

eu executei
$ env CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo`
$ export CONCURRENCY_LEVEL
$ printenv CONCURRENCY_LEVEL
2
$ env |grep CONCURRENCY_LEVEL
CONCURRENCY_LEVEL=2
$

agora qualquer vez que eu executar o make-kpkg ele usaria 2 processos? correto???
sendo uma váriavel global, o make-kpkg pegaria ele automaticamente, correto?

P.S. você quer o salmão pintado ou o vermelho? ( Xp to inventando, nem sei se existe isso!! )
duvida eu em você sinto... duvida a raiva leva, raiva ao ódio leva, ódio é o lado negro da força - Mestre Yoda

Renato Krause

Citação de: sboorbou online 27 de Outubro de 2009, 13:50
P.S. você quer o salmão pintado ou o vermelho? ( Xp to inventando, nem sei se existe isso!! )

;D ;D ;D ;D ;D ;D Nem eu...

Você utilizando o export vai ficar global durante sua seção.

Para que quando você reinicialize a máquina isso persista você deve adicionar ao arquivo /home/usuario/.bash_profile (somente para usuario) ou em /etc/profile (para todos usuários) a seguinte linha:

Citar
export CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo`

Abraço,

sboorbou

ahhhh Saquei!!!!!!!!!!!!!!

Muito obrigado!!!1

agora ta tudo ok
duvida eu em você sinto... duvida a raiva leva, raiva ao ódio leva, ódio é o lado negro da força - Mestre Yoda

Renato Krause