Your thinking is still that we can multitask in a boot-up environent.  
There are no background tasks available. You need to poll the Bios for  
a keypress between disk accesses.

Sent from my iPhone

On Nov 28, 2008, at 12:42 AM, Vlad <[EMAIL PROTECTED]> wrote:

> Hi,
>
> In a recent demonstration of how to boot Linux in 5 seconds [1],  
> PowerTOP developers did not use GRUB2, even though GRUB2 is a  
> necessary component of any production and consumer Linux system or  
> multi-boot environment. As I see it, the greatest disadvantage of  
> GRUB2 is that it needlessly wastes the time in which it gives the  
> user the chance to stall the boot sequence in order to make changes  
> to the boot settings. Of course, having this option available is a  
> necesity in case the user's hardware requires tweaking the  
> parameters passed to the kernel. However, GRUB2 should be loading  
> the default kernel during this time, instead of deferring this IO- 
> bound task to after the timeout has elapsed.
>
> I'm not familiar with the internals of GRUB2, but I assume that  
> multi-threading is impossible. Given this limitation, I have devised  
> the following chain of events which should minimize the time needed  
> to boot the default kernel, while still giving the user a chance to  
> change the boot settings:
>
> 1. Start accepting and recording user keystrokes (background task)
> 2. Print a message along the lines of "Press any key to change the  
> boot settings". (background task)
> 3. Record the start time (ie. start_timestamp=0)
> 4. Mount the boot partition and read grub.conf
> 5. If a key has been pressed, display the boot settings. Else, start  
> loading the default kernel into memory.
> 6. Record the time when the default kernel has finished loading (ie.  
> kernel_loaded_timestamp=3)
> 7. If a key has been pressed, display the boot settings. Else, if  
> the time expended so far is less than the "timeout" variable set in  
> grub.conf (ie. timeout=10), keep displaying the message and  
> accepting keystrokes for the remainder of the time. Else, execute  
> the default kernel which has previously been loaded to memory. In  
> pseudo-code, this would be:
>
> if (keystroke_detected){
>     display_boot_settings();
> } else if (kernel_loaded_timestamp - start_timestamp < timeout){
>     keep_displaying_intro_message(timeout - (kernel_loaded_timestamp  
> - start_timestamp));
> } else {
>     execute(default_kernel);
> }
>
> 8. Once the timeout period has elapsed, if a key has been pressed,  
> display the boot settings. Else boot the default kernel.
>
> The advantage of this scheme is that the time-consuming parts of  
> mounting the boot partition, reading grub.conf and loading the  
> default kernel are done roughly in _parallel_ to the user seeing the  
> intro message. This scheme also ensures that the user's keystrokes  
> do not fall through the cracks, because they are checked before  
> booting the default kernel at steps 5, 7 and 8.
>
> As GRUB2 is currently set up, time is just wasted displaying the  
> "Press any key to change the boot settings" message because GRUB2 is  
> doing nothing beside awaiting user input. Instead, GRUB2 should be  
> doing all the necessary preparations for actually booting the  
> default kernel during this time.
>
> Since popular Linux distros typically display the GRUB2 intro  
> message for 30 seconds, the time being wasted here is astronomical  
> compared to how fast the Linux environment can actually boot.  
> Changing GRUB2 as described above would ensure that no time is  
> wasted while users are given a chance to change their boot settings.
>
> Thanks,
> Vlad
>
> [1] http://lwn.net/Articles/299483
>
>
>
>
> _______________________________________________
> Power mailing list
> [email protected]
> http://www.bughost.org/mailman/listinfo/power

_______________________________________________
Power mailing list
[email protected]
http://www.bughost.org/mailman/listinfo/power

Reply via email to