Linux 2.6.33 has been released on February 24th, 2010.
Summary: This version features Nouveau (a reverse-engineered driver for Nvidia graphic cards), Nintendo Wii and Gamecube support, DRDB (Distributed Replicated Block Device), a security extension for TCP called "cookie transactions", a syscall for batching recvmsg() calls, several new perf subcommands (perf probe, perf bench, perf kmem, perf diff), support for cache compression, Xen PV-on-HVM support, drivers for virtual network and graphic cards from VMWare, swappable KSM pages, and many new drivers and many small improvements and bugfixes
This version includes Nouveau, a driver for Nvidia graphic cards, the one major GPU vendor without opensource drivers in the Linux kernel. Being developed since 2006, it has 26,000 LoC (not counting the Mesa stuff and the rest of the DRM stack). Nvidia has not contributed to this driver, it has been reverse-engineered. Graphic cards are one of the most complex pieces of hardware that you can find in modern computers, it's difficult to write drivers for them even having all the docs. So the developers of Nouveau deserve a big applause.
Nouveau is important because opensource is the one way to get good long term support for your graphic card. The new and powerful graphic card you've bought today will be unsupported in a few years. This doesn't happen with open source drivers, Nouveau (and ATI open source drivers) support today more devices than the official propietary drivers: for example, Riva TNT and Geforce 2/4MX/4Ti/FX.
The feature set, however, is not comparable, but Nouveau already supports a decent set of features: modesetting (KMS), suspend/resume, Dual Head (RandR 1.2), and 2D operations (EXA, Xrender, Xv video). 3D functionality is not fully supported, but it's improving. And, of course, it's not stable, which is why it's only being merged in the staging directory.
The ctxprogs/ctx_voodoo" firmware will not be needed in the future, because it can be autogenerated. Only a few cards autogenerate it today, but the dependency will be removed in the future.
DRDB ("Distributed Replicated Block Device") is a shared-nothing, synchronously replicated block device, developed by LINBIT. It is designed to serve as a building block for high availability (HA) clusters. DRBD can be understood as network based raid-1.
This release adds a lot of improvements to the tracing infrastructure and the perf tool. (tools/perf)
perf probe: perf probe is a subcommand that allows to create kprobe events. Kprobe is a system that allows to break into any kernel routine at runtime and collect debugging and performance information non-disruptively. It's the system used by Systemtap to do kernel instrumentation. Perf probe allows to define kprobe events using C expressions (C line numbers, C function names, and C local variables). For example:
Step 1: Add a new kprobe probe on a line of C source code: "perf probe -P 'p:myprobe @fs/read_write.c:285 file buf count'" (it creates a new probe, called "myprobe", which will inspect the variables file, buf and count). Alternatively, you could also run simpler commands like "perf probe sys_open" to add a probe for the sys_open symbol (open() syscall)
Step 2: Add a new kretprobe probe on a function return "perf probe -P 'r:myretprobe vfs_read $rv'"
Step 3: If you run "perf list", you will see a event section named "kprobes" which contains the probes you just set up.
Step 4: Record the event: "perf record -f -e kprobes:myprobe:record -F 1 -a ls" and trace it "perf trace"
perf bench: perf bench is a small suite of microbenchmarks. In this release, there're only three benchmarks: perf bench sched messaging (for benchmarking scheduler and IPC), perf bench sched pipe (benchmarks pipe()) and perf bench mem memcpy (measures memory bandwith). The command perf bench all will run all benchmarks.
perf filters: This feature adds "--filter expression" support to tracepoints, which utilizes the filter engine within the kernel. For example, to trace only timer interrupts in the system: "perf record -e irq:irq_handler_entry --filter='irq==0' -R -f -a sleep 10". Or to only record IRQ 19 when the 'achi' handler is triggered: "perf record -e irq:irq_handler_entry --filter='irq==19 && name==ahci' -R -f -a sleep 10"
recvmmsg() is a new syscall that allows to receive with a single syscall multiple messages that would require multiple calls to recvmsg(). For high-bandwith, small packet applications, throughput and latency are improved greatly.
TCP Cookie Transactions (TCPCT) is an extension of TCP intended to secure it against denial-of-service attacks, such as resource exhaustion by SYN flooding and malicious connection termination by third parties. Unlike the original SYN cookies approach, TCPCT does not conflict with other TCP extensions, but requires TCPCT support in the client (initiator) as well as the server (responder) TCP stack. The immediate reason for the TCPCT extension is deployment of the DNSSEC protocol.
Support for Xen PV-on-HVM guests can be implemented almost entirely in userspace, except for handling one annoying MSR that maps a Xen hypercall blob into guest address space. This patch implementes a new ioctl, KVM_XEN_HVM_CONFIG, that lets userspace tell KVM which MSR the guest will write to, as well as the starting address and size of the hypercall blobs (one each for 32-bit and 64-bit) that userspace has loaded from files. When the guest writes to the MSR, KVM copies one page of the blob from userspace to the guest.
Kernel Samepage Merging (KSM) is a feature merged in Linux 2.6.32 which deduplicates memory of virtualized guests. The implementation, however, didn't allow to swap the pages that were shared. This release brings swap support for KSM pages.
Control groups are virtual "containers" that are created as directories inside a special virtual filesystem (usually, with the help of tools), and arbitrary sets of processes can be added to that control group, which you can configure to a set of cpu scheduling or memory limits that will affect to all the processes inside the control group.
This release adds a block IO controller. Currently, CFQ IO scheduler uses it to recognize task groups and control disk bandwidth allocation to such task groups (somewhat like CFQ priorities, but implemented in a very different way), this controller will be extended in the future. For more details, read thedocumentation
Compcache is a project (still under development, only available in Staging) creates RAM-based block devices (/dev/ramzswapX) which are used as swap disks. Pages swapped to this virtual device are compressed to a smaller size. Part of your RAM is used as usually, and another part (the size is configurable) is used to save compressed pages, increases the amount of RAM you can use in practice.
This feature can be very useful in many cases: Netbooks, smartphones and other embedded devices, distro installers, dumb clients without disk, virtualization, or old machines with not enought RAM to run modern software.
VMWare has contributed two drivers for the VWware Virtual GPU, and for the VMware's virtual Ethernet NIC vmxnet3. Thanks to udev, this means that Linux guests running inside a VMware host will have optimal graphic and network performance out-of-the-box.
One of the biggest shortcomings of reiserfs v3 (and one of the reasons why most distros use Ext instead) is that its codebase handles concurrency using a single big lock - the BKL (Big Kernel Lock). This means that its SMP scalability is very poor. This release won't fix that issue, but it replaces the BKL with a reiserfs-specific solution. In this release, there are no more traces of the BKL inside reiserfs. It has been converted into a recursive mutex. This sounds dirty but plugging a traditional lock into reiserfs would involve a deeper rewrite as the reiserfs architecture is based on the ugly big kernel lock rules.
Due to the subtle semantics of the locking changes, some workloads may have small performance regressions and other have improvements.
Google doesn't seem to have interest in improving the Android drivers to have minimum quality standards which could allow to merged them in the main Linux tree and share them with the rest of community. Of course, that's totally legal, but it's sad that a project that is doing so much to bring open source to the masses has become an example of how not to interact with an open source community.
kexec: premit reduction of the reserved memory size (commit)
fiemap: Add new extent flag FIEMAP_EXTENT_SHARED (commit)
quota: Implement quota format with 64-bit space and inode limits (commit)
Remove the anticipatory IO scheduler (replaced by the default io scheduler, CFQ) (commit)
readahead: add blk_run_backing_dev on page_cache_async_readahead so readahead I/O is unpluged to improve throughput on especially RAID environment (commit)
Merge cooperating cfq_queues. Performance of the read-test2 benchmark (which is written to emulate the dump(8) utility) went from 12MB/s to 90MB/s on a SATA disk. NFS servers with multiple nfsd threads also saw performance increases (commit)
Reimplement priorities using different service trees (commit)
MX3: add MMC/SDHC support to mx31lite-db.c (commit)
NUC900: add RTC driver support for nuc910 and nuc920 (commit), add spi driver support for nuc900 (commit)
OSIRIS: DVS (Dynamic Voltage Scaling) supoort. (commit)
pxa/cm-x300: add TDO35S lcd support (commit), add Wi2wi chip (Bluetooth and Wifi) initialization (commit), add ac97 controller registration(commit), add da9030 support (commit), add support for PXA310 cpu (commit), enable USB port 2 for PXA300 (commit)
pxa/ezx: add camera support for A780 and A910 EZX phones (commit)
Add driver for mscan family & mpc52xx_mscan (commit)
wl1251: add support for PG11 chips (commit), add connection monitoring configuration (commit), enable beacon filtering with the stack (commit), enable power save (commit), added support to scan on 5 GHz band (commit), increase TX power value (commit), multicast filtering configuration(commit), support for IPv4 ARP filtering (commit)
gianfar: Add support for hibernation (commit), add per queue structure support (commit), introduce logical group support (commit), add Multiple Queue Support (commit), add Multiple group Support (commit), add support etsec2.0 registers. (commit), basic Support for programming hash rules(commit)
iwlwifi: add channel switch support to 5000 series and up (commit), add SM PS support for 6x50 series (commit), add wimax/wifi coexist support for 6x50 series (commit), device tracing (commit), support idle for 6000 series hw (commit)
sfc: Add support for SFC9000 family (commit), (commit), add power-management and wake-on-LAN support (commit), extend MTD driver for use with new NICs (commit), implement ethtool reset operation (commit), implement TSO for TCP/IPv6 (commit)
rt2x00: Implement support for rt2800pci (devices supported: RT2760, RT2790, RT2860, RT2880, RT2890 & RT3052) (commit), add dynamic detection of eFuse EEPROM in rt2800pci. (commit)