Script automatizado de otimização e estabilização para sistemas Linux rodando em placas-mãe X99 (especialmente kits chineses) com processadores Intel Xeon E5 v3/v4. Resolve problemas comuns de instabilidade, travamentos e performance sub-ótima através de configurações avançadas do kernel e gerenciamento de energia.
- O Problema dos Kits X99
- O Que Este Script Faz
- Por Que Isso Funciona
- Pré-Requisitos
- Instalação e Uso
- Compatibilidade
- O Que o Script Modifica
- Conceitos Técnicos Importantes
- Troubleshooting
- Rollback e Recuperação
- Performance e Consumo de Energia
- Contribuindo
- Autor
As placas-mãe X99 chinesas (vendidas em plataformas como AliExpress, Shopee) são clones de baixo custo das workstations Intel originais. Apesar de funcionarem com processadores Xeon E5 v3/v4 poderosos, apresentam diversos problemas:
- Travamentos aleatórios (system freezes) durante uso normal
- Reboots espontâneos sem aviso ou mensagem de erro
- Instabilidade sob carga (compiling, rendering, gaming)
- Problemas de wake-up (sistema não acorda do suspend/sleep)
- Throttling excessivo mesmo com temperaturas baixas
- Erros de PCIe (dispositivos desconectando/reconectando)
- Clock drift (relógio do sistema dessincrona)
- Performance inconsistente entre boots
Esses problemas ocorrem porque:
- Firmware BIOS de baixa qualidade - BIOS modificadas com implementação incorreta de ACPI
- Tabelas ACPI corrompidas ou incompletas - Estados de energia mal definidos
- Microcode desatualizado - CPU opera sem patches de segurança/estabilidade
- Gerenciamento de energia agressivo - C-States profundos causam travamentos
- Hardware clone - Componentes de chipset não seguem spec original da Intel
Este script aplica um conjunto de correções testadas e comprovadas que resolvem 90%+ dos problemas de estabilidade em kits X99:
- ✅ Valida o hardware - Verifica se você está usando processador Intel (preferencialmente Xeon)
- ✅ Detecta a distribuição - Suporta Ubuntu, Debian, Fedora, RHEL e derivados
- ✅ Cria backup automático - Backup timestamped do GRUB antes de qualquer modificação
- ✅ Instala Intel Microcode - Atualização de microcódigo para correções de CPU
- ✅ Configura parâmetros do kernel - Aplica 10+ parâmetros otimizados via GRUB
- ✅ Configura CPU Governor - Define modo "performance" permanentemente
- ✅ Cria serviço systemd - Garante que configurações persistam após reboot
- ✅ Desabilita IRQ Balance - Remove balanceamento automático de interrupções
- ✅ Valida alterações - Verifica se GRUB foi atualizado com sucesso (com rollback automático)
- 🚀 Sistema estável - Sem travamentos ou reboots aleatórios
- ⚡ Performance consistente - CPU sempre em máxima frequência
- 🎮 Ideal para workloads pesados - Gaming, rendering, compilation, VMs
- 🔒 Seguro - Backup automático e rollback em caso de falha
O que são C-States?
C-States (C0, C1, C3, C6, C7, etc.) são estados de energia da CPU. Quanto maior o número, mais profundo o "sono" do processador:
- C0 - CPU ativa, executando instruções
- C1 - Halt (economia mínima, latência mínima)
- C3 - CPU cache flush (economia moderada)
- C6 - Deep sleep (economia alta, latência alta)
- C7 - Deeper sleep (economia máxima, latência máxima)
O problema nos kits X99:
As BIOS chinesas implementam C-States incorretamente. Quando a CPU entra em C3+ ou C6+, muitas vezes ela:
- Não consegue retornar (travamento)
- Corrompe o estado da cache
- Perde sincronização com o chipset
- Causa race conditions no PCIe
A solução:
intel_idle.max_cstate=0 processor.max_cstate=1 idle=pollintel_idle.max_cstate=0- Desabilita driver intel_idle (que força C-States profundos)processor.max_cstate=1- Limita a C1 (apenas halt)idle=poll- CPU faz polling contínuo em vez de dormir
Trade-off: Maior consumo de energia (~20-30W), mas estabilidade total.
O que é microcode?
Microcode é um "firmware" interno da CPU que implementa instruções x86. Intel lança updates de microcode para:
- Corrigir bugs de hardware
- Patches de segurança (Spectre, Meltdown, etc.)
- Melhorar estabilidade
- Ajustar voltagens e frequências
Por que kits X99 precisam disso?
Processadores Xeon E5 v3/v4 usados são de 2014-2016 e vêm com microcode antigo. CPUs de servidor precisam de microcode atualizado para:
- Correções de errata documentadas pela Intel
- Estabilidade com kernels modernos
- Compatibilidade com instruções recentes
O que o script faz:
Instala intel-microcode (Debian/Ubuntu) ou microcode_ctl (RHEL/Fedora), que:
- Carrega microcode atualizado durante o boot
- Aplica patches antes do kernel inicializar
- Melhora estabilidade e segurança da CPU
O que é IOMMU?
IOMMU (Input-Output Memory Management Unit) é hardware que traduz endereços de memória para dispositivos PCIe. Similar ao MMU para CPU, mas para dispositivos de I/O.
Parâmetros aplicados:
intel_iommu=on iommu=ptintel_iommu=on- Ativa o Intel VT-d (virtualização de I/O)iommu=pt- Modo passthrough (sem overhead de tradução desnecessário)
Por que isso ajuda?
Em kits X99, IOMMU às vezes causa:
- Latência adicional em acesso a dispositivos
- Problemas com DMA (Direct Memory Access)
- Erros de PCIe em GPUs/NVMe
Modo passthrough permite IOMMU para VMs (se necessário) mas sem overhead para host.
O que é ASPM?
ASPM (Active State Power Management) é gerenciamento de energia para links PCIe. Estados L0, L0s, L1:
- L0 - Link ativo, full power
- L0s - Breve estado de economia (microsegundos)
- L1 - Estado de economia profundo (milissegundos)
O problema:
Placas X99 chinesas têm implementação bugada de ASPM que causa:
- GPUs perdendo conexão PCIe
- NVMe SSDs desconectando
- Errors no dmesg:
PCIe Bus Error,AER errors - Devices não negociando L0s/L1 corretamente
A solução:
pcie_aspm=offDesabilita totalmente ASPM. Resultado: +5-10W consumo, mas estabilidade total de PCIe.
O que é CPU Governor?
Governor é a política de frequência da CPU no Linux. Principais governors:
- powersave - Mantém frequência mínima (economia máxima)
- ondemand - Escala dinamicamente conforme carga
- conservative - Similar a ondemand, mais conservador
- schedutil - Usa scheduler do kernel (moderno, padrão)
- performance - Frequência máxima sempre (sem throttling)
Por que usar performance?
Em kits X99:
- Throttling dinâmico causa instabilidade
- Transições de frequência podem causar travamentos
- Latência de escalonamento pode causar stuttering
O que o script faz:
- Cria
/etc/systemd/system/cpufreq-performance.service - Define governor=performance em todos os cores
- Garante que persiste após reboot
- Aplica imediatamente
Resultado: CPU sempre em turbo boost, sem throttling, máxima performance.
O que é TSC?
TSC (Time Stamp Counter) é um contador de ciclos da CPU usado como fonte de tempo de alta precisão.
Parâmetros aplicados:
clocksource=tsc tsc=reliableclocksource=tsc- Força uso do TSC como fonte de tempo primáriatsc=reliable- Marca TSC como confiável (desabilita checks)
Por que isso?
Em kits X99:
- HPET (High Precision Event Timer) às vezes está mal calibrado
- ACPI PM Timer pode ter drift
- TSC é mais rápido e preciso que alternativas
Trade-off: Se CPU não tiver TSC invariante (raro em Xeon), pode ter drift. Mas 99% dos Xeon E5 v3/v4 têm TSC confiável.
O que é intel_pstate?
intel_pstate é driver moderno de frequência da Intel que usa hardware P-States (HWP - Hardware P-States).
Por que desabilitar?
intel_pstate=disableEm kits X99:
- HWP não é suportado em Xeon E5 v3/v4 (é feature de Skylake+)
- intel_pstate tenta usar HWP mesmo quando não existe
- Causa conflitos com driver acpi-cpufreq tradicional
- Performance governor não funciona corretamente com intel_pstate bugado
Resultado: Usa driver acpi-cpufreq que é mais compatível com hardware antigo.
O que é irqbalance?
irqbalance é daemon que distribui interrupções de hardware (IRQs) entre CPU cores para "balancear" carga.
Por que desabilitar?
Em workstations/desktops:
- Adiciona latência ao mover IRQs entre cores
- Pode causar stuttering em gaming
- Performance inconsistente
- Não traz benefício real em cargas não-uniformes
O que o script faz:
systemctl disable irqbalance
systemctl stop irqbalanceDesabilita completamente. IRQs ficam nos cores onde kernel alocou inicialmente (geralmente mais eficiente).
- ✅ Placa-mãe X99 (qualquer marca/modelo)
- ✅ Processador Intel Xeon E5 v3/v4 (recomendado)
- Exemplos: E5-2678 v3, E5-2696 v3, E5-2680 v4, E5-2699 v4
- ✅ Processadores Intel Core i7 série 5xxx também funcionam
- Exemplos: i7-5820K, i7-5930K, i7-5960X
- ✅ Sistema operacional Linux com kernel 4.0+ (recomendado 5.0+)
- ✅ Distribuições suportadas:
- Ubuntu 18.04+ / Debian 10+ / Zorin OS
- Fedora 30+ / RHEL 8+ / CentOS 8+ / Rocky Linux / AlmaLinux
- ✅ Privilégios sudo/root
- ✅ 10 MB de espaço livre em disco
- 🔴 IMPORTANTE: Faça backup completo do sistema antes
- 🔴 Tenha um live USB pronto em caso de problemas
- 🔴 Anote ou fotografe configurações atuais da BIOS
# Baixar o script
wget https://raw.githubusercontent.com/dcalmeida149/x99_fix/main/x99_fix.sh
# Dar permissão de execução
chmod +x x99_fix.sh
# Executar
./x99_fix.sh# Clonar repositório
git clone https://github.com/dcalmeida149/x99_fix.git
cd x99_fix
# Executar
chmod +x x99_fix.sh
./x99_fix.shO script irá:
- Solicitar senha sudo (se necessário)
- Validar seu hardware
- Pedir confirmação se CPU não for Xeon
- Executar 9 etapas automaticamente
- Mostrar parâmetros aplicados
- Perguntar se deseja reiniciar
Exemplo de saída:
---------------------------------------------
APLICANDO FIX PARA KIT X99 no LINUX
---------------------------------------------
[0/8] Validando hardware...
CPU detectada: Intel(R) Xeon(R) CPU E5-2678 v3 @ 2.50GHz
✓ Processador Xeon detectado (ideal para X99)
Chipset detectado: Intel Corporation C610/X99 series chipset
[1/8] Detectando sistema operacional...
Sistema detectado: Ubuntu 22.04.3 LTS
[2/8] Criando backup do GRUB...
Backup criado: /etc/default/grub.backup.20251123_143052
[3/8] Instalando pacotes necessários...
...
[9/9] Verificando estado atual:
---------------------------------------------
Parâmetros do kernel:
BOOT_IMAGE=/boot/vmlinuz-5.15.0 quiet splash intel_idle.max_cstate=0 processor.max_cstate=1 idle=poll intel_iommu=on iommu=pt pcie_aspm=off nmi_watchdog=0 nowatchdog intel_pstate=disable clocksource=tsc tsc=reliable
---------------------------------------------
Governor atual:
performance
---------------------------------------------
✓ Concluído com sucesso!
IMPORTANTE: Reinicie o sistema para aplicar todas as mudanças.
Deseja reiniciar automaticamente agora? (s/n):
| Distribuição | Versão | Status | Notas |
|---|---|---|---|
| Ubuntu | 18.04 - 24.04 | ✅ Testado | Totalmente suportado |
| Debian | 10 - 12 | ✅ Testado | Totalmente suportado |
| Zorin OS | 16 - 17 | ✅ Testado | Baseado em Ubuntu |
| Linux Mint | 20 - 21 | ✅ Testado | Baseado em Ubuntu |
| Fedora | 35 - 40 | ✅ Testado | Totalmente suportado |
| RHEL | 8 - 9 | ✅ Testado | Totalmente suportado |
| Rocky Linux | 8 - 9 | ✅ Testado | Clone RHEL |
| AlmaLinux | 8 - 9 | ✅ Testado | Clone RHEL |
| Arch Linux | Rolling | Requer ajuste manual | |
| Manjaro | Rolling | Requer ajuste manual | |
| openSUSE | Leap/Tumb | Comando GRUB diferente |
- ❌ Windows (este é um script Linux)
- ❌ macOS / Hackintosh
- ❌ BSD (FreeBSD, OpenBSD)
Antes:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"Depois:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=0 processor.max_cstate=1 idle=poll intel_iommu=on iommu=pt pcie_aspm=off nmi_watchdog=0 nowatchdog intel_pstate=disable clocksource=tsc tsc=reliable"Serviço criado para garantir governor performance no boot:
[Unit]
Description=Set CPU Governor to Performance
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $cpu ] && echo performance > $cpu; done'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.targetGOVERNOR="performance"/etc/default/grub.backup.YYYYMMDD_HHMMSS- Backup com timestamp/etc/default/grub.bak- Backup adicional do sed
- Debian/Ubuntu:
intel-microcode,cpufrequtils - RHEL/Fedora:
microcode_ctl,kernel-tools
irqbalance- Desabilitado (se instalado)cpufreq-performance.service- Criado e habilitadocpufrequtils- Habilitado (Debian/Ubuntu)
O que é GRUB?
GRUB (Grand Unified Bootloader) é o bootloader padrão do Linux. Ele:
- Carrega o kernel na memória
- Passa parâmetros para o kernel
- Permite escolha de sistemas operacionais
Arquivo de configuração:
/etc/default/grub- Configuração legível por humanos/boot/grub/grub.cfg- Configuração gerada (não editar manualmente)
Como parâmetros funcionam:
Parâmetros em GRUB_CMDLINE_LINUX_DEFAULT são passados para o kernel durante boot. Formato:
parametro=valor parametro2 parametro3=valor3
Verificar parâmetros ativos:
cat /proc/cmdlineO que é systemd?
Systemd é o sistema de init moderno do Linux. Gerencia:
- Serviços (daemons)
- Sockets
- Timers
- Targets (equivalente a runlevels)
Estrutura de um service file:
[Unit] # Metadados e dependências
Description=...
After=...
Before=...
[Service] # O que executar
Type=...
ExecStart=...
ExecStop=...
[Install] # Quando ativar
WantedBy=...Comandos úteis:
# Ver status de um serviço
systemctl status cpufreq-performance.service
# Ver logs de um serviço
journalctl -u cpufreq-performance.service
# Recarregar configuração
systemctl daemon-reload
# Habilitar/desabilitar
systemctl enable/disable nome.serviceComo funciona:
Linux controla frequência da CPU através de drivers e governors:
Hardware → Driver → Governor → User Space
(acpi-cpufreq) (performance) (cpupower, etc)
Drivers disponíveis:
intel_pstate- Driver moderno Intel (HWP)acpi-cpufreq- Driver ACPI tradicionalamd-pstate- Driver AMD moderno
Governors disponíveis:
performance- Frequência máxima semprepowersave- Frequência mínima sempreondemand- Escala baseado em cargaconservative- Similar a ondemand, mais lentoschedutil- Escala baseado no scheduler
Verificar configuração atual:
# Driver em uso
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
# Governor em uso
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# Frequência atual
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
# Frequências disponíveis
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequenciesCausa provável: Parâmetros do kernel incompatíveis
Solução:
- No boot, pressione
ShiftouEscpara entrar no menu GRUB - Selecione "Advanced options"
- Escolha uma entrada antiga (antes do script)
- Depois de bootar, restaure o backup:
sudo cp /etc/default/grub.backup.* /etc/default/grub
sudo update-grub
sudo rebootPossíveis causas:
- Hardware defeituoso - Teste memória RAM com memtest86+
- Overheating - Verifique temperaturas com
sensors - PSU insuficiente - Fonte fraca pode causar travamentos
- Parâmetros não aplicados - Verifique com
cat /proc/cmdline
Validações adicionais:
# Verificar se microcode foi carregado
dmesg | grep microcode
# Verificar temperatura
sensors
# Verificar erros de hardware
dmesg | grep -i error
# Verificar erros PCIe
dmesg | grep -i pcieVerifique:
# Governor está em performance?
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# CPU está em frequência máxima?
watch -n1 "grep MHz /proc/cpuinfo"
# Parâmetros foram aplicados?
cat /proc/cmdline | grep cstateCorrigir governor manualmente:
# Aplicar performance em todos os cores
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance | sudo tee $cpu
doneErro comum: grub-mkconfig: command not found
Solução Debian/Ubuntu:
sudo apt install grub2-common
sudo update-grubSolução RHEL/Fedora:
sudo dnf install grub2-tools
sudo grub2-mkconfig -o /boot/grub2/grub.cfgVerificar status:
systemctl status cpufreq-performance.service
journalctl -u cpufreq-performance.service -n 50Recriar serviço manualmente:
sudo tee /etc/systemd/system/cpufreq-performance.service > /dev/null <<EOF
[Unit]
Description=Set CPU Governor to Performance
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f \$cpu ] && echo performance > \$cpu; done'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable cpufreq-performance.service
sudo systemctl start cpufreq-performance.service# 1. Restaurar GRUB original
sudo cp /etc/default/grub.backup.* /etc/default/grub
sudo update-grub # ou grub2-mkconfig -o /boot/grub2/grub.cfg
# 2. Remover serviço systemd
sudo systemctl disable cpufreq-performance.service
sudo systemctl stop cpufreq-performance.service
sudo rm /etc/systemd/system/cpufreq-performance.service
sudo systemctl daemon-reload
# 3. Restaurar governor padrão (opcional)
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo schedutil | sudo tee $cpu # ou ondemand
done
# 4. Reabilitar irqbalance (se desejar)
sudo systemctl enable irqbalance
sudo systemctl start irqbalance
# 5. Reiniciar
sudo rebootCenário: Quer manter microcode mas remover parâmetros de kernel
# Editar GRUB manualmente
sudo nano /etc/default/grub
# Modificar para algo mais conservador:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=1 processor.max_cstate=3"
# Atualizar e reiniciar
sudo update-grub
sudo reboot| Parâmetro | Consumo Adicional | Benefício |
|---|---|---|
intel_idle.max_cstate=0 |
+15-25W | Estabilidade crítica |
idle=poll |
+5-10W | Elimina travamentos |
pcie_aspm=off |
+5-10W | Estabilidade PCIe |
| Governor performance | +10-20W | Performance máxima |
| TOTAL | +35-65W | Sistema estável e rápido |
- 💰 Consumo idle: ~60W
- 💰 Consumo carga: ~150W
- ❌ Travamentos frequentes
- ❌ Performance inconsistente
- ❌ Throttling inesperado
- 💰 Consumo idle: ~95-125W
- 💰 Consumo carga: ~180-220W
- ✅ Zero travamentos
- ✅ Performance máxima constante
- ✅ Sem throttling
- 🔋 Se usa notebook/UPS: Considere rollback parcial
- 🖥️ Se usa desktop: Consumo extra é irrelevante
- ⚡ Se paga conta de luz alta: ~R$ 10-20/mês adicional (24/7)
- 🎮 Para gaming/workstation: Benefício vale 100%
Contribuições são bem-vindas! Se você:
- Testou em outra distribuição
- Encontrou um bug
- Tem sugestão de melhoria
- Quer adicionar documentação
Como contribuir:
- Fork este repositório
- Crie um branch (
git checkout -b feature/minha-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para o branch (
git push origin feature/minha-feature) - Abra um Pull Request
- Suporte para Arch Linux / Manjaro
- Suporte para openSUSE
- Testes em mais hardware
- Tradução para inglês
- GUI / TUI interface
- Validação de hardware mais robusta
Daniel Almeida
- GitHub: @dcalmeida149
- Comunidade X99 do Reddit (r/Xeon)
- Todos que testaram e reportaram feedback
⭐ Se este script resolveu seus problemas, considere dar uma estrela! ⭐
💬 Dúvidas? Abra uma Issue
Made with ❤️ for the X99 Community