答え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 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というファイルがあるので...もしかして...もしかして...
ちなみに、最終的に必須の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;
}