Eu imagino que só o linux-image
se trata do kernel em si. Mas eu sempre instalei todos mesmo com um sudo dpkg -i *.deb
.
Eu também entendo a mesma coisa pela descrição dos pacotes no Debian, teoricamente basta instalar linux-image
(versão sem dbg
) para poder apenas usar. No máximo, o usuário que não vai trabalhar com desenvolvimento do kernel vai querer instalar os headers
também (para poder compilar drivers que não vêm com o kernel, como Nvidia, V4L2-Loopback, etc.).
Os outros eu entendo que são para desenvolvedores, o image
com dbg seria um pouco mais lenta, mas mais fácil de um programador extrair informações no caso de bugs, e o libc-dev
já diz no nome (compilar bibliotecas do C).
Só o pacote de módulos que é o
linux-headers-5.11.8-custom-walefy_5.11.8-custom-walefy-1_amd64.deb
E o kernel em sí
linux-image-5.11.8-custom-walefy_5.11.8-custom-walefy-1_amd64.deb
Eu já cheguei a instalar o kernel sem o headers e funcionou mas quando fui usar o virtualbox que usava os módulos do headers o virtualbox não funcionou.
O Lubuntu vem com o linux-image instalado junto com o headers.
E ai aplico os parâmetros
"-O3 -march=native"
E removeu o “Generic-x86-64” do menuconfig em “Processor family” para deixar o kernel brutalmente otimizado?
eu fiz só de teste então só segui os comandos do segundo vídeo, queria continuar testando mas não tenho mais meu pc.
Alias, pode me explicar como eu faço isso?
Processador você altera com
make menuconfig
É uma listinha, vai ter processor family… aí já dá uma boa diferença indicar a família correta, saindo da genérica.
O que estes parâmetros fazem? Fiquei curioso e não vi respostas no google.
o meu processador é a carroça Pentium E5300
ele não aparece aqui:
Aparece sim, vai scrolando para cima.
Mas já adianto que não faz muita diferença.
esse é o problema, ele não vai além dos itens que está aparecendo.
Não é que não faz muita diferença, fazer faz mas o que é a nivel de kernel já é rapido o que demora para fazer as tarefas é a nivel de usuario.
Exemplo:
$ adm1@jca-h310:~$ time cat <<EOF
> Teste de time
> EOF
Teste de time
real 0m0,003s
user 0m0,003s
sys 0m0,000s
Esta vendo o kernel levou 0 milesegundos.
E o meu não é otimizado, quer dizer que se otimizar vai continuar sendo 0 milesegundos, vai mudar nada.
Nivel de kernel é o Ring 0.
É por isso que o driver de video do VirtualBox é no Ring 0 e o VirtualBox no sistema host também instala driver no Ring 0 para ganhar desempenho.
São parâmetros dos compiladores GCC ou CLang sei lá qual você vai usar.
$ man gcc
Mas esses parâmetros eu defino no makefile, não sei se funciona se aplicar no comando.
-march=native
Vai compilar especificamente para o CPU da maquina que esta compilando, mas é possível definir processadores diferente caso queira fazer compilação cruzada para outros CPU.
-O3
Vai aplicar otimização:
-O3 Otimiza ainda mais. -O3 ativa todas as otimizações especificadas por -O2 e também ativa os seguintes sinalizadores de otimização:
-fgcse-after-reload -finline-functions -fipa-cp-clone -floop-interchange -floop-unroll-and-jam -fpeel-loops -fpredictive-commoning
-fsplit-path -ftree-loop-distribuir-padrões -ftree-loop-distribuição -ftree-loop-vetorizar -ftree-parcial-pre -ftree-slp-vetorizar
-funswitch-loops -fvect-cost-model -fversion-loops-for-strides
Aplicar otimização -O3 pode gerar bugs por parte do compilador gerando bug que não esta no código fonte.
Sim existe bug em compilador que buga a compilação mas o GCC parece estável.
O parâmetro -O0
é o que compila exatamente como esta no código fonte sem otimização alguma geralmente utilizado para debug.
Tenta fazer desse jeito que o @Capezotte falou:
Acho que isso você vai ter que alterar manualmente no arquivo .config
.
Segundo a lista do link: choose-gcc-optimization.sh - aur.git - AUR Package Repositories
A 3ª opção vai da família Core2 ate a família Intel Xeon(Cooper Lake).
Eu só não sei se esse link do ARCH esta certo.
O meu CPU é da família 6th (Skylake).
adm1@jca-h310:~$ lscpu | grep "Família da CPU:"
Família da CPU: 6
O link diz que você pode ver também por esse comando:
gcc -c -Q -march=native --help=target | grep march | awk '{print $2}' | head -1
Mas esse comando diz a família usando o GCC diferente do que eu passei que é o kernel que detecta.
Selecionando a CPU família no menuconfig você otimiza o código fonte, já o -O3 -march=native
você otimiza a compilação.
É assim que faz para aplicar o -O3 -march=native
:
Estava assim antes:
export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
-O2 -fomit-frame-pointer -std=gnu89
Ai quando aplico a otimização eu troco o -O2 por -O3 e adiciono o -march=native para o GCC detectar a família da CPU fica assim:
Eu alterei em:
KBUILD_HOSTCXXFLAGS
Também mas é só porque ele esta usando o -O2 e eu não quero que usa a -O2 eu quero que use a -O3.
Você aplica nesta “CFLAGS” ai usa o buscador do editor para encontrar.
Agora que você já sabe tudo que precisa é só otimizar ^^.
Quando eu abre o mekefile agora olha só o que eu encontrei:
Agora por padrão o makefile vai usa o CLang e se não tiver sera usado o GCC vejam selecionado de azul.
Built-in é mais rápido do que modules você pode colocar as coisas que você vai usar muito como built-in.
Exemplo no caso do KVM:
De preto a legenda, e o KVM esta selecionado para compilar em built-in.
Colocar KVM em built-in é bom para quem usa maquina virtual usando KVM.
Para complementar a discussão, temos um post no blog de um passo a passo:
https://diolinux.com.br/linux/compilar-um-kernel-linux-passo-a-passo.html
Mas e de 3 anos atrás, ele pode estar desatualizado, não?
A forma de compilar é a mesma coisa ate hoje ^^.
É um risco que se corre com tutoriais de fato, é bom estar atento a isso, mas não é o caso deste felizmente.
O que muda, naturalmente, é a versão do Kernel.