Compilando o Kernel otimizado para o seu processador no Ubuntu!

Iniciado por galactus, 22 de Abril de 2011, 09:49

tópico anterior - próximo tópico

Gunss

Citação de: vampire_thunder online 30 de Agosto de 2011, 09:40
Citação de: 4d4c47 online 29 de Agosto de 2011, 23:56
dê uma olhada nesse link do ubuntu ppa:

http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.0.3-oneiric/

aparece os seguintes arquivos para amd64:

linux-headers-3.0.3-030003-generic_3.0.3-030003.201108180913_amd64.deb   
linux-headers-3.0.3-030003_3.0.3-030003.201108180913_all.deb
linux-image-3.0.3-030003-generic_3.0.3-030003.201108180913_amd64.deb

a pergunta é :

como criar o arquivo linux-headers-*_all.deb sem usar a compilação pelo git ?



Se você reparar o headers-generic tem kb de tamanho, enquanto esse all tem em média 10MB. Esse all serve tanto para 32 bits quanto para 64. Foi a melhor coisa que fizeram.
Para compilar sem o git, basta seguir o link que o galactus postou.

mas pra que server esse _all?? é headers tanto pra x86 quando x86_64? pq unificar? estou cheio de dúvidas...

Stivekx

#106
Tipo, quando eu rodei o comando:
cc -march=native -E -v - </dev/null 2>&1 | grep cc1
Ele retornou:
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/cc1 -E -quiet -v - -D_FORTIFY_SOURCE=2 -march=amdfam10 -mcx16 -msahf -mpopcnt -mabm --param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=amdfam10 -fstack-protector


-march=amdfam10
l1-cache-line-size=64
l2-cache-size=1024

1 - Meu processador é um Turion x2, de acordo com wiki do gentoo o -march pra ele seria k8, mas o comando me retorna amdfam10
2 - O l1 e l2 cache do meu processador apareceu 64 e 1024 respectivamente, mas quando eu rodo o comando: dmidecode --type cache, ele retorna:

root@stive-laptop:/usr/src# dmidecode --type cache
# dmidecode 2.9
SMBIOS 2.6 present.

Handle 0x0005, DMI type 7, 19 bytes
Cache Information
Socket Designation: L1 Cache
Configuration: Enabled, Not Socketed, Level 1
Operational Mode: Write Back
Location: Internal
Installed Size: 256 KB
Maximum Size: 256 KB
Supported SRAM Types:
Pipeline Burst
Installed SRAM Type: Pipeline Burst
Speed: 1 ns
Error Correction Type: Multi-bit ECC
System Type: Unified
Associativity: 2-way Set-associative

Handle 0x0006, DMI type 7, 19 bytes
Cache Information
Socket Designation: L2 Cache
Configuration: Enabled, Not Socketed, Level 2
Operational Mode: Write Back
Location: Internal
Installed Size: 2048 KB
Maximum Size: 2048 KB
Supported SRAM Types:
Pipeline Burst
Installed SRAM Type: Pipeline Burst
Speed: 1 ns
Error Correction Type: Multi-bit ECC
System Type: Unified
Associativity: 16-way Set-associative


Installed Size: 256 KB
Maximum Size: 256 KB
Installed Size: 2048 KB
Maximum Size: 2048 KB
Porque essa diferença nesses valores?

----
Edit:
Dando uma lida no google, entendi, vou deixar a resposta aqui pra caso mais alguém se interesse.
Meu processador é dual core, no caso ali disse quando de l2cache tem num core especifico, logo 1024*2 = 2048, o que no total meu processador tem.
No caso do l1 cache, o comando do cc deu duas memórias: l1-cache-size e l1-cache-line-size ambos de 64kb, totalizando 128, num processador dual core 128 * 2, 256, igualando ao valor que dmidecode me deu.

galactus

Stivekx, confie na saída dos comandos do GCC!

Tudo tem um motivo! Se você se interessar muito, só ler a farta documentação do GCC que explica cada uma das suas opções!

K8 está indicando uma família de processadores!

Nessa família estão incluídos:
- Athlon 64 X2
- Athlon 64 FX
- Athlon 64
- Sempron
- Opteron
- Turion 64

Portanto não tem haver com as otimizações do seu processador!  Resumindo, ao usar K8 você estaria fazendo uma otimização genérica para a família K8 e não para o seu processador específico. Veja que o seu turion é novo, a opção  amdfam10 aponta para o sucessor do K8, a família 10h da AMD, ela dispara as otimizações: MMX, SSE, SSE2, SSE3, SSE4a e ABM para essa família 10h da AMD!

Quer continuar com a K8 do Guia do Gentoo?

Se quiser ver para crer é só comparar as saídas das otimizações!

No terminal execute (não precisa ser root):

Citarexport TESTFLAGS="-march=native"; export OUTPUT=native; touch $OUTPUT.cc;gcc $TESTFLAGS -fverbose-asm $OUTPUT.cc -S; cat $OUTPUT.s; unset OUTPUT TESTFLAGS; rm -f $OUTPUT.cc

e

Citarexport TESTFLAGS="-march=amdfam10"; export OUTPUT=amdfam10; touch $OUTPUT.cc; gcc $TESTFLAGS -fverbose-asm $OUTPUT.cc -S; cat $OUTPUT.s; unset OUTPUT TESTFLAGS; rm -f $OUTPUT.cc


Você mesmo pode ler aí que o native ativa mais instruções que a amdfam10, por isso que indicamos o march=native!  O native é uma mão na roda, ela verifica e acha as melhores opções para o seu processador específico, pode ser que o você não consiga os melhor desempenho, isto porque os programas instalados não foram compilados com otimizações específicas para o seu processador, esse é o preço que se paga por usar uma distro binária, mas em relação ao seu processador estará tudo lá!

Passou o cartão?
Kubuntu e Windows em Dual Boot PC e Notebook!

Gunss

Se tiver um computador dual socket pode usar uma distro tipo arch onde você pode compilar TUDO que estiver instalado.

Eu particularmente procuro compilar apenas o kernel (e olha lá, hoje nem isso), VLC, ffmpeg e mencoder. Porém o VLC já esta de bom tamanho.

Vou ver se faço um script pra baixar o mencoder e ffmpeg do git.

E falando em kernel, já saiu o 3.0.4

Stivekx

@galactus

Muito Obrigado pela explicação.
Vou tentar com o que o gcc me diz mesmo, march=native é o que eu sempre usei.

Nas outras vezes que compilei o kernel não mudei nada além do march, as outras opcoes eu deixei como estavam, vou ver como fica.

Stivekx

#110
Fiz um script em bash pra automatizar todo o processo descrito neste tópico.
Tinha feito um dois messes atrás, mas tinha vários bugs, mas esse atual está bom, ele só substitui o que ele deve...

Pra quem quiser:
http://pastebin.com/Uj1FzT4T

comentei as linhas pra quem quiser entender o que ele faz...

Pra simplesmente baixar e usar o script:
cd /usr/src/linux
wget -c http://pastebin.com/raw.php?i=Uj1FzT4T -O script.sh
chmod +x script.sh
./script.sh


Obs: Execute ele depois de ter aplicado todos os patchs desejados no kernel

web2000

O VirtualBox ficou um foguete! A VM com Windows XP da boot em 25 segundos, pronto para usar (e mostra a tela "Bem-vindo" com apenas 10 segundos depois de iniciar a VM)

galactus

Pessoal criei o outro tópico para criarmos um novo tuto atualizado sobre compilação do kernel: http://ubuntuforum-br.org/index.php/topic,87070.0.html
Kubuntu e Windows em Dual Boot PC e Notebook!

Gordin

dpkg-deb: erro: diretório de controle possui permissões ruins 2755 (devem ser >=0755 e <=0755)
make[2]: ** [debian/stamp/binary/linux-image-2.6.39.4-ck1] Erro 2
make[2]: Saindo do diretório `/usr/src/linux-2.6.39.4'
make[1]: ** [debian/stamp/binary/pre-linux-image-2.6.39.4-ck1] Erro 2
make[1]: Saindo do diretório `/usr/src/linux-2.6.39.4'
make: ** [kernel_image] Erro 2


Alguém o q pode ser este erro?

grato

vampire_thunder

Citação de: Gordin online 05 de Setembro de 2011, 12:08
dpkg-deb: erro: diretório de controle possui permissões ruins 2755 (devem ser >=0755 e <=0755)
make[2]: ** [debian/stamp/binary/linux-image-2.6.39.4-ck1] Erro 2
make[2]: Saindo do diretório `/usr/src/linux-2.6.39.4'
make[1]: ** [debian/stamp/binary/pre-linux-image-2.6.39.4-ck1] Erro 2
make[1]: Saindo do diretório `/usr/src/linux-2.6.39.4'
make: ** [kernel_image] Erro 2


Alguém o q pode ser este erro?

grato

O erro é autoexplicativo e o que você tem que fazer está na primeira linha. Um chmod 755 -R no diretório resolve.

Gordin

vampire, obrigado pela ajuda cara.
Apesar de ser auto-explicativo o erro, eu não soube interpretá-lo. Por isso vim aqui perguntar.

magno TI

Ai esta tudo muito bom mais, gostaria que alguém me ajude a compilar o kernel do 10.04 server com um passo a passo pois também quero aprender?

web2000

Citação de: magno TI online 10 de Setembro de 2011, 19:19
Ai esta tudo muito bom mais, gostaria que alguém me ajude a compilar o kernel do 10.04 server com um passo a passo pois também quero aprender?

Recompilar o kernel só é demorado (dependendo do computador), mas é relativamente fácil. Procure no Google, por "recompilar kernel ubuntu" e adapte a esse dica. O resultado vale apena.

No benchmark Geekbench o desempenho do meu computador foi de 3585 para 4252, ou seja, um ganho de 18,6%

Até+

Gunss


Metalbobolic

Gostaria de tirar uma grande dúvida..

Estou usando..kernel generic pae..

Consigo usar o comando make oldconfig, consigo configurar o kernel masi rescente..sem dar problemas?

Por que..da ultima vez que tentie...quando inicei..deu kernel panic