KernelNewbies:

Linux 2.6.29 kernel released on 23 March, 2009.

Summary: Linux 2.6.29 adds kernel based graphic mode setting, WiMAX support, Access Point support in the wifi stack, the inclusion of the btrfs and squashfs filesystems, ecryptfs filename encryption, ext4 no journaling mode, ocfs2 metadata checksums, a more scalable RCU implementation, filesystem freeze support, swap management in the memory controller, many new drivers and many other improvements.

TableOfContents()

Prominent features (the cool stuff)

Kernel Modesetting

When we talk about "mode setting", we mean setting up things like the screen resolution and depth mode, in other words, configuring whatever it's necessary in the graphics card to get it ready to display things on the screen. This may look easy to implement, but the graphics people say it's harder than it seems to design and implement right (multihead setups, hotplug, etc), which is why it has taken so much time. To start with, mode setting implies allocating memory from the graphics card, which means that before doing modesetting it was necessary to have the GEM memory manager ready and merged in the main tree, which did not happen until the previous release, 2.6.28.

Doing modesetting right is much harder if you consider how the typical Linux graphic setups works today. There are several drivers sharing the same piece of hardware (your graphics card): the kernel VGA driver, the kernel framebuffer drivers, the kernel DRM drivers, the userspace X drivers, the userspace DRI drivers, and other userspace drivers (e.g. svgalib). This is a very bad idea. For example, the X.org driver is a full implementation of all what is needed to make your graphics card work in 2D, and when you start up X.org all is fine. But when you switch from X.org to a VT console (using Ctrl+Alt+F1), the X.org driver has to stop handling the graphics card, because the control needs to be passed to another driver: the fb console driver. So the X.org driver saves the current state of the display, the graphics card is reset and then it is handled to the fb driver, which has to reinitialize completely the card again (that's why there's a noticeable pause in the switch), even if the resolution in X and the console is the same. When you switch back to X.org, the card needs to be reconfigured again. This is a hairy, bug-prone mess, and it's difficult to make it working right in some cases; for example resuming of suspended/hibernated systems is more difficult with this design because the X.org driver lives in userspace and suspend/hibernation is (must be) transparent for him, so it is not aware that it needs to reset the hardware before continuing drawing things after resuming, needing a userspace/firmware helper that some times may not work correctly (black screen, hanged system).

Enter modesetting, and those problems go away. Modesetting centralizes the mode setting code in the kernel drivers. While this may look like it's a lot of code for a kernel, it's actually the contrary: there's a single piece of code in charge of the modesetting, which means that the whole graphic stack gets smaller. And because there's only one implementation, and there's more code sharing, the quality and robustness is increased. Besides, mode setting is a task that really belongs to the kernel drivers (it's how every other operating systems, including some proprietary Unixes, have always done it). But all that is just a small part of the benefits: Suspend and resume are more likely to work because all the work will be done by the kernel driver just like it is done with any other hardware device. X.org doesn't need the root privileges anymore (they were needed before only because the old drivers needed direct hardware access to implement the drivers), making possible to [http://airlied.livejournal.com/59521.html run X.org as non-root], which is a huge security improvement, and moves X.org back to what it is supposed to do: drawing things, and not messing with hardware. It is also possible to print kernel oopses (or even a Windows-like BSOD ;) ) to the screen if the kernel crashes while running under X. And if all this wasn't enough, you also get a FB console that runs on top of modesetting and GEM, making the old FB drivers completely obsolete while preserving their functionality at the same time. And with modesetting it isn't needed to reset the hardware when switching from X.org to a VT, and when switching, if the resolution is the same, there's no need to change anything, making possible to do flicker-free graphical boots and fast user switching.

However, trying modesetting in this release is not easy. In the kernel side, only the Intel driver is getting modesetting support in this release (support for other drivers is being worked on and will be merged in future releases). In the X.org side, it's even more difficult. Because when the kernel modesetting support is enabled, it is /!\ REQUIRED /!\ that the X.org driver also has modesetting support. If you enable kernel modesetting and you don't have a modesetting-enabled driver, X.org will NOT be able to work in any way and it even may crash your machine. There's no way to workaround this, except disabling kernel modesetting (running a modesetting enabled X.org driver in a modesetting disabled kernel is allowed). Right now, only the Intel driver seems to have a stable release with modesetting support, alpha support is being worked on for other drivers.

Code: Commit [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f453ba0460742ad027ae0c4c7d61e62817b3e7ef (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=79e539453b34e35f39299a899d263b0a1f1670bd (commit)]

Btrfs

Btrfs is a new filesystem developed from scratch following the design principles of filesystems like ZFS, WAFL, etc. It was created by Chris Mason, an Oracle engineer who worked several years in Reiserfs v3. It is expected to become the replacement of Ext filesystems as the most used Linux filesystems. More information about btrfs can be found in the [http://btrfs.wiki.kernel.org/index.php/Main_Page btrfs wiki page]

Btrfs is under HEAVY development, which means that it is /!\ UNSTABLE /!\ , and while it has got more stable in the latest months you should not assume it's safe to use it. It's getting included in the same way ext4dev was merged to improve the development. So it's strongly recommended not to use it for any other uses than testing, benchmarking and developing. The plan of the btrfs team right now is to make a 1.0 release. The disk format is not expected to change anymore (but it will if a critical bug is found).

Code: [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=fs/btrfs fs/btrfs]

Squashfs

Squashfs is a highly compressed read-only filesystem that is well know for being used in the Live-CDs of the most common Linux distributions and embedded distributions for some routers. It uses zlib compression (lzma will be added in the future) to compress both files, inodes and directories. Inodes in the system are very small and all blocks are packed to minimise data overhead. Block sizes greater than 4K are supported up to a maximum of 1 Mbytes (default block size 128K).

SquashFS 4.0 supports 64 bit filesystems and files (larger than 4GB), full uid/gid information, hard links and timestamps. It is intended for general read-only filesystem use, for archival use (i.e. in cases where a .tar.gz file may be used), and in embedded systems where low overhead is needed. Further information and userspace tools (needed to create the filesystem) are available from http://squashfs.sourceforge.net.

Code: [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=fs/squashfs fs/squashfs]

Support of 4096 CPUs

Recommended article: [http://ozlabs.org/~rusty/index.cgi/2009/01/07#2009-01-07 Fun with cpumasks]

Many parts of the Linux core code support such number of CPUs, but there were problems with the cpumask-specific code, which is the part of the system used to represent all the CPUs in the system. With 4096 CPUs that structure became too big, causing stack overflows, and had some performance problems, which made impossible to default distro kernels to 4096 CPUs, because systems with a lower number of CPUs would have slower performance. The goal with this release has been to be able to support for as many CPUs as possible with no disadvantages for smaller machines. The code been changed to use pointers for that structure instead of using the stack and some scalability problems have been resolved, making possible to run machines with 4096 CPUs and make easier to support even more in the future.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=36f5101a60de8f79c0d1ca06e50660bf5129e02c (commit)]

"Tree RCU": scalable classic RCU

Recommended LWN article: "[http://lwn.net/Articles/305782/ Hierarchical RCU]"

This feature fixes a long-standing performance bug in classic RCU that results in massive internal-to-RCU lock contention on systems with more than a few hundred CPUs - Classic RCU was designed for machines with 16-32 CPUs. "Tree RCU" applies a hierarchy, greatly reducing the contention on the top-level lock for large machines. Although this feature creates a separate flavor of RCU for ease of review and patch maintenance, it is intended to replace classic RCU.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64db4cfff99c04cd5f550357edcc8780f96b54a2 (commit)]

WiMAX

2.6.29 includes support for [http://en.wikipedia.org/wiki/WiMAX WiMAX], a telecommunication technology that provides wireless transmission of data using a variety of transmission modes. It provides up to 75 Mbit/s symmetric broadband speed without the need for cables. The technology is based on the IEEE 802.16 standard (also called Broadband Wireless Access). The stack has been [http://www.linuxwimax.org/ provided by Intel], and it includes a driver for the Intel Wireless WiMAX/Wi-Fi Link 5x50 USB/SDIO devices.

Code: WiMAX stack [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0d695913b0016b362a84a8bb6d6e28f8d90a70e2 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ace22f0881e1333d0c55ddf484e5352fe03a806a 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=60fa9ca6cfff2be4132ea93b7dd632801ec0c817 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ea912f4e7f264981faf8665cfb63d46d7f948117 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=15530dfd330bd19d14e096f88c70355a61fda3f2 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3e65646bb12be03b14dff53907391095a52d5f49 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=617209ccf73b571953cf4c76519c65a5e52d15fd 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b0c83ae1de01880075955c7224e751440688ec74 8)]

Driver: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3e91029ae049852c153da3fc355ab255ea7e2e0a (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ea24652d253eabfb83e955e55ce032228d9d99b9 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=024f7f31ed15c471f80408d8b5045497e27e1135 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ce6cde92803e961d95ddacdf74bd8b067f82f7d4 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=467cc396fb4665957bc7d182c96e45a4d7c575e4 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aa5a7acabe31ec27a212cbd25cad9f72aa476591 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3a35a1d0bdf7cc32cddc234b956605e6d4db4673 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c71228caf91ec6320b489dec5cd0087b64da9fb5 8], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=11a7d0e3140d2f3e8052a856e8582ce9b021972c 9], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f398e4240fce962d0dd74dc11c59fe20860e7a71 10], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a8ebf98f541463107bb9544a1b611981dc2477e7 11], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=795038107b0078ee5ad3ad33327fe1c3520f6bf2 12], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=514ec71f7289c942f801bdbd309428c470bfc071 13], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=17d559af963995e483a51ec26697034431bcf2b9 14], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a0848826bfaf0815ec9654d78c218a40f755ccd4 15], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=020bb6f30b636d563d4268116107d592550ddd0c 16], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=143ee2d5557c0598a97f3089eb29e8226e0e8cee 17)]

Wireless Access Point mode support

The mac80211 wifi stack is now ready to support AP mode. It requires [http://hostap.epitest.fi/hostapd/ hostapd] for management frame processing. Configuring this mode is only allowed through cfg80211 (no iwconfig and/or WEXT).

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fbf189273926d83d71c4c321f1215162569506ac (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f9f88fed3433139b58962011c81597b44fd48458 (commit)]

eCryptfs filename encryption

eCryptfs implements transparent encryption of the contents of a file. In this release, it also can encrypt the file name via a passphrase-derived mount-wide Filename Encryption Key (FNEK) specified as a mount parameter. Each encrypted filename has a fixed prefix indicating that eCryptfs should try to decrypt the filename. When eCryptfs encounters this prefix, it decodes the filename into a tag 70 packet and then decrypts the packet contents using the FNEK, setting the filename to the decrypted filename. Both unencrypted and encrypted filenames can reside in the same lower filesystem. Because filename encryption expands the length of the filename during the encoding stage, eCryptfs will not properly handle filenames that are already near the maximum filename length.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9c79f34f7ee71cd28272332b424ca64b2be006ab (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a34f60f748c6fe5d791e9b54cffe442201428254 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=51ca58dcc9f0d6b1e78954d08bd4954fb6a1421c 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=addd65ad8d19a7d7982130b16f957d5d01d3f8df 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=87c94c4df0149786ad91d8a03c738a03369ee9c8 5)]

Filesystem freeze

Recommended LWN article: "[http://lwn.net/Articles/287435/ Freezing filesystems and containers]"

Linux doesn't have a freeze feature which suspends write requests. So, it's not possible to take a backup which keeps the filesystem's consistency with the storage device's features (snapshot and replication) while it is mounted. Many commercial filesystems (e.g. VxFS) have the freeze feature and it would be used to get the consistent backup. This feature implements the ioctls of the freeze feature.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c4be0c1dc4cdc37b175579be1460f15ac6495e9a (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fcccf502540e3d752d33b2d8e976034dee81f9f7 (commit)]

Memory controller swap management and other improvements

This feature adds a swap management feature to memory resource controller. Previously, the memory controller couldn't control the swap used by the tasks in a cgroup, allowing a single process to exhaust all of the swap. Now, you can limit mem+swap usage per cgroup. However, it adds some overhead and memory consumption, so it's configurable.

Another features added to the memory controller in this release are hierarchy support, per-cgroup swappiness, improved per-cgroup reclaim stats and better oom handling.

Code: Swap management [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d13d144309d2e5a3e6ad978b16c1d0226ddc9231 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c077719be8e9e6b55702117513d1b5f41d80404a (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=27a7faa0779dd13729196c1a818c294f44bbd1ee (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8c7c6e34a1256a5082d38c8e9bd1474476912715 (commit)]; hierarchy [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=52bc0d82100cd896213a9a25ec01c1ba87b939db (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6d61ef409d6ba168972f7c2f8c35baaade636a58 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=28dbc4b6a01fb579a9441c7b81e3d3413dc452df (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=18f59ea7de08db2449ba99185e8d8cc30e7acac5 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fee7b548e6f2bd4bfd03a1a45d3afd593de7d5e9 (commit)], swappiness [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a7885eb8ad465ec9db99ac5b5e6680f0ca8e11c8 (commit)], reclaim stats [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7f016ee8b6a9a43f768e6252021f169abec4fa1f (commit)], oom-killer [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a636b327f731143ccc544b966cfd8de6cb6d72c6 (commit)]

Ext4 no journal mode

Since Ext3 was born, there was people that never wanted to use journaling, for various reasons. In this release, Ext4 adds support for a mode that doesn't use journaling. The result is a small performance increase (see the commit link for benchmark data) compared with Ext4, but it is also a noticeable improvement over Ext2.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0390131ba84fd3f726f9e24fc4553828125700bb (commit)]

OCFS2 metadata checksums

OCFS2 (a clustered filesystem) now uses metadata checksums to check the integrity of the metadata.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ab552d54673f262d7f70014003d3928d29270f22 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=70ad1ba7b48364d758a112df0823edc5ca6632aa 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=684ef278377725d505aa23259ee673dab9b11851 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d6b32bbb3eae3fb787f1c33bf9f767ca1ddeb208 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4d0e214ee83185fcaa2cb97cd026d32bdc5c994a 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c175a518b4a1d514483abf61813ce5d855917164 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d030cc978e9e636dc39ce9a9e8282d48698a3b30 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9d28cfb73f3abccce001daf2d247b16bf20e2248 8)]

Staging drivers

New drivers were added to the staging/ directory (which means they're not just experimental, but also totally unstable and not suited at all for users)

Tuz replaces Tux for this release

LWN article: “[http://lwn.net/Articles/323966/ The kernel gets a new logo]”

The emblematic Tux mascot is replaced, for the 2.6.29 release, by [http://tassiedevil.com.au/images/Linux_Tuz.jpg Tuz], a disguised Tasmanian Devil. This logo change is a support for this endangered species. [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8032b526d1a3bd91ad633dd3a3b5fdbc47ad54f1 (commit)]

Various core changes

Wi-Fi

Security

Networking

Tracing

Filesystems

Crypto

DM/MD

Virtualization

Architecture-specific changes

Drivers

Storage

Graphics

Network

Input

Sound

V4L/DVB

USB

HWMON

Watchdog

RTC

HID

MTD

MFD

Power

Serial

Various

Other sources about 2.6.29 kernel


KernelNewbies: Linux_2_6_29 (last edited 2009-03-24 05:51:56 by c-71-235-200-84)