Execute:
# make menuconfig
(entra nas configurações do kernel)
Para entrar nas opções, dê Enter e para alterar de "M" para "*", e vice-versa, é só pressionar a barra de espaços. A opção "M" compila como módulo, a opção "*" compila embutido no kernel. A escolha vai de cada parâmetro. Como módulo não fará parte do "monólito" do kernel.
Para sair de uma opção, dê Esc duas vezes seguidas. Navegue com as setas de direção.
Vá em: Processor type and features (enter) → Processor Family (Generic-x86-64)
...navegue e marque (barra de espaços) a opção que corresponde ao processador da sua máquina. Ao dar barra de espaços o menu voltará automaticamente. No meu caso, marquei Core 2/newer Xeon, por ele ter quatro núcleos (Cores). Caso ficar na dúvida, deixe a opção padrão:
Generic-x86-64
Mais abaixo, vá em "Timer frequency". Se a sua instalação for para servidor, marque a opção "
100 HZ" (isso melhorará o tempo de resposta do servidor para as requisições). Para Desktop, deixe "
250 HZ".
Retorne ao menu principal:
Esc + Esc
Vá em: Networking support → Networking options → Network packet filtering framework (netfilter) → IP: Netfilter Configuration
E marque todas as opções relativas ao
nf_tables. Esse parâmetro não tem a ver com otimização, mas com suporte ao nftables.
Tecle:
Esc + Esc
Vá em IPv6: "Netfilter Configuration" e marque as duas opções do
Nftables. Tecle:
Esc + Esc
Vá em "IPv4/IPV6 bridge connection tracking support" e marque essa opção.
Volte ao menu principal dando ESC e cuidando até aparecer o menu principal "Linux/x86 5.13.10 Kernel Configuration".
Vá em "File Systems", marque os sistemas de arquivos utilizados com "*". No meu caso, ext4 (/boot) com btrfs (demais partições).
* Dica: para ext4, marque a primeira opção (The Extended 4 (ext4) filesystem) com "*", e deixe as 3 seguintes marcadas.
Caso você quiser, os parâmetros com os arquivos de sistemas os quais tem no seu sistema Linux você pode colocar "*" para compilar embutido no kernel, o suporte do kernel ao sistema de arquivos fica melhor, porém, quanto mais opções se coloca como "*" maior ficará o tamanho do kernel após a compilação. Alguns parâmetros é melhor ficarem como módulo (M).
Na dúvida, deixe como no padrão que já está ali.
Para o btrfs, ficaram marcadas as opções:
- Btrfs filesystem support;
- Btrfs POSIX Access Control Lists e
- Btrfs will run sanity tests upon loading.
- Btrfs debugging support
De acordo com os sistemas de arquivos que você tem no seu Linux (ext4, Btrfs etc) configure como queira.
Mais abaixo, vá em: "Network File Systems"
E se for servidor, coloque um "*" na opção "NFS server support".
Volte:
Esc + Esc
Logo abaixo, vá em "Native language support" e marque com "*", as opções:
- Codepage 860 (Portuguese)
- ASCII (United States)
- NLS ISO 8859-1 (Latin 1; Western European Languages)
- LS UTF-8
Retorne ao menu principal selecionando EXIT. Após o último EXIT, aparecerá a janela "Do you wish...", deixe como: "
Yes" e dê Enter.
Execute:
# ls -a
E veja se o arquivo ".config" foi gravado. Se não, repita a operação.
Agora, vamos alterar os arquivos necessários para otimizar a compilação de acordo com o processador da máquina:
# cc -march=native -E -v - &1 | grep cc1
Veja a saída desse comando, que beleza de novo:
/usr/lib/gcc/x86_64-linux-gnu/6/cc1 -E -quiet -v -imultiarch x86_64-linux-gnu - -march=sandybridge -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mno-movbe -maes -mno-sha -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd -mno-f16c -mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bwroot@seibei:/usr/src/linux-5.13.10# -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mno-mwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=sandybridge
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Para sair, dê enter.
Vamos alterar os arquivos (segue uma lista completa dos arquivos com as linhas a serem alteradas). É necessário alterar somente 3 arquivos (os 3 primeiros abaixo), porém, se você é paranoico e obcecado, altere os outros 10 também:
* IMPORTANTE: em todos os arquivos, altere as opções "march" para "-march=native", as opções "mcpu" para "-mcpu=native" e as opções "mtune" para "mtune=processador". Nesta última opção, "mtune", coloque o que aparecer na saída do comando cc -march=native -E -v - &1 | grep cc1. No meu caso ficou "-mtune=sandybridge".
Se a versão do GCC for 4.5.1, inclusive, para baixo, deixe "-mtune=generic". Como anteriormente instalamos e atualizamos a versão do GCC (o GCC, o G++ e o MAKE, entre outros, estão no pacotão "build-essential"), não precisa se preocupar muito com isso. A não ser que seu sistema e seu hardware sejam bem antigos.
Para ver a versão do GCC, digite:
# gcc --version
Para os arquivos abaixo utilize a busca do editor de texto, as linhas coloquei somente como parâmetro. Aconselho a alterar manualmente e não usar ctrl+c, ctrl+v.
Lista de arquivos:
# vim /usr/src/.../...
(use teu editor de texto preferido)
1. /usr/src/linux-5.13.10/arch/x86/boot/compressed/Makefile - linha ~35, opção march=native;
2. /usr/src/linux-5.13.10/arch/x86/Makefile - linhas 25, 28, 123, 124, 127 e 128 (march); linhas 127, 129 e 130, (mtune);
3. /usr/src/linux-5.13.10/arch/x86/Makefile_32.cpu - tem várias linhas, utilize a busca do seu editor de texto. Neste arquivo tem duas opções que não devem ser mudadas: -mtune=$(1),$(2)) e -mcpu=$(1),$(2)), as outras pode mudar.
Neste último arquivo acima, atenção especial na linha 47 "cflags-$(CONFIG_X86_GENERIC += $(call tune,generic,$(call tune,i686))", que deverá ficar assim:
cflags-$(CONFIG_X86_GENERIC += $(call tune,sandybridge,$(call tune,sandybridge))
(coloque o correspondente ao teu processador)
Este arquivo de número 3 é o que otimizará a compilação para o processador da máquina.
A partir daqui, continue se quiser extrair mais, mas preste atenção para alterar os arquivos da forma certa.
Faça com calma, cuidado e divirta-se, se quiser, mas não é necessário. Veja bem, talvez ao entrar em algum arquivo abaixo você não encontre as opções, isso ocorre por causa das distribuições. Recomendo pular essa etapa.
- /usr/src/Linux-3.10.7/arch/alpha/Makefile;
- /usr/src/Linux-3.10.7/arch/arm/Makefile;
- /usr/src/Linux-3.10.7/arch/avr32/Makefile;
- /usr/src/Linux-3.10.7/arch/frv/Makefile;
- /usr/src/Linux-3.10.7/arch/m68k/Makefile;
- /usr/src/Linux-3.10.7/arch/mips/Makefile;
- /usr/src/Linux-3.10.7/arch/parisc/Makefile;
- /usr/src/Linux-3.10.7/arch/powerpc/Makefile;
- /usr/src/Linux-3.10.7/arch/s390/Makefile;
- /usr/src/Linux-3.10.7/arch/sparc/Makefile.