iotop이 "?err"를 표시하는 이유는 무엇입니까?

iotop이 "?err"를 표시하는 이유는 무엇입니까?

을 실행하면 iotop두 번째 열 "PRIO"가 ?err모든 곳에 표시됩니다.

여기에 이미지 설명을 입력하세요.

무슨 뜻이에요? 매뉴얼 페이지에서 오류에 대한 언급을 찾지 못했습니다.

저는 사용자 정의 컴파일된 커널을 사용하고 있습니다. 내 커널에 일부 옵션이 누락된 것이 아닐까요? 어느 것을 어떻게 찾나요?

편집하다

내 커널에는 필요한 모든 옵션이 있습니다.

CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_VM_EVENT_COUNTERS=y

답변1

iotop에 필요한 커널 옵션을 확인하는 방법은 무엇입니까?매뉴얼 페이지에서:

CONFIG_TASK_DELAY_ACCT 및 CONFIG_TASK_IO_ACCOUNTING 옵션은 Linux 커널 빌드 구성에서 활성화되어야 하며 이러한 옵션은 CONFIG_TASKSTATS에 따라 달라집니다.

즉, make menuconfig 메뉴(내 것은 5.4용)의 일부로 CPU/Task Time and Statistics 하위 메뉴 아래에서도 확인해야 합니다 Export task/process statistics through netlink.Enable per-task delay accountingEnable per-task storage I/O accounting

CONFIG_VM_EVENT_COUNTERS()를 확인해도 아무런 해가 없습니다. Enable VM event counters for /proc/vmstat in the General menu이유는 무엇입니까? 하, iotop 패키지에 vmstat.c라는 파일이 있기 때문에... 혹시... 혹시...

덧붙이자면, 결국 필수 CONFIG 옵션이 누락된 경우 iotop은 런타임에 오류를 표시해야 합니다.

이것이 최신 커널에서도 작동하는지 알 수 없지만 5.4에서는 상당한 오버헤드로 인해 CONFIG_TASK_DELAY_ACCT = y에도 불구하고 작업별 지연 계산이 자동으로 활성화되지 않습니다. 실제로 작업별 대기 시간 계산을 활성화하려면 커널 명령줄에도
추가해야 합니다 .delayacct


이제 디스플레이 문제에 대해?err: 그런 것 같아요저주(iotop이 의존하는 GUI 툴킷)은 부분적으로 책임이 있습니다. 이 라이브러리는 종종 현재 언어 설정에서 정의되지 않은 물음표 문자를 표시하기 때문입니다.
따라서 로케일이 일치하지 않거나... PRIO 값을 인쇄할 수 없습니다.

그런데, 스레드 IRQ의 IOW를 사용하여 SCHED_RR을 실행하시겠습니까? 스레드 실시간 스케줄링의 경우 get_ioprio_from_sched 함수(ioprio.c에 있음)의 출력을 거의 파악할 수 없다는 점을 인정할 수 있습니다. (이 경우 nice 값은 의미가 없으므로(ps가 이를 표시하려고 하지 않더라도) ioprio-nice의 반환 값은 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;
}

관련 정보