KernelNewbies:

WARNING: This document may not be completely finished at the time of the release. Sorry. You can look at the LWN list of 2.6.25 features ([http://lwn.net/Articles/266721 1], [http://lwn.net/Articles/267849/ 2], and [http://lwn.net/Articles/268923/ 3])

Linux kernel version 2.6.25 Released ([http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.25 full SCM git log])

TableOfContents()

1. Short overview (for news sites, etc)

2. Important things (AKA: the cool stuff)

2.1. RCU Preempt support

Recommended LWN article: [http://lwn.net/Articles/253651/ "The design of preemptible read-copy-update"]

[http://en.wikipedia.org/wiki/Read-copy-update RCU] is a very powerful locking scheme used in Linux to scale to [http://lkml.org/lkml/2007/5/4/314 very large] number of CPUs on a single system. However, it wasn't well suited for the Real Time patchsets that have been developed to make Linux a RT OS, because some parts weren't preemptible, causing latencies too big for RT workloads. In 2.6.25, RCU can be preempted, eliminating that source of latencies and making Linux a bit more RT-ish.

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

2.2. FIFO ticket spinlocks

Recommended article: [http://lwn.net/Articles/267968/ "Ticket spinlocks"]

In certain workloads, spinlocks can be unfair, ie: a process spinning on a spinlock can be starved up to 1.000.000 times. Usually starvation in spinlocks is not a problem, because it becomes a performance problem before any starvation is noticed, but testing has showed the contrary. And it's always possible to find a obscure corner case that will generate a lot of contention on some lock, and the processor that will grab the lock does it randomly. With the new spinlocks, the processes grab the spinlock in FIFO order. Spinlocks configured to run in more than 255 CPUs will also use a 32-bit value (instead of the 16 bits used when NR_CPUS < 255) that allows a theorical limit of up to 65536 processors.

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

2.3. Better process memory usage measurement

Recommended LWN article: [http://lwn.net/Articles/230975/ "How much memory are applications really using?"]

Measuring how much memory processes are using is more difficult that it looks, specially when processes are sharing the memory used. Features like /proc/$PID/smaps (added in [http://kernelnewbies.org/Linux_2_6_14 2.6.14]) help, but it has not been enough. 2.6.25 adds new statistics to make this task easier. A new /proc/$PID/pagemaps file is added for each process. In this file the kernel exports (in binary format) the physical page localization for each page used by the process. Comparing this file with the files of other processes allows to know what pages they are sharing. Another file, /proc/kpagemaps exposes another kind of statistics about the pages of the system. The author of the patch, Matt Mackall, proposes two new statistic metrics: "proportional set size" (PSS) - divide each shared page by the number of processes sharing it; and "unique set size" (USS) (counting of pages not shared). The first statistic, PSS, has also been added to each file in /proc/$PID/smaps. In [http://selenic.com/repo/pagemap/ this HG repository] you can find some sample command line and graphic tools that exploits all those statistics.

[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1e88328111aae3ea408f346763ba9f9bad71f876 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=304daa8132a95e998b6716d4b7bd8bd76aa152b2 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=161f47bf41c5ece90ac53cbb6a4cb9bf74ce0ef6 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=85863e475e59afb027b0113290e3796ee6020b7d 4])

2.4. EXT4 update

Recommended article: [http://lwn.net/Articles/266274/ "A better ext4"]

EXT4 mainline snapshot gets an update with a bunch of features: Multi-block allocation, large blocksize up to PAGEZIZE, journal checksumming, large file and filesystem support, inode versioning and allow in-inode extended attributes on the root inode. These features should be the last ones that require on-disk format changes. Other features that don't affect the disk format, like delayed allocation, have still to be merged.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c9de560ded61faa5b754137b7753da252391c55a (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0040d9875dcccfcb2131417b10fbd9841bc5f05b 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0fc1b451471dfc3cabd6e99ef441df9804616e63 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c14c6fd5c56a0d0495d8a7c0f2bc330be658663e 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=25ec56b518257a56d2ff41a941d288e4b5ff9488 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=725d26d3f09ccb5bac4b4293096b985a312a0d67 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7a224228ed79d587ece2304869000aad1b8e97dd 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8180a5627d126362c2f64e4fa886d6f608d9632a 8], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=818d276ceb83aa9fdebb5e0a53188290312de987 9], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8e85fb3f305b24b79c6d9cb7a56d22b062335ad3 10], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=afc7cbca5bfd556c3e12d3acefbee5ab0cbd4670 11)]

3. Subsystems

3.1. Filesystems

3.2. Networking

3.3. Crypto

3.4. Architecture-specific changes

4. Drivers

4.1. Graphics

4.2. SATA/IDE

4.3. Sound

4.4. SCSI

4.5. V4L/DVB

4.6. I2C

4.7. HID

KernelNewbies: Linux_2_6_25 (last edited 2008-03-26 15:41:21 by 87-194-80-48)