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?
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

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
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

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