Monday, January 8, 2018

Kernel Changelog some Exciting Features

Good Feature

4.??
Rocker QEMU switch for Switchdev


3.17
1.USB device sharing over IP

2.Signed kexec kernels
Kexec is a Linux feature that allows to boot a Linux kernel from an existing Linux kernel. It is used for faster rebooting or even for automatically booting a new kernel after a crash.


3.14
Deadline scheduling class for better real-time scheduling
Trigger support for tracing events
Userspace probes access to all arguments

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.

Address-space layout randomization (ASLR) is a well-known technique to make exploits harder by placing various objects at random, rather than fixed, addresses.

sysfs, kernfs: add skeletons for kernfs
(One of the primary users of kernfs is the pseudo file system used internally by cgroups)

3.13
TCP Fast Open enabled by default
TCP Fast Open is an optimization to the process of stablishing a TCP connection that allows the elimination of one round time trip from certain kinds of TCP conversation, which can improve the load speed of web pages. In Linux 3.6 and Linux 3.7, support was added for this feature, which requires userspace suppor

Allow magic sysrq key functions to be disabled in Kconfig

3.10
-posix-timers: Introduce /proc/PID/timers file to get info about what posix timers are configured by processes
-Introduce a dummy IRQ handler driver. This module accepts a single 'irq' parameter, which it should register for. The sole purpose of this module is to help with debugging (commit)
-Implement sysfs interface for workqueues in /sys/bus/workqueue/devices/WQ_NAME.
-netlink: Add support for memory mapped netlink I/O


3.9
Android "goldfish" emulator
KVM support in ARM architectures
Chrome OS laptop support
VMware VMCI (Virtual Machine Communication Interface). It enables high-speed communication between host and guest in a virtual environment via the VMCI virtual device.

3.8
User namespace support completed
Removal of support for 386 processors
modules: add syscall to load module from file descriptor (chk singinmg)

3.7
perf trace, an alternative to strace
TCP Fast Open (server side)
coredump: make core dump functionality optional (CONFIG_COREDUMP)

3.6
VFIO: bare-metal safe access to devices from userspace drivers
TCP Fast Open (client side)


3.5
-Uprobes: userspace probes
-export printk records to the /dev/kmsg interface
The /dev/kmsg character device node provides userspace access
to the kernel's printk buffer.

Injecting messages:
Every write() to the opened device node places a log entry in
the kernel's printk buffer.

-Infiniband: Add raw packet QP type


3.4
A new kernel parameter, "nomodule", will disable module loading

The pipe2() system call permits a new flag, O_DIRECT, that creates a pipe that operates in "packet" mode. Each write() to the pipe creates a distinct packet, and each read() reads exactly one packet

3.3
Open vSwitch
Linux already has a virtual switch (the Linux bridge), but Open vSwitch is designed for more complex scenarios, and specially to be used as a vswitch in virtualized server environments
Open vSwitch supports standard management interfaces (e.g. sFlow, Netflow, RSPAN, CLI), and is open to programmatic extension and control using Openflow and the OVSDB management protocol,


Better bonding of network interfaces: teaming

EFI boot support

3.1
sysctl: add support for poll(

3.0
sendmmsg(): batching of sendmsg() calls
XEN dom0 support
RDMA: Add netlink infrastructure that allows for registration of RDMA clients



2.6.39

-Pstore: storing crash information across a reboot

-mount -t pstore - /dev/pstore

-BKL: That's all, folks
In 2.6.37, it was possible to compile a Linux kernel without support for the BKL. In this release, the BKL has been removed completely from the kernel sources, including the functions lock_kernel() and unlock_kernel().

-zcache

"threadirqs" which forces all interrupts except those marked IRQF_NO_THREAD to run threaded

2.6.38
 Add /proc/consoles: To see which character device lines are currently used for the system console /dev/console, you may simply look into this file

User-space interface for Crypto API

-No BKL (Big Kernel Lock)
only one process can run kernel code at the same time in Linux 2.0, long term the BKL must be replaced by fine-grained locking to allow multiple processes running kernel code in parallel. In this version, it is possible to compile a kernel completely free of BKL support. Note that this doesn't have performance impact: all the critical Linux codepaths have been BKL-free for a long time. It still was used in many non-performance critical places -ioctls, drivers, non-mainstream filesystems, etc-, which are the ones that are being cleaned up in this version. But the BKL is being replaced in these places with mutexes, which doesn't improve parallelism (these places are not performance critical anyway).


-A Ceph-based network block device

KMS+KDB integration

- Concurrency-managed workqueues

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),

orkqueues 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.


-KDB kernel debugger frontend
The key difference between Kgdb and KDB is that using Kgdb requires an additional computer to run a gdb frontend, and you can do source level debugging. KDB, on the other hand, can be run on the local machine and can be used to inspect the system, but it doesn't do source-level debugging. What is happening in this version is that Jason Wessel, from Windriver, has ported KDB to work on top of the Kgdb core, making possible to use both interfaces.

Add a new configuration interface: make nconfig.



2.6.34

perf improvements, perf lock

Cgroups


2.6.33
Perf improvements: perf probe, perk kmem, perf bench, perf diff, perf perl scripts and filters

 recvmmsg(), a syscall for batching recvmsg() calls


2.6.32

Easy local kernel configuration
make localmodconfig.
It runs "lsmod" to find all the modules loaded on the current running system. It will read all the Makefiles to map which CONFIG enables a module. It will read the Kconfig files to find the dependencies and selects that may be needed to support a CONFIG. Finally, it reads the .config file and removes any module "=m" that is not needed to enable the currently loaded modules



2.6.31

Kmemcheck
Kmemcheck is a debugging feature for the Linux Kernel. More specifically, it is a dynamic checker that detects and warns about some uses of uninitialized memory. Userspace programmers might be familiar with Valgrind's memcheck. The main difference between memcheck and kmemcheck is that memcheck works for userspace programs only, and kmemcheck works for the kernel only.

Enabling kmemcheck on a kernel will probably slow it down to the extent that the machine will not be usable for normal workloads such as e.g. an interactive desktop. kmemcheck will also cause the kernel to use about twice as much memory as normal. For this reason, kmemcheck is strictly a debugging feature.


- Kmemleak

2.6.30

New user space API for time stamping of incoming and outgoing packets: User space can request hardware and/or software time stamping

ftrace

dynamic debug: combine dprintk and dynamic printk (commit)



2.6.28
-Disk Shock Protection

select() and poll() over to high-resolution timers

-I've introduced CONFIG_DYNAMIC_PRINTK_DEBUG, which when enabled centralizes
control of debugging statements on a per-module basis in one /proc file,
currently, /dynamic_printk/modules. When, CONFIG_DYNAMIC_PRINTK_DEBUG,
is not set, debugging statements can still be enabled as before, often by
defining 'DEBUG' for the proper compilation unit. Thus, this patch set has no
affect when CONFIG_DYNAMIC_PRINTK_DEBUG is not set.

The infrastructure currently ties into all pr_debug() and dev_dbg() calls. That
is, if CONFIG_DYNAMIC_PRINTK_DEBUG is set, all pr_debug() and dev_dbg() calls
can be dynamically enabled/disabled on a per-module basis.

Future plans include extending this functionality to subsystems, that define
their own debug levels and flags.



2.6.27
Kexec jump: kexec/kdump based hibernation

Kexec is a Linux feature that allows loading a kernel into memory and executing it, allowing to reboot to a new kernel without rebooting. This infrastructure was used to implement kdump, a kernel crash dump system: A "safe kernel" is loaded into memory as soon as the system starts, and if the running kernel crashes, the oops code kexec's to the "safe kernel", which is able to dump the memory that it's not using to the disk or somewhere else.


ftrace, sysprof support


-lro support for ixgbe
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=177db6ffd0599430a2ab63045e88fc4031f42420


2.6.26
KGDB
Generic semaphores


2.6.25
Real Time Group scheduling
timerfd() syscall

softlockup: automatically detect hung TASK_UNINTERRUPTIBLE tasks
this patch extends the soft-lockup detector to automatically
detect hung TASK_UNINTERRUPTIBLE tasks. Such hung tasks are
printed the following way:

the current default timeout is 120 seconds. Such messages are printed
up to 10 times per bootup. If the system has crashed already then the
messages are not printed.


2.6.24
Fair Group Scheduling

You can read this recommended article about the Fair Group Scheduling feature.

Another feature in the scheduler is Fair Group Scheduling. Normally the scheduler operates on individual tasks and strives to provide fair CPU time to each task. Sometimes, it may be desirable to group tasks and provide fair CPU time to each such task group. For example, it may be desirable to first provide fair CPU time to each user on the system and then to each task belonging to a user. In other words, given two users, one running one cpu-bound process and the other two cpu-bound processes, you may want to give 50% of CPU time to the first users and his task, and 50% to the other user, which will be shared between his two processes - 25% of CPU time for each. Group Scheduling provides the ability to choose partitions to support the previous scenario.

-Large Receive Offload (LRO) support for TCP traffic

2.6.16
-New 'mutex' locking primitive. Until now, there was two main types of locks: spinlocks and semaphores. Mutexes are like a spinlock, but you may block holding a mutex. If you can't lock a mutex, your task will suspend itself, and be woken up when the mutex is released. This means the CPU can do something else while you are waiting. There are many cases when you simply can't sleep and so have to use a spinlock instead. Semaphores can be and have been (ab)used for this same purpose, but mutexes are simpler than semaphores, and have some advantages. You cannot use mutexes the same way you can use semaphores though, e.g. they cannot be used from an interrupt context, nor can they be unlocked from a different context that which acquired it. Read the
-HR TIMERS



2.6.18
-Lockdep, a kernel lock validator
- REMOVED devfs from the kernel tree

-Introduce the splice(), tee() and vmsplice() system calls, a new I/O method
http://lwn.net/Articles/178199/
http://lwn.net/Articles/179492/
http://lwn.net/Articles/181169/
The idea behind splice is the availability of a in-kernel buffer that the user has control over, where "splice()" moves data to/from the buffer from/to an arbitrary file descriptor, while "tee()" copies the data in one buffer to another, ie: it "duplicates" it.

No comments:

Post a Comment

Featured Post

XDP - Getting Started with XDP (Linux)