Clear Linux - wo kommt die Performance her?

flmr

Ensign
Registriert
März 2017
Beiträge
186
flmr schrieb:
In jedem Fall wäre es gut gewesen zu zeigen, was Clear einzigartig macht und wo die Performance her kommt.

Nachdem der andere Thread geschlossen wurde möchte mal mit ein paar Unklarheiten aufräumen. Ich hoffe, dass das Niveau nicht direkt wieder derart abfällt. Dadurch dass es kein Artikel der Redaktion ist, zieht es vielleicht weniger nicht ernsthafte Interessenten als Leser an.

Q: Benachteiligt Clear Linux andere Hersteller?
A: Nein. Auch AMD Zen CPUs zeigen teils deutlich bessere Performance als unter anderen Distributionen.

Q: "Trickst" Intel, um die Performance [seiner Produkte] besser aussehen zu lassen?
A: Nein, die Änderungen sind transparent, für jeden einseh- und überprüfbar und darüber hinaus auch noch gut dokumentiert.

Q: Warum arbeitet Intel nicht an anderen Distributionen mit, und macht die x-te Distribution?
A: Das eine schließt das andere nicht aus. Die meisten Änderungen, etwa im Kernel, durchlaufen den ganz normalen Entwicklungszyklus und gehen upstream. Sie stehen nur in Clear z.T. früher bereit. Andere Dinge sind nicht 1:1 übertragbar und dienen in erster Linie dazu, zu zeigen, was machbar ist. Clear Linux ist eher als eine Art Forschungsprojekt gestartet. Der Fokus der meisten Distributionen ist halt nicht die reine Performance, sondern Dinge wie Portabilität oder Stabilität werden stärker gewichtet. Auch werden gerne Lösungen präferiert, die sich über lange Zeit bewährt haben und besser getestet sind.
Darüberhinaus ist Intel seit langer Zeit einer der größten Beteiligten in der Linux Entwicklung, nicht nur im Kernel. Intel hat ein starkes Interesse daran, dass ihre Produkte (neben CPUs und GPUs und weiterem auch Storage-, Netzwerklösungen) überall möglichst gut funktionieren und möglichst gut performen. Es ergibt überhaupt keinen Sinn, zu behaupten, Intel würde nur in Clear Linux für bessere Resultate sorgen und sonst nicht.

Q: Warum ist Clear Linux schneller als andere Distributionen?
A: Hier steckt der Fehler eigentlich schon in der Frage. Unter Clear Linux wird nämlich schlicht andere Software ausgeführt als anderswo.

Hier muss man etwas ausholen. Software wird größtenteils in Hochsprachen geschrieben, wie z.B. in C. Ein Compiler übersetzt den Programmcode dann in Maschinensprache, je nach CPU Architektur (z.B. x86, POWER oder ARM) kommt ein anderes, ausführbares Objekt heraus. Die gängigen Toolchains haben sehr viele Optimierungsmöglichkeiten eingebaut und noch viel mehr Stellschrauben, die das Resultat beeinflussen. Oft sind das einfache time-memory tradeoffs, d.h. man übersetzt Code so, dass er z.B. etwas mehr Speicher belegt, dafür aber weniger Rechenzyklen braucht (oder andersherum). Compiler haben für viele Architekturen Profile, die die Codegenerierung beeinflussen. Die Profile beinhalten dann z.B. Informationen über Cachegrößen und -hierarchien, ob die CPU SMT unterstützt, wie ein Kern intern aufgebaut ist, usw. Das sind "Tuning"-Parameter, die die Performance anderer CPUs beeinträchtigen kann, der Code dort aber zunächst mal lauffähig bleibt. Es gibt aber auch "Architekturparameter", die dann beschreiben welche Befehlssatzerweiterungen durch die CPU unterstützt werden usw. Bei deren Verwendung kann dann Code erzeugt werden, der eben nicht mehr auf allen x86-64 CPUs läuft, sondern z.B. nur noch auf den allerneusten, die AVX-512 können.

Jetzt ist es natürlich so, dass die meisten Distributionen Softwarepakete als binaries ausliefern, also nicht den Quellcode der Programme, sonder das Ergebnis der Übersetzung in Maschinencode. Und damit man möglichst kompatibel bleibt, baut man hier generische binaries, die idR. sinnvolle defaults haben und auf allen x86-64 CPUs lauffähig sind, aber eben nicht alle möglichen Optimierungen beinhalten.

Man kann auch nicht einfach zig Versionen von binaries ausliefern, denn dann würden die Programme (und Repos) riesig werden (und ggf. Paketmanager komplexer). Würde man aber als User für seine eigene Distribution einmal alle Pakete nachbauen, mit der speziell verwendeten CPU Architektur und aktivierten Optimierungen, dann hätte man schon den Großteil des Performancegewinns, der Clear Linux bringt, erreicht. Aber das ist natürlich sehr aufwendig und bei jedem Update muss man die Pakete erneut bauen.

Was jetzt auch klar wird, ist dass Code, der bereits (durch die Programmierer) hochoptimiert geschrieben wurde (fast) nicht mehr schneller wird. Hier wäre der Unterschied zwischen Clear und anderen Distributionen sehr gering. Aber das ist natürlich für den Programmierer viel aufwendiger und er muss sich z.B. darum kümmern, falls er Befehlssatzerweiterungen benutzt, dass zur Laufzeit auch alternative Implementierung zur Verfügung steht, damit die Software auf älteren Prozessoren lauffähig bleibt. Oder er sagt einfach "mein Programm läuft nur ab Haswell aufwärts", wenn er auf die anderen Nutzer/Kunden verzichten kann/will. Und da Performance oft nicht das wichtigste und vor allem nicht das einzige Problem bei Softwareprojekten ist, wird das oft nicht gemacht. Andererseits werden aber dadurch natürlich auch oft Features neuer CPUs nicht genutzt. Intel hat daran maßgeblichen Anteil, weil sie ihre billigen CPUs oft beschneiden. Hätten z.B. auf einen Schlag alle neuen Intel CPUs AVX bekommen, hätten wir heute sehr wahrscheinlich deutlich mehr AVX Code in Anwendungen.

Wie schafft es Clear Linux aber, von diesen Optimierungen Gebrauch zu machen und trotzdem kompatibel zu bleiben?
Hier wird ein besonderes Feature benutzt, das Compiler noch nicht allzulange haben: Function Multiversioning (FMV). D.h. für eine (besonders relevante, da zeitaufwendige) Funktion werden jeweils mehrere Versionen erzeugt, z.B. eine generische, eine für AVX, eine für AVX2. Zur Laufzeit wird dann die passende Version der Funktion verwendet. Problem dabei: auch hier muss der Programmcode schon vor dem Übersetzen spezielle Annotationen für den Compiler aufweisen. Und genau das ist der knackende Punkt, denn das hat Intel z.T. automatisiert und patcht viele Softwarepakete genau mit dieser Änderung.

Ich mache mal noch ein Beispiel, damit klarer wird, wie Software, die nicht durch den Entwickler optimiert wurde, z.B. durch AVX profitieren kann.

Code:
int a[256], b[256], c[256];

void foo()
{
    for (int i=0; i<256; i++){
        a[i] = b[i] + c[i];
    }
}


int main()
{
    foo();
    return 0;
}

Das simple Programm nimmt drei Arrays, jeweils bestehend aus 256 Zahlen. Am Ende soll im ersten Array (a) an der i-ten Stelle die Summer der i-ten Zahl in b und der i-ten Zahl in c stehen. Die einfache Lösung ist, alle Werte einzeln nacheinander durchzugehen und jeweils die Addition vorzunehmen. So wurde es hier auch programmiert und genauso würde die CPU es auch ausführen. Sie braucht also 256 Schleifendurchläufe, in jedem davon macht sie eine Addition und geht dann einen Schritt weiter.

Eine CPU mit AVX2 ist aber in der Lage, einen Befehl wie die Addition auf mehrere Zahlen gleichzeitig auszuführen. Man verrechnet dann nicht mehr einzelne Zahlen (Skalare), sondern Gruppen von Zahlen (Vektoren). Z.B. bei AVX2 mit 256 Bit gehen 8 32-bittige Zahlen gleichzeitig. Man kann das ganze also herunterbrechen auf nur noch 32 Schleifendurchläufe, in denen jeweils eine Vektor-Addition (8 Zahlen gleichzeitig) stattfindet.

Diese sogenannte auto-vectorization ist natürlich nur ein eine von sehr vielen Möglichkeiten, aber eine mMn. auch für Laien leicht verständliche.

Und durch FMV kann der Compiler jetzt eben eine deutlich schnellere Variante der Funktion "foo" für AVX-CPUs erstellen und eine generische. Und da AMD durch AVX genauso profitiert wie Intel (ggf. sogar noch mehr, da es keine separaten, niedrigeren "AVX-Taktraten" gibt), funktioniert diese Optimierung dort automatisch ganz genauso gut.


Q: Bist du involviert?
A: Nein, ich bin nicht im Clear Linux Projekt und auch sonst nicht an einem Intel Projekt beteiligt. Persönlich benutze ich Arch Linux.

Q: Bist du ein Intel-Fanboy?
A: Nein. Mein letzter CPU Tausch war der von Zen1 auf Zen3.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: R4Z3R, storkstork, netzgestaltung und 32 andere
Super text, sehr ausfuerhlich und gut Erklaert. Vielen Dank!
 
  • Gefällt mir
Reaktionen: okidoki und Jupp53
Super Beitrag! Vielen Dank!

Wie sieht es den bei Clear Linux mit der Aktualität der Pakete / des Kernels aus und der Alltagstauglichkeit? Vergleichbar mit Arch?

Und wie sieht es mit der Verfügbarkeit von Programmen aus? Oder kann man alles, das n *.dep, *. rpm File hat oder n *.sh Script zur Installation drauf hauen?
 
Danke fuer die Rueckmeldungen. Dann hat es sich ja schonmal gelohnt ;-)

@2Stoned: ich habe keine Clear Installation, aber grds. ist es eine Rolling Release, Aktualitaet sollte also mit Arch vergleichbar sein. Je nachdem, wie schnell die Maintainer/Packager/Tester sind. Es basiert auf RPM. sh-Skripte funktionieren, wenn sie portabel sind. Ich wuerde aber immer den Paketmanager vorziehen und niemals Software per Skript, make install oder anderweitig installieren.
 
Man kann was ähnliches auch mit Gentoo erreichen, da dort die Pakete in der Regel manuell auf dem Rechner gebaut werden. Der Einrichtungsaufwand ist aber etwas hoch und das ganze auch etwas komplex.

Und es braucht ordentlich Zeit je nach Rechnerpower kann dann ein LibreOffice Update mal ein paar Stunden dauern weil das Paket gebaut werden muss.
 
Klasse und treffende Erklärung.
Sowas hätte ich mir im Artikel gewünscht (auch wenn ich mir das in diesem Fall schon selbst zusammreimen konnte: viele würden dadurch einiges lernen)!
 
@kim88: korrekt, das hatte ich auch angeschnitten, aber Gentoo nicht explizit erwaehnt.

Zu beachten ist dabei, dass das System dann weniger portabel ist. Die Festplatte/SSD in einen alten Rechner zu schieben (warum auch immer das ein Anwendungsfall sein kann), ist dann z.B. nicht drin.
 
  • Gefällt mir
Reaktionen: kim88
@flmr
Es gäbe noch Details,
1. Clear Linux nutzt mitunter Patches aus dem Stagingbereich, wenn diese Performancegewinne versprechen und ist teils gar schlicht und ergreifend die Demo für einige Patches. Clear Linux ist damit an einigen Stellen selbst Arch voraus.
Edit: Gerade diese Aktualität führt dann auch gern mal dazu, dass Clear die dickeren Benchmarkbalken bei Phoronix hat. Im Bereich I/O wird ja anhaltend optimiert und bei der Grafik helfen neuere Versionen von Mesa ja mitunter auch ganz gut.

2. Es gibt ein paar Parameter, die man generell verstellen kann (user limits (ulimit) wie max allowed open files zum Beispiel). Solche Limitierungen haben je nach Anwendungsfall Vorteile oder aber können bremsen. Clear Linux scheint diese Limitierungen generell recht großzügig anzusetzen.

@kim88
Wobei man auch Debians apt mitgeben kann, dass es Programme bitte als Source laden und kompilieren kann an der Stelle kann man dann auch für sein System optimierte Compiler Flags setzen.
Ergänzung ()

Nachtrag,
Erwähnenswert sollte noch sein, dass Clear mit dem GCC bzw lvm kompiliert werden und nicht mit dem icc bzw. den Intel-Bibliotheken.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: new Account()
Piktogramm schrieb:
Clear Linux nutzt mitunter Patches aus dem Stagingbereich
Ja, das wurde auch im dritten Punkt genannt. Manche Dinge landen, bevor sie im mainline Kernel sind. Das ist aber idR. weniger ausschlaggebend.

Piktogramm schrieb:
Clear Linux ist damit an einigen Stellen selbst Arch voraus
Du schreibst es so, als waere das verwunderlich, ist es aber nicht. Arch ist eine Rolling-release Distribution, die stabile Pakete ausliefert. In aller Regel bekommt Software ein stabiles Release, dann wird es getestet und dann kommt es in die Arch Repos. Das geschieht nicht besonders schnell oder frueh. Es wirkt nur so, weil andere (stable release) Distributionen ueber ihren ganzen Zeitraum ueberhaupt keine neuen Versionen ausliefern, sondern nur Fixes.
Clear ist auch rolling-release. Aber sie liefern eben manche Sachen aus, bevor es ein Release gab.

Piktogramm schrieb:
Es gibt ein paar Parameter, die man generell verstellen kann
Das ist richtig. Man benutzt z.B. bei Clear auch intel_pstate mit dem performance governor fuers CPU frequency scaling. Das hat aber auf Benchmarks idR. wenig Einfluss, da dort (bei hoher Last) sowieso wenig dynamisch geregelt wird.
 
Hoppala überlesen, steht wirklich da.

Nunja, Archnutzer haben schon den Ruf der Betatester unter den Linuxern (danke!). Denn auch wenn Arch Releaseversionen ausspielt heißt das ja nicht, dass wirklich alles Abhänigkeiten damit sauber laufen. Clear geht an der Stelle nochmals einen Schritt weiter.
Das andere Distributionen hier deutlich konservativer agieren hat Gründe. Gerade in Produktivumgebungen verstehe ich jeden, der sich solche Distributionen sucht.

Der Governor hat durchaus Einfluss. Bei mixed Workloads sorgen I/O-Waits schonmal dafür, dass die CPUs fröhlich wegdämmert. Wenn man da ein paar Latenzen einsparen kann, hilft das wahrscheinlich schon beim nächsten Benchmark mit einer Datenbank.
 
Gerade das Zusammenspiel der Abhaengigkeiten ist ja das, was in der "QS" passiert. Es gibt dann auch -testing repos, die man nicht benutzen muss (und per default auch nicht tut). In all den Jahren hatte ich noch kein ernsthaftes Problem. Selten muss man bei einem Update Hand anlegen, aber dann bekommt man eine E-Mail (wenn man sich in die mailingliste eingetragen hat), also kein Problem.

Aber klar, ich verstehe auch jeden, der auf eine stable Distribution setzt, ich mag's halt nicht. Ich benutze Arch neben anderen (Debian, Alpine, auch mal OpenBSD) privat, bei der Arbeit und auf Servern. Je nach Zweck unterscheiden sich die Vorlieben natuerlich. Das Gute daran ist ja, dass man sich nicht auf etwas festlegen muss ;-) Aber das wird hier auch langsam OT

Und ja, was mixed workloads angeht, hast du natuerlich recht.
 
  • Gefällt mir
Reaktionen: kim88
flmr schrieb:
Man kann auch nicht einfach zig Versionen von binaries ausliefern, denn dann würden die Programme (und Repos) riesig werden (und ggf. Paketmanager komplexer). Würde man aber als User für seine eigene Distribution einmal alle Pakete nachbauen, mit der speziell verwendeten CPU Architektur und aktivierten Optimierungen, dann hätte man schon den Großteil des Performancegewinns, der Clear Linux bringt, erreicht. Aber das ist natürlich sehr aufwendig und bei jedem Update muss man die Pakete erneut bauen.

da würde ich gerne mal nachhaken:

wäre es denn möglich, ein repo einzurichten, dass nicht die binaries ausliefert, sondern die quelltexte und alle einstellungen, die man zum build braucht automatisiert ausliefert? eine entsprechende umgebung auf dem "client" baut die pakete dann automatisch.

ich lade also mit einem entsprechenden "quelltext"-manager (wie bspw. apt/dnf/..., nur dass eben keine fertigen binaries bezogen werden, sondern quelltexte) die quelltexte und build-configs herunter und anschließend werden die durch diese softwareumgebung automatisiert gebaut und installiert.

der nachteil wäre halt die längere "installationsdauer" (weil ja auch noch kompiliert werden muss), der vorteil eben, dass das programm dann maßgeschneidert fürs jeweilige system ist. muss man ja nicht mit jedem programm machen, man kann sich ja auf die performancekritischen beschränken.


edit:

achja, fast vergessen, danke für die tolle erklärung!
 
Das ist im Grunde das, was Gentoo macht. Nur eben mit allen Paketen, außer man möchte für besonders komplexe Programme lieber schnell eine Binary-Version laden.
Der Compiler kann schon länger die CPU erkennen und einige Einstellungen automatisch setzen.
 
  • Gefällt mir
Reaktionen: flmr, Mickey Cohen und new Account()
Das man sich statt der Binaries den Quellcode zieht und selbst kompiliert, ist ein Feature welches viele Distributionen beherrschen. Unter Debian bzw. Distributionen die apt nutzen kommt man da mit apt source --compile ..... weiter und kann es auch noch im Detail konfigurieren. Wenn man will kann man also versuchen noch etwas Performance aus spezifischen Anwendungen/Bibliotheken zu kitzeln.

Bei vielen Anwendungen wollte ich das aber nicht tun, es gibt viele Programme die bauen echt ewig, gerade wenn man den Compiler viel optimieren lässt.
 
Genau, wie vor mir schon gesagt wurde, wird man mit march=native und mtune=native aehnliche Ergebnisse bekommen.

Ich erachte es nicht fuer sinnvoll, bei "binary-Distributionen" deswegen alle Pakete nachzubauen. Wenn man darauf Wert legt, sollte man gleich Gentoo benutzen. Oder sich auf wenige, performancekritische Programme/libraries beschraenken.
 
  • Gefällt mir
Reaktionen: kim88
Piktogramm schrieb:
Das man sich statt der Binaries den Quellcode zieht und selbst kompiliert, ist ein Feature welches viele Distributionen beherrschen. Unter Debian bzw. Distributionen die apt nutzen kommt man da mit apt source --compile ..... weiter und kann es auch noch im Detail konfigurieren. Wenn man will kann man also versuchen noch etwas Performance aus spezifischen Anwendungen/Bibliotheken zu kitzeln.

Bei vielen Anwendungen wollte ich das aber nicht tun, es gibt viele Programme die bauen echt ewig, gerade wenn man den Compiler viel optimieren lässt.


Wichtig hierbei noch zu erwähnen, dass die meisten Distirbutionen die Quelltext Repos standardmässig auskomentiert haben. Also wenn du ein Debian oder Ubuntu hast musst du in der sources.list die erst aktivieren.

Soweit ich wess gilt das auch für openSuse und Fedora.

Aber wei bereits erwähnt ich würde das nur bedingt empfehlen, das Bauen viele Anwendungen dauert selbst auf "Super High End Maschinen" einige Stunden, da kannes sein, das du für 20 Updates oder so deinen Rechner für 2-3 Tage unter Hochlast laufen lassen musst - arbeiten nebenbei macht dann auch nur begrenzt Spass.

Ob sich das wirklich lohnt. Villeicht öffnet sich dann Programm XY ein paar ms Sekunden schneller auf dem Rechner dafür hast du für Installation einfach mal 15 Stunden gebraucht. Ganz viel Spass macht es, wenn der Build-Prozess aus irgendwelchen Gründen nach 10 Stunden einen Error wirft und abbricht und du wieder von vorne anfangen kannst.

Meiner Meinung nach lohnt sich das nur für sehr spezialisierte Maschinen - aber nicht wirklich für den Alltagsrechner.
 
Zurück
Oben