Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German) Diskussionsforum
  • Search

LLVM/Clang 9 und der Kernel

Unterhaltung über Gentoo und andere Themen: Alles was nicht in ein Support-Forum gehört.
Post Reply
  • Print view
Advanced search
16 posts • Page 1 of 1
Author
Message
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

LLVM/Clang 9 und der Kernel

  • Quote

Post by schmidicom » Mon Sep 23, 2019 9:29 am

Seit LLVM/Clang 9 soll es offenbar möglich sein damit den Linux-Kernel ohne große Verrenkungen zu bauen.
https://www.golem.de/news/compiler-llvm ... 43986.html

Hat das schon mal einer ausprobiert?
Was könnte einem das bringen?
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Top
forrestfunk81
Guru
Guru
User avatar
Posts: 567
Joined: Tue Feb 07, 2006 12:33 pm
Location: münchen.de

  • Quote

Post by forrestfunk81 » Mon Sep 23, 2019 3:43 pm

Bei Phoronix haben sie einige Benchmarks durchgeführt. Aber das sind Fullstack Benchmarks und zeigen erwartungsgemäß nur geringe Unterschiede im Ergebnis. Leider trifft Phoronix auch keine Aussage über die Compile Zeit oder die Binary Größe. Gerade die Compile Zeit wäre interessant, da Clang darauf angeblich besonderen Wert legt.
# cd /pub/
# more beer
Top
mike155
Advocate
Advocate
Posts: 4438
Joined: Fri Sep 17, 2010 11:33 pm
Location: Frankfurt, Germany

Re: LLVM/Clang 9 und der Kernel

  • Quote

Post by mike155 » Wed Sep 25, 2019 12:35 am

schmidicom wrote:Hat das schon mal einer ausprobiert?
Was könnte einem das bringen?
Ich glaube nicht, dass der Kernel besser wird, wenn man ihn mit LLVM/Clang compiliert. :)

Aber darum geht es auch nicht. Viel wichtiger ist, dass es jetzt einen zweiten vollwertigen und sehr guten C/C++ Compiler gibt! Davon haben wir alle etwas:
  1. Ab jetzt haben wir sowohl für den Kernel, als auch für (fast) alle anderen Pakete die Wahl zwischen GCC und LLVM/Clang. Das wird insbesondere wichtig, wenn mal einer der Compiler Probleme haben sollte.
  2. Die Konkurrenz zwischen GCC und LLVM/Clang wird beide Projekte voranbringen. Die Entwickler untersuchen natürlich sehr genau, wo das andere Produkt besser oder schlechter ist. Beispielsweise haben die GCC Entwickler gesehen, dass Clang deutlich bessere Meldungen ausgibt - und daraufhin die Meldungen von GCC in den letzten Releases deutlich verbessert. Ein anderes Beispiel: die GCC Entwickler überlegen, den GCC weiter zu modularisieren.
Wenn ich es richtig verstehe, sind die GCC Entwickler nicht traurig über die Konkurrenz und nehmen sie sportlich. Den GCC Entwicklern (allen voran Richard Stallman) bleibt auf jeden Fall der Verdienst, Linux und große Teile von Open Source überhaupt erst möglich gemacht zu haben. Dafür werde ich ihnen ewig dankbar sein!
Top
toralf
Developer
Developer
User avatar
Posts: 3944
Joined: Sun Feb 01, 2004 2:58 pm
Location: Hamburg
Contact:
Contact toralf
Website

Re: LLVM/Clang 9 und der Kernel

  • Quote

Post by toralf » Wed Sep 25, 2019 6:07 pm

mike155 wrote:Den GCC Entwicklern (allen voran Richard Stallman) bleibt auf jeden Fall der Verdienst, Linux und große Teile von Open Source überhaupt erst möglich gemacht zu haben. Dafür werde ich ihnen ewig dankbar sein!
Hört sich ja ein bißchen wie ein Nachruf an :-D
Top
mike155
Advocate
Advocate
Posts: 4438
Joined: Fri Sep 17, 2010 11:33 pm
Location: Frankfurt, Germany

Re: LLVM/Clang 9 und der Kernel

  • Quote

Post by mike155 » Sat Sep 28, 2019 12:31 am

toralf wrote:Hört sich ja ein bißchen wie ein Nachruf an :-D
"Nachruf" wäre übertrieben. Aber den Status als "der" C-Compiler unter Linux hat GCC sicherlich eingebüßt.

Ich muss gestehen, das ich am Anfang einige Gewissensbisse hatte, clang/LLVM zu verwenden. Es hat sich irgendwie illoyal angefühlt. Nicht nur aus Gewohnheitsgründen, sondern auch wegen der unterschiedlichen Lizenzen. Clang/LLVM ist nicht nur ein weiterer Compiler - es ist auch ein Angriff auf die GPL und das GNU Projekt. Ich bin mir aber noch nicht sicher, was das bedeutet und ob bzw. wie ich darauf reagieren soll.

Jedenfalls verwende ich zurzeit regelmäßig sowohl GCC als auch clang und ich bin mit beiden sehr zufrieden.
Top
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

  • Quote

Post by schmidicom » Fri Oct 04, 2019 2:46 pm

Ich habe jetzt mal auf meinem Laptop den neusten Kernel (5.3.2) mit clang gebaut und gebootet, beides hat problemlos funktioniert.
Spürbare Unterschiede kann ich bis jetzt keine feststellen, außer dass das neue Kernel-Image 0.2M kleiner ist als von 5.3.1 (was natürlich nicht zwingend nur mit clang zu tun haben muss).
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Top
mike155
Advocate
Advocate
Posts: 4438
Joined: Fri Sep 17, 2010 11:33 pm
Location: Frankfurt, Germany

  • Quote

Post by mike155 » Fri Oct 04, 2019 3:24 pm

Das ist interessant, schmidicom! Bitte berichte weiter von Deinen Erfahrungen.

Das Problem ist nicht, den Kernel mit einem anderen Compiler zu übersetzen.

Das Problem ist, dass der Kernel in den letzten 27 Jahren bewusst und häufig auch unbewusst auf den GCC optimiert wurde. D.h. clang muss nicht nur den Code compilieren, sondern er muss auch die vielen dokumentierten und nicht dokumentierten Eigenheiten des GCC nachbauen. Sonst funktioniert der Kernel anders als gewünscht.

Ich denke da beispielsweise an Posts auf der LKML, wo jemand eine Änderung des Quellcodes an einer kritischen Stelle vorschlägt. Die Entwickler schauen sich dann den von GCC generierten Assembler-Code an und ändern den Source-Code so lange, bis der generierte Assembler-Code passt. Hier ist es wahrscheinlich, dass clang ganz anderen Assembler-Code generiert - und ein mit clang compilierter Kernel Dinge macht, die die Entwickler gar nicht so wollen. Das ist dann aber kein Fehler von clang. Sondern eine zu starke Optimierung des Quellcodes an den GCC.

Ein anderes Beispiel ist, dass die Kerrnel-Entwickler gelegentlich Fehler im GCC finden. Der GCC wird dann typischerweise angepasst und dadurch besser. Dieser Prozess hat in clang/LLVM noch nicht stattgefunden. Ich kann mir gut vorstellen, dass in clang/LLVM noch ein paar Fehler schlummern, die noch nicht entdeckt wurden - und die zu Fehlfunktionen im Kernel führen.
Top
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

  • Quote

Post by schmidicom » Tue Oct 15, 2019 6:51 am

Inzwischen konnte ich das ganze mal etwas ausgedehnter ausprobieren und hier mal ein kleines Fazit dazu:

Auf meinem Desktop oder Laptop merke ich zwischen einem Kernel der mit clang-9 und einem der mit GCC kompiliert wurde kaum einen Unterschied. Nur bei einem Server für Samba-Freigaben konnte ich, und inzwischen auch andere, einen Unterschied bemerken. Auf diesen greifen tagtäglich um die 200 Clients (hauptsächlich Windows aber auch ein paar wenige Macs) zu und der reagiert jetzt beim Auflisten des Inhalts eines Ordners (vor allem Ordner mit sehr vielen Dateien/Unterordnern) deutlich schneller.
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Top
mike155
Advocate
Advocate
Posts: 4438
Joined: Fri Sep 17, 2010 11:33 pm
Location: Frankfurt, Germany

  • Quote

Post by mike155 » Tue Oct 15, 2019 11:53 am

und der reagiert jetzt beim Auflisten des Inhalts eines Ordners (vor allem Ordner mit sehr vielen Dateien/Unterordnern) deutlich schneller.
Hast Du schon eine Erklärung dafür? Oder zumindest eine Vermutung?

Wenn Anwender etwas merken, müssen die entsprechenden Funktionen im Kernel um mindestens 20-30% schneller geworden sein. Das würde mich sehr wundern.
Top
Max Steel
Advocate
Advocate
User avatar
Posts: 2324
Joined: Mon Feb 12, 2007 6:35 pm
Location: My own world! I and Gentoo!

  • Quote

Post by Max Steel » Tue Oct 15, 2019 12:15 pm

mike155 wrote:
Wenn Anwender etwas merken, müssen die entsprechenden Funktionen im Kernel um mindestens 20-30% schneller geworden sein. Das würde mich sehr wundern.
Nicht zwangsläufig, eine Ordnerstruktur mit einigen tausend Einträgen ruft auch bestimmte Funktionen einige tausend mal auf. Eine Verbesserung hierin könnte Lastabhängig schon eine deutliche Verbesserung bringen. Ist aber zugleich auch ein fieser Corner-Case.
Oder die Stromsparmechanismen der Festplatten funktionieren in der Version eben nicht und die Platten müssen nicht laufend (oder am Morgen) frisch anfahren.
mfg
Steel
___________________

Heim-PC: AMD Ryzen 9 5950X, 64GB RAM, RX 9070 XT
Laptop: AMD Ryzen 5 7640U, 32GB RAM, Radeon onCPU Graphics
Arbeit-PC: AMD Ryzen 3 Pro 7335U, 16GB RAM, AMD Radeon Graphics (leider WSL2)
Top
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

  • Quote

Post by schmidicom » Tue Oct 15, 2019 12:22 pm

mike155 wrote:
und der reagiert jetzt beim Auflisten des Inhalts eines Ordners (vor allem Ordner mit sehr vielen Dateien/Unterordnern) deutlich schneller.
Hast Du schon eine Erklärung dafür? Oder zumindest eine Vermutung?

Wenn Anwender etwas merken, müssen die entsprechenden Funktionen im Kernel um mindestens 20-30% schneller geworden sein. Das würde mich sehr wundern.
Nö so richtig erklären kann ich mir das nicht, aber der Unterschied ist recht deutlich.
Vorher konnte man dem Windows-Explorer beim Zugriff auf die Samba-Freigabe des Servers dabei zusehen wie die Liste an Dateien und Ordner aufgebaut wurde (man erkannte sogar das diese nicht alphabetisch aufgebaut wurde) und jetzt wird sie gleich ohne erkennbare Verzögerung vollständig angezeigt. Die reine Datentransferrate jedoch (z. B. beim kopieren einer großen Datei) hat sich nicht verändert.

Info am Rande:
Der Server ist eine VM auf einem VMWare-ESXi mit XFS als Dateisystem.
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Top
ChrisJumper
Advocate
Advocate
Posts: 2419
Joined: Sat Mar 12, 2005 1:42 pm
Location: Germany

  • Quote

Post by ChrisJumper » Sat Oct 19, 2019 9:07 pm

Hmm. Wieso und warum sollte man llvm nehmen? Kann mich da mal jemand aufklären kurz Zusammengefasst was da der Vorteil sein sollte?
Top
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

  • Quote

Post by schmidicom » Sun Oct 20, 2019 7:06 am

ChrisJumper wrote:Hmm. Wieso und warum sollte man llvm nehmen? Kann mich da mal jemand aufklären kurz Zusammengefasst was da der Vorteil sein sollte?
https://clang.llvm.org/comparison.html
Letztendlich wird wohl jeder seine eigenen Gründe haben warum er lieber den einen oder anderen Compiler benutzt.
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Top
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

  • Quote

Post by schmidicom » Tue Apr 14, 2020 3:51 pm

mike155 wrote:Ich denke da beispielsweise an Posts auf der LKML, wo jemand eine Änderung des Quellcodes an einer kritischen Stelle vorschlägt. Die Entwickler schauen sich dann den von GCC generierten Assembler-Code an und ändern den Source-Code so lange, bis der generierte Assembler-Code passt. Hier ist es wahrscheinlich, dass clang ganz anderen Assembler-Code generiert - und ein mit clang compilierter Kernel Dinge macht, die die Entwickler gar nicht so wollen. Das ist dann aber kein Fehler von clang. Sondern eine zu starke Optimierung des Quellcodes an den GCC.
Zu dieser Sache scheint es jetzt was neues zu geben:
https://www.pro-linux.de/news/1/27944/erste-vorschau-auf-linux-kernel-57.html wrote:Der Kernel kann nun ganz einfach mit der Kommandozeilenoption LLVM=1 mit Clang statt GCC compiliert werden. Um auch den integrierten Assembler zu verwenden, muss man zusätzlich LLVM_IAS=1 angeben.
Ich vermute daher einfach mal das ein "make CC=/usr/lib/llvm/10/bin/clang -j5" den Assembler-Code aus dem Kernel nicht mit LLVM compiliert hat.
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Top
l3u
Advocate
Advocate
User avatar
Posts: 2619
Joined: Wed Jan 26, 2005 3:12 pm
Location: Konradsreuth (Germany)
Contact:
Contact l3u
Website

  • Quote

Post by l3u » Sat May 02, 2020 3:07 pm

Jedenfalls haut clang immer mal (sinnvolle) Warnungen beim Kompilieren raus, die man mit dem gcc nicht bekommt. Ich bau mein eines Projekt immer mal mit clang, damit ich die dann bekomm, und bisher hab ich mir immer gedacht "cleverer clang" ;-)
Top
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

  • Quote

Post by schmidicom » Mon Jun 01, 2020 5:26 pm

Der Kernel 5.7.0 ist ja jetzt draußen und wie angekündigt kann man jetzt LLVM und LLVM_IAS benutzen um das ganze mit den Compilern von LLVM zu bauen.

Aber...
Wenn LLVM_IAS auf 1, also aktiv, gesetzt wird passiert zumindest bei mir das:

Code: Select all

...
  AS [M]  arch/x86/crypto/chacha-avx512vl-x86_64.o
  AS [M]  arch/x86/crypto/aesni-intel_asm.o
<instantiation>:15:74: error: too many positional arguments
 PRECOMPUTE 8*3+8(%rsp), %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7,
                                                                         ^
arch/x86/crypto/aesni-intel_asm.S:1598:2: note: while in macro instantiation
 GCM_INIT %r9, 8*3 +8(%rsp), 8*3 +16(%rsp), 8*3 +24(%rsp)
 ^
<instantiation>:47:2: error: unknown use of instruction mnemonic without a size suffix
 GHASH_4_ENCRYPT_4_PARALLEL_dec %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, enc
 ^
arch/x86/crypto/aesni-intel_asm.S:1599:2: note: while in macro instantiation
 GCM_ENC_DEC dec
 ^
<instantiation>:15:74: error: too many positional arguments
 PRECOMPUTE 8*3+8(%rsp), %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7,
                                                                         ^
arch/x86/crypto/aesni-intel_asm.S:1686:2: note: while in macro instantiation
 GCM_INIT %r9, 8*3 +8(%rsp), 8*3 +16(%rsp), 8*3 +24(%rsp)
 ^
<instantiation>:47:2: error: unknown use of instruction mnemonic without a size suffix
 GHASH_4_ENCRYPT_4_PARALLEL_enc %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, enc
 ^
arch/x86/crypto/aesni-intel_asm.S:1687:2: note: while in macro instantiation
 GCM_ENC_DEC enc
 ^
<instantiation>:15:67: error: too many positional arguments
 PRECOMPUTE %rcx, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7,
                                                                  ^
arch/x86/crypto/aesni-intel_asm.S:1707:2: note: while in macro instantiation
 GCM_INIT %rdx, %rcx,%r8, %r9
 ^
<instantiation>:47:2: error: unknown use of instruction mnemonic without a size suffix
 GHASH_4_ENCRYPT_4_PARALLEL_enc %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, enc
 ^
arch/x86/crypto/aesni-intel_asm.S:1722:2: note: while in macro instantiation
 GCM_ENC_DEC enc
 ^
<instantiation>:47:2: error: unknown use of instruction mnemonic without a size suffix
 GHASH_4_ENCRYPT_4_PARALLEL_dec %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, enc
 ^
arch/x86/crypto/aesni-intel_asm.S:1737:2: note: while in macro instantiation
 GCM_ENC_DEC dec
 ^
make[2]: *** [scripts/Makefile.build:349: arch/x86/crypto/aesni-intel_asm.o] Fehler 1
make[1]: *** [scripts/Makefile.build:488: arch/x86/crypto] Fehler 2
make[1]: *** Es wird auf noch nicht beendete Prozesse gewartet....
  CC      arch/x86/mm/numa_64.o
  CC      fs/notify/notification.o
  CC      arch/x86/kernel/cpu/mtrr/generic.o
...
Der Assembler-Code des Kernels ist offensichtlich noch nicht mit LLVM kompilierbar aber der C-Code schon.
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Top
Post Reply
  • Print view

16 posts • Page 1 of 1

Return to “Diskussionsforum”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic