[HN Gopher] Raspberry Pi 3 Fastboot - Less Than 2 Seconds ___________________________________________________________________ Raspberry Pi 3 Fastboot - Less Than 2 Seconds Author : solarized Score : 314 points Date : 2021-10-23 15:26 UTC (7 hours ago) (HTM) web link (www.furkantokac.com) (TXT) w3m dump (www.furkantokac.com) | oolonthegreat wrote: | neat! I had no idea that rpi used a closed bootloader SoC? are | there no open source hardware alternatives ? | ggm wrote: | Did I read that the initialisation of entropy for random boot | sequence (which needs time to get enough unrelated external | asynchronous events to cause it to be 'unlike' another boot) was | one of the things he disabled? | whalesalad wrote: | FWIW my Pi4 running nerves/elixir boots to the full beam | environment in less than ten seconds. | sneak wrote: | This is a quad core machine that can do billions of cycles per | second. That seems unnecessary and wasteful by at least two, | possibly 3 orders of magnitude. | | So much of this is just tradition. | | I have server machines that take minutes after power on before | they even get to the kernel. I know they aren't designed to be | rebooted often but this burns tons of time for no reason | whenever they need to be serviced for whatever reason. Testing | bios changes or doing network reconfiguration takes 30-60 | minutes instead of 5, it sucks. | gtirloni wrote: | That's because of the POST procedure allowing time to | initialize and run the ROMs in all PCIe devices. Also, HBAs | take time to do staggered initialization of disk, etc. There | are usually some tweaks you can do in the BIOS to skip | certain things but unless you're seeing >5min boot times, I | wouldn't bother. | sneak wrote: | I understand the excuses, but the "time to initialize" | thing is also just outdated tradition. These things (even | the HBA stuff) are modern chips that can do zillions of | operations per second. | | It takes a long time because we have simply accepted the | tradition of "initialization takes a long time". | | There are certain bottlenecks like loading boot images over | relatively slow SPI, but the synchronization margins | between components are like 10x bigger than they need to be | simply out of poor engineering. | withinboredom wrote: | Aren't most initializations done with the CPUs in real- | time mode? In that case, they are probably only able to | run in MHz and not ghz | PragmaticPulp wrote: | > This is a quad core machine that can do billions of cycles | per second. That seems unnecessary and wasteful by at least | two, possibly 3 orders of magnitude. | | Booting a system goes beyond just the CPU. Most of the time | isn't spent computing things. It's spent waiting for data | transfers, initializing peripherals, and so on. | | It's not just "tradition" to make it slow. | axegon_ wrote: | Great job! I am building a CNC router in my spare time and I | ended up using a raspberry pi 3 since I want to cram in a ton of | features and esp32s and stm32s are simply not cutting it. And | cutting the boot time is something I spend stupid amounts of time | on. The best I was able to achieve was just under 8 seconds. I'll | have to dig into this and see if there is something more I could | do. | donquichotte wrote: | Are you using the PREEPMT_RT kernel? Driving steppers or servos | directly from the Raspberry? | wiml wrote: | If you're driving steppers, especially on something like a | mill, I'd think it'd make sense to use something like a | Beagleboard with its PRUs, or an auxiliary hard-realtime | microcontroller. | [deleted] | PragmaticPulp wrote: | You might be able to shave a little bit of time off, but if you | need network, USB, or an init system then be warned that this | article removes all of those. | bitwize wrote: | I've been booting Void Linux on a raspberry pi 2 and it comes up | in like 5s. If you really need to shave boot time down, like | you're cutting power to the machine except when it's necessary | and need it to come up instantly, something like this may be | helpful though you might be in the realm of wanting an RTOS | rather than Linux. | | For most Linux use cases, it really comes down to distro (and | especially init) choice. | fouric wrote: | So, it seems like the main speedups were from removing a ton of | kernel modules, replacing the init system with the target | application, and then some optimization of the target | application. That's pretty neat! | | But let's go further - while we're trading flexibility for | performance, why couldn't the entire kernel and userspace be | precompiled+loaded into a single image file - like a | Smalltalk/Lisp image - and loaded directly into memory, modulo | some really-truly-has-to-be-done-upon-power-up initialization? | | Sure, there's hardware that has to be brought up - so, right | after initializing basic access to the SD card and RAM, this | hypothetical bootloader could initialize another core and use | that to bring up the random SoC subsystems while the kernel image | is being copied into RAM. | | And, yes, this would mean that you would need to re-compile that | image every time you updated the kernel (or any of the userspace | stuff inside) - but, again, we're sacrificing flexibility for | performance. | | Is this possible? Has anyone done something like it before? | yissp wrote: | I'm not super familiar with the concept, but isn't this sort-of | what a "unikernel" is? | fanf2 wrote: | Sounds like installing the application as init inside the | kernel's initramfs. | guenthert wrote: | That is Fastboot w/o network support (and a plethora of other | features disabled). The trade-of appears to be worth for this | particular application, but is hardly a general solution. | inChargeOfIT wrote: | Learned a lot, thanks for the write up! | up6w6 wrote: | Talking about optimizations for raspberry pi, does anyone knows | if there is any low power mode configuration available ? I've | always been fascinated by how smartphones can stay like one/two | days in idle while a raspberry pi can't stand 10 hours with a | similar battery. | somethoughts wrote: | The Raspberry Pi is based on an SOC from Broadcom that was | derived from SOCs designed for Set top box and Over The Top box | products (i.e. Roku, AppleTV, etc.). | | The Beaglebone is based on an SOC from TI that was designed for | (at the time High End) Smartphones. Therefore it supports much | lower power consumption and idle modes. | rossoldfield wrote: | The BCM2835 used in the PiZero was used in the Nokia 808 | PureView as a coprocessor for graphics and the camera: | https://en.wikipedia.org/wiki/Nokia_808_PureView | | The BCM2763 and BCM2835 are the same silicon in a different | package: | https://raspberrypi.stackexchange.com/questions/840/why- | is-t... | opencl wrote: | There aren't a whole lot of power management features available | in the hardware, the SoC just wasn't designed for | mobile/battery use. About all you can do is disable | USB/ethernet/HDMI if not needed for your use case, or drop the | CPU/GPU clocks. | harlanji wrote: | It is relatively low power, in the ballpark of a mobile | phone. Running headless the Pi3 consumes 4-5W with an out of | the box Ubuntu install, about 9W with the 7" screen, and | after shutdown it remains on at about 2W. The iPhone SE takes | about 9W while charging and 4W fully charged with the screen | on. Numbers aren't exact, read out from a Jackery display and | it's been a few months. I think the Pi4 8GB was about 1W more | than the Pi3. | PeterisP wrote: | Do you know why does it still consume half of the power (2w | out of the 4-5w) after shutdown? | GeorgeTirebiter wrote: | For the RPi0W, JG has some hacks: | https://www.jeffgeerling.com/blogs/jeff- | geerling/raspberry-p... | hungryforcodes wrote: | The RPI is horrific for power usage -- I've never understood | why they didn't release a version to address this. I get better | performance out of all the Friendlyelec stuff.... | Topgamer7 wrote: | https://elinux.org/images/d/d4/MischaJonker_ARM11_power_mana... | | ARM11 is what the raspberry pi 4 BCM module uses from what I | could tell. Looks like your best bet is to set the cpu freq | down. I didn't see anything useful in the Broadcom BCM2711 | datasheet. | phh wrote: | No it isn't? ARM11 are ARMv6 CPUs, Raspberry Pi4 are ARMv8, | two generations of difference, and that's just the | instruction set. ARM11/ARMv6 says nothing about power | management, it's up to the SoC. (ARMv8 does say a few things | about power management, but Broadcom/Rasperry Pi4 chose to | ignore it) | 1vuio0pswjnm7 wrote: | Certainly one idea was to use the RPi as a battery-powered, | pocket-sized, general purpose computer, like a "smartphone". | Solutions for this exist but are still awkward, IMO. | | Another idea is to use an open source "smartphone" like the | PinePhone as a battery-powered, pocket-sized, general purpose | computer, like the RPi. (Depite whatever usage the Pine64 folks | and "app" contributors envisage.) | | The PinePhone boots from SD card, like the RPi. It will run | Linux. What remains is further OS support. It will boot NetBSD, | which is a start. The RPi battery problem has been solved. | | For the avoidance of doubt, "general purpose" means, among | other things, "cellular calling" is not a prerequisite to | usefuless. Similarly, "pocket-sized" does not imply that the | computer is always operated by removing it from a pocket and | holding it in the hand; it refers to the form factor, not the | usage. | | Further, I am not seeking to stimulate discussion of "average | users". This is "Hacker News" not "Average User News". The idea | has come up a few times on https://forum.osdev.org but I have | not seen it discussed on HN. | abc_lisper wrote: | Does anyone know how to get hold of a couple of raspberry pies. | It is always a drag to get hold of | grayhatter wrote: | I usually search for suppliers using Google. Did you try that | yet? | PragmaticPulp wrote: | 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 wrote: | Great 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... | m45t3r wrote: | If 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. | fistynuts wrote: | I 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 wrote: | I 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. | aidenn0 wrote: | I 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 | rusk wrote: | > 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 wrote: | Do 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 wrote: | Today'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 wrote: | When 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. | nl wrote: | A floppy drive? Get off my lawn | | On my C64 I'd start loading a game from cassette tape | before dinner so I could play it afterwards. | II2II wrote: | Yes, it does matter. If Microsoft switched things up to | provide users with a responsive desktop just after logging | by loading more services before the login screen comes up, | existing Windows users would perceive it as slower. If | Linux distributions delayed the loading of services at the | expense of a less responsive desktop just after logging in, | existing Linux users would perceive it as slower. Simply | put, each user base is using different metrics for boot | time and their metrics are based upon their prior | experiences. | fizzynut wrote: | Cheap tricks can create a much more responsive experience. | | Whenever a user interactable element will be ready in | <~100ms, you can display it as ready now, because it is | faster than the reaction speed of a human, which makes all | interactions with the software faster, smoother and more | responsive than if I used a loading indicator. It's a free | win. | | Whenever you know in advance you need to display something | to the user and need to load/process something that takes | much longer than 100ms, you can load in the background | while displaying whatever needs to be displayed and if the | time spent on the screen is slower than the loading time | then the next interaction will be instant (common case), if | the user is faster on the screen you can still go to a | loading screen, but the time it is on screen for would | still be much much shorter. | bayindirh wrote: | > 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 wrote: | I just timed my Windows 11 vs my Ubuntu. Windows 11 booted | faster to a usable GUI by a factor of about 2:1 | bayindirh wrote: | > 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 wrote: | From 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. | amelius wrote: | If only the init system was lazy, i.e. running parts of the | boot sequence only when required. | stjohnswarts wrote: | It'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. | lhl wrote: | A 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... | pchanda wrote: | The bootlin training slides on embedded linux boot time | optimisation is also quite informative: | https://bootlin.com/doc/training/boot-time/boot-time- | slides.... | jandrese wrote: | Doesn'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 wrote: | > Come to think of it, doesn't the SD card slot sit off of | the USB bus? | | It doesn't. | eblanshey wrote: | Anyone know of something like this for a beaglebone black, with | Qt/QML as well? | lovelyviking wrote: | How difficult it would be to make it work with RaspberryPI 400? | johnvega wrote: | "bootcode.bin: This is the 2nd Stage Bootloader, which is run by | the 1st Stage Bootloader which is embedded into the RPI by the | manufacturer. Runs on the GPU. Activates the RAM. Its purpose is | to run start.elf (3rd Stage Bootloader)." | GekkePrutser wrote: | Really nice effort and info. Thanks for sharing! | garaetjjte wrote: | Interesting. I given up using Raspberry Pi 4 on a project because | their crap proprietary bootloader took something like 4 seconds | to start the kernel. Maybe it was faster on Pi 3. I ended up | buying board with Allwinner that works with U-Boot. | abainbridge wrote: | That's interesting. I was thinking of going down the same | route. Which Allwinner board? And how fast did it boot? | goldbattle wrote: | This is a great write up and was really interesting to read. My | question is why would the proposed changes are not already | included upstream? Isn't a faster boot what everybody wants? | josteink wrote: | > Isn't a faster boot what everybody wants? | | I'll rather have slow boot and proper UEFI support so I can | boot any vanilla ARM64 Linux distro (Debian proper), instead of | images/distros which have been crafted to be device-specific | (Raspbian). | | I boot this thing once every second month _at most_. I honestly | couldn't care less about boot-times. | | Luckily for me, there are solutions to my problem too ;) | | https://github.com/pftf/RPi3 | kaladin-jasnah wrote: | https://github.com/pftf/RPi4 for Pi4 users. | | Incidentally, I have used this for for the ESXi Fling for the | Pi when benchmarking it against KVM performance (for those | curious, KVM far outperformed ESXi), but I heard that it | doesn't work as well for Linux distros (some hardware was | broken last I heard [a few months ago]). | | But yeah, I agree that getting UEFI support and standardising | the ARM boot procedure is very useful for all of us. | repomies69 wrote: | > Isn't a faster boot what everybody wants? | | Yes, but glancing quickly at the article some solutions are not | generally acceptable, such as moving filesystem processes to | the application code. If you have a RPi project where you plan | to run a single Qt app then you can do stuff like this, but | that is generally speaking not the use case. | PragmaticPulp wrote: | > My question is why would the proposed changes are not already | included upstream? | | Because these changes remove networking, USB support, sound, | debugging support, and even the entire init system. It's useful | if you need to boot into a single, simple app without | networking or USB as fast as possible, but it's not useful for | general purpose computing. | myself248 wrote: | I guess there's an obvious follow-on question: Can USB and | networking support be implemented in such a way that startup | is deferred or parallelized? | [deleted] | rusk wrote: | Can they be loaded as modules on demand? Sounds like it | should be possible ... | midasuni wrote: | So my computer has booted but I can't ping it or use a | keyboard. Great. | | I'd rather my computer booted and then signalled when | everything I want was ready, rather than hide the init | time after claiming to be ready. | myself248 wrote: | Lazy troll is lazy. I like that my Linux-based head-unit | comes ready 3 seconds after starting the car, so the | volume control works, and if I was listening to a simple | input like the broadcast tuner at the last shutdown, it | returns to that and I've got music right away. It takes a | little longer for maps to render, and longer still for | the Bluetooth module to load, but that's okay. Delaying | simple functions until all the most complex stuff had | loaded would be a terrible UX. | exabrial wrote: | Can't seem to get ahold of _any_ embedded SBC these days. RPI 4s | are being sold 3x their normal price, and alternatives like the | RockPi are nowhere to be found :/ | sircastor wrote: | I used to work for an automotive manufacturer, and one of the | challengers that we faced while exploring system design was | startup time to get from 0 to a backup camera. | | It was this kind of thing we considered (this was all POC) but it | comes with the cost of having to get the rest of the system up. ___________________________________________________________________ (page generated 2021-10-23 23:00 UTC)