Linux 2.6.36 released 20 October, 2010.
Summary: Linux 2.6.36 includes support for the 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)
Contents
1. Prominent features (the cool stuff)
1.1. Tilera architecture support
The Tile processor is a new cpu manufactured by 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.
1.2. Preliminary merge of fanotify, a new file notification interface
Recommended LWN article: 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 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 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 (commit 1, 2, 3, 4, 5, 6, 7)
1.3. KMS+KDB integration
In this release, it will be possible to activate the KDB kernel debugger (merged in the 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 found here.
Code: (commit 1, 2, 3, 4, 5, 6)
1.4. Concurrency-managed workqueues
Recommended LWN articles: Concurrency-managed workqueues and 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: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 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: (commit)
1.6. CIFS local caching
FS-Cache is a cache layer that allows filesystems to implement local caching. It was merged in 2.6.30 with support for NFS and AFS. In this release, CIFS adds FS-Cache support.
Code: (commit)
1.7. Improve VM-related desktop responsiveness
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: (commit)
1.8. OOM rewrite
Recommended LWN article: 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.
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: (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14)
2. Various core changes
mutex: Improve the scalability of optimistic spinning. An Aim7 fserver workload speed up from 91657 jobs/minute to 149325. The average acquisition time is reduced by 48% and number of contentions reduced by 32%. (commit)
- VFS locking changes and improvements for the upcoming Nick Piggin's VFS scalability patchset
- Memory management
writeback: reduce calls to global_page_state in balance_dirty_pages(). Improves write performance in a variety of workloads (see commit log) (commit)
Implement writeback livelock avoidance using page tagging (commit)
vmscan: Add tracing events (commit), (commit), (commit), (commit)
writeback: Initial tracing support (commit)
Help glibc to implement statvfs(3) efficiently (speeds up dbench, but needs new glibc) (commit)
Add a target to use the Coccinelle checker (Recommended LWN article: Semantic patching with Coccinelle) (commit)
kconfig: add "make alldefconfig" (commit) and "make savedefconfig" (commit) targets.
tty: Add EXTPROC support for LINEMODE (commit)
Power Management: Add runtime PM statistics (commit)
sched: Add asymmetric group packing option for sibling domain (commit), change nohz idle load balancing logic to push model (commit)
shmem: reduce pagefault lock contention (commit)
rlimits: implement prlimit64 syscall (commit)
PM: Make it possible to avoid races between wakeup and system sleep (recommended LWN article: Another wakeup event mechanism (commit)
HWPOISON, hugetlb: support hwpoison injection for hugepage (commit)
n2_crypto: Add HMAC support. (commit)
Kill off CONFIG_GENERIC_TIME (all arches have been converted) (commit)
3. Security
- TOMOYO
4. Filesystems
- Ext4
- NILFS2
- XFS
- CEPH
Ext3: default to ordered mode (commit)
Squashfs: Add LZO compression support (commit)
AFS: Implement an autocell mount capability (commit)
5. Networking
Add getsockopt support for TCP thin-streams (commit)
Enable 64-bit net device statistics on 32-bit architectures (commit)
Optimize Berkeley Packet Filter (BPF) processing (commit)
- Netfilter
Wireless: mac80211: Add support for hardware ARP query filtering (commit), nl80211: Add option to adjust transmit power (commit)
9p: Define and implement TLINK for 9P2000.L (commit), (commit), define and implement TSYMLINK for 9P2000.L (commit), getattr client implementation for 9P2000.L protocol. (commit), client side of setattr for 9P2000.L protocol. (commit), implement LOPEN (commit), implement TMKDIR (commit), implement TMKNOD (commit), readdir implementation for 9p2000.L (commit), implement attrwalk 9p call (commit), implement TXATTRCREATE 9p call (commit), add support user. xattr (commit), implements TLCREATE for 9p2000.L protocol. (commit)
bonding: allow user-controlled output slave selection (commit)
ipv4: add LINUX_MIB_IPRPFILTER snmp counter (commit)
IPVS: make FTP work with full NAT support (commit), one-packet scheduling (commit)
syncookies: add support for ECN (commit)
vlan: allow TSO setting on vlan interfaces (commit)
ethtool: Add support for control of RX flow hash indirection (commit)
DNS: Separate out CIFS DNS Resolver code (commit)
6. DM
delay: support discard (commit)
linear support discard (commit)
mpath: support discard (commit)
dm stripe: support discards (commit)
snapshot: implement merge method for the snapshot origin to improve read performance (commit)
7. Tracing/profiling
- perf
New migration tool overview (commit)
perf probe: Support static and global variables (commit), support "string" type (commit), support tracing an entry of array (commit)
perf report: Implement --sort cpu (commit)
Add the ability to specify list of cpus to monitor (commit)
Make target to generate self contained source tarball (commit)
Generic nmi_watchdog implementation using perf events (commit), (commit), (commit)
ui: Add a map browser (commit), new hists tree widget (commit)
kprobes: Support "string" type (commit)
Remove the following ftrace plugins (superseded by trace events): boot tracer (commit), kmemtrace ftrace plugin (commit), ksym tracer (commit), special traces (commit), sysprof ftrace plugin (commit)
8. Block
Add secure discard (commit)
cfq-iosched: Implement tunable group_idle (commit)
Moorestown "Post Beta" nand driver. (commit)
cciss: new controller support and bump driver version (commit), add performant mode support for Stars/Sirius (commit)
UBI: improve corrupted flash handling (commit)