KernelNewbies:

Linux 2.6.36

Summary: Linux 2.6.36 includes support for the [http://en.wikipedia.org/wiki/TILE64 Tilera architecture], a new filesystem notification interface called fanotify, a redesign of workqueues optimized for concurrency, CIFS local caching, support for Intel Intelligent Power Sharing in i3/5 systems, integration of the kernel debugger and KMS, inclusion of the AppArmor security system, fixes for desktop unresponsiveness in some cases and several new drivers and small improvements.

(Note: Details on architecture-specific and driver changes have been moved to this page: ["Linux_2_6_36-DriversArch"])

TableOfContents()

1. Prominent features (the cool stuff)

1.1. Tilera architecture support

The [http://en.wikipedia.org/wiki/TILE64 Tile processor] is a new cpu manufactured by [http://www.tilera.com/ Tilera Corporation]. It's a multicore design intended to scale to hundreds of cores on a single chip. The goal is to provide a high-performance CPU, with good power efficiency, and with greater flexibility than special-purpose processors such as DSPs. The chip consists of a mesh network of 64 "tiles", where each tile houses a general purpose processor, cache, and a non-blocking router, which the tile uses to communicate with the other tiles on the processor.

Code: [http://git.kernel.org/linus/867e359b97c970a60626d5d76bbe2a8fadbf38fb (commit)], [http://git.kernel.org/linus/9f9c0382cda2334b35b40b00f4ed9d6f89f37a7b (commit)]

1.2. Preliminary merge of fanotify, a new file notification interface

Recommended LWN article: [http://lwn.net/Articles/360955/ Another new ABI for fanotify]

(Note: the fanotify syscalls are disabled in this release because developers still don't agree with the API)

Fnotify is yet another filesystem notification interface, intended to supersede [http://kernelnewbies.org/Linux_2_6_13 inotify] and, obviously, dnotify (both have been rewritten on top of the fanotify engine). Fanotify bases notification on giving userspace both an event type (open, close, read, write) and an open read-only file descriptor to the object in question. This should address a number of races and scalability problems with inotify and dnotify and allows blocking or access controlled notification.

A code example can be found in [http://git.kernel.org/?p=linux/kernel/git/agruen/fanotify-example.git;a=summary this git repository]. A description of the API can be found in the LWN article linked above and in the logs of the code commits.

Code: Far too many commits, but these ones have useful changelogs [http://git.kernel.org/linus/ff0b16a9850e8a240ad59e10b0a1291a8fcf7cbc (commit 1], [http://git.kernel.org/linus/11637e4b7dc098e9a863f0a619d55ebc60f5949e 2], [http://git.kernel.org/linus/52c923dd079df49f58016a9e56df184b132611d6 3], [http://git.kernel.org/linus/bbaa4168b2d2d8cc674e6d35806e8426aef464b8 4], [http://git.kernel.org/linus/2a3edf86040a7e15684525a2aadc29f532c51325 5], [http://git.kernel.org/linus/9e66e4233db9c7e31e9ee706be2c9ddd54cf99b3 6], [http://git.kernel.org/linus/b2d879096ac799722e6017ee82c0586f0d101c9c 7)]

1.3. KMS+KDB integration

In this release, it will be possible to activate the KDB kernel debugger (merged in the [http://kernelnewbies.org/Linux_2_6_35#head-01683c6bbfcd2a93c556192e3c9d6734b20da1cd previous kernel release]) while using your X.org desktop session. Pressing Sysrq-g will show the KDB console, and quitting KDB (using the "go" command) will return to your desktop again.

The KMS + KDB integration is only implemented for Intel chips, other chips will follow in the future. Instructions on how to compile the kernel to enable this functionality can be [http://virtuousgeek.org/blog/index.php/jbarnes/2010/08/02/using_kdb_on_kms found here].

Code: [http://git.kernel.org/linus/81d4450732c68aa728f2c86c0c2993c6cfc3d032 (commit 1], [http://git.kernel.org/linus/b45cfba4e9005d64d419718e7ff7f7cab44c1994 2], [http://git.kernel.org/linus/1a7aba7f4e45014c5a4741164b1ecb4ffe616fb7 3], [http://git.kernel.org/linus/d219adc1228a3887486b58a430e736b0831f192c 4], [http://git.kernel.org/linus/408a4be1f8cbee511895ee07da2a007a5a24303f 5], [http://git.kernel.org/linus/81255565dbf5958187bdb6cc4e3aa0db9ce4d237 6)]

1.4. Concurrency-managed workqueues

Recommended LWN articles: [http://lwn.net/Articles/355700/ Concurrency-managed workqueues] and [http://lwn.net/Articles/403891/ Working on workqueues]

Workqueues are a "thread pool" that are used extensively across the kernel. This mechanism allows to queue calls to kernel functions to be run in the future. These queues can be run from a generic kernel thread dedicated to that function (that's what the "event/n" kernel processes are for), but it's also possible to create a dedicated kernel thread for a given driver of subsystem workqueue (that's what many of the other kernel threads are). The problem with this implementation is that the total number of kernel threads being used to run workqueues, and the queues being run on them, is not controlled in anyway. If there are more workqueues than CPUs being used at a given time, the kernel threads will compete (and context-switch heavily) between them.

In this version, workqueues have been reworked to add a true thread pool manager. There are not dedicated threads anymore (expect for the code that has not been converted to the new API), instead there is a pool of kernel threads that grows dynamically as needed to keep the system busy, depending on the number of queues accumulated. The new design is also able to replace the slow-work code (another thread pool used to run a certain kind of operations that traditional workqueues weren't able to run properly)

Code: [http://git.kernel.org/linus/b56c0d8937e665a27d90517ee7a746d0aa05af46 1], [http://git.kernel.org/linus/7bc465605ffa90b281d6b774fcb13911636a6d45 2], [http://git.kernel.org/linus/8fec62b2d9d0c80b594d0d85678bfdf57a70df1b 3], [http://git.kernel.org/linus/82805ab77d25643f579d90397dcd34f05d1b750a 4], [http://git.kernel.org/linus/c790bce0481857412c964c5e9d46d56e41c4b051 5], [http://git.kernel.org/linus/97e37d7b9e65a6ac939f796f91081135b7a08acc 6], [http://git.kernel.org/linus/4690c4ab56c71919893ca25252f2dd65b58188c7 7], [http://git.kernel.org/linus/22df02bb3fab24af97bff4c69cc6fd8529fc66fe 8], [http://git.kernel.org/linus/a62428c0ae54a39e411251e836c3fe3dc11a5f5f 9], [http://git.kernel.org/linus/64166699752006f1a23a9cf7c96ae36654ccfc2c 10], [http://git.kernel.org/linus/1537663f5763892cacf1409ac0efef1b4f332d1e 11], [http://git.kernel.org/linus/0f900049cbe2767d47c2a62b54f0e822e1d66840 12], [http://git.kernel.org/linus/c34056a3fdde777c079cc8a70785c2602f2586cb 13], [http://git.kernel.org/linus/73f53c4aa732eced5fcb1844d3d452c30905f20f 14], [http://git.kernel.org/linus/1e19ffc63dbbaea7a7d1c63d99c38d3e5a4c7edf 15], [http://git.kernel.org/linus/affee4b294a0fc97d67c8a77dc080c4dd262a79e 16], [http://git.kernel.org/linus/a0a1a5fd4fb15ec61117c759fe9f5c16c53d9e9c 17], [http://git.kernel.org/linus/8b03ae3cde59af9facab7c831b4141515d5dbcc8 18], [http://git.kernel.org/linus/c8e55f360210c1bc49bea5d62bc3939b7ee13483 19], [http://git.kernel.org/linus/db7bccf45cb87522096b8f43144e31ca605a9f24 20], [http://git.kernel.org/linus/8cca0eea3964b72b14e8c3f88e3a40bef7b9113e 21], [http://git.kernel.org/linus/502ca9d819792e7d79b6e002afe9094c641fe410 22], [http://git.kernel.org/linus/7a22ad757ec75186ad43a5b4670fa7423ee8f480 23], [http://git.kernel.org/linus/18aa9effad4adb2c1efe123af4eb24fec9f59b30 24], [http://git.kernel.org/linus/d302f0178223802a1e496ba90c66193b7721c9c1 25], [http://git.kernel.org/linus/7e11629d0efec829cbf62366143ba1081944a70e 26], [http://git.kernel.org/linus/e22bee782b3b00bd4534ae9b1c5fb2e8e6573c5c 27], [http://git.kernel.org/linus/b71ab8c2025caef8db719aa41af0ed735dc543cd 28], [http://git.kernel.org/linus/d320c03830b17af64e4547075003b1eeb274bc6c 29], [http://git.kernel.org/linus/649027d73a6309ac34dc2886362e662bd73456dc 30], [http://git.kernel.org/linus/dcd989cb73ab0f7b722d64ab6516f101d9f43f88 31], [http://git.kernel.org/linus/fb0e7beb5c1b6fb4da786ba709d7138373d5fb22 32], [http://git.kernel.org/linus/ad72cf9885c536e3adae03f8337557ac9dd1e4bb 33], [http://git.kernel.org/linus/bdbc5dd7de5d07d6c9d3536e598956165a031d4c 34], [http://git.kernel.org/linus/f34217977d717385a3e9fd7018ac39fade3964c0 35], [http://git.kernel.org/linus/083b804c4d3e1e3d0eace56bdbc0f674946d2847 36], [http://git.kernel.org/linus/c7fc77f78f16d138ca997ce096a62f46e2e9420a 37], [http://git.kernel.org/linus/8b8edefa2fffbff97f9eec8b70e78ae23abad1a0 38], [http://git.kernel.org/linus/8af7c12436803291c90295259db23d371a7ad9cc 39], [http://git.kernel.org/linus/9b646972467fb5fdc677f9e4251875db20bdbb64 40], [http://git.kernel.org/linus/d098adfb7d281258173a43151483e52e21761021 41], [http://git.kernel.org/linus/991ea75cb1df7188d209274b3d51c105b4f18ffe 42], [http://git.kernel.org/linus/6ecd7c2dd9f5dd4f6e8f65c8027159f9c73b0e4c 43], [http://git.kernel.org/linus/181a51f6e040d0ac006d6adaf4a031ffa440f41c 44]

1.5. Intel Intelligent Power Sharing support

Intel Core i3/5 platforms with integrated graphics support dynamic power sharing between the CPU and GPU, maximizing performance in a given TDP. A new driver driver, along with the CPU frequency and i915 drivers, provides that functionality. It monitorizes the GPU power and temperature and coordinate with a core thermal driver to take advantage of available thermal and power headroom in the package.

Code: [http://git.kernel.org/linus/aa7ffc01d254c91a36bf854d57a14049c6134c72 (commit)]

1.6. CIFS local caching

FS-Cache is a cache layer that allows filesystems to implement local caching. It was [http://kernelnewbies.org/Linux_2_6_30#head-a29350000cec3a460e9f2af6360324670faf14b2 merged in 2.6.30] with support for NFS and AFS. In this release, CIFS adds FS-Cache support.

Code: [http://git.kernel.org/linus/fa1df75d4debde6d843e616df656f50a92958737 (commit)]

There are some cases where a desktop system could be really unresponsive while doing things such as writing to a very slow USB storage device and some memory pressure. This release includes a small patch that improves the VM heuristics to solve this problem.

Code: [http://git.kernel.org/linus/e31f3698cd3499e676f6b0ea12e3528f569c4fa3 (commit)]

1.8. OOM rewrite

Recommended LWN article: [http://lwn.net/Articles/391222/ Another OOM killer rewrite]

The Out of Memory Killer is the part of the VM that kills a process when there's no memory (both RAM and swap) left. The algorithm that decides what is the better process to be killed has been rewritten in this release and should make better decisions.

Code: [http://git.kernel.org/linus/a63d83f427fbce97a6cea0db2e64b0eb8435cd10 (commit)], [http://git.kernel.org/linus/51b1bd2ace1595b72956224deda349efa880b693 (commit)]

1.9. AppArmor

AppArmor is Mandatory Access Control (MAC) security system. It was originally developed by Immunix in 1998. It has been part of some Linux distros for a long time.

The key difference with SELinux is that SELinux applies security policies labeling to files, and AppArmor applies the policies to pathnames.

Code: [http://git.kernel.org/linus/cdff264264254e0fabc8107a33f3bb75a95e981f (commit 1], [http://git.kernel.org/linus/67012e8209df95a8290d135753ff5145431a666e 2], [http://git.kernel.org/linus/c75afcd153f6147d3b094f45a1d87e5df7f4f053 3], [http://git.kernel.org/linus/e06f75a6a2b43bd3a7a197bd21466f9da130e4af 4], [http://git.kernel.org/linus/63e2b423771ab0bc7ad4d407f3f6517c6d05cdc0 5], [http://git.kernel.org/linus/6380bd8ddf613b29f478396308b591867d401de4 6], [http://git.kernel.org/linus/898127c34ec03291c86f4ff3856d79e9e18952bc 7], [http://git.kernel.org/linus/c1c124e91e7c6d5a600c98f6fb5b443c403a14f4 8], [http://git.kernel.org/linus/f9ad1af53d5232a89a1ff1827102843999975dfa 9], [http://git.kernel.org/linus/b5e95b48685e3481139a5634d14d630d12c7d5ce 10], [http://git.kernel.org/linus/0ed3b28ab8bf460a3a026f3f1782bf4c53840184 11], [http://git.kernel.org/linus/736ec752d95e91e77cc0e8c97c057ab076ac2f51 12], [http://git.kernel.org/linus/c88d4c7b049e87998ac0a9f455aa545cc895ef92 13], [http://git.kernel.org/linus/4d6ec10bb4461fdc9a9ab94ef32934e13564e873 13], [http://git.kernel.org/linus/016d825fe02cd20fd8803ca37a1e6d428fe878f6 14)]

2. Various core changes

3. Security

4. Filesystems

5. Networking

6. DM

7. Tracing/profiling

8. Block

9. Virtualization

KernelNewbies: Linux_2_6_36 (last edited 2010-10-21 00:20:36 by NicolasKaiser)