Какую пользу я могу получить, собрав собственное ядро Linux? Есть ли какая-то эффективность, которую вы могли бы создать, настроив ее на свое оборудование?
Какую пользу я могу получить, собрав собственное ядро Linux? Есть ли какая-то эффективность, которую вы могли бы создать, настроив ее на свое оборудование?
Ответы:
На мой взгляд, единственное преимущество, которое вы действительно получаете от компиляции своего собственного ядра Linux:
Вы узнаете, как скомпилировать собственное ядро Linux.
Это не то, что вам нужно делать для большей скорости / памяти / ххх, что угодно. Это ценно, если вы чувствуете, что находитесь на той стадии своего развития. Если вы хотите иметь более глубокое понимание того, что представляет собой весь этот «открытый исходный код», о том, как и каковы различные части ядра, то вам следует попробовать. Если вы просто хотите ускорить загрузку на 3 секунды, тогда ... в чем смысл ... иди купи ssd. Если вам любопытно, если вы хотите учиться, то компиляция собственного ядра - отличная идея, и вы, вероятно, многого добьетесь.
С учетом вышесказанного, есть несколько конкретных причин, когда было бы целесообразно скомпилировать ваше собственное ядро (как указали несколько человек в других ответах). Как правило, они возникают из-за вашей конкретной потребности, например:
Проблема заключается в том, чтобы думать, что компилирование вашего собственного ядра имеет определенную выгоду, когда все уже работает так, как должно быть, и я не думаю, что это так. Хотя вы можете тратить бесчисленные часы, отключая ненужные вам вещи и настраивая настраиваемые, на самом деле ядро linux уже довольно хорошо настроено (в вашем дистрибутиве) для большинства пользовательских ситуаций.
Большинству пользователей не нужно компилировать свое собственное ядро, их дистрибутив сделал эту работу за них. Обычно дистрибутивы включают в себя набор исправлений, которые либо интегрируются с определенными частями работы дистрибутива, бэкпортами драйверов устройств и исправлений от более новых, но не выпущенных версий ядра или функций, которые они открывают для своих пользователей.
Когда вы компилируете свое собственное ядро, у вас есть пара опций, вы можете скомпилировать официальное ядро Линуса Торвальдса, это не будет включать какие-либо патчи или настройки, которые были добавлены вашим дистрибутивом (которые могут быть хорошими или плохими), или вы можете используйте инструмент перестройки дистрибутива для сборки собственного ядра.
Причины, по которым вы можете захотеть пересобрать ядро, включают в себя:
Многие разработчики используют его также для создания пользовательских версий ядра для встроенных систем или приставок, где им нужны специальные драйверы устройств, или они хотят удалить функциональность, которая им не нужна.
bisect
IN, чтобы найти, где была введена ошибка ...
Собственная компиляция ядра позволяет вам включать только те части, которые относятся к вашему компьютеру, что делает его меньше и потенциально быстрее, особенно во время загрузки. Общие ядра должны включать поддержку как можно большего количества оборудования; во время загрузки они обнаруживают, какое оборудование подключено к вашему компьютеру, и загружают соответствующие модули, но для этого требуется время, и им нужно загружать динамические модули, а не запекать код непосредственно в ядре. Нет смысла в том, чтобы ваше ядро поддерживало 400 различных процессоров, когда на вашем компьютере есть только один, или для поддержки Bluetooth-мышей, если у вас их нет, это все потраченное впустую пространство, которое вы можете освободить.
Я не могу поверить, что принятый ответ здесь начинается со слов: «Это не то, что вам нужно делать для увеличения скорости / памяти / ххх».
Это абсолютно неверно. Я обычно настраиваю свои ядра для удаления ненужного кода, а также кода для повышения производительности, в основном связанных с аппаратным обеспечением. Например, я использую старое оборудование и могу получить некоторое повышение производительности, включив редко включаемые драйверы ядра, такие как поддержка набора микросхем HPT36x, на некоторых старых MoBos, которые имеют эту встроенную функцию.
Другой пример, BIG SMP под Slackware используется по умолчанию, а на Dell 2800, например, потребляется значительный отпечаток для запуска таких вещей, как GFSD (не как модуль ядра), который, кстати, также потребляет тики процессора для чего-то, что я не нужно Аналогично для NFSD и других универсальных средств, чтобы угодить всем менталитетам, что хорошо, если вы просто пытаетесь получить Linux на коробке и работает, но если вам не безразличны «скорость / память / xxx», тогда эти вещи имеют значение и работают ,
Все мои производственные ящики изготовлены на заказ. Если я использую обычное оборудование, такое как оборудование серии Dell (2800, 2850, 2900 и т. Д.), То просто скопировать файл .config ядра в каждую коробку, скомпилировать ядро и установить.
Вот несколько ситуаций, когда компиляция вашего собственного ядра принесет вам пользу:
Ядро с отключенной загрузкой модулей более безопасно. Это потребует от вас выбора необходимых вам модулей и включения их в состав ядра, а не их компиляции в виде модулей.
Отключение поддержки / dev / kmem или отключение ее с помощью соответствующей опции компилятора - хорошая вещь для безопасности. Я думаю, что большинство дистрибутивов делают это по умолчанию сейчас.
Я предпочитаю не использовать initrd, когда это возможно. Адаптация вашего ядра к оборудованию, с которого оно загружается, удаляет initrd.
Иногда более поздняя версия ядра будет иметь нужные вам функции, но сегодня это очень редко. Я помню, когда я впервые начал использовать Debian, он использовал ядра 2.4, но для поддержки udev мне было нужно ядро 2.6.
Отключение сетевых протоколов / опций, которые вам не нужны, может ускорить вашу производительность TCP / IP.
Отключение ненужных опций снижает объем памяти ядра, что важно в средах с нехваткой оперативной памяти. Когда вы используете 256 МБ ОЗУ в качестве маршрутизатора, это помогает.
Я нахожу все устройства "tty" в / dev раздражающими в системах, где я обычно вхожу только через последовательный или ssh.
Компиляция вашего собственного ядра позволяет вам участвовать в процессе разработки ядра, будь то простые вещи, такие как предоставление идентификаторов устройств PCI / USB для существующего драйвера, которые могут заставить работать более новое устройство, чтобы глубоко погрузиться в борьбу с ядром разработка ядра.
Это также позволяет вам тестировать ядра разработки на вашем оборудовании и предоставлять обратную связь, если вы заметили какие-либо регрессии. Это может быть особенно полезно для вас и других, если у вас есть необычное оборудование. Если вы ждете ядра дистрибутива, исправления из ваших отчетов о проблемах могут занять некоторое время, чтобы перейти в новый выпуск ядра дистрибутива.
Мне также нравится собирать собственные ядра, чтобы включить поддержку только того оборудования, которое у меня есть. Когда вы запускаете ядра дистрибутивов и просматриваете вывод lsmod(8)
, вы видите множество модулей, загруженных для оборудования, которого у вас нет. Это может загрязнить список модулей, / proc, / sys и ваши журналы, так что когда вы ищете что-то, оно может быть скрыто среди шума; Вы также не можете быть на 100% уверены, что эти модули не способствуют возникновению проблемы, которую вы пытаетесь диагностировать.
Я второй ответ gabe. (Мой комментарий слишком длинный, поэтому я публикую в качестве ответа).
Если у вас нет узкоспециализированной цели (например, встроенные машины, строгое профилирование безопасности), я не вижу практической пользы для компиляции вашего собственного ядра, кроме как посмотреть, как это делается. Путем методического анализа вариантов можно увидеть, как они взаимодействуют друг с другом для построения системы, и это отличный способ понять, как работает ваша система. Удивительно, что вы обнаруживаете, когда пытаетесь удалить компоненты, которые, кажется, не имеют никакого значения для задач, которые вы пытаетесь выполнить.
Тем не менее, будьте осторожны - почему прыжки с кроличьей норы, несомненно, волнуют, они откашлят больше ночей и выходных, чем вы думали!
На работе мы используем свернутые вручную ядра, чтобы применять патчи вне дерева, такие как vserver и unionfs.
Дома я собираю откатанные вручную ядра, чтобы найти, какой коммит привел к ошибке, с которой я столкнулся. Когда я закончу это, я, вероятно, буду придерживаться свернутого вручную ядра, пока ошибка не будет исправлена в моем дистрибутиве (Debian), после чего я снова вернусь к их ядрам.
Эта ветка устарела и все еще действует сегодня, как и тогда, когда был задан вопрос!
Ответ таков: вы компилируете ядро linux по вашему выбору в соответствии с вашими потребностями и требованиями.
Многие сценарии действительны:
Вы являетесь инженером и требуете, чтобы ваша сборка отвечала требованиям и требованиям к производительности и безопасности вашей системы, вы перекомпилируете, чтобы соответствовать и / или превзойти указанные критерии.
Вы обычный пользователь и у вас есть старая система, которую вы хотите продолжать работать так долго, как сможете, вы перекомпилируете добавление / удаление компонентов, чтобы сохранить вашу старую систему оптимизированной.
Вы обычный пользователь с новейшим самым быстрым оборудованием, и у него более чем достаточно памяти / оперативной памяти. Не нужно перекомпилировать, но вы все равно можете это сделать, если хотите узнать немного больше о своей системе.
Вы просто хотите быть похожим на обычного пользователя Microsoft и / или Mac, не перекомпилируйте и просто следите за обновлениями из вашего апстрима.
Следите за сценариями :-)
В отличие от пользователей Mac / Windows, Linux предоставляет выбор. Выбор прост или оптимизация системы под ваши требования.
Для большинства применений универсальные ядра хороши практически для любого оборудования. Кроме того, они обычно содержат (ed) патчи, специфичные для дистрибутива, поэтому компиляция вашего собственного ядра может (может) вызвать проблемы.
Резонанс для компиляции вашего собственного ядра:
Если бы я не использовал дистрибутив на основе исходного кода, я бы вообще не компилировал ядро.
Я удивлен, что никто не упомянул эту причину для сборки собственного ядра:
потому что вы хотите использовать другой компилятор 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.
Тогда вы можете получить серьезную скорость!
What are the pros and cons of compiling your own kernel?
против» = не просто, во многих ситуациях нет добавленной стоимости. Плюсы = безопасность, производительность, если вы знаете, что делаете, например, устройства NAS, использующие Linux для работы некоторого аппаратного обеспечения и обеспечения сетевых и графических возможностей.