it-swarm-ru.tech

В чем преимущество компиляции вашего собственного ядра Linux?

Какую пользу я могу получить, собрав собственное ядро ​​Linux? Есть ли какая-то эффективность, которую вы могли бы создать, настроив ее на свое оборудование?

107
jjclarkson

На мой взгляд, единственное преимущество, которое вы действительно получаете от компиляции своего собственного ядра Linux:

Вы узнаете, как скомпилировать собственное ядро ​​Linux.

Это не то, что вам нужно для увеличения скорости/памяти/xxx. Это ценно, если вы чувствуете, что находитесь на той стадии своего развития. Если вы хотите иметь более глубокое понимание того, что представляет собой весь этот "открытый исходный код", о том, как и каковы различные части ядра, то вам следует попробовать. Если вы просто хотите ускорить загрузку на 3 секунды, тогда ... в чем смысл ... иди купи ssd. Если вам любопытно, если вы хотите учиться, то компиляция собственного ядра - отличная идея, и вы, вероятно, многого добьетесь.

С учетом вышесказанного, есть несколько конкретных причин, когда было бы целесообразно скомпилировать ваше собственное ядро ​​(как указали несколько человек в других ответах). Как правило, они возникают из-за конкретной потребности в конкретном результате, например:

  • Мне нужно, чтобы система загружалась/работала на оборудовании с ограниченными ресурсами
  • Мне нужно протестировать патч и оставить отзыв для разработчиков
  • Мне нужно отключить то, что вызывает конфликт
  • Мне нужно разработать ядро ​​Linux
  • Мне нужно включить поддержку моего неподдерживаемого оборудования
  • Мне нужно улучшить производительность х, потому что я бью текущие ограничения системы (и я знаю, что я делаю)

Проблема заключается в том, чтобы думать, что компилирование вашего собственного ядра имеет определенную выгоду, когда все уже работает так, как должно быть, и я не думаю, что это так. Хотя вы можете тратить бесчисленные часы, отключая ненужные вам вещи и настраивая настраиваемые, на самом деле ядро ​​linux уже довольно хорошо настроено (вашим дистрибутивом) для большинства пользовательские ситуации.

75
gabe.

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

Когда вы компилируете свое собственное ядро, у вас есть пара опций, вы можете скомпилировать официальное ядро ​​Линуса Торвальдса, это не будет включать какие-либо патчи или настройки, которые были добавлены вашим дистрибутивом (которые могут быть хорошими или плохими), или вы можете используйте инструмент перестройки дистрибутива для сборки собственного ядра.

Причины, по которым вы можете захотеть пересобрать ядро, включают в себя:

  • Исправление ошибок или добавление определенной функции в производственную систему, где вы не можете рисковать обновлением всего ядра для одного или двух исправлений.
  • Чтобы опробовать определенный драйвер устройства или новую функцию
  • Чтобы расширить ядро, работайте над ним
  • тестирование некоторых модулей или функций "Альфа".

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

36
miguel.de.icaza

Собственная компиляция ядра позволяет вам включать только те части, которые относятся к вашему компьютеру, что делает его меньше и потенциально быстрее, особенно во время загрузки. Общие ядра должны включать поддержку как можно большего количества оборудования; во время загрузки они обнаруживают, какое оборудование подключено к вашему компьютеру, и загружают соответствующие модули, но для этого требуется время, и им нужно загружать динамические модули, а не запекать код непосредственно в ядре. Нет смысла в том, чтобы ваше ядро ​​поддерживало 400 различных процессоров, когда на вашем компьютере есть только один, или для поддержки Bluetooth-мышей, если у вас их нет, это все потраченное впустую пространство, которое вы можете освободить.

30
Michael Mrozek

Я не могу поверить, что принятый ответ здесь начинается со слов: "Это не то, что вам нужно делать для увеличения скорости/памяти/ххх".

Это абсолютно неверно. Я обычно настраиваю свои ядра для удаления ненужного кода, а также кода для повышения производительности, в основном связанных с аппаратным обеспечением. Например, я использую старое оборудование и могу получить некоторое повышение производительности, включив редко включаемые драйверы ядра, такие как поддержка набора микросхем HPT36x, на некоторых старых MoBos, которые имеют эту встроенную функцию.

Другой пример, BIG SMP под Slackware используется по умолчанию, а на Dell 2800, например, потребляется значительный отпечаток для запуска таких вещей, как GFSD (не как модуль ядра), который, кстати, также потребляет тики процессора для чего-то, что я не нужно Аналогично для NFSD и других универсальных средств, чтобы угодить всем менталитетам, что хорошо, если вы просто пытаетесь получить Linux на коробке и работает, но если вам не безразличны "скорость/память/xxx", тогда эти вещи имеют значение и работают ,.

Все мои производственные ящики изготовлены на заказ. Если я использую обычное оборудование, такое как оборудование серии Dell (2800, 2850, 2900 и т.д.), То просто скопировать файл .config ядра в каждую коробку, скомпилировать ядро ​​и установить.

24
Eric

Вот несколько ситуаций, когда компиляция вашего собственного ядра принесет вам пользу:

  • Ядро с отключенной загрузкой модулей более безопасно. Это потребует от вас выбора необходимых вам модулей и включения их в состав ядра, а не их компиляции в виде модулей.

  • Отключение поддержки/dev/kmem или отключение ее с помощью соответствующей опции компилятора - это хорошо для безопасности. Я думаю, что большинство дистрибутивов делают это по умолчанию сейчас.

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

  • Иногда более поздняя версия ядра будет иметь нужные вам функции, но сегодня это очень редко. Я помню, когда я впервые начал использовать Debian, он использовал ядра 2.4, но для поддержки udev мне было нужно ядро ​​2.6.

  • Отключение сетевых протоколов/опций, которые вам не нужны, может ускорить вашу производительность TCP/IP.

  • Отключение ненужных опций снижает объем памяти ядра, что важно в средах с низким RAM. Когда вы используете систему 256 МБ RAM как маршрутизатор, это помогает.

  • Я нахожу все устройства "tty" в/dev раздражающими в системах, где я обычно вхожу только через последовательный или ssh.

14
LawrenceC

Компиляция вашего собственного ядра позволяет вам участвовать в процессе разработки ядра, будь то простые вещи, такие как предоставление идентификаторов устройств PCI/USB для существующего драйвера, которые могут заставить работать более новое устройство, чтобы глубоко погрузиться в борьбу с ядром разработка ядра.

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

Мне также нравится собирать собственные ядра, чтобы включить поддержку только того оборудования, которое у меня есть. Когда вы запускаете ядра дистрибутивов и смотрите на вывод lsmod(8), вы видите множество модулей, загруженных для оборудования, которого у вас нет. Это может загрязнить список модулей,/proc,/sys и ваши журналы, так что когда вы ищете что-то, оно может быть скрыто среди шума; Вы также не можете быть на 100% уверены, что эти модули не способствуют возникновению проблемы, которую вы пытаетесь диагностировать.

7
camh

Я второй ответ gabe. (Мой комментарий слишком длинный, поэтому я публикую в качестве ответа).

Если у вас нет узкоспециализированной цели (например, встроенные машины, строгое профилирование безопасности), я не вижу никакой практической пользы для компиляции собственного ядра, кроме как посмотреть, как это делается. Путем методического анализа вариантов можно увидеть, как они взаимодействуют друг с другом для построения системы, и это отличный способ понять, как работает ваша система. Удивительно, что вы обнаруживаете, когда пытаетесь удалить компоненты, которые, кажется, не имеют никакого значения для задач, которые вы пытаетесь выполнить.

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

6
gvkv

На работе мы используем свернутые вручную ядра, чтобы применять исправления вне дерева, такие как vserver и unionfs.

Дома я собираю откатанные вручную ядра, чтобы найти, какой коммит привел к ошибке, с которой я столкнулся. Когда я закончу это, я, вероятно, буду придерживаться свернутого вручную ядра, пока ошибка не будет исправлена ​​в моем дистрибутиве (Debian), после чего я снова вернусь к их ядрам.

3
jmtd

Эта ветка устарела и все еще действует сегодня, как и тогда, когда был задан вопрос!

Ответ таков: вы компилируете ядро ​​linux по вашему выбору в соответствии с вашими потребностями и требованиями.

Многие сценарии действительны:

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

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

  3. Вы обычный пользователь с новейшим самым быстрым оборудованием, и у него более чем достаточно памяти/оперативной памяти. Не нужно перекомпилировать, но вы все равно можете это сделать, если хотите узнать немного больше о своей системе.

  4. Вы просто хотите быть похожим на обычного пользователя Microsoft и/или Mac, не перекомпилируйте и просто следите за обновлениями из вашего апстрима.

  5. Следите за сценариями :-)

В отличие от пользователей Mac/Windows, Linux предлагает выбор. Выбор прост или оптимизация системы под ваши требования.

2
user4565

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

1
Caleb

Я удивлен, что никто не упомянул эту причину для сборки собственного ядра:

потому что вы хотите использовать другой компилятор C/c ++. GCC довольно хорош для компиляции ядра Linux. Но есть и превосходные компиляторы! Оптимизация GCC немного отстает от компилятора Intel C/C++. И Intel поставляет библиотеки примитивов производительности и инструмент vtune, которые необходимы для создания высокопроизводительного ядра Linux. Вы можете достичь этого только с GCC и G ++. Практически независимо от того, что вы делаете, результат будет ограничен компилятором. Итак, я использую компилятор Intel и библиотеки производительности. Он немного большой - загрузка 1,5 ГБ, но это дает представление о том, что содержится в хорошем компиляторе.

Компилятор Intel C/C++ предоставляется бесплатно для некоммерческого использования. Но проще найти на странице загрузки компилятора Intel c ++ некоммерческую лицензию для поиска на сайте Intel. Я обычно не использую GCC/G ++ для чего-либо. И вам не нужно быть программистом. Вы просто устанавливаете свою среду и меняете две строки в файле make, чтобы они указывали на компилятор Intel.

Тогда вы можете получить серьезную скорость!

1
SwanSword

Для большинства применений универсальные ядра хороши практически для любого оборудования. Кроме того, они обычно содержат (ed) патчи для конкретного дистрибутива, поэтому компиляция вашего собственного ядра может (может) вызвать проблемы.

Резонанс для компиляции вашего собственного ядра:

  • Вы используете дистрибутив на основе исходного кода, поэтому не существует "общего" ядра
  • Вы разработчик ядра и вы разрабатываете ядро
  • Вы должны настроить ядро, например, для встроенного устройства с очень ограниченным жестким диском
  • Некоторые драйвера не скомпилированы в (очень редкий случай)
  • Вы хотите исправить ядро ​​ И вы знаете, что делаете
  • Вы хотите узнать, как скомпилировать ядро

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

1
Maciej Piechotka