Leistungsunterschied zwischen kompilierten und binären Linux-Distributionen / -Paketen

13

Ich habe viel im Internet gesucht und konnte keine genaue Antwort finden.

Es gibt Distributionen wie Gentoo (oder FreeBSD), die keine Binärdateien enthalten, sondern nur Quellcode für Pakete (Ports).

Die Mehrheit der Distributionen verwendet binäre Backages (Debian usw.).

Erste Frage: Wie viel Geschwindigkeitssteigerung kann ich von einem kompilierten Paket erwarten? Wie viel Geschwindigkeitssteigerung kann ich durch echte Pakete wie Apache oder MySQL erreichen? also abfragen pro sekunde?

Zweite Frage: Bedeutet Binärpaket, dass es keine CPU-Anweisungen verwendet, die nach der ersten AMD 64-Bit-CPU eingeführt wurden? Bedeutet dies bei den 32-Bit-Paketen, dass das Paket auf 386 ausgeführt wird und im Grunde die meisten modernen CPU-Anweisungen nicht verwendet?

Zusätzliche Information:

  • Ich spreche nicht von Desktop, sondern von Server-Umgebung.
  • Die Kompilierzeit ist mir egal
  • Ich habe mehr Server, daher lohnt sich eine Geschwindigkeitssteigerung von mehr als 15% für die Verwendung von Quellcode-Paketen
  • Bitte keine Flammenkriege.
jozko
quelle
1
Um eine falsche Annahme zu korrigieren: FreeBSD wird sowohl mit einem Portbaum (Quelle) als auch mit Binärpaketen geliefert. Siehe man (1) pkg_addund ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/.
Hennes

Antworten:

6

Der Leistungsunterschied wird in fast allen Fällen minimal sein und sich nicht lohnen. Gute Gründe für die Verwendung von Quelldistributionen (während Sie Ihre eigenen Binärpakete rollen, wie es das Bindistsystem von Gentoo zulässt) sind:

  • Bereitstellen Ihrer eigenen benutzerdefinierten Patches
  • Passen Sie Ihren Kernel einfach an
  • Packen Sie Ihre eigenen Updates

Wenn Sie keine dieser Aktionen ausführen, benötigen Sie keine Quelldistribution. Für den persönlichen Gebrauch sind sie sehr praktisch, da Sie die Dinge nach Belieben inkrementell aktualisieren können, ohne sich über die Binärkompatibilität Gedanken machen zu müssen. Dies ist kein Problem, das ich in Unternehmen häufig sehe.

Es ist erwähnenswert, dass Sie diese Dinge auch mit einer Binärdistribution tun können, indem Sie Ihre eigenen RPM-Pakete erstellen oder was auch immer. Der Verwaltungsaufwand ist ähnlich.

Grundsätzlich wird beim Kompilieren aus dem Quellcode keine Geschwindigkeitssteigerung von 15% festgestellt. Ich würde es ablehnen, es in jedem vernünftigen Fall auf sogar 5% zu schätzen. Beim Kompilieren aus dem Quellcode erhalten Sie ein paar Dinge:

  • Sie können Ihre bevorzugte Compilerversion verwenden
  • Sie können den Compiler anweisen, Anweisungen aus ISA-Erweiterungen zu generieren, die in Binärdistributionspaketen wie AESNI und AVX nicht verwendet werden

Der Compiler generiert diese jedoch ohnehin sehr selten, und die Gesamteinsparungen durch die Verwendung sind im Allgemeinen sehr gering, wenn die Leistung der Anwendung insgesamt betrachtet wird. Dinge wie RAM-Zugriffe (und Latenz) sowie Festplatten- und Geräte-Latenz sind viel größere Faktoren, und Sie sollten wirklich dort anfangen.

Anwendungen, die von einer benutzerdefinierten Zusammenstellung profitieren könnten , die nur auf einem relativ aktuellen Intel Core i7 oder i5 ausgeführt werden kann, umfassen Anwendungen, die viel Vektor-Mathematik ausführen, und Anwendungen , die viel AES-Verschlüsselung und -Entschlüsselung ausführen oder viele Zufallszahlen erfordern. Wenn Sie Intel DRBG verwenden möchten, müssen Sie dies derzeit ebenfalls tun.

Wenn keine dieser Aussagen auf Sie zutrifft, sind Sie mit den Debian- oder Red Hat-basierten Distributionen ziemlich zufrieden und haben deutlich weniger Wartungsaufwand.

Falcon Momot
quelle
9

Kurze Antwort ... Viele umfangreiche und für Geschwindigkeit und Latenz sensible Anwendungen können auf Standard-Linux-Distributionen ausgeführt werden. Red Hat, CentOS, Debian, Ubuntu ... In den meisten Fällen funktionieren sie alle gut. Die meisten Vorteile ergeben sich aus der Anwendungsoptimierung, der Optimierung des Standardkernels und des Betriebssystems sowie der Infrastruktur.

Gentoo bietet zwar einige Optimierungen, öffnet jedoch die Tür zu mehr Verwaltungsproblemen, reduziertem Mindshare, verringertem Hersteller- und Treibersupport, Stabilitätsproblemen, Lächerlichkeit und potenziellen Sicherheitsbedenken.

Ich habe Gentoo-basierte Server in einer hochfrequenten Finanzhandelsumgebung verwaltet. Obwohl es unter Gentoo einige leichte Leistungsvorteile gab, bin ich dennoch zu Red Hat und CentOS gewechselt. Gentoo Vorteile auf dem Papier wurden überwinden leicht durch intelligentere Hardware - Auswahl, bessere Server - Hersteller / Hardware - Integration Unterstützung, intelligentes Patchen von Red Hat - Ingenieure und esoterische Technologien wie Kernel Bypass ...

Wenn Sie sich an einem Punkt befinden, an dem die Effizienz beliebter Application Stacks (LAMP) ein Problem darstellt, müssen Sie die Serverhardware (CPU-Typ, RAM-Layout), die Netzwerkinfrastruktur und das Überwachungssystem optimiert haben und in der Lage sein, Systemengpässe zu erkennen Diesen Weg gehen.

Stoßen Sie jetzt auf eine Leistungsbeschränkung ?

ewwhite
quelle
5

Alle vorgebrachten Punkte sind natürlich richtig. Ich möchte nur auf die Idee eingehen, dass eine Leistungssteigerung von 5-15% nicht erreichbar ist, insbesondere bei modernen Versionen von GCC. Dies hängt wirklich von der CPU-Architektur ab und davon, wie nahe sie an der als Ziel verwendeten Basislinie liegt für die binären Distributionen. GCCs -march = native werden zusätzlich zur Verwendung der ISA-Erweiterungen auch für L1- und L2-Cache- / Zeilengrößen optimiert. Richtig ausgerichteter Code (für Ihre CPU) kann viel schneller sein, insbesondere wenn -flto ebenfalls verwendet wird, damit der Compiler alles weiß, was zu berücksichtigen ist. [Einige Pakete sind derzeit leider mit LTO defekt.]

Darüber hinaus kann das Kompilieren ausgewählter Pakete mit -Ofast zusätzlich zu march = native und LTO einen signifikanten Unterschied bewirken.

Wenn sich die Graphitinfrastruktur von GCC jemals stabilisiert, kann dies in Zukunft zu noch größeren Gewinnen führen.

Steven Newbury
quelle
Anekdote zur Unterstützung dieser Antwort: Einige Benchmarks, die ich mit Cairo und Pixman -march=nativeauf einer Skylake (Client) -CPU erstellt habe, waren 5 bis 20% schneller als die Binärdistribution. (Diese Pakete sind wahrscheinlich für Compiler relativ einfach zu automatisieren.) Dies -fno-semantic-interpositionist eine weitere gute Option -falign-functions.
ZachB
4

Es kommt darauf an, was Sie in Ihrem System wollen, und hier gibt es wirklich drei Denkrichtungen (und dies gilt sowohl für Hardware als auch für Software).

Erstens ist der Mainstream so weit wie die meisten Leute auf SF gehen - Sie wollen etwas , das Sie wissen , wird arbeiten, Sie wollen Unterstützung , und Sie wollen es jetzt . In diesem Fall sollten Sie sich für RedHat-basierte Systeme entscheiden (RHEL bietet Ihnen exzellenten Support, und Centos ist eine Community-Neuerstellung der bewährten RHEL-Distribution). Sie werden jedoch nicht die neuesten und besten erhalten. In vielen Fällen gilt dies auch für Hardware.

Die zweite ist die Sichtweise "mitten auf der Straße", die der Mittelweg ist - in Verbindung mit so etwas wie Ubuntu. Sie möchten neue Pakete (auf Kosten der Stabilität), einen Installer und nette Dinge .

In einigen Fällen geraten die Leute in Schwierigkeiten, aber Sie haben neuere Pakete und die Dinge sind vernünftig getestet . Auch wenn Ubuntu hier sehr gehasst wird, ist es ein guter Kompromiss zwischen einfacher Einrichtung und einigermaßen neuen Paketen. Debian ist wahrscheinlich eine etwas konservativere Wahl. Heutzutage können Sie Ubuntu sogar mit einem Kernel mit geringer Latenz einrichten. Ich habe das Gefühl, dass Ubuntu und Debian für mich arbeiten, aber ymmv. Viele Orte, die viele Server wie Facebook und Google bereitstellen, entscheiden sich für diese Option.

Endlich gibt es quellbasierte Distributionen. Die anfängliche Einrichtung ist in den meisten Fällen ein äußerster Schmerz im Fond. Sie haben einen Fehler beim Einrichten Ihres Kernels gemacht? Hoppla, verbringe ein paar Stunden mit dem Neukompilieren. Du bekommst auch keinen Installer - das ist für n00bs. Häufig erhalten Sie hochaktuelle Anwendungen und die Option, diese nach Bedarf zu kompilieren (einschließlich der Möglichkeit, Optimierungen für die Geschwindigkeit oder die Speichernutzung auszuwählen) sowie eine fortlaufende Version. Wenn Sie sehr spezifische, esoterische Bedürfnisse haben, ist gentoo großartig. Wenn Sie ein paar Dutzend Systeme einführen und automatisieren möchten ... viel Glück. Quellbasierte Distributionen skalieren einfach nicht so gut. Sie erhalten viel Flexibilität, * etwas ** mehr Geschwindigkeit, aber keine Wartbarkeit auf dem Niveau einer paketbasierten Distribution IMO. Du bist nichtWahrscheinlich erhalten Sie 15% mehr Geschwindigkeit, und Sie werden wahrscheinlich Zeit damit verschwenden, das Kompilierungsflag für Ihre Hardware zu optimieren. Wenn Sie etwas vermasseln, müssen Sie Zeit investieren, um herauszufinden, was genau fehlgeschlagen ist.

Bildbeschreibung hier eingeben

Die BSDs sind eine separate Familie von Betriebssystemen. Einige Leute schwören auf sie (mindestens ein regulärer Kommunikationsraum ist ein Freebsd-Benutzer), und verschiedene BSDs haben unterschiedliche Schwerpunkte - zum Beispiel ist openbsd von Sicherheit besessen, und Freebsd ist der „Mainstream“. Sie können nicht in einigen Fällen die gleiche Art von Hardware-Unterstützung Linux haben, aber das hängt von einigen Faktoren ab.

Geselle Geek
quelle