Arquivo de escalonador

Aplicando Novo Patch no Escalonador do Linux

Posted in Tutorial with tags , , on 19/11/2010 by felipessilveira

Como foi bastante divulgado ultimamente, Mike Galbraith mandou um patch pra lista do kernel propondo uma mudança no escalonador. A ideia é agrupar as tarefas de acordo com os seus tty e escaloná-las. Não achei o post original do Mike pra entender direitinho como funciona, logo, se alguém tiver uma fonte boa…

A descrição da opção (retirado do patch): This option optimizes the scheduler for common desktop workloads by
automatically creating and populating task groups. This separation of workloads isolates aggressive CPU burners (like build jobs) from desktop applications. Task group autogeneration is currently based upon task tty association.

Bom, como alguns sabem, ando trabalhando com escalonadores e queria ver esse patch funcionando.. então, mãos à massa! bora instalar esse bagulho =]

Primeiro: É hora de parar os torrents e baixar as coisas necessárias pra instalar: Será necessário:

  • A fonte do kernel em que o patch foi criado:
  • O patch, que como eu sou bonzinho, eu vou fazer upload (não esqueçam de retirar o .pdf do fim, parece que o wordress não deixa eu mandar arquivos .patch)
  • Os pacotes necessários pra compilar um kernel na sua Distro. (Se não me engano, no ubuntu é necessário o pacote build-essentials, mas posso estar falando asneiras)

Agora começa a diversão:

extraia a fonte do kernel para uma pasta, digamos linux-2.6.37-rc2
copie o patch para a mesma pasta
aplique o patch com a linha:
patch -p1 < Mike.patch

se tudo ocorreu bem, o kernel foi “patcheado” e agora é só compilar =D

Compilando:

Se você nunca compilou um kernel antes, não tema!
O manual do gentoo explica muito bem essa parte. A parte que interessa é até o item 7.c (incluso).

Se você já compilou um kernel com sucesso, é só copiar o arquivo .config da pasta do seu kernel para a pasta do kernel novo e pronto
(pra quem sabe do que eu estou falando, make oldconfig é pra fracos =])

Agora, habilitando o patch:
na pasta do kernel com o patch aplicado:
make menuconfig (ou qualquer outro método que prefira pra configurar o seu kernel)

A opção do patch fica no item “General setup” , o nome dela é “Automatic process group scheduling”, basta apertar Y e pronto.
Agora é só sair e salvar sua configuração.

Agora, compilando o kernel: make && make modules_install
isso pode demorar, uma primeira compilação leva cerca de 40 minutos

Assumindo que compilou e não gerou erros, tá funcionando =D

Agora basta copiar a imagem gerada pra sua pasta/partição de boot:
cp arch/x86(ninguém aqui usa MIPS, usa?)/boot/bzImage /boot/linux-2.6.37-rc2

A última coisa a se fazer: adicionar a entrada do novo kernel no seu bootloader
Eu uso grub, então só preciso copiar uma das minhas entradas antigas do (/boot/grub/menu.lst) e mudar o endereço do kernel destino (e o nome, né)

Depois disso, acabou. Basta reiniciar e esperar pra não dar Kernel Panic.
Vocês podem conferir se o patch está rodando ou não lendo o arquivo /proc/sys/kernel/sched_autogroup_enabled (1 é true, 0 é false, dã)
Também pode mudar o estado do patch escrevendo 0/1 no mesmo arquivo. (precisa ser root)
* echo -n 0/1 > /proc/sys/kernel/sched_autogroup_enabled

Resultados:
Estou usando o patch há dois dias e só pude perceber uma diferença quando estava vendo 2 vídeos do youtube, calculando 2+2 em um while true, vendo filme, ouvindo música e compilando um kernel com 4 jobs ao mesmo tempo. Apesar da CPU estar em 100%, tava rodando bonitinho ainda.

Outras coisas:
Há também um outro método de obter o mesmo resultado (bom, pelo menos um amigo me disse). Só que ele é menos complicado e não faz patches no kernel, logo -> não é tão divertido =D Posto um link aqui assim que conseguir

PS: Se você leu essa linha, só responde uma coisa, por favor: Eu devo deixar os “códigos” assim como fiz (só comentando o que deve fazer) ou devo botar código real? Fiquei na dúvida e fiz como eu entendo melhor.

Recomendados:
Google: “compiling kernel in %s”, minhaDistribuicao

Links:
Fonte do artigo:
http://www.phoronix.com/ (fiquei sabendo por alguém que mandou pro br-linux)
O patch: Arquivo da lista do kernel (linkado pelo artigo anterior)