当我运行iotop时,第二列"PRIO“显示?err无处不在。

这是什么意思?我在手册中没有发现任何提到错误的地方。
我正在使用自定义编译内核。我的内核中可能缺少一些选项吗?我怎么才能找到哪一个?
我的内核中有所有必需的选项:
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_VM_EVENT_COUNTERS=y发布于 2022-04-21 10:03:12
如何找到iotop所需的内核选项?在手册页中:
CONFIG_TASK_DELAY_ACCT和CONFIG_TASK_IO_ACCOUNTING选项需要在您的Linux内核构建配置中启用,这些选项依赖于CONFIG_TASKSTATS。
换句话说,作为menuconfig菜单(我的5.4)的一部分,在CPU/Task time和stats记帐子菜单下,您应该检查Export task/process statistics through netlink然后是Enable per-task delay accounting以及Enable per-task storage I/O accounting。
也不会伤害检查CONFIG_VM_EVENT_COUNTERS (Enable VM event counters for /proc/vmstat in the General menu)为什么?哈哈,因为在iotop包…中有一个名为vmstat.c的文件所以…以防万一…
补充说,在一天结束时,如果缺少任何强制配置选项,iotop应该会在运行时抱怨。
我不知道在较新的内核中这是否仍然有效,但是,在我的5.4中,可能由于一些重要的开销,尽管CONFIG_TASK_DELAY_ACCT = y,每个任务延迟记帐不会自动激活。
为了实际启用每个任务的延迟记帐,还需要将delayacct添加到内核命令行。
现在,关于?err的显示:我怀疑ncurses ( GUI工具包iotop所依赖的)是部分原因,因为这个库通常以问号的形式显示当前语言设置中没有定义的字符。
因此,要么在区域设置中发现一些不匹配的地方,要么在…中得到一些不匹配。PRIO值在某种程度上是不可打印的。
顺便说一句,你会使用线程IRQ的IOW运行SCHED_RR吗?我可以承认,在任何线程实时调度的情况下,我很难计算出get_ioprio_from_sched函数的输出(在ioprio.c中)。(因为在本例中,尼斯值是没有意义的(即使ps也不尝试显示它),因此ioprio-不错,顺便说一句,返回值依赖于ioprio_nice。
inline int get_ioprio_from_sched(pid_t pid) {
int scheduler=sched_getscheduler(pid);
int nice=getpriority(PRIO_PROCESS,pid);
int ioprio_nice=(nice+20)/5;
if (scheduler==SCHED_FIFO||scheduler==SCHED_RR)
return (IOPRIO_CLASS_RT<<IOPRIO_CLASS_SHIFT)+ioprio_nice;
if (scheduler==SCHED_IDLE)
return IOPRIO_CLASS_IDLE<<IOPRIO_CLASS_SHIFT;
return (IOPRIO_CLASS_BE<<IOPRIO_CLASS_SHIFT)+ioprio_nice;
}https://unix.stackexchange.com/questions/699354
复制相似问题