Jak poprawić czas uruchamiania Raspberry Pi?


27

Tworzę zdalną aplikację do osadzania, która nie będzie trwale włączona. Bawiłem się różnymi wersjami systemu operacyjnego i mogę znacznie skrócić czas uruchamiania, używając lepszych kart SD o większej prędkości odczytu. Nie jestem przywiązany do żadnej konkretnej dystrybucji, więc mogę rozebrać tyle, ile jest konieczne, aby użyć minimalnej dystrybucji Linuksa.

(Próbowałem poszukać testów porównawczych, które ludzie przeprowadzili, aby skrócić czas uruchamiania, ale nie znalazłem nic z twardymi danymi).

Mógłbym również użyć kompilacji root (patrz także wideo z YouTube Raspberry Pi - Super Fast Boot Time - Marshmallow Entertainment System ) ...


Powinieneś głosować, aby zamknąć to pytanie. Następnie użytkownicy zostaną przekierowani do pierwotnego pytania i dodadzą więcej odpowiedzi. Odkąd nikt nie został jeszcze oznaczony jako odebrany.
Piotr Kula

Po prostu myślę, że ten ma dużo aktywności (widoki nie są oczywiście tak wysokie, po prostu dlatego, że ten ma mniej niż jeden dzień), więcej głosów i więcej odpowiedzi, więc pomyślałem, że lepiej zostawić to w górę, a następnie prawdopodobnie przenieś swoją odpowiedź tutaj. Myślę, że to naprawdę kwestia wygody. 1 użytkownik przesuwa swoją odpowiedź, w przeciwieństwie do 3 przesuwa swoją, tracąc w ten sposób wszystkie głosy, rozmowy i tym podobne. Czy jest jakiś powód, dla którego powinniśmy iść tą czy inną drogą? Nie mam nic przeciwko, myślę tylko, że inni ludzie, którzy odpowiedzieli, mogą nie chcieć się przenieść, dlatego tracimy treść
RPiAwesomeness

@ppumkin Sprawdź ten post Meta.SE dotyczący zamykania duplikatów: Nie usuwaj dobrych duplikatów i tego posta na blogu SE . Myślę, że zgadzają się z moją poprzednią uwagą. O ile duplikat nie jest kopiowaniem-wklejaniem drugiego lub straszną jakością, a ponieważ ten zawiera wiele odpowiedzi / działań, powinniśmy po prostu zostawić je otwarte.
RPiAwesomeness

1
@ppumkin Dobre punkty, o ile ten nie zostanie usunięty. Pierwotnie sprawdziłem Leave Open, ale chyba oznaczenie tego jako duplikatu jest właściwą drogą. Jedyne, co mogę wymyślić, to to, że przynajmniej chcę mieć wyższą jakość Q / A na zaznaczonym oryginale niż na duplikacie. W tym przypadku zdecydowanie tak nie jest.
RPiAwesomeness

1
Masz rację. Tutaj jest więcej odpowiedzi. Wydaje się, że więcej uwagi. Przypuszczam, że musimy pozostawić moderatorom decyzję, ponieważ będą oni lepiej wiedzieć, co tu robić. Tak czy inaczej. Gratulacje z otrzymaniem liczby głosów na twoją odpowiedź :) Jestem pewien, że OP docenia twój wkład. +1
Piotr Kula

Odpowiedzi:


13

Jeśli połączysz Arch Linux z funkcjami sugerowanymi przez Freda, powinieneś uzyskać ogólnie szybki system operacyjny.

Spowalnia to czas uruchamiania systemu operacyjnego

  1. Wolne prędkości odczytu / zapisu (I / O).

    Więc korzystając szybszą kartę SD będzie pomóc, Class 10 karta będzie znacznie szybciej niż klasa 4 karty . Źle zrozumiałem, jak działają klasy kart SD, co zostało dość wyraźnie zaznaczone w komentarzach, moje złe. W rzeczywistości karta klasy 10 będzie szybsza niż karta klasy 4 w przypadku przesyłania dużych plików, takich jak wideo HD i tak dalej. Najwyraźniej klasa 4 działa równie dobrze z mniejszymi plikami. Ponownie, mój zły, ale hej, wszyscy uczymy się od czasu do czasu.

  2. Bogata w sekwencje inicjująca.

    Jeśli masz dużo oprogramowania, które uruchamia się podczas fazy rozruchu, czas uruchamiania będzie dłuższy. Więcej oprogramowania zaczyna == Dłuższy czas uruchamiania.

    Dlatego jeśli potrzebujesz szybkiego rozruchu, wytnij jak najwięcej oprogramowania z sekwencji inicjującej. Możesz stworzyć prosty skrypt (lub jestem pewien, że istnieje), który uruchomi oprogramowanie po zakończeniu głównej sekwencji rozruchowej, jeszcze bardziej rozkładając obciążenie.

Zasadniczo to jest to. Arch Linux to prawdopodobnie najlepsza droga, w połączeniu z funkcjami wymienionymi przez Freda, jak powiedziałem wcześniej. Arch jest bardzo minimalnym systemem operacyjnym i może nie być najlepszą rzeczą dla początkujących, ale jeśli masz doświadczenie w Linuksie, skorzystaj z niego. To wymaga tylko trochę konfiguracji, ponieważ ma absolutne minimum do zainstalowania i to wszystko .

Mam nadzieję, że Twój projekt się powiedzie!


3
„Klasa” karty SD jest bardzo słabym wskaźnikiem wydajności w systemie wbudowanym. Oceny „klasy” dotyczą dużych sekwencyjnych transferów plików (jak w przypadku cyfrowego aparatu fotograficznego o rozdzielczości wielu megapikseli), a nie małych plików, takich jak skrypty startowe. Karty klasy 4 regularnie przewyższają większość kart klasy 10 w operacjach odczytu i zapisu 4k o współczynnik 100 lub więcej. Istnieją karty klasy 10 z dobrym IOPS, ale te modele są nieliczne i dalekie.
Ben Voigt

Tak, zgadzam się z @BenVoigt - kiedy używałem klasy 4, wydawało się, że małe zapisy i aktualizacje były szybkie, ale tak duże transfery w klasie 10 są znacznie lepsze. Chciałbym móc użyć karty RAM zasilanej z baterii, aby uzyskać natychmiastową wydajność.
Piotr Kula

Przepraszam, nie wiedziałem o tym. Naprawię to natychmiast. Zrozumiałem, że im wyższa klasa, tym wyższa prędkość. Dzięki za zwrócenie na to uwagi, właśnie się czegoś nauczyłem: D Dziękuję też za głosy poparcia :)
RPiAwesomeness

Zastanawiam się, dlaczego moja odpowiedź została odrzucona. Nie mam nic przeciwko utracie przedstawiciela, chcę tylko wiedzieć, co zasługiwało na głosowanie, więc mogę poprawić swoją odpowiedź.
RPiAwesomeness

7

Sugeruję użycie Arch Linux.

Dostaję normalny czas uruchamiania 5s (jądro) + 5s (do przestrzeni użytkownika) i nie wymaga to dużego wysiłku, ponieważ używa systemddo inicjalizacji.


2
@Goldilocks, możesz też używać systemd na raspbian. Skróciłem o połowę czas uruchamiania.
John La Rooy,

@JohnLaRooy Dobrze wiedzieć. Zakładałem, że różnica w wydajności w stosunku do tradycyjnego init byłaby spowodowana głównie tym, że systemd może się zrównoleglać, ale prawdopodobnie oszczędza również czas, ponieważ nie trzeba rozwidlać i interpretować skryptów powłoki dla wszystkiego.
złotowłosa

@Goldilocks Nie zgadzam się, próbowałem i systemdrobi dużą różnicę w porównaniu do sysvinit. Zobacz moją odpowiedź .
Basj

@Basj Jeszcze lepiej wiedzieć. Usunąłem swój komentarz na ten temat, prawdopodobnie nie czyniąc „dużej różnicy pod względem czasu rozruchu, ponieważ jest on [na] jednym rdzeniu”. Najczęściej używam systemd - ale TBH nie przywiązuję dużej wagi do czasów uruchamiania.
Złotowłosa

7

Napisałem tutaj artykuł na ten temat.

W skrócie: użyj systemd.

Możesz łatwo uruchomić aplikację RaspberryPi mniej niż 8 sekund po podłączeniu przewodu zasilającego lub mniej niż 3 sekundy po uruchomieniu rozruchu systemu Linux.

Przykładem tutaj jest moja usługa samplerbox.service:

wprowadź opis zdjęcia tutaj

Uwaga: nie próbowałem optymalizować czasu przestrzeni użytkownika, ponieważ go nie potrzebuję: i tak aplikacja uruchamia się wcześnie, więc nie mam nic przeciwko, jeśli przypisanie DHCP / IP do sieci zajmie 8 sekund po uruchomieniu mojej aplikacji.


4

Optymalnym rozwiązaniem jest prawdopodobnie zbudowanie dystrybucji, która robi dokładnie to, co chcesz przy rozruchu, w ten sposób masz zagwarantowane minimalne czasy (przy użyciu minimalistycznego systemu inicjującego, takiego jak sinit ). Alternatywnie, możesz rozważyć użycie funkcji zawieszenia na dysku ( hibernacji ) jądra Linux. Po uruchomieniu operacje zawieszenia i wznowienia są dość szybkie, a system jest w międzyczasie całkowicie wyłączony.


3

Korzystanie ze statycznie połączonego jądra zamiast modprobowania sterowników może również znacznie zwiększyć wydajność. Istnieją inne optymalizacje, które należy wykonać, ostrożnie konfigurując i ponownie kompilując jądro.


1
Przepraszam, że wpadłem na starą odpowiedź. Ale czy możesz podać więcej informacji na temat „używania statycznie połączonego jądra”?
Caesar


Aby dodać do tego, aby skompilować statycznie połączone jądro, wystarczy przejść przez „make menuconfig” lub „make xconfig” i dołączyć sterowniki, których potrzebujesz w jądrze, zamiast wybierać je jako moduły. W ten sposób przygotowuje je do vmlinuz i pozwala pominąć sekwencję modprobe podczas uruchamiania, co zajmuje dużo czasu, aby wykryć i załadować moduły jądra, gdy są potrzebne.
Drunken Code Monkey

Dziękuję za Twoją odpowiedź. Czy może to być przydatne, czy możesz podać kilka odtwarzalnych kroków, aby działało? (Coś jak 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

Nie bardzo, rekompilacja jądra nie jest prostym procesem składającym się z 5 kroków. W sieci jest mnóstwo poradników, które pokazują, jak skonfigurować i skompilować jądro Linuksa ...
Drunken Code Monkey

1

Użyj TinyCoreLinux . Jest przeznaczony do szybkiego ładowania i przetrwania awarii zasilania.


Dziękuję za Twoją odpowiedź. Czy możesz podać kilka odtwarzalnych kroków, aby działał? (Coś jak 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

Możesz spróbować użyć eINIT, aby przyspieszyć proces rozruchu: http://sourceforge.net/projects/einit/

Niestety obecnie (październik 2016 r.) Strona główna eINIT zauważa:

eINIT był alternatywną implementacją programu / sbin / init dla systemów Linux i FreeBSD. Przypuszczam, że nadal tak jest, ale projekt został wstrzymany od lat.


W tym miejscu wypróbowujemy nowe zasady dotyczące pozbawionych informacji odpowiedzi tylko z linkami . Jeśli ten post nie będzie edytowany, aby zawierał informacje, które mogą stanowić odpowiedź, choć minimalną, w ciągu 48 godzin zostanie przekonwertowany na Wiki Wiki, aby uprościć poprawianie go przez społeczność.
Ghanima

-3

Usuń wszystkie moduły jądra, których nie będziesz używać.


4
Odpowiedzi na tej stronie powinny zawierać kroki niezbędne do wykonania sugerowanych działań (jak określić, które moduły są ładowane, które są potrzebne i jak je usunąć) oraz odniesienia i łącza do dalszych informacji.
Steve Robillard
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.