LEMBRETE: todas as otimizações são transformações, mas nem todas as transformações são otimizações.
Se algo der errado, a culpa é do usuário e não do sistema.
Vejamos algumas modificações que podem otimizar o sistema
Gentoo Linux.
CPU_FLAGS_X86
CPU_FLAGS_X86 é uma variável que contém instruções e outros recursos específicos da CPU. Essa variável serve para dizer ao Portage quais são as flags da CPU. Essas informações são usadas para otimizar compilações de pacote especificamente para a máquina.
No
Gentoo, você pode checar essas flags com a ferramenta "
cpuid2cpuflags":
# emerge -vaq cpuid2cpuflags
# cpuid2cpuflags
Uma forma de aplicar essas flags a todos os programas instalados, a partir de agora seria executando:
# echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
Kernel Liquorix
O
Kernel Liquorix possui uma série de configurações escolhidas para melhorar o desempenho em desktops, multimídia e jogos.
Para aplicar as configurações Liquorix ao kernel do Gentoo, faça o seguinte: baixe o "gentoo-sources" e a ferramenta "genkernel". Baixe as configurações Liquorix e instale-as com o "genkernel":
# emerge gentoo-sources genkernel
# wget https://raw.githubusercontent.com/damentz/liquorix-package/master/linux-liquorix/debian/config/kernelarch-x86/config-arch-64
Selecione o kernel novo:
# eselect kernel list
# eselect kernel set NÚMERO
Aplique as configurações baixadas:
# genkernel --kernel-config=config-arch-64 all
Por fim, antes de reiniciar, atualize o GRUB:
# grub-mkconfig -o /boot/grub/grub.cfg
Opcionalmente, você pode usar o "zen-sources", que é um kernel criado por entusiastas para fornecer o melhor kernel Linux possível. Onde incluem códigos que ainda não são encontrados no kernel principal em uma tentativa de oferecer suporte aos hardwares mais novos, novos recursos, correções de segurança, otimizações etc.
Para instalar, basta...
Desmascarar o zen-sources:
# flaggie sys-kernel/zen-sources +~amd64
E instalar:
# emerge -av sys-kernel/zen-sources sys-kernel/linux-firmware
Graphite, LTO e -O3
Vamos por partes.
O que faz o Graphite?
O site do GCC, diz:
"O graphite é uma estrutura para otimizações de memória de alto nível usando o modelo poliédrico."
Eu tentei resumir o significado disso, mas não ficou muito preciso. Então pedi ajuda ao Leonardo Neumann, um usuário do grupo
gentoobr e ele disse o seguinte:
"[O graphite faz] uma análise do desdobramento dos loops na forma de um poliedro. Pega uma cadeia de loops aninhados (um dentro do outro) em termos de como eles se expandem no plano cartesiano formado pelas variáveis de iteração. Isso forma um desenho geométrico (poliedro).
Daí, em cima desse poliedro, são aplicadas otimizações que servem para diversos fins. Nesse caso, a mais relevante é a de aumentar a localidade da cache (tornar os dados que são acessados juntos mais próximos um do outro em memória).
Isso faz com que ocorram menos cache misses e consequentemente o desempenho aumente nesse cenário. No caso essa otimização em específico se chama tiling. Tem outras relevantes também, por exemplo, a de auto-paralelismo que pega essa descrição geométrica e analisa como ela pode ser paralelizada sem que ocorram problemas de dependência de dados entre uma e outra."
O que faz o LTO
Habilita o "Link Time Optimization" (LTO). Ele requer o "vinculador Gold" ao usar GCC ou LDD ao usar Clang. O LTO permite que o compilador possa ver mais de um único arquivo ".o" por vez. Isso tem as seguintes consequências: reduz o tamanho dos pacotes binários em até 40%. Aumenta a velocidade de execução dos programas.
Vamos à segunda parte do artigo.