Differenza di prestazioni tra distribuzioni / pacchetti di Linux compilati e binari


13

Stavo cercando molto su Internet e non sono riuscito a trovare una risposta esatta.

Ci sono distro come Gentoo (o FreeBSD) che non viene fornito con i binari ma solo con il codice sorgente per i pacchetti (porte).

La maggior parte delle distro usa backages binari (debian, ecc.).

Prima domanda: quanto aumento di velocità posso aspettarmi dal pacchetto compilato? Quanto aumento di velocità posso ottenere dai pacchetti del mondo reale come apache o mysql? cioè domande al secondo?

Seconda domanda: il pacchetto binario significa che non utilizza alcuna istruzione CPU introdotta dopo la prima CPU AMD a 64 bit? Con i pacchetti a 32 bit significa che il pacchetto verrà eseguito su 386 e fondamentalmente non utilizza la maggior parte delle moderne istruzioni della CPU?

Informazioni addizionali:

  • Non sto parlando di desktop, ma di ambiente server.
  • Non mi interessa il tempo di compilazione
  • Ho più server, quindi un aumento della velocità superiore al 15% vale per l'utilizzo di pacchetti di codice sorgente
  • Per favore, niente guerre di fiamma.

1
Giusto per correggere un presupposto errato: FreeBSD viene fornito con un albero delle porte (sorgente) e con pacchetti binari. Vedi man (1) pkg_adde ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/.
Hennes,

Risposte:


7

La differenza di prestazioni sarà in quasi tutti i casi minima e non utile. Buoni motivi per usare le distribuzioni dei sorgenti (mentre si rotolano i propri pacchetti binari, come il sistema bindist di gentoo consente) includono:

  • Distribuire le proprie patch personalizzate
  • Personalizza facilmente il tuo kernel
  • Impacchettare i propri aggiornamenti

Se non stai facendo nessuna di queste cose, non hai bisogno di una distribuzione di origine. Per uso personale sono molto convenienti perché ti consentono di aggiornare le cose in modo incrementale a piacimento senza preoccuparti troppo della compatibilità binaria, che non è una preoccupazione che vedo spesso in un ambiente aziendale.

Vale la pena notare che puoi fare queste cose anche con una distribuzione binaria, creando i tuoi pacchetti RPM o altro. Le spese generali di gestione sono simili.

Fondamentalmente non vedrai un aumento della velocità del 15% compilando dalla fonte. Mi dispiacerebbe stimarlo fino al 5% in ogni caso ragionevole. Compilare dalla fonte ti dà un paio di cose:

  • Puoi usare la versione del tuo compilatore preferita
  • Puoi indirizzare il compilatore a generare istruzioni dalle estensioni ISA non utilizzate nei pacchetti di distribuzioni binarie, come AESNI e AVX

Tuttavia, il compilatore molto raramente in realtà li genera comunque, e i risparmi complessivi derivanti dal loro utilizzo sono generalmente molto minuscoli quando le prestazioni dell'applicazione vengono prese nel loro insieme. Cose come l'accesso alla RAM (e la latenza) e la latenza del disco e del dispositivo sono fattori molto più grandi e dovresti davvero iniziare da lì.

Le applicazioni che potrebbero trarre vantaggio da una compilazione personalizzata che verrà eseguita solo su un Intel Core i7 o i5 relativamente recente includono quelle che eseguono molta matematica vettoriale e quelle che eseguono molta crittografia e decrittografia AES o che richiedono molti numeri casuali. Se si desidera utilizzare Intel DRBG, è necessario farlo anche al momento.

Se nessuno di questi si applica a te, sarai abbastanza soddisfatto delle distribuzioni basate su debian o red hat là fuori e avrai molto meno costi di manutenzione.


9

Risposta breve ... Molte applicazioni su larga scala e sensibili alla velocità / alla latenza vengono eseguite su distribuzioni Linux standard. Red Hat, CentOS, Debian, Ubuntu ... Funzionano tutti bene nella maggior parte dei casi. La maggior parte dei vantaggi deriva dall'ottimizzazione delle applicazioni, dall'ottimizzazione standard del kernel e del sistema operativo e dall'infrastruttura.

Gentoo può offrire alcune ottimizzazioni, ma apre la porta a più problemi di gestione, riduzione della condivisione della mente, riduzione del supporto di fornitori e driver, problemi di stabilità, ridicolo e potenziali problemi di sicurezza.

Ho gestito server basati su Gentoo in un ambiente di trading finanziario ad alta frequenza. Sebbene con Gentoo ci fossero alcuni lievi vantaggi in termini di prestazioni, mi sono comunque spostato su Red Hat e CentOS. I vantaggi di Gentoo sulla carta sono stati facilmente superati da una selezione più intelligente dell'hardware, un migliore supporto di integrazione hardware / produttore del server, patch più intelligenti da parte degli ingegneri di Red Hat e tecnologie più esoteriche come il bypass del kernel ...

Se sei in un punto in cui l'efficienza dei più diffusi stack di applicazioni (LAMP) è un problema, assicurati di aver ottimizzato l'hardware del tuo server (tipo di CPU, layout RAM), l'infrastruttura di rete, il sistema di monitoraggio e di essere in grado di identificare i colli di bottiglia del sistema prima andando su questa strada.

Stai colpendo un limite di prestazioni ora ?


5

Tutti i punti sollevati sono ovviamente corretti. Vorrei solo sollevare qualche problema con l'idea che un aumento delle prestazioni del 5% -15% sia irrealizzabile, soprattutto con le versioni moderne di GCC, dipende davvero dall'architettura della CPU e da quanto è vicina alla linea di base utilizzata come obiettivo per le distribuzioni binarie. GCCs -march = native, oltre a utilizzare le estensioni ISA, ottimizzerà anche per le dimensioni di cache / linea L1 e L2. Il codice correttamente allineato (per la tua CPU) può essere molto più veloce, specialmente quando viene utilizzato anche -flto, in modo che il compilatore possa sapere tutto ciò che deve prendere in considerazione. [sfortunatamente alcuni pacchetti sono attualmente rotti con LTO]

Inoltre, la compilazione di pacchetti selezionati con -Ofast, oltre a march = native e LTO può fare una differenza significativa.

In futuro, se l'infrastruttura di grafite di GCC si stabilizza mai, ciò avrà il potenziale per guadagni ancora maggiori.


Aneddoto a supporto di questa risposta: alcuni benchmark che ho eseguito con Cairo e Pixman compilati -march=nativesu una CPU Skylake (client) erano dal 5 al 20% più veloci della distribuzione binaria. (Questi pacchetti sono probabilmente relativamente facili da vettorializzare automaticamente per i compilatori.) -fno-semantic-interpositionÈ un'altra buona bandiera da provare, così come è -falign-functions.
ZachB,

4

Dipende da cosa vuoi nel tuo sistema, e in realtà ci sono tre scuole di pensiero qui (e questo è vero sia per l'hardware che per il software)

In primo luogo, il mainstream per quanto riguarda la maggior parte delle persone su SF: vuoi qualcosa che sai che funzionerà, vuoi supporto e lo vuoi ora . In questo caso, utilizzando i sistemi basati su Redhat (RHEL offre un supporto eccellente e centos è una ricostruzione della comunità della distribuzione RHEL ben collaudata). Tuttavia, non otterrai le ultime novità. In molti casi questo vale anche per l'hardware.

Il secondo è il punto di vista del 'mezzo della strada', che è la via di mezzo - andando con qualcosa come Ubuntu. Volete nuovi pacchetti (a scapito della totale stabilità del rock), volete un installatore e cose carine .

In alcuni casi le persone incontrano problemi, ma hai pacchetti più recenti e le cose sono ragionevolmente testate . Mentre qui c'è molto odio per Ubuntu, è un buon compromesso tra facilità di installazione e pacchetti ragionevolmente nuovi. Debian è probabilmente una scelta leggermente più conservatrice. In questi giorni, puoi persino configurare Ubuntu con un kernel a bassa latenza pronto all'uso. Tendo a sentire Ubuntu e Debian lavorare per me, ma ymmv. Molti posti che distribuiscono molti server come Facebook e Google scelgono questa opzione.

Infine ci sono distribuzioni basate sulla fonte. La configurazione iniziale nella maggior parte dei casi è un dolore assoluto nella parte posteriore. Fai un errore nell'impostare il tuo kernel? Spiacenti, dedica alcune ore alla ricompilazione. Nemmeno ottieni un programma di installazione - questo è per n00bs. Spesso ottieni applicazioni all'avanguardia, e l'opzione di compilarle quando ne hai bisogno (che include la possibilità di scegliere ottimizzazioni per la velocità o l'uso della memoria, ad esempio) e un rilascio progressivo. Se hai esigenze molto specifiche ed esoteriche, Gentoo è eccezionale. Se hai bisogno di distribuire alcune decine di sistemi e vuoi automatizzarlo ... buona fortuna. Le distribuzioni basate sull'origine semplicemente non si adattano allo stesso modo. Stai ottenendo molta flessibilità, * un po 'di velocità extra, ma non la manutenibilità allo stesso livello di un IMO di distribuzione basato su pacchetti. Sei Nonprobabilmente otterrà il 15% di velocità in più, e probabilmente finirai per perdere tempo cercando di mettere a punto il flag di compilazione per il tuo hardware e, se sbagli qualcosa, passi il tempo a capire cosa è esattamente fallito.

inserisci qui la descrizione dell'immagine

I BSD sono una famiglia di sistemi operativi separata . Alcune persone lo giurano (almeno una normale stanza di comunicazione è un utente di freebsd), e diversi BSD hanno focus diversi - per esempio openbsd è ossessionato dalla sicurezza, e freebsd è quello "mainstream". In alcuni casi potrebbero non avere lo stesso tipo di supporto hardware fornito da Linux, ma ciò dipende da diversi fattori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.