Skip to content

dcalmeida149/x99_fix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 

Repository files navigation

🚀 X99 Fix - Otimização e Estabilização para Kits X99 no Linux

Shell Script Platform

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.


📑 Sumário


🔴 O Problema dos Kits X99

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:

Problemas Comuns:

  • 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

Causa Raiz:

Esses problemas ocorrem porque:

  1. Firmware BIOS de baixa qualidade - BIOS modificadas com implementação incorreta de ACPI
  2. Tabelas ACPI corrompidas ou incompletas - Estados de energia mal definidos
  3. Microcode desatualizado - CPU opera sem patches de segurança/estabilidade
  4. Gerenciamento de energia agressivo - C-States profundos causam travamentos
  5. Hardware clone - Componentes de chipset não seguem spec original da Intel

🎯 O Que Este Script Faz

Este script aplica um conjunto de correções testadas e comprovadas que resolvem 90%+ dos problemas de estabilidade em kits X99:

Ações Executadas:

  1. Valida o hardware - Verifica se você está usando processador Intel (preferencialmente Xeon)
  2. Detecta a distribuição - Suporta Ubuntu, Debian, Fedora, RHEL e derivados
  3. Cria backup automático - Backup timestamped do GRUB antes de qualquer modificação
  4. Instala Intel Microcode - Atualização de microcódigo para correções de CPU
  5. Configura parâmetros do kernel - Aplica 10+ parâmetros otimizados via GRUB
  6. Configura CPU Governor - Define modo "performance" permanentemente
  7. Cria serviço systemd - Garante que configurações persistam após reboot
  8. Desabilita IRQ Balance - Remove balanceamento automático de interrupções
  9. Valida alterações - Verifica se GRUB foi atualizado com sucesso (com rollback automático)

Resultado Final:

  • 🚀 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

🧠 Por Que Isso Funciona

C-States e Gerenciamento de Energia

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=poll
  • intel_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.


Intel Microcode

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:

  1. Carrega microcode atualizado durante o boot
  2. Aplica patches antes do kernel inicializar
  3. Melhora estabilidade e segurança da CPU

IOMMU e Passthrough

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=pt
  • intel_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.


PCIe ASPM

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=off

Desabilita totalmente ASPM. Resultado: +5-10W consumo, mas estabilidade total de PCIe.


CPU Governor

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:

  1. Cria /etc/systemd/system/cpufreq-performance.service
  2. Define governor=performance em todos os cores
  3. Garante que persiste após reboot
  4. Aplica imediatamente

Resultado: CPU sempre em turbo boost, sem throttling, máxima performance.


TSC Clocksource

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=reliable
  • clocksource=tsc - Força uso do TSC como fonte de tempo primária
  • tsc=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.


Intel P-State

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=disable

Em 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.


IRQ Balance

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 irqbalance

Desabilita completamente. IRQs ficam nos cores onde kernel alocou inicialmente (geralmente mais eficiente).


📋 Pré-Requisitos

Hardware:

  • ✅ 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

Software:

  • ✅ 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

Recomendações:

  • 🔴 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

🚀 Instalação e Uso

Método 1: Download Direto

# 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

Método 2: Git Clone

# Clonar repositório
git clone https://github.com/dcalmeida149/x99_fix.git
cd x99_fix

# Executar
chmod +x x99_fix.sh
./x99_fix.sh

Durante a Execução:

O script irá:

  1. Solicitar senha sudo (se necessário)
  2. Validar seu hardware
  3. Pedir confirmação se CPU não for Xeon
  4. Executar 9 etapas automaticamente
  5. Mostrar parâmetros aplicados
  6. 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): 

🖥️ Compatibilidade

Testado e Funcional:

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 ⚠️ Parcial Requer ajuste manual
Manjaro Rolling ⚠️ Parcial Requer ajuste manual
openSUSE Leap/Tumb ⚠️ Parcial Comando GRUB diferente

Não Suportado:

  • ❌ Windows (este é um script Linux)
  • ❌ macOS / Hackintosh
  • ❌ BSD (FreeBSD, OpenBSD)

🔧 O Que o Script Modifica

Arquivos Modificados:

1. /etc/default/grub

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"

2. /etc/systemd/system/cpufreq-performance.service (NOVO)

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.target

3. /etc/default/cpufrequtils (Ubuntu/Debian)

GOVERNOR="performance"

4. Backups Criados:

  • /etc/default/grub.backup.YYYYMMDD_HHMMSS - Backup com timestamp
  • /etc/default/grub.bak - Backup adicional do sed

Pacotes Instalados:

  • Debian/Ubuntu: intel-microcode, cpufrequtils
  • RHEL/Fedora: microcode_ctl, kernel-tools

Serviços Modificados:

  • irqbalance - Desabilitado (se instalado)
  • cpufreq-performance.service - Criado e habilitado
  • cpufrequtils - Habilitado (Debian/Ubuntu)

📚 Conceitos Técnicos Importantes

GRUB e Boot Parameters

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/cmdline

Systemd Services

O 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.service

CPU Frequency Scaling

Como 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 tradicional
  • amd-pstate - Driver AMD moderno

Governors disponíveis:

  • performance - Frequência máxima sempre
  • powersave - Frequência mínima sempre
  • ondemand - Escala baseado em carga
  • conservative - Similar a ondemand, mais lento
  • schedutil - 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_frequencies

🔥 Troubleshooting

Sistema não inicia após executar script

Causa provável: Parâmetros do kernel incompatíveis

Solução:

  1. No boot, pressione Shift ou Esc para entrar no menu GRUB
  2. Selecione "Advanced options"
  3. Escolha uma entrada antiga (antes do script)
  4. Depois de bootar, restaure o backup:
sudo cp /etc/default/grub.backup.* /etc/default/grub
sudo update-grub
sudo reboot

Sistema ainda trava após script

Possíveis causas:

  1. Hardware defeituoso - Teste memória RAM com memtest86+
  2. Overheating - Verifique temperaturas com sensors
  3. PSU insuficiente - Fonte fraca pode causar travamentos
  4. 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 pcie

Performance está igual ou pior

Verifique:

# 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 cstate

Corrigir 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
done

GRUB_UPDATE falhou

Erro comum: grub-mkconfig: command not found

Solução Debian/Ubuntu:

sudo apt install grub2-common
sudo update-grub

Solução RHEL/Fedora:

sudo dnf install grub2-tools
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Serviço systemd não inicia

Verificar status:

systemctl status cpufreq-performance.service
journalctl -u cpufreq-performance.service -n 50

Recriar 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

🔄 Rollback e Recuperação

Desfazer Completamente as Alterações

# 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 reboot

Rollback Parcial (Manter Alguns Fixes)

Cená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

⚡ Performance e Consumo de Energia

Impacto no Consumo:

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

Comparação de Cenários:

Antes (Configuração Padrão):

  • 💰 Consumo idle: ~60W
  • 💰 Consumo carga: ~150W
  • ❌ Travamentos frequentes
  • ❌ Performance inconsistente
  • ❌ Throttling inesperado

Depois (Com X99 Fix):

  • 💰 Consumo idle: ~95-125W
  • 💰 Consumo carga: ~180-220W
  • ✅ Zero travamentos
  • ✅ Performance máxima constante
  • ✅ Sem throttling

Recomendações:

  • 🔋 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%

🤝 Contribuindo

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:

  1. Fork este repositório
  2. Crie um branch (git checkout -b feature/minha-feature)
  3. Commit suas mudanças (git commit -am 'Adiciona nova feature')
  4. Push para o branch (git push origin feature/minha-feature)
  5. Abra um Pull Request

Áreas que Precisam de Melhoria:

  • 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

👨‍💻 Autor

Daniel Almeida


🙏 Agradecimentos

  • Comunidade X99 do Reddit (r/Xeon)
  • Todos que testaram e reportaram feedback

📊 Estatísticas

GitHub stars GitHub forks GitHub issues GitHub last commit


⭐ Se este script resolveu seus problemas, considere dar uma estrela! ⭐

💬 Dúvidas? Abra uma Issue

Made with ❤️ for the X99 Community

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages