Як поліпшити час завантаження Raspberry Pi?


27

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

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

Я також міг би використовувати root root (дивіться також відео YouTube Raspberry Pi - Супер швидкий час завантаження - система розваг зефіру ) ...


Ви повинні проголосувати, щоб закрити це питання. Потім користувачі будуть перенаправлені на оригінальне запитання та додадуть більше відповідей. З тих пір, як це ще не було позначено як відповідь.
Пьотр Кула

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

@ppumkin Ознайомтеся з цією публікацією на Meta.SE щодо закриття оперізуючих матеріалів: Не видаляйте гарні дублікати та цю публікацію в блозі SE . Я думаю, що вони згодні з моїм попереднім моментом. Якщо дублікат не є копіювальною пастою іншого або жахливої ​​якості, і оскільки у цього є багато відповідей / активності, ми повинні просто залишити їх обома відкритими.
RPiAwesomeness

1
@ppumkin Добрі бали, доки цей не буде видалений. Я спочатку переглянув "Залишити відкритим", але, мабуть, позначаю це як дублікат, це правильний шлях. Єдине, про що я можу придумати, це те, що я принаймні хочу мати якісні питання Q / A на маркованому оригіналі, ніж на дублікаті. Тут точно не так.
RPiAwesomeness

1
Так, ви праві. Тут є більше відповідей. Здається, привернули більше уваги. Я думаю, нам потрібно залишити це модераторам, щоб вони вирішили, оскільки вони краще знатимуть, що тут робити. Все одно. Молодці з отриманням виділення голосів за вашу відповідь :) Я впевнений, що ОП цінує ваш внесок. +1
Пьотр Кула

Відповіді:


13

Якщо ви поєднаєте Arch Linux з функціями, які запропонував Фред, вам слід отримати в основному швидку завантажувальну ОС.

Що сповільнює завантаження ОС

  1. Повільна швидкість читання / запису (вводу / виводу).

    Таким чином , ви використовуєте більш швидку SD - карту буде допомагати, класу 10 карт буде істотно швидше , ніж 4 -го класу карти буде . Я неправильно зрозумів, як працювали заняття SD-картами, і це досить чітко вказано в коментарях, моє погано. Насправді карта класу 10 буде швидшою, ніж карта класу 4 для великих передач файлів, таких як HD відео та багато чого іншого. Мабуть, клас 4 чудово працює з меншими файлами. Знову ж таки, мій поганий, але ей, ми всі вчимося знову і знову.

  2. Пошкоджена послідовність init.

    Якщо у вас багато програмного забезпечення, яке запускається під час фази завантаження, час завантаження буде протікати повільніше. Більше запуску програмного забезпечення == Більший час завантаження.

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

Це в основному все. Arch Linux - це, мабуть, шлях у поєднанні з функціями, про які згадував Фред, як я вже говорив раніше. Arch - це дуже мінімальна ОС і, можливо, не найкраща річ для початківців у використанні, але якщо у вас є досвід роботи в Linux, то займіться цим. Це просто потребує трохи налаштування, так як він поставляється з мінімальним встановленням, і це все .

Сподіваюся, ваш проект іде добре!


3
"Клас" карти SD - це дуже поганий показник продуктивності вбудованої системи. Рейтинг "класу" призначений для великих послідовних передач файлів (як у багатомігапіксельної цифрової камери), а не для невеликих файлів, таких як сценарії запуску. Карти класу 4 регулярно перевершують більшість карток класу 10 на операціях з читанням і записом класу 10 на коефіцієнт 100 або більше. Є картки класу 10 з хорошим IOPS, але таких моделей мало і далеко між ними.
Бен Войгт

Так, я погоджуюся з @BenVoigt - коли я використовував клас 4, здавалося, що невеликі записи і оновлення були швидкими, але великі передачі на 10 клас набагато краще. Я б хотів, щоб я міг використовувати карту оперативної пам’яті, що живиться від акумулятора, для миттєвої роботи.
Пьотр Кула

Вибачте, я цього не знав. Я це негайно виправлю. Я розумів, що чим вище клас, тим більша швидкість. Дякую, що вказали на це, я щойно дізнався щось: D Спасибі за надбавки :)
RPiAwesomeness

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

7

Я пропоную використовувати Arch Linux.

Я отримую нормальний час завантаження 5s (ядро) + 5s (для простору користувачів), і це не вимагає великих зусиль, тому що він використовується systemdдля init.


2
@goldilocks, ви можете використовувати systemd і на raspbian. Це вдвічі зменшило час завантаження для мене.
John La Rooy

@JohnLaRooy Приємно знати. Я припускав, що різниця в продуктивності порівняно з традиційним init здебільшого полягає в тому, що systemd може паралелізувати, але це, ймовірно, також економить час, не потребуючи розщедрити та інтерпретувати сценарії оболонок для всього.
золотинки

@goldilocks Я не згоден, я намагався, і systemdце значно відрізняється, порівняно з sysvinit. Дивіться мою відповідь .
Бась

@Basj Ще краще знати. Я видалив свій коментар до цього, ймовірно, не роблячи "великої різниці в термінах завантаження, оскільки він є [єдиним ядром". Я в основному використовую systemd - але TBH я не приділяю великої уваги часом завантаження.
золотинки

7

Я написав тут статтю про це.

Коротше кажучи: використання systemd.

Ви можете легко запустити додаток RaspberryPi менше 8 секунд після підключення шнура живлення або менше 3 секунд після запуску завантаження Linux.

Наприклад, моя служба називається samplerbox.service:

введіть тут опис зображення

Примітка. Я не намагався оптимізувати час користувальницького простору, тому що він мені не потрібен: мій додаток все одно починається рано, тому я не заперечую, якщо мережева атрибуція DHCP / IP займе 8 секунд після запуску мого додатка.


4

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


3

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


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


Щоб додати до цього, для складання статично пов’язаного ядра вам просто потрібно пройти «make menuconfig» або «make xconfig» і включити необхідні драйвери в ядро, а не вибирати їх як модулі. Таким чином вони перетворюють їх на vmlinuz і дозволяють пропустити послідовність modprobe під час завантаження, що займає значну кількість часу для виявлення та завантаження модулів ядра у міру необхідності.
П'яна коду мавпи

Спасибі за вашу відповідь. Щоб вона була корисною, ви можете включити кілька відтворюваних кроків, щоб вона працювала? (Щось на кшталт 1) Do this in command line, 2) Do this and this 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds! 5) Here is the result of my benchmarks: ...)
Basj

Насправді, перекомпіляція ядра не є простим процесом у 5 кроків. В Інтернеті є чимало практичних рекомендацій, щоб показати вам, як налаштувати і компілювати ядро ​​Linux ...
П'яний код мавпи

1

Використовуйте TinyCoreLinux . Він створений для швидкого завантаження та витримки відключення електроенергії.


Спасибі за вашу відповідь. Чи можете ви включити кілька відтворюваних кроків, щоб він працював? (Щось на кшталт 1) Download an image here: +link 2) Flash it on your microSD 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds!)
Basj

0

Ви можете спробувати використовувати eINIT для прискорення завантажувального процесу:: http://sourceforge.net/projects/einit/

На жаль, на даний момент (жовтень 2016 р.) На головній сторінці eINIT відзначаються:

eINIT використовувався як альтернативна реалізація програми / sbin / init для Linux та FreeBSD. Ну, я вважаю, це все ще є, але проект вже тривалий час.


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

-3

Видаліть усі модулі ядра, які ви не будете використовувати.


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