#pragma section-numbers on #pragma keywords Linux, kernel, operating system, changes, changelog, file system, Linus Torvalds, open source, device drivers #pragma description Summary of the changes and new features merged in the Linux kernel during the 3.14 development cycle Linux 3.14 [https://lkml.org/lkml/2014/3/30/336 has been released] on Sun, 30 Mar 2014. /!\ /!\ /!\ WARNING /!\ /!\ /!\ : This page is not complete and it's missing lots of critical information. While it is finished, you can read: * LWN list of changes: [https://lwn.net/Articles/581657/ part 1], [https://lwn.net/Articles/582352/ part 2], [https://lwn.net/Articles/583681/ part 3] * Phoronix: [http://www.phoronix.com/scan.php?page=news_item&px=MTYzNDg Recapping The Top Changes Of The Linux 3.14 Kernel] [[TableOfContents()]] = Prominent features = == Deadline scheduling class for better real time scheduling == Operating systems traditionally provide scheduling priorities for processes: The higher priority a process has, the more scheduling time that process it can get with respect other processes with lower priorities. In Linux, users usually set scheduling priorities from a value of -20 to 19 using the nice(2) tool (in addition, Linux supports the notion scheduling classes: each class provides different scheduling policies; for example, there is a SCHED_FIFO class with a "first in, first out" policy, and a SCHED_RR with a round-robin policy). The approach of process priorities is, however, not well suited for real time tasks. The community of [https://rt.wiki.kernel.org/ Linux realtime users] has created an alternative designed around real time concepts: deadline scheduling, implemented as a new scheduling policy, SCHED_DEADLINE. Deadline scheduling gets away with the notion of process priorities. Instead, processes provide three parametsr: runtime, period, and deadline. A SCHED_DEADLINE task is guaranteed to receive "runtime" microseconds of execution time every "period" microseconds, and these "runtime" microseconds are available within "deadline" microseconds from the beginning of the period. The task scheduler uses that information to run the process with the earliest deadline, a behavior closer to the requirements needed by real time systems. For more details about the scheduling algorithms, [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/scheduler/sched-deadline.txt?id=712e5e34aef449ab680b35c0d9016f59b0a4494c read the documentation] Recommended LWN article: [https://lwn.net/Articles/575497/ Deadline scheduling: coming soon?] Documentation: [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/scheduler/sched-deadline.txt?id=712e5e34aef449ab680b35c0d9016f59b0a4494c Documentation/scheduler/sched-deadline.txt] Code: [http://git.kernel.org/linus/1baca4ce16b8cc7d4f50be1f7914799af30a2861 commit 1], [http://git.kernel.org/linus/239be4a982154ea0c979fca5846349bb68973aed 2], [http://git.kernel.org/linus/aab03e05e8f7e26f51dee792beddcb5cca9215a5 3], [http://git.kernel.org/linus/755378a47192a3d1f7c3a8ca6c15c1cf76de0af2 4], [http://git.kernel.org/linus/2d3d891d3344159d5b452a645e355bbe29591e8b 5], [http://git.kernel.org/linus/332ac17ef5bfcff4766dfdfd3b4cdf10b8f8f155 6], [http://git.kernel.org/linus/af6ace764d03900524e9b1ac621a1c520ee49fc6 7], [http://git.kernel.org/linus/de212f18e92c952533d57c5510d2790199c75734 8], [http://git.kernel.org/linus/e4099a5e929435cd6349343f002583f29868c900 9], [http://git.kernel.org/linus/1724813d9f2c7ff702b46d3e4a4f6d9b10a8f8c2 10], [http://git.kernel.org/linus/6bfd6d72f51c51177676f2b1ba113fe0a85fdae4 11], [http://git.kernel.org/linus/712e5e34aef449ab680b35c0d9016f59b0a4494c 12], [http://git.kernel.org/linus/d50dde5a10f305253cbc3855307f608f8a3c5f73 13] == zram: Memory compression mechanism considered stable == zram provides RAM block devices. Everything written to these block devices gets compressed. If zram block devices are used as swap, the system will be effectively compressing the memory it tries to swap. This effetively works as a cheap memory compression mechanism to improve reponsiveness in systems with limited amounts of memory. Zram is being used by TV companies, Android 4.4, cyanogenmod, ChromeOS, Lubuntu... Zram has been in staging since [http://kernelnewbies.org/Linux_2_6_33#head-2d401df4d54a65a60c31ce7c591cf7660851cfd8 Linux 2.6.33]. In this release, zram has been moved out of staging to drivers/block/zram. Code: [http://git.kernel.org/linus/cd67e10ac6997c6d1e1504e3c111b693bfdbc148 commit] == Trigger support for tracing events == The tracing infastructure in the Linux kernel allows to easily register probe functions as events (for more details, see [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/trace/events.txt Documentation/trace/events.txt]. This release allows these events to conditionally trigger "commands". These commands can take various forms, examples would be enabling or disabling other trace events or invoking a stack trace whenever the trace event is hit. Any given trigger can additionally have an event filter, the command will only be invoked if the event being invoked passes the associated filter. For example, the following trigger dumps a stacktrace the first 5 times a kmalloc request happens with a size >= 64K: {{{# echo 'stacktrace:5 if bytes_req >= 65536' > \ /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger}}} For more details, see Section 6 in [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/trace/events.txt Documentation/trace/events.txt] Recommended LWN article: [https://lwn.net/Articles/556186/ Triggers for tracing] Code: [http://git.kernel.org/linus/7862ad1846e994574cb47dc503cc2b1646ea6593 commit 1], [http://git.kernel.org/linus/93e31ffbf417a84fbae518fb46b3ea3f0d8fa6e1 2], [http://git.kernel.org/linus/f21ecbb35f865a508073c0e73854da469a07f278 3], [http://git.kernel.org/linus/2a2df321158817811c5dc206dce808e0aa9f6d89 4],[http://git.kernel.org/linus/bac5fb97a173aeef8296b3efdb552e3489d55179 5], [http://git.kernel.org/linus/85f2b08268c014e290b600ba49fa85530600eaa1 6], [http://git.kernel.org/linus/ac38fb8582d86ba887b5d07c0912dec135bf6931 7] == Userspace probes access to all arguments == Userspace probes are a [http://kernelnewbies.org/Linux_3.5#head-95fccbb746226f6b9dfa4d1a48801f63e11688de Linux 3.5] feature that allows to set tracing probes in userspace programs at runtime. This release enables to fetch other types of argument for the uprobes: memory, stack, deference, bitfield, retval and file offset. For more details see the commit links. Code: [http://git.kernel.org/linus/b7e0bf341f6cfa92ae0a0e3d0c3496729595e1e9 commit 1], [http://git.kernel.org/linus/b079d374fd84637aba4b825a329e794990b7b486 2], [http://git.kernel.org/linus/306cfe2025adcba10fb883ad0c540f5541d1b086 3] == Userspace locking validator == The Linux kernel has ([http://kernelnewbies.org/Linux_2_6_18#head-5f53299debf913cd806ce6e9a2670f28d708832d since 2.6.18]) a lock validator that can find locking issues at runtime. This release makes possible to run the Linux locking validator in userspace, making possible to debug locking issues in userspace programs. For more details, see the recommended LWN link. Recommended LWN article: [https://lwn.net/Articles/536363/ User-space lockdep] Code: [http://git.kernel.org/linus/5634bd7d2ab14fbf736b62b0788fb68e2cb0fde2 commit 1], [http://git.kernel.org/linus/45e6207464b59dca63c8a9a79a7befbbf6a68fdb 2], [http://git.kernel.org/linus/878f968eeb852383ff79dc3f181db24e5b52fd75 3], [http://git.kernel.org/linus/5a52c9b480e09a782618dbf08de57f9ca54c8b49 4], [http://git.kernel.org/linus/dbe941827eab53194eda5cd350a4e1414f192658 5], [http://git.kernel.org/linus/231941eec8aeee4f0ac210a28e484200b20f74d8 6], [http://git.kernel.org/linus/f612ac05b7ce66919507d25f4c81e4272f7a8705 7] == Kernel address space randomization == This release allows to randomize the physical and virtual address at which the kernel image is decompressed, as a security feature that deters exploit attempts relying on knowledge of the location of kernel internals. Recommended LWN article: [https://lwn.net/Articles/569635/ Kernel address space layout randomization] Code: [http://git.kernel.org/linus/e8236c4d9338d52d0f2fcecc0b792ac0542e4ee9 1], [http://git.kernel.org/linus/da2b6fb990cf782b18952f534ec7323453bc4fc9 2], [http://git.kernel.org/linus/a653f3563c51c7bb7de63d607bef09d3baddaeb8 3], [http://git.kernel.org/linus/5bfce5ef55cbe78ee2ee6e97f2e26a8a582008f3 4], [http://git.kernel.org/linus/6145cfe394a7f138f6b64491c5663f97dba12450 5], [http://git.kernel.org/linus/19259943f0954dcd1817f94776376bf51c6a46d5 6], [http://git.kernel.org/linus/f32360ef6608434a032dc7ad262d45e9693c27f3 7], [http://git.kernel.org/linus/8ab3820fd5b2896d66da7bb2a906bc382e63e7bc 8], [http://git.kernel.org/linus/82fa9637a2ba285bcc7c5050c73010b2c1b3d803 9] == TCP automatic corking == When applications do consecutive small write()/sendmsg() system calls, the Linux kernel will try to coalesce these small writes as much as possible, to lower total amount of sent packets - this feature is called "automatic corking". Automatic corking is done if at least one prior packet for the flow is waiting in Qdisc queues or device transmit queue. Applications can still [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_MRG/1.2/html/Realtime_Tuning_Guide/sect-Realtime_Tuning_Guide-Application_Tuning_and_Deployment-TCP_NODELAY_and_Small_Buffer_Writes.html use TCP_CORK] for optimal behavior when they know how/when to uncork their sockets. A new sysctl (/proc/sys/net/ipv4/tcp_autocorking) has been added to control this feature, which defaults to enabled. For benchmarks and more details see the commit link. Code: [http://git.kernel.org/linus/f54b311142a92ea2e42598e347b84e1655caf8e3 commit] == Antibufferbloat: "Proportional Integral controller Enhanced" packet scheduler == Bufferbloat is a phenomenon where excess buffers in the network cause high latency and jitter. As more and more interactive applications (e.g. voice over IP, real time video streaming and financial transactions) run in the Internet, high latency and jitter degrade application performance. There has been a number of features and improvements in the Linux kernel network stack that try to address this problem. This release adds a new network packet scheduler: PIE(Proportional Integral controller Enhanced) that can effectively control the average queueing latency to a target value. Simulation results, theoretical analysis and Linux testbed results have shown that PIE can ensure low latency and achieve high link utilization under various congestion situations. The design incurs very small overhead. For more information, please [ftp://ftpeng.cisco.com/pie/documents/ see technical paper about PIE] in the IEEE Conference on High Performance Switching and Routing 2013. Also you can refer to the [http://tools.ietf.org/html/draft-pan-tsvwg-pie-00 IETF draft submission]. All relevant code, documents and test scripts and results can be found at ftp://ftpeng.cisco.com/pie/. Code: [http://git.kernel.org/linus/d4b36210c2e6ecef0ce52fb6c18c51144f5c2d88 commit]