Diferença de desempenho entre distribuições / pacotes compilados e binários do linux

13

Eu estava pesquisando bastante na internet e não consegui encontrar uma resposta exata.

Existem distros como o Gentoo (ou FreeBSD) que não vêm com binários, mas apenas com o código fonte dos pacotes (ports).

A maioria das distribuições usa backages binários (debian, etc.).

Primeira pergunta: quanto aumento de velocidade posso esperar do pacote compilado? Quanto aumento de velocidade posso obter de pacotes do mundo real como apache ou mysql? ou seja, consultas por segundo?

Segunda pergunta: O pacote binário significa que ele não usa nenhuma instrução de CPU que foi introduzida após a primeira CPU AMD de 64 bits? Com os pacotes de 32 bits, isso significa que o pacote será executado em 386 e basicamente não usa a maioria das instruções modernas da CPU?

Informação adicional:

  • Não estou falando de área de trabalho, mas de ambiente de servidor.
  • Eu não me importo com o tempo de compilação
  • Como tenho mais servidores, o aumento da velocidade em mais de 15% vale a pena usar pacotes de código-fonte
  • Por favor, não guerras de fogo.
jozko
fonte
1
Apenas para corrigir uma suposição errada: O FreeBSD vem com uma árvore de ports (fonte) e com pacotes binários. Veja man (1) pkg_adde ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/.
Hennes

Respostas:

6

A diferença de desempenho será quase sempre mínima e não vale a pena. Boas razões para usar distribuições de código-fonte (enquanto lança seus próprios pacotes binários, como o sistema bindist do gentoo permite) incluem:

  • Implementando seus próprios patches personalizados
  • Personalizando seu kernel facilmente
  • Empacotando suas próprias atualizações

Se você não está fazendo nada disso, não precisa de uma distribuição de origem. Para uso pessoal, são muito convenientes porque permitem que você atualize as coisas de forma incremental à vontade, sem se preocupar muito com a compatibilidade binária, o que não é uma preocupação que vejo frequentemente em ambientes empresariais.

Vale a pena notar que você também pode fazer essas coisas com uma distribuição binária, criando seus próprios pacotes RPM ou o que for. A sobrecarga de gerenciamento é semelhante.

Basicamente, você não verá um aumento de velocidade de 15% ao compilar a partir da fonte. Eu ficaria detestado em calculá-lo em até 5% em qualquer caso razoável. Compilar a partir da fonte fornece algumas coisas:

  • Você pode usar sua versão preferida do compilador
  • Você pode direcionar o compilador para gerar instruções de extensões ISA não usadas nos pacotes de distribuições binárias, como AESNI e AVX

No entanto, o compilador muito raramente os gera de qualquer maneira, e a economia geral ao usá-los é geralmente muito minúscula quando o desempenho do aplicativo é considerado como um todo. Coisas como acesso à RAM (e latência) e latência de disco e dispositivo são fatores muito maiores, e você realmente deve começar por aí.

Os aplicativos que podem se beneficiar de uma compilação personalizada que só será executada em um Intel Core i7 ou i5 relativamente recente incluem aqueles que fazem muita matemática vetorial e outros que fazem muita criptografia e descriptografia AES, ou exigem muitos números aleatórios. Se você quiser usar o Intel DRBG, também precisará fazer isso atualmente.

Se nada disso se aplicar a você, você ficará muito satisfeito com qualquer uma das distribuições baseadas em debian ou red hat, e terá muito menos despesas gerais de manutenção.

Falcon Momot
fonte
9

Resposta curta ... Muitos aplicativos de grande escala e sensíveis à velocidade / latência são executados em distribuições padrão do Linux. Red Hat, CentOS, Debian, Ubuntu ... Todos eles funcionam bem na maioria dos casos. A maioria dos ganhos advém do ajuste de aplicativos, do kernel padrão e das otimizações e infraestrutura do sistema operacional.

O Gentoo pode oferecer algumas otimizações, mas abre as portas para mais problemas de gerenciamento, compartilhamento de mente reduzido, suporte reduzido a fornecedores e drivers, problemas de estabilidade, ridículo e possíveis problemas de segurança.

Eu gerenciei servidores baseados no Gentoo em um ambiente de negociação financeira de alta frequência. Embora houvesse alguns leves benefícios de desempenho no Gentoo, ainda mudei para o Red Hat e o CentOS. As vantagens do Gentoo no papel foram facilmente superadas pela seleção mais inteligente de hardware, melhor suporte ao fabricante do servidor / integração de hardware, correções mais inteligentes pelos engenheiros da Red Hat e tecnologias mais esotéricas como o desvio do kernel ...

Se você estiver em um ponto em que a eficiência das pilhas populares de aplicativos (LAMP) é um problema, certifique-se de otimizar o hardware do servidor (tipo de CPU, layout de RAM), infraestrutura de rede, sistema de monitoramento e conseguir identificar gargalos do sistema antes indo por esse caminho.

Você está atingindo uma limitação de desempenho agora ?

ewwhite
fonte
5

Todos os argumentos apresentados estão obviamente corretos. Gostaria apenas de ter algum problema com a ideia de que o aumento de desempenho de 5% a 15% é inatingível, especialmente nas versões modernas do GCC, depende realmente da arquitetura da CPU e da proximidade da linha de base usada como destino. para as distribuições binárias. Os GCCs -march = native will, além de usar as extensões ISA, também otimizam os tamanhos de cache / linha L1 e L2. O código alinhado corretamente (para sua CPU) pode ser muito mais rápido, especialmente quando -flto também é usado para que o compilador saiba tudo o que precisa levar em consideração. [alguns pacotes estão quebrados no LTO, infelizmente]

Além disso, a compilação de pacotes selecionados com -Ofast, além de march = native e LTO, pode fazer uma diferença significativa.

No futuro, se a infraestrutura de grafite dos GCCs se estabilizar, isso poderá gerar ganhos ainda maiores.

Steven Newbury
fonte
Anedota para apoiar esta resposta: alguns benchmarks que corri com o Cairo e o Pixman compilados -march=nativeem uma CPU Skylake (cliente) eram 5 a 20% mais rápidos que a distribuição binária. (Esses pacotes são provavelmente relativamente fáceis para os compiladores se auto-vetorizarem.) -fno-semantic-interpositionÉ outro bom sinal para tentar, como está -falign-functions.
ZachB 18/09/19
4

Depende do que você deseja no seu sistema, e realmente existem três escolas de pensamento aqui (e isso é verdade para o hardware e o software)

Em primeiro lugar, o mainstream, no que diz respeito à maioria das pessoas no SF - você quer algo que sabe que funcionará, deseja apoio e deseja agora . Nesse caso, seguindo sistemas baseados em redhat (o RHEL oferece excelente suporte e o centos é uma reconstrução da comunidade da distribuição RHEL bem testada). Você, no entanto, não receberá o melhor e o mais recente. Em muitos casos, isso também se aplica ao hardware.

O segundo é o ponto de vista do meio da estrada, que é o meio termo - seguindo algo como o ubuntu. Você quer novos pacotes (às custas da estabilidade absoluta), um instalador e coisas legais .

Em alguns casos, as pessoas enfrentam problemas, mas você tem pacotes mais novos e as coisas são razoavelmente testadas . Embora exista muito ódio pelo Ubuntu aqui, é um bom compromisso entre facilidade de instalação e pacotes razoavelmente novos. O Debian provavelmente é uma escolha um pouco mais conservadora. Hoje em dia, você pode até configurar o Ubuntu com um kernel de baixa latência pronto para uso. Eu sinto que o ubuntu e o debian funcionam para mim, mas sim. Muitos lugares que implantam muitos servidores como o facebook e o google optam por essa opção.

Finalmente, existem distribuições baseadas na fonte. A configuração inicial na maioria dos casos é uma dor total na parte traseira. Você cometeu um erro ao configurar seu kernel? Opa, passe algumas horas recompilando. Você também não tem um instalador - isso é para n00bs. Muitas vezes, você obtém aplicativos de ponta e a opção de compilá-los conforme necessário (o que inclui a possibilidade de escolher otimizações para velocidade ou uso de memória, por exemplo) e uma versão contínua. Se você tem necessidades esotéricas muito específicas, o gentoo é ótimo. Se você precisar implementar algumas dezenas de sistemas e quiser automatizá-lo ... boa sorte. As distribuições baseadas na fonte simplesmente não são dimensionadas também. Você está obtendo muita flexibilidade, * alguma ** velocidade extra, mas não capacidade de manutenção no mesmo nível de uma distribuição IMO baseada em pacotes. Você não éprovavelmente obterá 15% de velocidade extra, e você provavelmente perderá tempo tentando ajustar o sinalizador de compilação para o seu hardware e, se estragar alguma coisa, gastando tempo trabalhando no que exatamente falhou.

insira a descrição da imagem aqui

Os BSDs são uma família separada de sistemas operacionais. Algumas pessoas juram por eles (pelo menos uma sala de comunicação regular é um usuário do freebsd), e diferentes BSDs têm focos diferentes - por exemplo, o openbsd é obcecado por segurança e o freebsd é o 'mainstream'. Eles podem não ter, em alguns casos, o mesmo tipo de suporte de hardware que o linux, mas isso depende de alguns fatores.

Journeyman Geek
fonte