Kernel Log - Coming in 3.6 (Part 5): Infrastructure
by Thorsten Leemhuis
Similarly to current versions of Mac OS X and Windows, Linux is now capable of a hybrid sleep state. The 3.6 kernel also provides improved randomisation and reduces the work load of EFI bootloaders.
With the sixth release candidate of Linux 3.6, Linus Torvalds has asked the community to do some testing and said that he would like to release Linux 3.6 "soonish". Linux 3.6-rc6 could, therefore, already be the last pre-release version of the 3.6 kernel, and the new kernel may be released shortly; but more than once he has issued yet another rc after a statement like this, so release at the end of September is possible, too.
Nevertheless, the following article on the infrastructure changes in Linux 3.6 will therefore conclude the Kernel Log's "Coming in 3.6" mini-series. Parts 1 to 4 of this series discussed the new features in the areas of filesystems and storage, network drivers and infrastructure, architecture code and drivers.
The new "Suspend to Both" feature will give Linux 3.6 hybrid standby capability. Mac OS X and Windows have offered such a feature for some time; it involves having the computer store its memory contents both in RAM and on the system disk during hibernation. A system that hibernates this way will usually wake up within a few seconds as if waking up from Suspend-to-RAM (ACPI S3); however, if power was disrupted during hibernation, for instance because a notebook ran out of battery, the system will restore the main memory contents from disk as it would after Suspend-to-Disk (Hibernate).
The new sleep state can be accessed manually by entering the following commands:
echo suspend > /sys/power/disk; echo disk > /sys/power/state
In a short test on a slightly older system with a 250GB hard disk, Suspend-to-Both worked as intended; it required about 16 seconds to go to sleep – four times as long as with Suspend-to-RAM and about as long as is needed for Suspend-to-Disk.
When collecting noise for generating random data for /dev/random and /dev/urandom, Linux 3.6 will now include a few previously unused entropy sources such as MAC addresses, DMI data and USB hardware information. This is, for example, designed to improve the way cryptography software works, as security specialists recently found that there were similarities in about six per cent of the TLS keys and about ten per cent of the SSH keys they examined. Inadequate random data which the kernel contributes for key generation is believed to be among the causes for this problem that, the specialists say, was found particularly often in embedded devices. Further background information is available in an article on LWN.net. Many of the entropy generation improvements have also been incorporated into the latest series 3 Stable and Longterm kernels to make these kernels generate better random data as well and eradicate this problem more quickly.
The kernel developers have extended the handover protocol from the bootloader to the Linux kernel to allow the kernel to handle various initialisation tasks when starting x86 systems via EFI; previously, the bootloader was in charge of these tasks, unless Linux started via the EFI Stub feature that was added with version 3.3. The changes incorporated in 3.6 allow developers to write simple EFI boot managers that only have to display a boot menu and load the kernel and initrd from disk; the new approach can also speed up booting.
Various modifications to some build scripts are designed to significantly reduce the number of modules that the make target localmodconfig keeps activated (1, 2); this target can be used to quickly generate a kernel configuration that should be reasonably suitable for the target system and should ideally compile no features the system does not require.