Rýchly boot na ARM s neopatchovaným kernelom

26.02.2014 | 11:25 | Mirecove dristy | Miroslav Bendík

Už dlhšie pracujem s ARM doskou A13-OLinuXino-WIFI. Cez víkend som mal trochu času optimalizovať rýchlosť bootovania. Žiaľ nemám čas na písanie návodu, takže len malé načrtnutie ako funguje a video.

Dnešný blog začnem fotografiou nabootovaného zariadenia:

Kernel

Boot samotného kernelu je možné vypnutím nepoužívaných častí zosekať na < 1s (žiadnu mágiu za tým nehľadajte, linux je celkom rýchly). V mojom prípade som došiel len po tento bod, ďalšie možné optimalizácie už nespôsobia až tak výrazne zosekanie bootu.

Počas tejto optimalizácie je vhodné zapnúť zobrazovanie časov pri výpisoch. Vďaka nim je možné identifikovať najpomalšie časti a v prípade, že nie sú potrebné je možné ich úplne vypnúť.

Ďalšou možnou optimalizáciou je znižovanie timeoutov na inicializáciu zariadení v kerneli. Kernel často čaká pre istotu dlhšie než je to nevyhnutné na inicializáciu. Ak však presne vieme na akom hardvéri bude bežať postačia zvyčajne výrazne kratšie časy.

Asi najzaujímavejšou optimalizáciou, ktorá sa zvykne robiť je reordering funkcií tak, aby boli zoradené v poradí, v akom sa volajú pri boote. Po všetkých optimalizáciách sa dá štart kernelu zosekať na niekoľko desatín sekundy.

Systém a init

Malé embedded systémy sa zvyčajne stavajú na busyboxe, ktorý má podobný menuconfig ako kernel. Optimalizácia je prakticky rovnaká ako v prípade kernelu.

Na mojom malom systéme štartujem konzolu na /dev/ttyS0 (nie je na videu). Na framebufferi aby bolo vidieť kedy je systém nabootovaný som zapol top. Po 2s killujem top a zobrazujem Qt5 aplikáciu. Bootovanie začína bliknutím LCD (vtedy sa zapne napájanie).

Build skripty na zostavenie podobného systému mám zverejnené na svojom githube. Virtuálna klávesnica použitá vo videu je open source, tak isto na mojom githube, ale nie je ešte dokončená.

Záver

ARM dosky môžu pri troche snahy bootovať pekne rýchlo. Po drastickejšej optimalizácii je možné bootovať linuxové zariadenia podobne rýchlo ako dumb zariadenia.

    • RE: Rýchly boot na ARM s neopatchovaným kernelom 27.02.2014 | 07:53
      Avatar bedňa LegacyIce-antiX  Administrátor

      Pekné. To už je tri roky čo som si nekutil žiadnu Vanilku. Ohľadne .config, keď už si to takto pekne vytunil, osobne by som vyhádzal všetko čo je "is not set", bude sa v tom ľahšie orientovať a už detaily editovať ručne. Čo používaš na generovanie .config, doba ide dopredu a už to nestíham sledovať, či klasiku menuconfig?

      A13 mám tiež doma, tak to použijem, len ten čas, len ten čas chýba.

      Zasraní komunisti mi blokujú YT, takže video si pozriem až doma.

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
      • RE: Rýchly boot na ARM s neopatchovaným kernelom 27.02.2014 | 08:16
        Avatar Miroslav Bendík Gentoo  Administrátor

        Na videu nie je presne tento config, superrýchly boot je súčasťou komerčného projektu, ale build systém je otvorený (ja robím na forku). Tu som len načrtol ako je možné boot zosekať a v podstate to nie je žiadny problém, deň hrania sa a boot je krásne rýchly.

        Config generujem klasicky cez make menuconfig (resp. v buildroote make linux-menuconfig).

        • RE: Rýchly boot na ARM s neopatchovaným kernelom 28.02.2014 | 16:23
          Avatar bedňa LegacyIce-antiX  Administrátor

          Pozrel som si video, boot je fakt rýchly. V QT je nejaká metóda čo dokáže zobraziť k nejakému znaku všetky tie jeho interpunkčné varianty, alebo si to musel naťukať sám?

          Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
          • RE: Rýchly boot na ARM s neopatchovaným kernelom 28.02.2014 | 18:54
            Avatar Miroslav Bendík Gentoo  Administrátor

            Mlátil som do klávesnice ako blázon. Na druhej strane som sa naučil napísať na klávesnici fakt veľa znakov ;)

            Mimochodom tieto blbosti ako mäkčene a dĺžne by sa dali poriešiť pomocou normalizovanej formy unicode reťazcov, ale lepšie bolo ručne to namlátiť. Mimochodom definície znakov sú tu.

            • RE: Rýchly boot na ARM s neopatchovaným kernelom 28.02.2014 | 23:40
              Avatar bedňa LegacyIce-antiX  Administrátor

              Pýtal som sa preto, že pred nedávnom som riešil podobný problém, len opačne aby všetky interpunkcie odstránilo. Rozhodol som sa ukladať názvy súborov bez interpunkcie, čísla ostali ako boli a ostatné znaky ako podtržítka. Mal som ideu aby to chodilo aj na systémoch kde je problém s UTF a celkovo diakritikou. Potom ma napadlo a čo keď to použije Číňan, tak tam budú len podtržítka. Takže teraz rozmýšľam že budem predsa názvy súborov ukladať tak ako sú, len sa chcem vyhnúť riadiacim znakom ako napríklad "sprava doľava" a podobne, dúfam že regexp vyhodnocuje tieto znaky ako biele.

              Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
              • RE: Rýchly boot na ARM s neopatchovaným kernelom 01.03.2014 | 08:57
                Avatar Miroslav Bendík Gentoo  Administrátor

                Odstránenie diakritiky (aj pre japonské znaky) sa dá dosiahnuť normalizáciou unicode na NFKD. Funguje to pekne aj na znaky ako æ ktoré rozdelí na ae. Samozrejme normalizácia nestačí na prevod do čistého ascii, ale umožní pomerne jednoducho odstrániť diakritiku a spojené znaky.

                • RE: Rýchly boot na ARM s neopatchovaným kernelom 01.03.2014 | 11:57
                  Avatar bedňa LegacyIce-antiX  Administrátor

                  Dík.

                  Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
                • RE: Rýchly boot na ARM s neopatchovaným kernelom 03.03.2014 | 17:06
                  Avatar andrej   Návštevník

                  hmm, tuto http://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html popisany NFKD normalizer asi funguje inak, lebo sa mi zda ze tie prehlasky prepise do unicode stringov a nenahradi ich.