6 ms·
This is a common technique in embedded products, but I should point out that it's not useful for general purpose Raspberry Pi work. The author disables several
by PragmaticPulp 5y ago
This is a common technique in embedded products, but I should point out that it's not useful for general purpose Raspberry Pi work.
The author disables several important kernel features to boot faster, including network support and USB support. Obviously, if you plan to use network or USB then it's not an option to disable those. You can disable some of the other debugging features and little extras for a slight boost, but it's going to be negligible (<1s, in my experience).
The biggest change comes from removing the init system entirely and replacing it with the user-facing app. This is the fastest way to get your app started, but now you're responsible for doing everything that was previously handled by the init system. The author can do this because they don't have any network, timekeeping, or other system functions normally handled by the init system. They only needs to mount filesystems, which is easy to replicate inside of the app.
Anyone planning to ship a Raspberry Pi based product should read this article carefully as a great starting point. Anyone who wants to use their Raspberry Pi for general purpose use or even with network connectivity or USB devices will be disappointed if they try these techniques. Great article, but it's a narrow use case.
- _red 5y agoGreat points, a tangential thought: MacOS and Windows have figured out that showing a GUI ASAP satisfies the user. Even if in the background its still negotiating networks, initializing sub-systems, etc. I wonder why Linux has not yet taken that approach? That is move GUI far up in the init-queue and let it initialize networks, avahi, resolved, firewalld, etc as GUI is showing login screen...
- rusk 5y ago> satisfies the user Does it though? Has this ever really satisfied you … that you get to login and then circle your mouse for a few minutes while you wait for things to kick off. Na, all or nothing please I don’t want to be teased by an is-it-isn’t-it experience I want my boot to take its time, let me know what’s going on and when it’s all there let me enjoy a responsive experience. It’s just a cheap trick and it probably doesn’t matter as much as they think it does.
- grayhatter 5y agoDo you believe that you can reason about a computer? I'm going to assume yes. If you'd rather your computer do the countable number of things you know it needs to do, before it draws to the display because it's faster. That's only because you know thoes things exist, and how long they should reasonably take. Most users can't count them, nor do they trust their computer. The loading screen does satisfy them because they know the computer hasn't randomly crapped out... *again*. People who don't understand how to fix computers don't trust them. Rightfully so, they generally dont do what their owner/users want, and randomly will just break costing more money, for seemingly no reason. Those loading screens prevent some of the anxiety of using something you need when you don't understand any part of it.
- smoldesu 5y agoToday's laptops and the majority of desktops boot more than 10x faster than they did a decade ago, so for all but the youngest users I feel like this point is moot. There was an age where you had to go get a coffee while your hard drive started spinning up, I remember kids starting their Macbooks before they got in the car for school so they'd be booted by the time they were in class...
- bitwize 5y agoWhen I was a kid, kids weren't issued MacBooks for class. There was a single, lone Apple II in the back we played Oregon Trail on -- and it took a fair few minutes to load from floppy.
- bayindirh 5y ago> I wonder why Linux has not yet taken that approach? That is move GUI far up in the init-queue and let it initialize networks, avahi, resolved, firewalld, etc as GUI is showing login screen... Because it boots faster than a Windows system in that scenario. I personally like to be able to use my system as soon as the desktop is visible. Also this is the way. When your system boots, it boots.
- fortran77 5y agoI just timed my Windows 11 vs my Ubuntu. Windows 11 booted faster to a usable GUI by a factor of about 2:1
- bayindirh 5y ago> Windows 11 booted faster to a usable GUI by a factor of about 2:1 Probably used fast boot and returned from an image. :)
- ohgodplsno 5y agoFrom a fully fresh start on an NVMe, Windows 10 does start up approximately just as fast as a brand new Debian install. With the added benefit of not having X11 setting modes 5 times in the mean time.
- harshitaneja 5y agoThis is quite surprising. My experience has been quite different. Have you run systemd-analyze to try to locate what's causing the slower boot?
- jraph 5y agoSurprising indeed. Windows 10 boots quite quickly (don't know about Windows 11) but the boot of a fresh install of the latest version of Debian feels instantaneous. In a systemd container, it boots under 2 seconds even with a few extra services.
- fistynuts 5y agoI have to say I agree. Presenting a login screen early is a great idea, as most people take a short while to log in, and in that time system can finish initialising - as long as there is enough free CPU and interrupts to service the keyboard and mouse during that time.
- moron4hire 5y agoI even do this in my web apps. The login screen shows immediately, and while the user is filling it out, the WebGL app and assets are loading in the background. The login button doesn't become enabled until the audio system is loaded, so that the click on the login button can be used as the User Gesture to activate the AudioContext.
- ranger_danger 5y agowhy do you need WebGL and an AudioContext to click a login button??
- moron4hire 5y agoI don't? Why would you think I did? My app is a WebXR social app. You need to login first, and I use the login process as an opportunity to make a better user experience.
- aidenn0 5y agoI have rewritten my init system in the past to start xorg before e.g. DHCP initializes. It takes about 5 seconds to login anyways, so DHCP is usually done before my browser wants network
- m45t3r 5y agoIf you're using systemd and NetworkManager, this is already what happens. Services that depend on network are delayed until a connection is made, that generally only happens after login. If you're using something else than yes, the start of network services are made during boot. But it can be argued that if you're not using NetworkManager, you are a server and wouldn't benefit from delayed connection.
- numpad0 5y agoBecause Xorg is just a UNIX app ported to Linux and not an integral part?
- ranger_danger 5y agoBecause you would have to assume too many things. What if the GUI bring-up required mounting filesystems that need a kernel module that hasn't loaded yet? What if the filesystem is on a network? What if the network isn't up yet? What if someone's xinit script needs access to the bluetooth stack which isn't up yet? And even if the all the "correct" assumptions were made for a default install... doing anything different from that would require unraveling a mess to fix.
- GekkePrutser 5y agoWindows has a trick for that. It actually hibernates the OS, GUI, Drivers etc when you shut down, just without any apps running. This way it can come back up in seconds. You'll notice that after you install a new device driver it'll boot much slower. This is because it invalidates the hibernate image and does an actual boot next time. It's also why it won't let you fiddle with the BIOS settings before it does a quick boot. Because the hibernate image presumes the exact same hardware configuration.
- c21h30o2 5y agoAnd it doesn't unmount partitions when you shut down so if you use Windows one day and Linux the next you have to boot up Windows first and then reboot into Linux so that Windows will unmount its partitions, otherwise Linux can't mount them.
- GekkePrutser 5y agoOh yeah good point. I forgot about that. Linux updates also wreck bitlocker if the windows partition is on the same drive (which I have to use for work) so I left the whole dualboot thing behind.
- lhl 5y agoA few years ago, there was an article on getting a fully functional Linux booted on an rpi in 3-4s which has a few other, maybe more generally useful tips for speeding up startup times: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry...
- pchanda 5y agoThe bootlin training slides on embedded linux boot time optimisation is also quite informative: https://bootlin.com/doc/training/boot-time/boot-time-slides.pdf https://bootlin.com/doc/training/boot-time/boot-time-slides....
- jandrese 5y agoDoesn't disabling USB cut you off from most of the hardware on a Raspberry Pi? Come to think of it, doesn't the SD card slot sit off of the USB bus?
- vardump 5y ago> Come to think of it, doesn't the SD card slot sit off of the USB bus? It doesn't.
- SahAssar 5y agoIf it did it wouldn't be able to boot, right? The OS/bootloader is on the SD.
- sdfhsdfhsdfh 5y agoThe bootloader would still support SD, but the kernel would come up just fine without supporting it, as by the time the kernel is booting it's already in memory. You just wouldn't be able to mount any filesystems from that kernel, so you'd be stuck with whatever userland you packed into your initramfs
- II2II 5y agoYou're probably thinking of the ethernet controller, which is often cited for the Pi 3 and earlier.
- goodells 5y agoI have at least a few Raspberry Pi's that are programmed to simply boot and hit the aux out. This could be the difference between my car's white noise system coming online before I even shift the car out of park, vs. when I'm in the roundabout a few hundred feet away. Lifechanging.
- mmastrac 5y agoCurious: why does your car have a white noise system?
- 5y ago
- amelius 5y agoIf only the init system was lazy, i.e. running parts of the boot sequence only when required.
- stjohnswarts 5y agoIt's very possible in linux. Modules can be loaded and unloaded for some kinds of hardware. I don't know if that's true for rpi though.
- Denvercoder9 5y agosystemd fully supports that.
- cztomsik 5y agoI believe it was meant to be ironic comment, pointing at systemd