LINUX.ORG.RU

Статус готовности CLang к сборке ядра Linux

 , , license bsd, lll, , , ,


0

1

В прошлом октябре был анонсирован проект по адаптации LLVM компилятора CLang к сборке ядра Linux. С тех пор прошло более полугода, и на днях разработчики опубликовали свой отчет о проделанной работе.

В целом:

  • Удалось получить работающую сборку ядер 2.6.37 и 2.6.38 (для некоторых конфигураций)
  • KVM и Xen использовать нельзя, причем последний пока даже не компилируется
  • Компилируются примерно 90% драйверов ядра, многие работают
  • Некоторые поставляемые сторонними вендорами драйвера (Broadcom, NVIDIA) работают отлично
  • Можно использовать многопроцессорные конфигурации (правда, только на x86), однако в некоторых случаях они требуют дополнительных усилий по доработке компилируемого кода

Что не работает:

  • Ассемблер для генерации кода реального режима (директивы code16gcc), поэтому, невозможно откомпилировать код начальной загрузки (для этой цели используется gas)
  • GCC-расширения языка C (некоторые работают, некоторые нет)
  • Опции генерации и оптимизации кода: -mregparm, -fcall-saved-reg, __arch_hweight*(), -pg, атрибут no_instrument_function, -fno-optimize-sibling-calls

Несмотря на возникающие трудности, разработчики полны энтузиазма. Свой проект они назвали LLL project, что расшифровывается как LLVM Linux project.

>>> Подробности

★★★★★

Проверено: mono ()
Последнее исправление: mono (всего исправлений: 2)
Ответ на: комментарий от aho

>на самом деле clang + llvm имеют свои плюшки

Почему ни один фанатик до сих пор не сказал, что же за мифически плюшки оно имеет?

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

Потому что стоит пойти по ссылке и почитать, там все доходчиво и даже с картинками.

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

> Почему ни один фанатик до сих пор не сказал, что же за мифически плюшки оно имеет?

я хоть и не фанатик, но:

- статический анализ кода;
- скорость компиляции быстрее раза в два;
- вменяемые сообщения об ошибках;
- JIT;

и пр.

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

> Почему ни один фанатик до сих пор не сказал, что же за мифически плюшки оно имеет?

Откуда столько дебилов, не умеющих читать?

У gcc множество архитектурных недостатков:

- Слишком много промежуточных представлений. В llvm же только один уровень.

- Отсутствие единообразного метода для написания преобразований

- Не разделяется код между языковыми frontend-ами

- Много древнего кода, который уже давно никто не понимает

- Написано на Си, с множеством костылей

- Платформозависимые части размазаны по всем уровням

В clang и llvm все эти недостатки отсутствуют. Очень четкое разделение по уровням абстракции. Легко добавляются произвольные преобразования между этими уровнями. Как результат - есть довольно мощный и легкоуправляемый статистический анализатор кода. Есть полноценная, работающая link time optimization (то убожество, что есть в gcc, еще лет 5 допиливать до рабочего состояния будут). Clang и llvm очень маленькие и понятные, один разработчик легко может добавить новую функциональность, не тратя годы на разборки с нагромождениями древнего хлама.

А вы, придурки, все про лицензии бухтите. Не важно это. Важны только технические характеристики.

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

>Очень четкое разделение по уровням абстракции. Легко добавляются произвольные преобразования между этими уровнями. Как результат - есть довольно мощный и легкоуправляемый статистический анализатор кода. Есть полноценная, работающая link time optimization (то убожество, что есть в gcc, еще лет 5 допиливать до рабочего состояния будут).

Ну оочень неочевидные «преимущества». Тем более, они все нивелируются, если вспомнить, что Clang в сравнении с GCC ничего не умеет.

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

> Ну оочень неочевидные «преимущества»

LTO - это «неочевидное преимущество»? Что тогда преимущество, по твоему? Ты вообще хоть что-либо в компиляторах понимаешь, чтобы нести такую чушь? Много своего кода в gcc и в clang закоммитил?

Ну оочень неочевидные «преимущества»

И чего он такого нужного не умеет? Fortran77?

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

наоборот, это GCC не умеет, например, блоки http://en.wikipedia.org/wiki/Blocks_(C_language_extension)
ну их можно до какой-то степени эмулировать вложенными функциями, но блоки — это почти полноценные замыкания, в отличие от.

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

Не разработчик вообще, поэтому всё это(в том числе и педантичная поддержка стандартов) мне до лампочки, в отличие от скорости и работоспособности скомпилированного кода.

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

> Что-то ещё?

Дадада, нестандартные расширения от gcc все конечно же полезные и нужные, а если от Apple, то сразу нунах?

Ты давай, сначала за LTO, static analysis и code completion отчитайся, ламерье ущербное.

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

> Не разработчик вообще,

А по какому праву тогда вообще хлебало раззявил и вякаешь? Компилятор - инструмент для разработчиков. Разработчикам и обсуждать, какой компилятор выбрать. Юзерам же - молчать в тряпочку.

поэтому всё это(в том числе и педантичная поддержка стандартов) мне до лампочки, в отличие от скорости и работоспособности скомпилированного кода.

А скорость и качество кода как раз от качества отпимизаций и анализа и зависит.

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

тебе привести список всех нестандартных расширений в GCC, или сам найдёшь?
в чём поинт использования каждого такого расширения, например, в ядре Linux?
если можно писать на plain C99 как те же BSD?
в чём поинт такого сравнения вообще, меряемся у кого список нестандартных расширений толще?
или нужен список того, что «просто работает»?

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

У тебя бугурт, уйди.

А скорость и качество кода как раз от качества отпимизаций и анализа и зависит.


Только вот почему-то так всё выглядит только в теории, а на практике старый, жирный и непонятный GCC по производительности скомпилированного кода уделывает все остальные opensource-компиляторы.

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

> У тебя бугурт, уйди.

Продолжаешь тявкать, животное? Усохни.

Только вот почему-то так всё выглядит только в теории, а на практике старый, жирный и непонятный GCC по производительности скомпилированного кода уделывает все остальные opensource-компиляторы.

На практике, с LTO у clang+llvm бинарники получаются иногда в два раза меньше, чем у gcc. А для всяких embedded и mobile устройств это весьма важно.

Да и что ты такое, чтобы вякать про «практику», а, не-разработчик? Ты ж тупой и не знаешь вообще ни черта.

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

И еще, придурок. Догадайся, почему разработчики под Mac OS X предпочитают пользоваться clang при отладке, и только release собирают gcc.

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

> в отличие от скорости и работоспособности скомпилированного кода.

ты будешь смеяться, но на похорониксе (можно уже сразу /0) интересная статья вышла. Про сравнение тёплого с мягким. На форумах. В общем, человек поставил себе С компиляторы pcc, tcc, open64, gcc, llvm (clang), icc. И устроил бенчмарк, ггг, скомпилированного кода. Жаль, в openwatcom поддержки x86_64 нет и не предвидится (хотя я собрал x86 компилятор на x86_64 линуксе, там не очень сложно) — тоже было бы полезно сравнить (только вот найти такой тест, который openwatcom собирает).
Похороникс тут хорош тем, что у них есть openbenchmarking.org, как раз про сравнение тёплого с мягким. Можно скачать phoronix-test-suite, запустить у себя, потом в настройках указать профиль на openbenchmarking.org, он сам закачает на сайт. Можно набигать на сайт и сравнивать результаты, отбирая других тестеров с похожим железом.

В общем, результаты тестов весёлые у него получились — tcc и pcc вообще без оптимизаций всех зарулили. Не по скорости конпеляции, а по скорости сконпелированного кода. Если добавлять оптимизации, картина немного меняется. Но осложняется тем, что для каждого отдельного конпелятора нужно подбирать свой набор флагов оптимизации.

В итоге, чёго он там своим тестом мерил — никто так и не понял. Хорошая иллюстрация про сравнение яблоков с апельсинами. Опять же, разница в производительности кода сферического бенчмарка, собранного pcc/tcc/gcc не столь велика, как казалось, если уж код вообще собрался из-за отсутствия gcc-измов и различий в понимании того же С++ (поэтому сравнения С компиляторов адекватнее).

http://phoronix.com/forums/showthread.php?29090-CompilerDeathMatch-surprising...

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

Я понял, Clang в любом случае проигрывает в производительности, остальное можешь оставить себе и продолжать дрочить на спецификации.

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

Недоумок, да кого колышет производительность?

Clang нужен разработчикам. Чтобы проще было ядро, блин, разрабатывать. Компили его потом чем хочешь, придурок.

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

> Clang в любом случае проигрывает в производительности

/0
странно у тебя понималка работает.

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

Он не может собрать ядро -> разработка невозможна -> он не нужен. И да, производительность волнует всех, кроме тебя. А теперь уйди.

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

Ну оно же тут уже призналось, что «вообще не разработчик». Добавь к этому тот факт, что оно все же осмелилось всунуться в дискуссию о компиляторах, и получишь адекватное представление об интеллектуальном уровен этого убожества.

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

> Он не может собрать ядро -> разработка невозможна -> он не нужен.

Да, пациент однозначно невменяемый.

Оно может собрать ядро. В достаточном для как минимум статического анализа объеме. А уж про всякий там code completion и говорить нечего, все хедеры парсятся отлично.

И да, производительность волнует всех, кроме тебя.

Ты тупой. Производительность release build - да, всех волнует. А вот производительность заинструментированного по самые гланды отладочного build-а не колышет вообще никого.

А теперь уйди.

Что-то сявка совсем развякалась. Даже не осознаешь, чмо, насколько ты себя уже опозорило.

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

А... Как же я сразу-то не догадался. Тогда поциента уже закапывать даже поздно - надо сжечь и кислотой залить, чтоб зараза не распространилась дальше.

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

Тогда просто покажи, в каком месте Clang ориентирован на разработчиков, в их роадмапе во главу угла поставлены end-user features.

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

> в каком месте Clang ориентирован на разработчиков

посмотри как просто прикрутили clang к vim, а теперь посмотри на потуги навроде gcc-xml, которые так и закончились ничем

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

> Тогда просто покажи, в каком месте Clang ориентирован на разработчиков, в их роадмапе во главу угла поставлены end-user features.

Ну ты баран. Для компилятора разработчики - это и есть end users.

В clang есть static code analysis, в gcc его нет. Эта фича разработчикам совершенно необходима.

В clang намного более вменяемые сообщения об ошибках, что облегчает жизнь разработчикам.

С llvm намного проще делать произвольное инструментирование кода - это абсолютно необходимо для разработчиков (и разработчиков ядра в особенности).

Clang элементарно интегрируется с IDE - а gcc не интегрируется никак.

Мало тебе этого, не-разработчик?

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

>Для компилятора разработчики - это и есть end users.

End-User Features:

* Fast compiles and low memory use

* Expressive diagnostics (examples)

* GCC compatibility

Да ну? Впрочем, предыдущий чуть менее хамоватый анонимус к месту дал ссылку на коллекцию пхорониксовских тестов, там у Clang'а почти везде неплохой выигрыш в работе с аудио и видео, надо будет попробовать.

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

Да-да, дурень, конечно же expressive diagnostics - это не для разработчика, а для пользователя скомпилированного clang-ом бинарника. Скорость компиляции тоже очень нужна конечно же пользователям бинарника, а не разработчикам, ага.

Ну признай наконец, что ты совершенно тупой, и запомни на будущее, что прежде чем влезать со своим очень-ценным-мнением надо сначала подумать, а имеешь ли ты на это самое мнение какое либо право.

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

> посмотри на потуги навроде gcc-xml, которые так и закончились ничем

Ты просто не в теме. gcc-xml стал полезным инструментом.

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

Признаю, как только ты наконец покажешь свои коммиты в любой из обсуждаемых компиляторов. И, эцсамое, ты про низкое потребление памяти забыл, которое так важно разработчикам.

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

> Ты просто не в теме. gcc-xml стал полезным инструментом.

конечно не в теме, конечно стал, а то что он «мертв» - это дело такое, со всеми полезными инструментами бывает

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

> Признаю, как только ты наконец покажешь свои коммиты в любой из обсуждаемых компиляторов.

Я, если ты не заметил, аноним. Так что уж поверь на слово - коммиты мои есть и в gcc (начиная еще с egcs, если помнишь, что это такое), и в llvm, и в clang. Правда, не ясно, какое это имеет отношение к обсуждаемой теме - ты ты тут херню несешь вполне себе прямым текстом, легко проверяемую. Никаких внешних пруфлинков не надо - ты тупой хотя бы просто по результатам этой дискуссии.

И, эцсамое, ты про низкое потребление памяти забыл, которое так важно разработчикам.

Естественно это важно разработчикам. Не забывай, что clang - модульный компилятор. Его часто встраивают в другие приложения (да в те же IDE, хотя бы), и конечно же разработчикам важно, чтобы он жрал поменьше памяти. Я уж молчу про всякую экзотику вроде реализаций OpenCL на основе clang (а все, кроме nvidia, именно на clang и сделаны) - там чем памяти меньше, тем лучше.

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

Ну ладно, ты меня почти убедил. Обещаю никогда больше не спорить о компиляторах.

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

> а то что он «мертв» - это дело такое, со всеми полезными инструментами бывает

Инструмент жив, пока им пользуются. Так что gcc-xml вполне жив, а ты сказал две глупости.

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

> Инструмент жив, пока им пользуются. Так что gcc-xml вполне жив, а ты сказал две глупости.

нет - прокомментировал одну твою, win95, например, тоже еще пользуются, если ты считаешь ее нужной и живой - дело твое конечно, можешь быть ее персональным фанатом и продлевать ее «нужность» вплоть до конца своей жизни своим существованием ( это образно было сказано )

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

> а теперь посмотри на потуги навроде gcc-xml, которые так и закончились ничем

ну почему сразу ничем. очень знатный велосипед получился, можно сравнить тот же «REPL для C» : на GCCXML.hs http://neugierig.org/software/c-repl и на базе LLVM: http://code.google.com/p/ccons/

другое дело, что GCCXML как бы немного сдох.

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

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

> И еще, придурок. Догадайся, почему разработчики под Mac OS X предпочитают пользоваться clang при отладке, и только release собирают gcc.

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

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

> Разработчики под что ? Ты приводишь закрытую, тормозную х-ню в качестве примера для подражания ?

Почему кот лижет яйца? Потому что может. Были бы такие же удобные тулзы, как в XCode, во всяких там еклипсах, разработчики под лялих делали бы ровно то же самое.

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

> Почему кот лижет яйца? Потому что может. Были бы такие же удобные тулзы, как в XCode, во всяких там еклипсах, разработчики под лялих делали бы ровно то же самое.

Ну.. раз пошла такая песня. Xcode не видел. Он лучше Visual Studio ?

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

> он петушиный и находит только совсем тривиальные вещи

в Xcode 3.х тоже был не фонтан, в четверке еще не смотрел

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

то есть даже повторное освобождение указателя он не находил.

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

>в чём поинт использования каждого такого расширения, например, в ядре Linux?

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

если можно писать на plain C99 как те же BSD?

А зачем? Чтобы получилась еще одна ненужная недоось лайк БЗД? Зачем подражать лузерам?

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

ну coverity тоже не всегда ошибки находит... мы на всякий случай несколькими анализаторами проходимся, VS'шным, кстати, тоже баги находили

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

Похоже на костыль для ленящихся писать юнит-тесты и не знающих про valgrind и про проблему останова.

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

Тем более, они все нивелируются, если вспомнить, что Clang в сравнении с GCC ничего не умеет.

То, что им собирается 90% софта, называется «ничего не умеет»?

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

Clang в среднем выигрывает у GCC по быстродействии скомпилированного бинарника, но очень слабо выигрывает.

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

А кто, по вашему, end-user компилятора?

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

А что, разработчик должен все собирать на супер-производительном компьютере с 8 GB оперативки? :D

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

90% какого софта, если он только минимальную FreeBSD может собрать? А выигрыш действительно слишком маленький, да и то не везде(в основном в кодеках и архиваторах, но там лучше себя показал ICC).

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

>То, что им собирается 90% софта, называется «ничего не умеет»?

и что-то даже работает...

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

90% какого софта

Обычного. Не собирается только то, что юзает гну-расширения. Много что собирал им.

PS. Все сказанное мной относится к 2.8 и новее.

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