it-swarm-pt.tech

Qual é o benefício de compilar seu próprio kernel Linux?

Que benefício eu pude ver ao compilar um kernel do Linux? Existe alguma eficiência que você pode criar personalizando-a para o seu hardware?

107
jjclarkson

Na minha opinião, o único benefício que você realmente obtém ao compilar seu próprio kernel Linux é:

Você aprende como compilar seu próprio kernel linux.

Não é algo que você precise para obter mais velocidade/memória/xxx, qualquer que seja. É uma coisa valiosa a se fazer se esse é o estágio em que você se sente em seu desenvolvimento. Se você quiser ter uma compreensão mais profunda do que é essa coisa de "código aberto", como e quais são as diferentes partes do kernel, experimente. Se você está apenas procurando acelerar o tempo de inicialização em 3 segundos, então ... qual é o objetivo ... compre um ssd. Se você estiver curioso, se quiser aprender, compilar seu próprio kernel é uma ótima idéia e você provavelmente obterá muito disso.

Dito isso, há algumas razões específicas em que seria apropriado compilar seu próprio kernel (como várias pessoas apontaram nas outras respostas). Geralmente, elas surgem de uma necessidade específica que você tem para um resultado específico, por exemplo:

  • Preciso que o sistema inicialize/execute no hardware com recursos limitados
  • Preciso testar um patch e fornecer feedback aos desenvolvedores
  • Preciso desativar algo que está causando um conflito
  • Eu preciso desenvolver o kernel linux
  • Preciso ativar o suporte para meu hardware não suportado
  • Preciso melhorar o desempenho de x porque estou atingindo os limites atuais do sistema (e sei o que estou fazendo)

A questão está em pensar que há algum benefício intrínseco em compilar seu próprio kernel quando tudo já está funcionando como deveria, e eu não acho que exista. Embora você possa passar inúmeras horas desabilitando coisas que você não precisa e ajustando as coisas que são ajustáveis, o fato é que o kernel do linux já está muito bem ajustado (pela sua distribuição) para a maioria mais situações do usuário.

75
gabe.

A maioria dos usuários não precisa compilar seu próprio kernel, sua distribuição fez esse trabalho por eles. Geralmente, as distribuições incluem um conjunto de patches para integrar com certas partes do modo como a distribuição funciona, backports de drivers de dispositivo e correções de versões mais recentes, mas não lançadas, do kernel ou recursos que eles são pioneiros com seus usuários.

Ao compilar seu próprio kernel, você tem algumas opções, pode compilar um kernel oficial Linus Torvalds, isso não inclui nenhum dos patches ou personalizações adicionados por sua distribuição (que podem ser bons ou ruins) ou você pode use sua ferramenta de reconstrução de distribuição para criar seu próprio kernel.

Os motivos pelos quais você pode querer reconstruir seu kernel incluem:

  • Corrigindo erros ou adicionando um recurso específico a um sistema de produção, onde você não pode realmente arriscar atualizar todo o kernel para uma ou duas correções.
  • Para experimentar um driver de dispositivo específico ou um novo recurso
  • Para estender o kernel, trabalhe nele
  • testando alguns dos módulos ou recursos "Alpha".

Muitos desenvolvedores o usam para criar também versões personalizadas do kernel para sistemas embarcados ou caixas de configuração onde eles precisam de drivers de dispositivo especiais ou desejam remover a funcionalidade que não precisam.

36
miguel.de.icaza

Compilar o kernel você mesmo permite incluir apenas as partes relevantes para o seu computador, o que o torna menor e potencialmente mais rápido, especialmente no momento da inicialização. Os kernels genéricos precisam incluir suporte para o máximo de hardware possível; no momento da inicialização, eles detectam qual hardware está conectado ao seu computador e carregam os módulos apropriados, mas leva tempo para fazer tudo isso e eles precisam carregar módulos dinâmicos, em vez de ter o código inserido diretamente no kernel. Não há razão para o seu kernel suportar 400 CPUs diferentes quando há apenas um no computador ou para suportar mouses bluetooth se você não tiver um, é todo o espaço desperdiçado que você pode liberar

30
Michael Mrozek

Não acredito que a resposta aceita aqui comece dizendo "Não é algo que você precise fazer para obter mais velocidade/memória/xxx, o que for".

Isso é totalmente falso. Rotineiramente, construo meus Kernels de forma personalizada para remover códigos desnecessários e incluir códigos de aprimoramento de desempenho, principalmente relacionados ao hardware. Por exemplo, eu executo um hardware mais antigo e posso obter alguns ganhos de desempenho ativando drivers do Kernel raramente ativados, como o suporte ao chipset HPT36x, em alguns MoBos mais antigos que possuem esse recurso.

Outro exemplo, o BIG SMP no Slackware é o padrão e em um Dell 2800, por exemplo, consumirá uma pegada considerável para executar coisas como GFSD (não como um módulo do kernel) que, a propósito, também consome ticks de CPU por algo que eu não precisa. Da mesma forma, o NFSD e outros benefícios para agradar a todas as mentalidades, o que é bom se você está apenas tentando colocar um Linux em uma caixa e funcionando, mas se você se preocupa com "velocidade/memória/xxx", essas coisas são importantes e funcionam .

Todas as minhas caixas de produção são kernels personalizados. Se eu estiver usando um hardware comum, como um hardware da série Dell (2800, 2850, 2900, etc ...), é simples copiar o arquivo .config do kernel para cada caixa e compilar o kernel e instalá-lo.

24
Eric

Aqui estão algumas situações em que a compilação de seu próprio kernel o beneficiará:

  • Um kernel com carregamento de módulo desativado é mais seguro. Isso exigirá que você selecione os módulos que você sabe que precisa e os inclua como parte do kernel, em vez de compilá-los como módulos.

  • Desabilitar o suporte para/dev/kmem ou atrapalhá-lo com a opção de compilador apropriada é uma boa coisa para segurança. Acho que a maioria das distros faz isso por padrão agora.

  • Prefiro não usar o initrd, quando possível. A personalização do seu kernel para o hardware inicializado elimina o initrd.

  • Às vezes, uma versão posterior do kernel terá os recursos que você precisa, mas isso é muito raro hoje. Lembro-me de quando comecei a usar o Debian, ele estava usando 2.4 kernels, mas eu precisava de um kernel 2.6 para suporte ao udev.

  • Desativar protocolos/opções de rede que você não precisa pode acelerar o desempenho do TCP/IP.

  • Desativar as opções que você não precisa reduz o espaço ocupado por memória do kernel, o que é importante em ambientes com pouca RAM. Quando você estiver usando um sistema de 256MB RAM como um roteador, isso ajuda.

  • Eu acho todos os dispositivos "tty" em/dev irritantes em sistemas em que geralmente só logon via serial ou ssh.

14
LawrenceC

A compilação do seu próprio kernel permite que você participe do processo de desenvolvimento do kernel, seja algo simples, como fornecer IDs de dispositivo PCI/USB para um driver existente que possa fazer um dispositivo mais novo funcionar para você, para se envolver profundamente na briga do núcleo desenvolvimento de kernel.

Também permite testar kernels de desenvolvimento no seu hardware e fornecer feedback se você notar alguma regressão. Isso pode ser particularmente útil para você e outras pessoas se você tiver um hardware incomum. Se você esperar um kernel de distribuição, pode levar algum tempo até que as correções dos relatórios de problemas sejam filtradas para uma nova versão do kernel de distribuição.

Pessoalmente, também gosto de compilar meus próprios kernels para incluir suporte apenas ao hardware que tenho. Quando você executa o distro kernels e observa a saída de lsmod(8), vê muitos módulos carregados para o hardware que não possui. Isso pode poluir a lista de módulos,/proc,/sys e seus logs, de modo que, quando você estiver procurando por algo, ele possa se esconder entre o barulho; Você também não pode ter 100% de certeza de que esses módulos não estão contribuindo para um problema que você está tentando diagnosticar.

7
camh

Eu respondo a segunda resposta de gabe. (Meu comentário é muito longo, estou postando como resposta).

A menos que você tenha uma finalidade altamente especializada (por exemplo, máquinas incorporadas, perfil de segurança estrito), não vejo nenhum benefício prático em compilar seu próprio kernel, além de ver como é feito. Ao revisar metodicamente as opções, ver como elas interagem entre si para criar o sistema é uma ótima maneira de entender como o sistema funciona. É incrível o que você descobre ao tentar remover componentes que parecem não ter nenhum objetivo para as tarefas que você está tentando realizar.

Entretanto, esteja avisado - por que pular pela toca do coelho é sem dúvida emocionante, vai sugar mais noites e fins de semana do que você pensava ser possível!

6
gvkv

No trabalho, usamos kernels enrolados manualmente para aplicar patches fora da árvore, como vserver e unionfs.

Em casa, estou compilando kernels rolados à mão para descobrir qual commit introduziu um bug que estou enfrentando. Quando terminar isso, provavelmente vou me ater a um kernel rolado manualmente até que o bug seja corrigido em minha distribuição (Debian), quando eu voltaria a rever os kernels deles.

3
jmtd

Este tópico é antigo e ainda é válido hoje como era quando a pergunta foi feita!

A resposta é: Você compila o kernel do Linux de sua escolha, de acordo com suas necessidades e requisitos.

Muitos cenários são válidos:

  1. Você é um engenheiro e exige que sua construção atenda aos requisitos/demandas de desempenho e segurança do seu sistema, recompile para atender e/ou superar os critérios especificados.

  2. Você é um usuário normal e possui um sistema antigo que deseja continuar o máximo de tempo possível, recompila para adicionar/remover componentes para manter o sistema antigo otimizado.

  3. Você é um usuário normal com o hardware mais rápido mais recente e possui memória/RAM mais que suficiente. Não há necessidade de recompilar, mas você ainda pode, se estiver interessado em aprender um pouco mais sobre o seu sistema.

  4. Você só quer ser um usuário comum da Microsoft e/ou Mac, não recompile e apenas siga as atualizações da sua distribuição upstream.

  5. Mantenha os cenários chegando :-)

Ao contrário dos usuários de Mac/Windows, o que o Linux fornece é a escolha. A opção de facilitar ou otimizar o sistema de acordo com seus requisitos.

2
user4565

Outro caso além dos muitos mencionados aqui para ter kernels compilados personalizados é configurar ambientes especializados de inicialização de rede, onde o carregamento do módulo não é viável e você deve distribuir kernels totalmente funcionais para máquinas específicas para tarefas específicas.

1
Caleb

Estou surpreso que ninguém tenha mencionado esse motivo para compilar um kernel personalizado:

porque você deseja usar um compilador C/c ++ diferente. O GCC é muito bom para compilar o kernel do linux. Mas existem compiladores muito superiores por aí! As otimizações do GCC estão um pouco atrás do compilador C/C++ da Intel. E a Intel fornece as bibliotecas de primitivas de desempenho e a ferramenta vtune, ambas indispensáveis ​​na produção de um kernel Linux de alto desempenho. Você só pode ir tão longe com o GCC e o G ++. Praticamente não importa o que você faça, o resultado será limitado pelo compilador. Então, eu uso o compilador Intel e as bibliotecas de desempenho É um pouco grande - download de 1,5 GB, mas isso dá uma idéia do que está tudo contido em um bom compilador.

O compilador C/C++ da Intel está disponível gratuitamente para uso não comercial. Mas é mais fácil pesquisar na página de download do compilador Intel c ++ da licença não comercial que pesquisar no site da Intel. Normalmente, não uso o GCC/G ++ para nada. E você não precisa ser um programador. Você acabou de definir seu ambiente e alterar duas linhas no arquivo make para apontar para o compilador da Intel.

Então você pode obter uma velocidade séria!

1
SwanSword

Para a maioria dos usos, os kernels genéricos são bons para praticamente qualquer hardware. Além disso, eles geralmente contêm patches específicos da distribuição (ed), portanto, compilar seu próprio kernel pode (pode) causar problemas.

O reson para compilar seu próprio kernel é:

  • Você está usando a distribuição baseada na fonte, para que não haja kernel 'genérico'
  • Você é desenvolvedor do kernel e desenvolve o kernel
  • Você deve personalizar o kernel, por exemplo, para dispositivo incorporado com disco rígido muito limitado
  • Algum driver não é compilado (caso muito raro)
  • Você deseja corrigir o kernel E você sabe o que está fazendo
  • Você quer aprender como compilar o kernel

Se eu não estivesse usando a distribuição baseada na fonte, não compilaria o kernel.

1
Maciej Piechotka