iotop 仅针对特定进程抱怨“内核中未启用 CONFIG_TASK_DELAY_ACCT”

iotop 仅针对特定进程抱怨“内核中未启用 CONFIG_TASK_DELAY_ACCT”

我试图使用 来iotop确定 CPU 是否在任何时候都在等待名为 的特定程序的 I/O bwa(它是下一代序列比对程序)。如果我在启动时iotop没有指定特定进程(),我会获得所有预期信息,包括和,但我感兴趣的进程不会显示在列表中。如果我随后指定我感兴趣的进程,则会抱怨“内核中未启用 CONFIG_TASK_DELAY_ACCT”。为了合理起见,我在内核配置文件( )中验证了已启用()。-p pidSWAPINIO>iotop/boot/config-3.7.10-1.11-desktopCONFIG_TASK_DELAY_ACCTCONFIG_TASK_DELAY_ACCT=y

问题:

  1. 当我知道某个特定进程已启用iotop“思考”时,什么原因导致它未启用?CONFIG_TASK_DELAY_ACCT
  2. 我可以修复它吗?
  3. 我是否忽略了一些愚蠢的事情?

答案1

布洛克的博客描述了如何使用 Ubuntu 来实现这一点:

  1. 编辑/etc/default/grub,将“delayacct”作为选项添加到 GRUB_CMDLINE_LINUX_DEFAULT 条目中。如果您尚未修改该行,它将从

    GRUB_CMDLINE_LINUX_DEFAULT=""
    

    GRUB_CMDLINE_LINUX_DEFAULT="delayacct"
    
  2. 运行“sudo update-grub”

  3. 重新启动,您就可以开始了。

答案2

更新:

延迟会计内核文档

启动时默认禁用延迟记账。要启用,请添加:

delayacct

内核启动选项。或者,使用sysctl kernel.task_delayacct在运行时切换状态。但请注意,只有在启用后启动的任务才会有delayacct信息。

形式iotop-c手册页

从 Linux 内核 5.14.x 开始,task_delayacct可在运行时配置,默认设置为关闭。此设置可以在交互模式下通过 Ctrl-T 快捷键更改。在批处理模式下,当设置为 OFF 时会打印警告。从命令行可以通过以下方式启用此功能:

$ sudo sysctl kernel.task_delayacct=1

并再次被禁用:

$ sudo sysctl kernel.task_delayacct=0

当不使用此程序或其他监控程序时,建议关闭此选项,因为启用它会对系统性能产生一定影响。

答案3

扩展了以下精彩的答案和解释@Irfan Latif,我将其用作 zsh 别名:

alias iotopd='bash -c "sudo sysctl kernel.task_delayacct=1 && sudo iotop ; sudo sysctl kernel.task_delayacct=0"'

请注意 iotop 后面的 ;,因为它会在每次退出时运行,而不仅仅是成功退出时运行。

此别名将设置内核参数,运行命令,然后将其设置回 0。如果您只在单个会话中运行它,则很有用,但对于多个用户来说会很麻烦。

您还可以将其作为 shell 脚本运行,这很有用,因为它会在退出时陷入困境。

#!/bin/bash

# This script enables task delay accounting in the Linux kernel, runs iotop,
# then on exit sets task_delayacct back to 0.

# Disable task delay accounting when the script exits
disable_task_delayacct() {
  sudo sysctl kernel.task_delayacct=0
}

# Trap the EXIT signal to call the disable_task_delayacct function
trap 'disable_task_delayacct' EXIT

# Enable task delay accounting
sudo sysctl kernel.task_delayacct=1

# Run iotop with administrative privileges
sudo iotop

答案4

您可以通过发出以下命令简单地运行它而无需重新启动:

sysctl kernel.task_delayacct=1

相关内容