KernelNewbies:

Linux 2.6.28 kernel released on 25 December, 2008.

Summary: Linux 2.6.28 adds the first version of [http://kernelnewbies.org/Ext4 Ext4] as a stable filesystem, the much-expected GPU memory manager which will be the foundation of a renewed graphic stack, support for Ultra Wide Band (Wireless USB, UWB-IP), memory management scalability and performance improvements, a boot tracer, disk shock protection, the phonet network protocol, support of SSD discard requests, transparent proxy support, several new network drivers, controlable IO CPU affinity, high-resolution poll()/select(), support of a minimal "dummy" policy in SELinux, tracing improvements, x86 x2APIC support, a fb driver for VIA UniChrome devices, Mitac Mio A701 ARM-based smartphone support, some new drivers, improved device support, and many other small improvements and fixes.

TableOfContents()

1. Prominent features (the cool stuff)

1.1. Ext4

The backwards-compatible replacement of Ext3 has been declared as stable. Bigger filesystem/file sizes, extents, delayed allocation, multiblock allocation, improved block allocation algoritms, faster fsck, online defragmentation and faster and more robust journaling are the main features of this filesystem.

A separate article has been written about Ext4: [http://kernelnewbies.org/Ext4 Ext4, the Fourth Extended File System]

1.2. The GEM Memory Manager for GPU memory

Recommended article: A description of all the parts involved in the new graphics stack: [http://www.rojtberg.net/67/exa-uxa-dri-gem-ttm/ "EXA, UXA, DRI, GEM, TTM"]

Recommended articles about GEM: [http://lwn.net/Articles/283793/ "Memory management for graphics processors"] and [http://lwn.net/Articles/257417/ "GEM v. TTM"]

In the last decade graphics hardware has evolved at an astounding pace, and it's expected to improve even more in the future. Modern GPUs have a lot of processing power -more than the most powerful CPU in some specialized workloads- that traditionally has only been used by specialized applications using opengl/directx, like games and 3D design apps; the 2D desktop implementations that are commonly found in computers kept using this modern graphic hardware in the same way they used the old graphics hardware which started the "desktop revolution" in the 80-90's, ie. inefficiently. There's a lot of GPU power that don't get used unless you run a game. On the other hand, the Linux/FOSS graphic stack is far from perfect, even for the traditional graphic stack design. To start with, there're several drivers fighting to access the same resource (the graphics card): The fb-based console, the in-kernel DRM driver, the X.org userspace 2D driver...this situation leads to all class of problems and artifacts and suboptimal performance.

There has been a lot of work in the latest years to modernize the Linux graphics stack so that it's both well designed and also ready to use the full power of modern and future GPUs. In 2.6.28, Linux is adding one of the most important pieces of the stack: A memory manager for the GPU memory, called GEM ("Graphic Execution Manager"). The purpose is to have a central manager for buffer object placement, caching, mapping and synchronization. On top of GEM are being built a lot of improvementes to the graphic stack: Kernel Modesetting, [http://www.x.org/wiki/DRI2 DRI2], UXA (a EXA implementation based in GEM). The Linux/FOSS graphics stack will be finally unified and optimally coupled.

All this new code has been delayed for a long time, because there was a competing memory manager, called TTM, which was almost merged in the kernel in 2.6.24 or so, until the Intel people came up with the first versions of the GEM memory manager. People decided it was better than TTM, and it was considered neccesary to delay the merge to stabilize GEM and rewrite the other features to work with GEM, not TTM. Hence, this first version of GEM works only with the i915 driver, and support on the X.org side is implemented only in the version 2.5.0 of the driver. Preliminary GEM support for other drivers is already in development and will be merged in future releases.

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

1.3. Support for "Ultra Wide Band" (UWB), Wireless USB and UWB-IP

"Ultra Wide Band" (UWB) is a high-bandwidth, low-power, point-to-point radio technology using a wide spectrum (3.1-10.6GHz). It is optimized for in-room use (480Mbps at 2 meters, 110Mbps at 10m). It serves as the transport layer for other protocols, such as Wireless USB, WiMedia Link Protocol (Ethernet/IP over UWB) and, in the future, Bluetooth and 1394. Linux 2.6.28 adds code to implement a Ultra Wide Band stack, as well as drivers for the the USB based UWB radio controllers defined in the Wireless USB 1.0 specification (including Wireless USB host controller and an Intel WiNET controller).

UWB: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=99d368bc9e279a2a5e56f3afe32166260e90caa7 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=34e95e41f1fd751e33a7eb3fa66594903b81f13d 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=183b9b592a622a7719ee38e275fd7ff3aaf74d0d 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0612edfd95ffe92201a2267e9e1b0fc68becf76d 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=22d203ecef9b0cc1fa8d8f64c935b451ca7d1022 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8cc13a09474bb30d15dbf449767bb6d0198a8bf8 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=599e8d80a2cdf4f65fc49b31b27a49235c78acfe 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2f86c3e67d6423d6d23ee2f737ad4f0730435742 8], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=da389eac31be24556a71dd59ea6539ae4cba5c15 9], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8f1b678ab900c2bda1620dfb6e1f1f02604fc3a2 10], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b6e069830c5927fd4d5fce67cb6440fddd10d429 11], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=de520b8bd5525d33e6a6f36b297836125736bd2a 12], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1ba47da527121ff704f4e9f27a12c9f32db05022 13], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a21b963aa4a98c645b1fa3799f2e4a6ebb6c974a 14)], WLP: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f51448543f8e4871f0539435fce42a14044f5652 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e377e9d32d4945fe6a14775b3a4d9ecd1462e36a 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2f19204480f16a20d8571a97c13f0cec2968607c 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3b0c5a3818555988b6235144e0174b1a512719b7 4)], WUSB: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c7f736484f8ecde4dc1bc8459179c4d65f2ccbe4 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=90ff96f22426a9d1a06df97dead0a9098facb567 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b69fada68b92fa7061d59a3e54b428759a5e5717 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d59db761b8559f07a7161ca3387d6c6949667ede 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=470cc4150367d369bdc98ee04902b04baa2b2464 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=870d5395045bfe8e5213525152682c863a10f8d2 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7e6133aa42920ea87ad9791a0fb2b95d1a23b8f9 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=df3654236e31f6cf425ed2ee5a74ceac366a7a9e 8], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d09318b8ab2eabb65b6fa0dc04dab1822846eabb 9)]

1.4. Memory management Scalability improvements

Improvements to the page replacement algorithm

Recommended LWN article: [http://lwn.net/Articles/286472/ The state of the pageout scalability patches]

Systems with a lot of memory have lots (millions) of pages. When the replacement algorithm has to search candidate pages to be swapped, it has to search between all the pages, and in big systems this can take too much time. In 2.6.28, the file-backed pages (pages that belong to some file on the disk) and the anonymous pages (pages that are not part of any file, like ie. pages obtained with malloc, which need to be written to swap before being evicted) are put in two different lists, unlike previous releases, that used a single list. The algorithms can decide to look into only one of those lists without needing to look in the other. Additionally, there're pages that cannot be deleted from memory, for example because they're mlock()'ed, or because they belong to a ramfs filesystem. Those pages are put into a special third list, which won't be searched at all by the algorithms because they can not be evicted.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=62695a84eb8f2e718bf4dfb21700afaa7a08e0ea (commit 1],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b69408e88bd86b98feb7b9a38fd865e1ddb29827 2],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f04e9ebbe4909f9a41efd55149bc353299f4e83b 3],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=68a22394c286a2daf06ee8d65d8835f738faefa5 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b2e185384f534781fd22f5ce170b2ad26f97df70 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4f98a2fee8acdb4ac84545df98cccecfd130f8db 6],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=556adecba110bf5f1db6c6b56416cfab5bcab698 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7e9cd484204f9e5b316ed35b241abf088d76e0af 8], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c5fdae469a6a26cd882d7fe0aa3fbfffb6b72fc5 9],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=33c120ed2843090e2bd316de1588b8bf8b96cbde 10],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8a7a8544a4f6554ec2d8048ac9f9672f442db5a2 11],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=894bc310419ac95f4fa4142dc364401a7e607f65 12], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bbfd28eee9fbd73e780b19beb3dc562befbb94fa 13],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7b854121eb3e5ba0241882ff939e2c485228c9c5 14], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ba9ddf49391645e6bb93219131a40446538a5e76 15], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=89e004ea55abe201b29e2d6e35124101f1288ef7 16], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b291f000393f5a0b679012b39d79fbc85c018233 17], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fa07e787733416c42938a310a8e717295934e33c 18], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8edb08caf68184fb170f4f69c7445929e199eaea 19], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ba470de43188cdbff795b5da43a1474523c6c2fb 20], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5344b7e648980cc2ca613ec03a56a8222ff48820 21], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64d6519dda3905dfb94d3f93c07c5f263f41813f 22], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=af936a1606246a10c145feac3770f6287f483f02 23],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=985737cf2ea096ea946aed82c7484d40defc71a8 24], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e0f79b8f1f3394bb344b7b83d6f121ac2af327de 25)]

Rewrite the vmap layer

Recommended LWN article: [http://lwn.net/Articles/304188/ Reworking vmap()]

In 2.6.28, the vmap allocator has been rewritten to use rbtrees and lazy tlb flushing, and provide a fast, scalable percpu frontend for small vmaps. Some benchmarks that exercize the vmap layer have been speeded up by 20x or more.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f45840b5c128445da70e7ec33adc47b4a12bdaf4 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a978d6f521063514812a7094dbe5036e056e4de3 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8413ac9d8c9a1366a4f57880723126cd24e5a5c3 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=51b07fc3c5c830bb49c80fc5eac041e1f66a72e7 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e78bbfa8262424417a29349a8064a535053912b9 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=db64fe02258f1507e13fe5212a989922323685ce 6)]

1.5. Container freezer

[http://lwn.net/Articles/287435/ Freezing filesystems and containers]

The container freezer is a cgroup subsystem that utilizes the swsusp freezer to freeze and restart a arbitrary group of tasks determined by the user. It's immediately useful for batch job management scripts. It should also be useful in the future for implementing container checkpoint/restart. For more details on to how to use it, see the commit links.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=83224b08372be48d5fcefedc4886457da29130c8 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bde5ab65581a63e9f4f4bacfae8f201d04d25bed 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=dc52ddc0e6f45b04780b26fc0813509f8e798c42 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=81dcf33c2ae314899f754aa7aaa1cb1fe2f84da6 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8174f1503f4bf7e9a14b3fbbfdb30c6be6e29f77 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=957a4eeaf4af614ab0fc4c09a22593d6ab233f5b 6][http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1aece34833721d64eb33fc15cd923c727296d3d3 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5a06915c6df9b89cda5ddb3f8cce5f9a6be534d2 8)]

1.6. Boot tracer

The purpose of this tracer is to helps developers to optimize boot times: it records the timings of the initcalls. Its aim is to be parsed by the scripts/bootgraph.pl tool to produce graphics about boot inefficiencies, giving a visual representation of the delays during initcalls. Users need to enable CONFIG_BOOT_TRACER, boot with the "initcall_debug" and "printk.time=1" parameters, and run "dmesg | perl scripts/bootgraph.pl > output.svg" to generate the final data.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aa5d9151f745b6ee6a236a1f109118034277eb92 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d13744cd6e3fef373a3fe656ac349b4e7c49ff79 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b5ad384e79add1d87fff54070000dadcf218ffab 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1f5c2abbdeb2bb07b20c6a66bfecefe6c867b1ee 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3bf77af6e1fef1124bf71d81f9f84885f0ee0dea 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3ce2b9200da8b7170cc7463b7ee4212fad7b291e 6)]

1.7. Disk Shock Protection

ATA/ATAPI-7 specifies the IDLE IMMEDIATE command with unload feature. Issuing this command should cause the drive to switch to idle mode and unload disk heads. This feature is being used in modern laptops in conjunction with accelerometers and appropriate software to implement a shock protection facility. The idea is to stop all I/O operations on the internal hard drive and park its heads on the ramp when critical situations are anticipated.

For each ATA device, Linux 2.6.28 adds the file /sys/block/*/device/unload_heads. Writing an integer value to this file will take the heads of the respective drive off the platter and defer all I/O operations for the specified number of milliseconds. When the timeout expires normal operation will be resumed. The maximal value accepted for a timeout is 30000 milliseconds. However, there are some hard drives that only comply with an earlier version of the ATA standard, but do support the feature nonetheless. Unfortunately, there is no safe way Linux can detect these devices, so you won't be able to write to the unload_heads attribute. If you know that your device really does support the unload feature (for instance, because the vendor of your laptop or the hard drive itself told you so), then you can tell the kernel to enable the usage of this feature for that drive by writing the special value -1 to the unload_heads attribute. See [http://www.thinkwiki.org/wiki/HDAPS this page] for information about Linux support of the hard disk active protection system as implemented in IBM/Lenovo Thinkpads.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=45fabbb77bd95adff7a80bde1c7a0ace1075fde6 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4abdc6ee7c47a1a6e12f95717e461baeebee5df7 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9c6102d446985bca9c426cb2d9b478ed21d2b024 (commit)]

1.8. Phonet Network Protocol

The Phone Network protocol (PhoNet) is a packet-oriented communication protocol developped by Nokia for use with its cellular modems for both IPC and RPC. With the Linux Phonet socket family, Linux host processes can receive and send messages from/to the modem, or any other external device attached to the modem; the modem takes care of routing. Phonet packets can be exchanged through various hardware connections depending on the device, such as: USB with the CDC Phonet interface, infrared, Bluetooth, a serial port. This is required for Maemo to use cellular data connectivity (if supported), it can also be used to control Nokia phones.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bce7b15426cac3000bf6a9cf59d9356ef0be2dec (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4b07b3f69a8471cdc142c51461a331226fef248a 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8ead536dec142f27d5b5f72c3994eb39f4741717 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f8ff60283de2b6775d7a14619056a08e3083bd40 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8fb397406f6470f79040c41eec49af20900a9e3b 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ba113a94b7503ee23ffe819e7045134b0c1d31de 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=107d0d9b8d9a236883db72841fb61cedd5be845e 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5f77076d75d35c9f5619e1f9d7e7428a627f65e6 8], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=87ab4e20b445c6d2d2727ab4f96fa17f7259511e 9], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=be0c52bfed7f7828494fa00060efd5d758e92580 10], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=953f551756a1275d9bfdbb70697323449305161a 11], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9641458d3ec42def729fde64669abf07f3220cd5 12], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c41bd97f815720f9404f97da0c4f4400b52c243d 13], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=02a47617cdce440f60c71a51f3a93f9f5fcc5a7a 14], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=95430c0b140c31cb9e39f876afe1c0e9947d1aaf 15)]

1.9. Network: Transparent proxying, new drivers, DSA...

1.10. Tracepoints

[http://lwn.net/Articles/291091/ Tracing: no shortage of options] Tracepoints are another mechanism for inserting static tracing points in the kernel, used by tools like LTTng (Linux Trace Toolkit). There's already a mechanism to insert such points: kernel markers, merged in [http://kernelnewbies.org/Linux_2_6_24 Linux 2.6.24], but tracepoints are slightly different (see the LWN article). The scheduler has been instrumentalized with tracepoints, and ftrace has been ported to use them.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=97e1c18e8d17bd87e1e383b2e9d9fc740332c8e2 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=24b8d831d56aac7907752d22d2aba5d8127db6f6 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4a0897526bbc5c6ac0df80b16b8c60339e717ae2 3],[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0a16b6075843325dc402edf80c1662838b929aff 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b07c3f193a8074aa4afe43cfa8ae38ec4c7ccfa9 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fa340d9c050e78fb21a142b617304214ae5e0c2d 6)]

1.11. -staging drivers

Recommended article: [http://lwn.net/Articles/301192/ Moving the -staging tree]

There's a controversy in the kernel community between the people who wants to see new drivers getting merged in the main Linux tree as soon as possible, and people who thinks that before being merged they must have good quality. The -staging tree has been created to get those out-of-the-tree drivers that don't have the required level into the drivers/staging directory.

1.12. IO CPU affinity

2.6.28 add support for controlling the IO completion CPU of either all requests on a queue, or on a per-request basis. A sysfs variable (rq_affinity) is exported which, if set, migrates completions of requests to the CPU that originally submitted it. A internal bio helper (bio_set_completion_cpu()) is also added, so that queuers can ask for completion on that specific CPU. In testing, this has been show to cut the system time by as much as 20-40% on synthetic workloads where CPU affinity is desired.

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

1.13. FIEMAP

Recommended LWN article: [http://lwn.net/Articles/260795/ SEEK_HOLE or FIEMAP?]

When an application wants to know how a file is store in the disk (for example, a backup application that wants to know if a file is a sparse file and wants to avoid backing up the hole) it uses the fibmap ioctl. But this ioctl is suboptimal - the ioctl can only be asked for a block at a time, which is too expensive for big files. The FIEMAP ioctl, in the other hand, returns a list of extents.

Code: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c4b929b85bdb64afacbbf6453b1f2bf7e14c9e89 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=68c9d702bb72f367f3b148963ec6cf5e07ff7f65 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6873fa0de14e49c433f1f181c54e511f4f3d459d 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=00dc417fa3e763345b34ccb6034d72de76eea0a1 4)]

2. Various core

3. Filesystems

4. Networking

5. Security

6. Tracing/Profiling

7. Block

Recommended LWN articles: [http://lwn.net/Articles/303270/ Block layer: solid-state storage, timeouts, affinity, and more], and [http://lwn.net/Articles/293658/ Block layer discard requests]

8. Crypto

9. WIFI

10. Architecture-specific changes

11. Drivers

11.1. Graphics

11.2. Storage

11.3. Network

11.4. Input

11.5. USB

11.6. Sound

11.7. V4L/DVB

11.8. HID

11.9. HWMON

11.10. I2C

11.11. Multi-Function Devices

11.12. MTD

11.13. RTC

11.14. WATCHDOG

11.15. LED

11.16. ACPI

11.17. Various

11.18. Other sources tracking the kernel changes


KernelNewbies: Linux_2_6_28 (last edited 2008-12-26 11:19:58 by StefanR)