LINUX.ORG.RU

Собирайте своё ядро clang'ом!

 , , , ,


1

4

Я тут накатал довольно большой текст на (возможно, очень корявом) английском о том, что нужно собирать линукс clang’ом. Если вдруг хотите ругать мой английский, пожалуйста.

Если совсем кратко, суть такова:

Благодаря усилиям проекта ClangBuiltLinux ядро нормально собирается clang’ом, однако реально хорошо оттестированы только defconfig’и некоторых наиболее популярных архитектур. Предвосхищая вопрос «а какой от этого профит», скажу, что возможно, никакого, так что просто just for fun.

Я уверен, что тут полно любителей покомпилять ядро, найдётся куча уникальных конфигов и комбинаций патчей. Потому вот вам три простых шага:

  1. Качаете исходники ядра (чем новее, тем лучше, но можно и свежий LTS), накатываете свои любимые патчи, подсовываете ему свой конфиг
  2. Качаете свежий clang (снова, чем новее, тем лучше; я рекомендую взять с apt.llvm.org, если пользуетесть Debian или Ubuntu)
  3. Собираете первое вторым и репортите все ворнинги и ошибки в багтрекер ClangBuiltLinux, а если стесняетесь, можно прямо в этот тред, я перепощу туда

А почему ты ещё не собрал своё ядро clang’ом?

Если вдруг кому-то покажется, что такому место в толксах, перенесите, пожалуйста!

★★★★★

Ядро? Шлангом?

Я видел этот срач тред на одной странице…

mord0d ★★★★★
()
Ответ на: комментарий от anonymous

может хотя бы быстрее собирается?

Очень сомневаюсь. Но вот в рантайме может показать чуть лучшие результаты.

mord0d ★★★★★
()

А почему ты ещё не собрал своё ядро clang’ом?

Потому что за меня его собрали в апстриме FreeBSD тем же самым clang. :3

mord0d ★★★★★
()

А почему ты ещё не собрал своё ядро clang’ом?

потому что не понял зачем. Оно и так прекрасно собирается гцц, а проблем я могу поискать в других местах, где действительно что-то сломано.

однако реально хорошо оттестированы только defconfig’и некоторых наиболее популярных архитектур.

может вам конфиг и набор патчей скинуть, а вы за меня покомпиляете?

anonymous
()

Всеравно огромное спасибо

LGH
()
Ответ на: комментарий от madcore

Да, сам давно пересел на такое ядро, по ощущениям система стала более отзывчивой, но это никак не измерить, так что я всё списываю на эффект плацебо.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Собирается действительно немного быстрее, но на современных процессорах разве это важно?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от superuser

Тесты на phoronix говорят, что где-то будет прирост, а где-то наоборот. Но со временем, я уверен, будет лучше по всем параметрам.

CYB3R ★★★★★
() автор топика

А почему ты ещё не собрал своё ядро clang’ом?

А ты почему еще не собираешь ядро с помощью tcc? Можно компилировать прямо при загрузке!

stasolog
()
Ответ на: комментарий от anonymous

а проблем я могу поискать в других местах, где действительно что-то сломано

Возможно, в твоём ядре действительно что-то незначительное сломано, но это не очевидно, потому что в gcc просто не предусмотрено ворнинга для этого.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

а в clang’е все предусмотрено?

репортите все ворнинги и ошибки

вас вообще только стадия компиляции интересует? а если регрессии будут во время исполнения? Может я без устройства или данных останусь.

anonymous
()

А почему ты ещё не собрал своё ядро clang’ом?

а я собрал! у меня OpenBSD потому что :) там gcc из базы в i386 и arm64 версии вообще выкинули. в amd64 ещё оставили

buratino ★★★★★
()

Уж лучше бы было: «Собирайте ядро FreeBSD с помощью GCC!». Я бы повёлся. А тут булшит булшитом погоняет.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от anonymous

Были ядра, которые собирались, но не загружались, но такие, чтобы убивали хардварь или удаляли данные, ещё не попадались. Если вдруг, сможешь такую регрессию обнаружить, будет офигенная новость на phoronix ;)

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от darkenshvein

Да мне и ника твоего достаточно.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

зато я видел ассемблерные листинги после оптимизаций clang’а. Да это было пару лет назад, но осадочек остался

Были ядра, которые собирались, но не загружались, но такие, чтобы убивали хардварь или удаляли данные, ещё не попадались

что позволяет проводить масштабные эксперименты на людях, использующих нестандартные конфигурации :) Откуда мне знать, что clang нормально прожует примененный патч? Не в плане соберет без ошибок, а в плане сгенерированного кода.

будет офигенная новость на phoronix ;)

это будет из разряда «поздно пить боржоми». Ядро это все же не обычное приложение, которое хотя бы от другого пользователя можно запустить.

Вообще все так бодро начинается, типа выполните 3 шага… Ну, допустим собрать я могу, могу даже попробовать запустить. Но проверять-то дальше как?

Тесты какие-либо у вас предусмотрены? Для простых смертных, т.к. сделать полное окружение, которое используется разработчиками, я не смогу.

anonymous
()

А почему ты ещё не собрал своё ядро clang’ом?

В GCC лицензия привлекательнее.

Pravorskyi ★★★
()

linux конец

anonymous
()

Насколько я знаю, G***** вполне уже компилирует Clang-ом ядра для Android.

Не понимаю правда в чём профит кроме как для разработчиков ядра, но и это уже хорошо.

a1batross ★★★★★
()
Ответ на: комментарий от CYB3R

по ощущениям система стала более отзывчивой

В ядре так много cpu bound(чтобы даже переключения user <-> kernel заткнуть)?

DllMain
()
Ответ на: комментарий от anonymous

Так просто не запускай на продакшене. Как и любой другой экспериментальный софт. Могу ещё о пользе бекапов рассказать.

Все автоматические тесты в qemu, но сейчас уже довольно много народу использует clangbuiltlinux на своих десктопах и смартфонах (x86_64 и arm64 соответственно).

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от darkenshvein

смотри на аватар внимательнее.

Написано depositphotos

madcore ★★★★★
()
Ответ на: комментарий от CYB3R
  1. смысл мне его компилять, если не запускать?
  2. с чего ты взял, что у меня есть разделение на продакшен и не продакшен? Самый стремный вариант, который у меня есть и для которого я компилял ядро, это роутер на полукастрированном mips и уже неизвестно где найденными патчами. Вам же уникальные нужны?

Могу ещё о пользе бекапов рассказать.

Можешь рассказать, как прошивку заливать, когда устройство не запустилось. Я уже стал забывать, куда в этом роутере подпаиваться.

Все автоматические тесты в qemu

боюсь для своего варианта я qemu не сконфигурирую

anonymous
()
Ответ на: комментарий от anonymous

может хотя бы быстрее собирается?

Собрал ядро 5.6.7-custom. Время сборки:

gcc       8 мин 06 сек
clang    14 мин 40 сек

superuser ★★★★★
()
Ответ на: комментарий от CYB3R

Собирается действительно немного быстрее

эээ, у меня наоборот - clang-ом дольше

$ clang -v
clang version 11.0.0-++20200426063814+2f3e86b3181-1~exp1~20200426164415.1647 
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc-cross/i686-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc-cross/i686-linux-gnu/7.5.0
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc-cross/i686-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc-cross/i686-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64

superuser ★★★★★
()
Последнее исправление: superuser (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

да так-то не-гнутых компиляторов - штук десять. не вопрос вообще. вот как раз на gcc я бочку не качу. мне не нравится гномятина - её бы я выпилила всю, под корень. а компилятор - это то, что у них сделано качественно и работает без нареканий.

Iron_Bug ★★★★★
()

Шланг всё ещё генерирует более тормозный код в большинстве случаев, да?

anonymous
()
Ответ на: комментарий от anonymous

Судя по мониторингу, нередко бывает большая загрузка проца ядерным кодом.

anonymous
()
Ответ на: комментарий от stasolog

а я не собираю автокомплит. у меня он везде отключен, как вредоносная и мешающая работе фича.

Iron_Bug ★★★★★
()

и таки шо мы видим? gcc выдал более компактный код (в байтах), а значит больше инструкций может влезть в линейку кэша. clang задействовал cmovg/cmovge, которые не всем нравятся, зато избавился от двух условных переходов и, наверное, штрафов за промах.

Может сходишь к курам и вы сравните сколько микроопераций и циклов там надо в обоих случаях?

anonymous
()
Ответ на: комментарий от anonymous

Я не говорю не запускать вообще, я говорю не запускать там, где есть риск что-то потерять.

Самый стремный вариант, который у меня есть и для которого я компилял ядро, это роутер на полукастрированном mips и уже неизвестно где найденными патчами.

Вот это интересный вариант, но работает ли на нём мейнлайновое ядро – вот в чём вопрос.

Можешь рассказать, как прошивку заливать, когда устройство не запустилось. Я уже стал забывать, куда в этом роутере подпаиваться.

Вот именно про это я и говорю. Если не уверен, что сам не сможешь легко восстановить окирпиченное устройство, лучше не надо.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Анонимус даже комментарий до конца не способен прочитать, куда там собирать ядро шлангом…

CYB3R ★★★★★
() автор топика

А можно ли собирать ядро clang-ом, а модули — gcc (или наоборот)? А как будет с проприетарными модулями ядра? Они соберутся отличным от использовавшегося для сборки их бинарной части компилятора?

te111011010
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.