Яка вигода від компіляції власного ядра Linux?


101

Яку користь я міг побачити, якщо скомпілювати ядро ​​Linux? Чи є якась ефективність, яку ви могли б створити, налаштувавши її на обладнання?


Просте питання про те, яка користь , стає неясним або дуже швидко виходить з контексту. Було б краще запитати What are the pros and cons of compiling your own kernel? мінуси = непросто, у багатьох ситуаціях без доданої вартості. Плюси = безпека, продуктивність, якщо ви знаєте, чим займаєтесь, пристрої NAS, наприклад, використовуючи Linux, щоб зробити апаратну роботу та мати мережеві та графічні можливості.
ron

Відповіді:


73

На мій погляд, єдина користь, яку ви справді отримуєте від компіляції власного Linux ядра:

Ви дізнаєтеся, як скласти власне ядро ​​Linux.

Це не те, що потрібно робити для більшої швидкості / пам’яті / ххх що завгодно. Це важливо зробити, якщо це етап, який ти відчуваєш, що ти перебуваєш у своєму розвитку. Якщо ви хочете глибше зрозуміти, про що йдеться у всьому, що стосується "відкритого коду", про те, як і якими є різні частини ядра, тоді вам слід спробувати. Якщо ви просто хочете прискорити час завантаження на 3 секунди, то ... який сенс ... зайдіть, придбайте ssd. Якщо вам цікаво, якщо ви хочете навчитися, то складання власного ядра - прекрасна ідея, і ви, ймовірно, отримаєте багато з цього.

Зважаючи на це, є деякі конкретні причини, коли було б доцільно скласти власне ядро ​​(як декілька людей вказали в інших відповідях). Як правило, вони виникають із конкретної потреби у конкретному результаті, наприклад:

  • Мені потрібно змусити систему завантажуватись / працювати на апаратному забезпеченні з обмеженими ресурсами
  • Мені потрібно перевірити виправлення та надати зворотній зв’язок розробникам
  • Мені потрібно відключити щось, що викликає конфлікт
  • Мені потрібно розробити ядро ​​Linux
  • Мені потрібно включити підтримку мого непідтримуваного обладнання
  • Мені потрібно покращити продуктивність x, оскільки я вражаю поточні межі системи (і я знаю, що роблю)

Проблема полягає в тому, що ми маємо певну користь у складанні власного ядра, коли все вже працює так, як належить, і я не думаю, що це є. Хоча ви можете витрачати незліченну кількість годин на відключення речей, які вам не потрібні, і налаштування речей, які можна налаштувати, факт полягає в тому, що ядро ​​Linux вже досить добре налаштоване (за допомогою вашого розповсюдження) для більшості ситуацій користувача.


25
Я б стверджував, що якщо ви хочете створити власне ядро ​​просто для досвіду навчання, то це ви робите з джерелом дистрибутиву Linux, таким як Gentoo або Linux From Scratch. Документація по встановленню Gentoo 2-го етапу - чудовий посібник для розуміння того, що означає створити Linux з ядра вгору.
Сенді

Домовились ... ці два проекти побудовані для такого типу речей.
габе.

Звичайно, ви знаєте, що насправді суперечите собі у своїй відповіді. Якщо єдиною перевагою компіляції ядра було б навчитися це робити, то це було б марно - не мали значення. Але потім через кілька слів ви кажете, що це цінна річ ...
rozcietrzewiacz

@rozcietrzewiacz Знання мають надзвичайно важливе значення. Складання ядра допоможе вам розширити свої знання. Якщо ви цього не купуєте, то ось це - знання - це влада, і люди платять хороші гроші, щоб отримати владу, а гроші мають цінність у сучасному світі, так як перехідна власність ....: P
lunchmeat317

Я погоджуюсь, варто того лише здобутих знань.
1100110

35

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

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

Причини, через які ви хочете відновити своє ядро, включають:

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

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


8
+1. Діти в ці дні вони навіть не знають, що означає "make menuconfig", і ніколи не доводилося виправляти їх мережевий код ядра, щоб запобігти тому, щоб його перепиняли діти сценарію. На щастя, ці дні в основному минули.
axel_c

2
вам слід додати, bisectщоб дізнатися, куди було введено помилку ...
xenoterracide

1
дивно, як цей коментар проголосується, коли він не має нічого спільного з питанням про ОП. "Більшість користувачів не ...." Питання ОП дуже чітке про те, щоб хотіти знати переваги; не ваша думка про те, що тут і там роблять "більшість користувачів".
Ерік

30

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


15
Я погоджуюся з більшістю вашої відповіді, але мені буде цікаво кілька важких фактів про "значно швидше". Я б не хотів створювати новому користувачеві враження, що їх робочий стіл буде працювати швидше за допомогою вбудованого вручну ядра (з мого досвіду роботи з Gentoo, це просто не так). Чи можете ви кількісно оцінити приріст швидкості завантаження?
Сенді

2
Ця відповідь була правдивою 15 років тому, але це не дуже актуально в наші дні. Більшість драйверів так чи інакше входять у модулі, тому вони займають місце лише на диску, а не в пам'яті. (Або деякі дистрибутиви все ще не входять без initrd? Без initrd ядро ​​не повинно включати всіх драйверів, яким воно може знадобитися для завантаження.) Що стосується часу завантаження, мало хто з драйверів, які витрачають більше мільйсекунд, намагаючись виявити неіснуюче обладнання, можна відключити. з опцією завантаження ядра.
Жиль

1
@Michael, якщо це неперевірене припущення, я думаю, що замінити "значно швидше" на "потенційно швидше" у вашій відповіді може бути хорошою ідеєю ... просто для того, щоб не ввести в оману n00bs. :-)
Сенді

3
@Sandy Погодився, оскільки, схоже, я один із цих n00bs :). Виправлено
Майкл Мрозек

2
Я думаю, що "значно" швидше насправді виправдано застереженням, про яке ми говоримо про часи завантаження. Ядра дистриб'ютора запасів займають легко 5 - 10 секунд довше, щоб завантажувати те, що я зняв, щоб не шукати обладнання, яке я не планую використовувати. Швидкість часу бігу, мабуть, незначна, я фактично не можу це достовірно виміряти.
Калеб

24

Я не можу повірити, що прийнята відповідь тут починається з того, що "це не те, що вам потрібно зробити для більшої швидкості / пам'яті / ххх що завгодно".

Це абсолютно помилково. Я звичайно будую свої ядра, щоб видаляти непотрібний код, а також включати код для підвищення продуктивності, що стосується, головним чином, обладнання. Наприклад, я запускаю деяке старіше обладнання та можу досягти певного підвищення продуктивності, ввімкнувши рідко ввімкнені драйвери Kernel, такі як підтримка чіпсетів HPT36x для деяких старих MoBos, у яких цей вбудований.

Інший приклад, BIG SMP під Slackware є типовим типом, а в Dell 2800, наприклад, буде витрачено значне друк для запуску таких речей, як GFSD (не як модуль ядра), який, до речі, споживає тикет CPU для чогось я не потрібно. Так само і для NFSD та інших загальних програм, щоб порадувати всіх менталітетів, це добре, якщо ви просто намагаєтеся отримати Linux на коробці і працює, але якщо вам все одно важливо "швидкість / пам'ять / ххх що завгодно", то ці речі мають значення і працюють .

Усі мої виробничі коробки - це власні ядра. Якщо я використовую таке обладнання, як апарат Dell (2800, 2850, 2900, і т. Д. ...), це просто питання копіювання файлу .config ядра навколо кожного вікна та компіляції ядра та встановлення.


3
Я думаю, що головним моментом прийнятої відповіді є те, що для більшості апаратних засобів продуктивність, отримана шляхом складання власного ядра, не вартує часу, необхідного для того, щоб навчитися це робити (і дізнатися, що означають варіанти). Це, мабуть, досвід: було б чудово знайти деякі цифри на цьому.
Андрес Ріофріо

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

2
Ну, не я винен, що моя відповідь була прийнята. І хоча так, є випадки, коли компіляція вашого ядра допоможе вам "отримати деяку продуктивність" або встати і працювати на машині малої потужності, я зробив припущення, що оригінальне запитання задав той, хто не мав конкретного потрібно достроково, і просто цікаво було в загальному сенсі, яка користь від компіляції ядра. Я б заперечував, що від настроювання ядра виграють лише люди з певними вимогами. Оскільки моя відповідь була прийнята, я вдосконалюю її для вирішення більше причин користувальницьких ядер
Gabe.

14

Ось кілька ситуацій, коли компіляція власного ядра піде вам на користь:

  • Ядро з вимкненим завантаженням модуля є більш безпечним. Це вимагатиме від вас вибрати потрібні вам модулі та включити їх до складу ядра, на відміну від компіляції їх як модулів.

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

  • Я вважаю за краще не використовувати initrd's, коли це можливо. Налаштування вашого ядра до обладнання, яке воно завантажується, виключає initrd.

  • Іноді пізніша версія ядра матиме необхідні функції, але це сьогодні дуже рідко. Я пам’ятаю, коли я вперше почав використовувати Debian, він використовував 2.4 ядра, але мені було потрібно 2.6 ядра для підтримки udev.

  • Відключення мережевих протоколів / опцій, які вам не потрібні, може пришвидшити роботу TCP / IP.

  • Вимкнення параметрів, які вам не потрібні, знижує слід пам'яті ядра, що важливо в умовах низької оперативної пам'яті. Якщо ви використовуєте оперативну пам’ять 256 Мб в якості маршрутизатора, це допомагає.

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


Все правда. Однак видалення завантаження модулів може спричинити проблеми під час завантаження: більшість, якщо не всі, дистрибутиви сьогодні просто припускають, що модулі потрібно буде завантажити. Востаннє я вимикав модулі, це спричинило появу літані повідомлень про помилки під час завантаження Red Hat.
Май

7

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

Це також дозволяє протестувати ядра розробки на вашому апаратному забезпеченні та надавати зворотній зв'язок, якщо ви помітили будь-які регресії. Це може бути особливо корисним для вас та інших, якщо у вас є незвичайна частина обладнання. Якщо ви чекаєте ядра дистрибутива, може знадобитися певний час, щоб виправлення з ваших звітів про проблему перетворилися на новий випуск ядра дистрибутива.

Я також особисто люблю компілювати власні ядра, щоб включати підтримку лише обладнання, яке я маю. Запускаючи дистрибутивні ядра та дивлячись на вихід lsmod(8), ви бачите безліч модулів, завантажених для обладнання, якого у вас немає. Це може забруднити список модулів, / proc, / sys та ваших журналів, таким чином, коли ви шукаєте щось, воно може сховатися серед шуму; Ви також не можете бути на 100% впевнені, що ці модулі не сприяють проблемі, яку ви намагаєтеся діагностувати.


6

Я другий відповідь gabe. (Мій коментар занадто довгий, тому я публікую як відповідь).

Якщо у вас немає вузькоспеціалізованої мети (наприклад, вбудовані машини, суворе профілювання безпеки), я не бачу ніякої практичної користі для складання власного ядра, крім того, щоб побачити, як це робиться. Методично розглядаючи варіанти, бачачи, як вони взаємодіють один з одним для побудови системи - це прекрасний спосіб зрозуміти, як працює ваша система. Дивно, що ви дізнаєтесь, намагаючись видалити компоненти, які, здається, не мають жодної мети для завдань, які ви намагаєтеся виконати.

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


3

У роботі ми використовуємо вручну прокручені ядра для того, щоб застосувати патчі поза деревом, такі як vserver та unionfs.

Вдома я збираю вручну прокручені ядра, щоб знайти, з якою програмою введено помилку, яку я відчуваю. Після того, як я закінчу це, я, мабуть, дотримуватимуся ручного ядра, поки помилка не буде виправлена ​​в моєму дистрибутиві (Debian), і тоді я знову повернуся до їх ядер.


2

Ця тема вже вікова і все ще діє сьогодні, як і коли було задано питання!

Відповідь: Ви збираєте Linux ядро ​​на ваш вибір відповідно до ваших потреб та вимог.

Чимало можливих сценаріїв:

  1. Ви інженер і вимагаєте, щоб ваша збірка відповідала вимогам / вимогам / вимогам безпеки для вашої системи, ви перекомпілювали, щоб відповідати та / або перевершувати задані критерії.

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

  3. Ви звичайний користувач із найновішим найшвидшим обладнанням, в ньому є більш ніж достатньо пам'яті / оперативної пам’яті. Не потрібно перекомпілювати, але ви все одно можете, якщо вам цікаво дізнатися більше про вашу систему.

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

  5. Тримайте сценарії :-)

На відміну від користувачів Mac / Windows, Linux надає вибір. Вибір зробити це легко або оптимізувати систему під ваші вимоги.


1

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

Резоном для складання власного ядра є:

  • Ви використовуєте джерело дистрибутива, щоб не було «загального» ядра
  • Ви розробник ядра і ви розробляєте ядро
  • Ви повинні налаштувати ядро, наприклад, для вбудованого пристрою з дуже обмеженим жорстким диском
  • Деякі драйвери не компілюються у (дуже рідкісний випадок)
  • Ви хочете виправити ядро І ви знаєте, що робите
  • Ви хочете навчитися компілювати ядро

Якби я не використовував джерело дистрибутива, я б взагалі не збирав ядро.


1

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


1

Я здивований, що ніхто не згадав цю причину для складання користувацького ядра:

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

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

Тоді ви можете отримати деяку серйозну швидкість!


-1

Якщо ви хочете встановити Linux на дуже специфічне обладнання, скажімо, більш екзотичне, ніж DS , вам доведеться перекомпілювати власне ядро.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.