The Linux Kernel 5.9 is now out and available for the masses. Like any other release, Kernel 5.9 introduces fantastic features along with updated drivers. The development of Linux Kernel 5.9 started about two months ago when Linus Torvalds announced the first release candidate (RC) milestone.
Even though this new release brings many unique features, if you are not a tech tinkerer or never interested in what happens behind the scenes of a running Linux system, they might not seem that attractive.
This post will look at some of the features you can expect with Linux Kernel 5.9. We will also show you how to install Kernel 5.9 on Fedora and Ubuntu. Let’s dive in.
Linux Kernel 5.9 Prominent Features
Most of these features are mainly geared towards better memory management, drivers, and the overall system performance. With kernel releases, we rarely have any User interface improvements. Most of these updates focus on system performance. Much of the GUI improvements are made on the Desktop Environment. On that note, you can read our post on The 10 Best New Features in GNOME 3.38, which mainly focuses on the overall Graphical User interface improvements.
1. Better management of anonymous memory
By anonymous memory, we refer to the memory that is not file-backed—commonly known as malloced memory. The release of Kernel 5.9 aims at better system workload detection and protection of this memory. Generally, the Linux Kernel manages anonymous memory by placing its pages either in an active or inactive list. When the system runs low on memory resources (memory pressure), unused pages are moved from active to inactive list to be referenced again. In case of more memory pressure, they are moved to SWAP.
Previously, newly created or swap-in pages were pushed to the active list. That, in turn, led to the forced removal of used pages to the inactive list. With kernel 5.9, newly created or swap-in pages are first placed on the inactive list. They are only moved to the active list after being referenced enough. Additionally, to prevent the newly created or swap-in pages from swapping out existing pages from an inactive list, Kernel 5.9 comes with new features to handle the anonymous LRU list.
2. Proactive memory compaction
To improve system performance on x86 systems, the processor uses Huge Pages (pages bigger than 4KB). Unfortunately, Huge Pages require a lot of contiguous free memory, which can be quite hard to obtain in highly fragmented memory. Even though Linux system support defragmentation, it only takes place when a Huge Page needs allocation and can take a lot of time. Kernel 5.9 brings forth Proactive memory compaction (defragmentation), which happens even before a Huge Page requires allocation, thus saving time for future allocations.
3. Support for running BPF programs on socket lookups
Berkeley Packet Filter (BPF) is a technology used to analyze network traffic. With every Kernel release, there are always some improvements made to the BPF. Kernel 5.9 introduces a new BPF program named BPF_PROG_TYPE_SK_LOOKUP. The program runs when the TCP/IP model’s transport layer looks up for a listening socket to create a new connection (TCP) or looks up for an unconnected socket for a packet (UDP).
4. CPU Capacity awareness for the deadline scheduling class
Since the release of Linux Kernel 3.14, the Linux task scheduler supports a deadline scheduling class. Unfortunately, this scheduling class made wrong scheduling decisions since it wasn’t aware that CPUs have different performance rates. With Kernel 5.9 release, the deadline scheduling class is aware of different CPU performance rates.
5. NFS support for extended attributes
NFS (Network File System) is a program that enables efficient sharing of files and folders between Linux/UNIX systems. Kernel 5.9 incorporates support for extended attributes that bridge some of the gaps present in NFS.
6. Support for ZSTD compressed kernel, ramdisk, and initramfs
For the Kernel boot process, Linux Kernel 5.9 adds support for ZSTD-compressed Kernel, ramdisk, and initramfs. All these features are supported in both x86 and x64 architectures. The Zstandard (ZSTD) is an open-source algorithm developed in C language and provides good compression and decompression rates.
Facebook, the ZSTD program developer, switched from xz compressed initramfs to ZSTD compressed initramfs, reducing the decompression process from 12 seconds to 3 seconds. Also, when applied on the Kernel, it saved them 2 seconds of boot time.
7. Support for the x86 FSGSBASE instructions
Linux 5.9 brings support for FSGSBASE instructions by intel. They allow easy access to the FS and FS segment base registers. Additionally, it offers support for a new sysctl knob, inline encryption support for the EXT4 and F2FS filesystems, and support for Chrome OS embedded-controller regulators.
8. New close_range() system call
Kernel 5.9 brings forth a new system call – close_range(2). The call allows efficient closing of file descriptors past stderr. The system call turns out to be of great use to various projects like the service managers, libcs, container runtimes, programming language runtimes/standard libraries (Rust/Python).
How to install Linux Kernel 5.9
Now that you have seen some of these cool features that Kernel 5.9 presents, you are probably thinking of installing it on your current Linux distribution. That’s what we will exactly look at in this section.
However, before you proceed, there are some things you need to take note of; Your current distribution might not be optimized to run on Kernel 5.9. Therefore, even though you might get all the performance boost by upgrading to Kernel 5.9, you might miss out on some of the features optimized for your distribution with its current Kernel release.
That said, we will give you a step by step procedure of how to upgrade to Kernel 5.9. Our target distribution in this tutorial will be Ubuntu and Fedora.
Install Kernel 5.9 on Ubuntu 20.04 LTS
To better understand what we will be doing, let’s first check the Kernel version running on our system. Execute the command below:
From the output above, we can see we are running Kernel 5.4. To upgrade, we need to download the Kernel files to install. Execute the commands below:
cd /tmp wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900_5.9.0-050900.202010112230_all.deb wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-image-unsigned-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-modules-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb
One the download is complete, now install the files with the command below:
sudo dpkg -i *.deb
When the installation process completes, reboot your system and execute the uname command again to see what Kernel you are running. You should see an output of Kernel 5.9.
Install Kernel 5.9 on Fedora
If you are a Fedora user, the steps below will guide you on installing Kernel 5.9.
Step 1. You might need to check the Kernel currently running on your system. In my case, I have Fedora 33 Beta installed, which makes use of Kernel 5.8. Execute the command below:
cat /etc/redhat-release uname -r
Step 2. Install the GPG key.
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
Step 3. Install the repository with the command below:
sudo dnf install https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm
Step 4. Install Kernel 5.9 by executing the command below:
sudo dnf --enablerepo=elrepo-kernel install kernel-ml
Step 5. Once done, reboot your Fedora system and execute the uname command again. You should see an output of Kernel 5.9.
That’s our complete guide on Kernel 5.9 features and how to install it on Ubuntu and Fedora. If you have any questions or comments, please feel to hit the comments below.
Is Fedora 33 the only supported level for Linux Kernel 5.9?
I am hitting this issue on Fedora 32:
$ sudo dnf install https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm
Last metadata expiration check: 0:01:50 ago on Sun 18 Oct 2020 06:58:47 PM CST.
elrepo-release-8.0-2.el8.elrepo.noarch.rpm 8.6 kB/s | 12 kB 00:01
Problem: conflicting requests
– nothing provides glibc = 2.28 needed by elrepo-release-8.0-2.el8.elrepo.noarch
(try to add ‘–skip-broken’ to skip uninstallable packages)
When I look at installed glibc, I have version 2.31 installed which is higher than the required one:
$ rpm -qa | grep glibc
Any ideas on how to proceed
Same issue here on Fedora 33!