Как улучшить время загрузки Raspberry Pi?

27

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

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

Я также могу использовать сборку root (см. Также видео на YouTube Raspberry Pi - Super Fast Boot Time - система развлечений Marshmallow ) ...

Layke
источник
Вы должны проголосовать, чтобы закрыть этот вопрос. Затем пользователи будут перенаправлены на исходный вопрос и добавят больше ответов. Так как он еще не был отмечен как ответ.
Петр Кула
Я просто думаю, что у этого есть много активности (взгляды, очевидно, не так высоки, просто потому, что этому меньше дня), больше голосов, и больше ответов, поэтому я подумал, что было бы лучше оставить это вверх, а затем, возможно, переместить ваш ответ сюда. Это действительно вопрос удобства, я думаю. 1 пользователь перемещает свой ответ, в отличие от 3, которые перемещают свои ответы и, таким образом, теряют все голоса, разговоры и тому подобное. Есть ли причина, по которой мы должны идти тем или иным путем? Я не возражаю, я просто думаю, что другие люди, которые ответили, могут не захотеть двигаться, и поэтому мы теряем контент
RPiAwesomeness
@ppumkin Проверьте этот пост Meta.SE относительно закрытия дубликатов : не удаляйте хорошие дубликаты и этот пост в блоге SE . Я думаю, что они согласны с моим предыдущим пунктом. Если дубликат не является копией другого или ужасного качества, и, поскольку у этого есть много ответов / действий, мы должны просто оставить их обоих открытыми.
RPiAwesomeness
1
@ppumkin Хорошие моменты, пока этот не удален. Первоначально я рассмотрел Leave Open, но, думаю, пометить это как дубликат этого - правильный путь. Единственное, о чем я могу думать, - это то, что я, по крайней мере, хочу получить более качественный Q / A на отмеченном оригинале, чем на дубликате. Это определенно не тот случай здесь.
RPiAwesomeness
1
Да, вы правы Здесь есть больше ответов. Кажется, больше внимания. Я полагаю, что мы должны оставить это на усмотрение модераторов, поскольку они будут лучше знать, что здесь делать. Так или иначе. Отлично с получением большого количества голосов на ваш ответ :) Я уверен, что ОП ценит ваш вклад. +1
Петр Кула

Ответы:

13

Если вы комбинируете Arch Linux с функциями, которые предлагает Фред, у вас должна получиться в целом быстрая загрузка ОС.

Что замедляет загрузку ОС, так это

  1. Низкая скорость чтения / записи (I / O).

    Таким образом , вы используете более быструю SD - карту будет помогать, класса 10 карт будет существенно быстрее , чем 4 -го класса карты будет . Я неправильно понял, как работают классы SD-карт, и это было ясно указано в комментариях, мой плохой. На самом деле, карта класса 10 будет быстрее, чем карта класса 4 для передачи больших файлов, таких как HD-видео и еще много чего. Очевидно, что Class 4 работает так же хорошо с небольшими файлами. Опять моя плохая, но эй, мы все учимся время от времени.

  2. Замкнутая последовательность инициализации.

    Если у вас есть много программного обеспечения, которое запускается во время фазы загрузки, время загрузки будет медленнее. Больше запуска программного обеспечения == Более длительное время загрузки.

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

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

Надеюсь, ваш проект пройдет хорошо!

RPiAwesomeness
источник
3
SD-карта «класс» является очень плохим показателем производительности во встроенной системе. Оценки «класса» предназначены для больших последовательных передач файлов (как у вас с мульти-мегапиксельной цифровой камерой), а не для небольших файлов, таких как сценарии запуска. Карты класса 4 регулярно превосходят большинство карт класса 10 по операциям чтения и записи 4K в 100 и более раз. Есть карты класса 10 с хорошими IOPS, но таких моделей немного, и они далеко друг от друга.
Бен Фойгт
Да, я согласен с @BenVoigt - когда я использовал класс 4, казалось, что небольшие записи и обновления были быстрыми, но да, большие передачи в классе 10 намного лучше. Я хотел бы использовать карту памяти с питанием от батареи для мгновенной работы.
Петр Кула
Извини, я этого не знал. Я исправлю это немедленно. Я понял, что чем выше класс, тем выше скорость. Спасибо за то, что указал на это, я только что кое-что узнал: D Спасибо за возражения тоже :)
RPiAwesomeness
Мне интересно, почему мой ответ получил отрицательный ответ. Я не возражаю против потери репутации, я просто хочу знать, что заслужило понижение, чтобы я мог улучшить свой ответ.
RPiAwesomeness
7

Я предлагаю использовать Arch Linux.

Я получаю нормальное время загрузки 5 с (ядро) + 5 с (для пользовательского пространства), и это не требует особых усилий, потому что оно используется systemdдля init.

10robinho
источник
2
@goldilocks, вы также можете использовать systemd на raspbian. Для меня это сократило время загрузки вдвое.
Джон Ла Рой
@JohnLaRooy Полезно знать. Я предполагал, что разница в производительности по сравнению с традиционным init будет в основном из-за того, что systemd может распараллеливать, но это, вероятно, также экономит время, поскольку не нужно разбирать и интерпретировать сценарии оболочки для всего.
Златовласка
@goldilocks Я не согласен, я пытался, и systemdимеет большое значение, по сравнению с sysvinit. Смотри мой ответ .
Басж
@Basj Еще лучше узнать. Я удалил свой комментарий об этом, вероятно, не имеющий «большой разницы с точки зрения времени загрузки, поскольку он [на] одно ядро». Я в основном использую systemd - но я не обращаю особого внимания на время загрузки.
Златовласка
7

Я написал статью об этом здесь .

Короче говоря: использовать systemd.

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

Вот пример, мой сервис называется samplerbox.service:

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

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

Basj
источник
4

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

Фред
источник
3

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

Пьяный Код Обезьяны
источник
1
Извините, что натолкнулся на давний ответ. Но можете ли вы дать больше информации о том, как можно использовать «статически связанное ядро»?
Цезарь
Посмотрите здесь: raspberrypi.org/documentation/linux/kernel/building.md .
Пьяный Код Обезьяны
Чтобы добавить к этому, чтобы скомпилировать статически связанное ядро, вам просто нужно пройти через «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 . Это сделано для быстрой загрузки и выживания при сбоях питания.

Avra
источник
Спасибо за ваш ответ. Не могли бы вы включить несколько воспроизводимых шагов, чтобы это работало? (Что-то вроде 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 часов, оно будет преобразовано в вики сообщества, чтобы упростить его исправление сообществом.
Ганима
-3

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

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