如何在 Ubuntu 中启用 CONFIG_RT_GROUP_SCHED 以使其成为 RT

Abh*_*yak 4 linux ubuntu real-time cgroups

我需要在 Ubuntu RT Linux 上运行实时应用程序,并且正在阅读有关使 Linux 充当 RT 系统的方法,我学到了两种方法来做到这一点

  1. preemptive_rt 内核修补
  2. CONFIG_RT_GROUP_SCHED内核中的启用标志。

我已经尝试过第一种方法为 Ubuntu 安装 RT Linux 补丁

然而,除了uname -r表明#1 SMP PREEMPT RT我没有其他证据证明它实际上是一个 RT 系统,因此想尝试第二种方法。CONFIG_RT_GROUP_SCHED在内核中启用标志并查看其性能。

我读到我们可以通过以下命令确认内核是否已经具有该标志:

# zcat /proc/config.gz | grep RT_GROUP

CONFIG_RT_GROUP_SCHED=y
Run Code Online (Sandbox Code Playgroud)

但是,我的系统在 proc 中甚至没有 config.gz 文件,所以我相信我的内核没有启用此功能。我对 Linux 内核比较陌生,所以这可能很天真,但如何在内核中启用它?

Abh*_*yak 5

步骤 1 \n从https://www.kernel.org/pub/linux/kernel/
下载 Linux 内核。为了这个 PoC,我们从上面的链接下载了内核。linux-4.16.18.tar.gz

\n\n

步骤 2 \n解压缩内核

\n\n
$ tar -xzvf linux-4.16.18.tar.gz\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤3

\n\n

移动到内核源目录

\n\n
$ cd linux-4.16.18\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤4

\n\n

安装内核构建依赖项

\n\n
$ sudo apt install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache bison flex\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤5

\n\n

运行内核配置

\n\n
$make menuconfig\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤6

\n\n

进入General setup\xe2\x94\x80> Control Group Support\xe2\x94\x80> CPU controller\xe2\x94\x80>Group scheduling for SCHED_RR/FIFO配置如下所示:

\n\n

在此输入图像描述

\n\n

转至General setup\xe2\x94\x80>Kernel .config support并启用.config/proc/config.gz

\n\n

步骤7

\n\n

编译内核

\n\n
$ make -j20\n
Run Code Online (Sandbox Code Playgroud)\n\n

制作模块并安装

\n\n
$ sudo make modules_install -j20\n$ sudo make install -j20\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤8

\n\n

打开grub.cfg文件以验证内核是否已安装

\n\n
$ vim /boot/grub/grub.cfg\n
Run Code Online (Sandbox Code Playgroud)\n\n

查找菜单项menuentry \'Ubuntu, with Linux linux-4.16.18\'

\n\n

如果它不是您的默认内核,则将该GRUB_DEFAULT=0值更改为您的内核

\n\n

步骤9

\n\n

重新启动您的系统

\n\n

sudo reboot

\n\n

步骤10

\n\n

通过以下命令验证系统:

\n\n
# zcat /proc/config.gz | grep RT_GROUP\n\nCONFIG_RT_GROUP_SCHED=y\n
Run Code Online (Sandbox Code Playgroud)\n