IOTOP 抱怨:内核中未启用 CONFIG_TASK_DELAY_ACCT

IOTOP 抱怨:内核中未启用 CONFIG_TASK_DELAY_ACCT

环顾四周,我发现标准修复是将其添加到内核启动参数中。

使用 systemd-boot,我的 arch.conf 看起来像这样:

 title   Arch Linux
 linux   /vmlinuz-linux
 initrd  /intel-ucode.img
 initrd  /initramfs-linux.img
 options root=PARTUUID="98b3b4f7-e7f9-6f49-be81-a2ee709c7a3e" rw

如何将 CONFIG_TASK_DELAY_ACCT 添加到options条目中?

另一条线?

或者通过使用一些定界符,将其添加到现有行中?

我应该将其设置为什么值?

答案1

实际上,对于您遇到的 iotop 错误有一个简单的修复方法,但从这里到达那里是迂回的。

options delayacct[TL;DR:如果使用 systemd-boot,只需在 sd-boot 条目配置文件的末尾添加一个新行即可。 GRUB 有相应的语法。也存在可能更可取的替代非引导管理器配置选项。]

@Artem 是正确的,它CONFIG_TASK_DELAY_ACCT是一个内核配置或构建选项。他也是正确的,因此,它与内核的编译方式有关并且不能在运行时添加,IE,在启动时。

尽管如此,即使CONFIG_TASK_DELAY_ACCT设置为“y”,iotop 也经常抛出此错误,因为许多发行版使用此选项编译内核,但默认情况下禁用它。

这意味着无论 iotop 错误消息的字面含义如何,重新编译内核可能都是浪费时间。要确认,只需检查内核配置文件。该文件(配置-内核版本)通常与内核(vmlinuz-内核版本) 和 initrd (initrd.img-内核版本)文件,例如/boot或者可能/efi取决于 EFI 系统分区的安装位置。所以,做,例如

grep TASK_DELAY_ACCT /boot/config*

这可能会返回类似以下内容:

/boot/config-5.15.0-41-generic:CONFIG_TASK_DELAY_ACCT=y
/boot/config-5.15.0-43-generic:CONFIG_TASK_DELAY_ACCT=y

告诉=y我们内核是使用此选项编译的。这并没有使 iotop 错误消息不再那么神秘,但它确实确认了内核是正常的。如果是这样,则检查相应的内核参数 ,kernel.task_delayacct因为启用它应该可以修复 iotop 错误。要检查参数,请执行以下操作:

cat /proc/sys/kernel/task_delayacct

如果返回 0,则表示已禁用; 1、启用。要启用该参数,请执行以下操作之一:

  • 对于当前会话:

    echo 1 > /proc/sys/kernel/task_delayacct

    这应该会立即生效,无需重新启动。

  • 更持久地,将以下内容添加到以下任一行中的新行/etc/sysctl.conf或 中的 .conf 嵌入式文件中/etc/sysctl.d

    kernel.task_delayacct=1

    或者只是这样做:

    # echo "kernel.task_delayacct=1" >> /etc/sysctl.d/20-kernel-task-delayacct.conf

    重启即可生效。

  • 添加delayacct到内核命令行,具体取决于启动管理器。这就是您在询问 systemd-boot 时所采用的方法。

    对于 GRUB2,添加或编辑以下行/etc/default/grub以读取: GRUB_CMDLINE_LINUX_DEFAULT="delayacct"

    然后保存并关闭文件并执行以下操作:

    # update-grub

    重启即可生效。

    对于 systemd 启动,编辑你的入口.conf 文件并简单地添加一个新行:

    options delayacct

    系统引导许可options密钥多次出现在引导加载程序条目文件中,因此只需添加额外的行,而不是编辑现有options密钥,应该就可以了。

    重启即可生效。

答案2

这是一个内核建造选项,因此您无法在运行时“添加”它。

要么构建您自己的内核,要么要求您的维护人员使用此选项构建内核,他们可能会或可能不会这样做,因为某些内核选项依赖于其他选项,而这些依赖性可能是非常不合需要的,例如它们可能会大大减慢内核的速度。

相关内容