
ionice マニュアルには次のように記載されています。
カーネル 2.6.26 以前では、io 優先順位を要求しなかったプロセスが正式に「none」を予約クラスとして使用していましたが、io スケジューラはこれらのプロセスを最善の努力クラスとして扱いました。ベストエフォートカテゴリの優先順位は、プロセスのCPU良いレベル(io_priority =(cpu_nice + 20)/ 5)から動的に派生します。
CFQ ioスケジューラを持つ2.6.26以降のカーネルでは、io優先順位を要求しないプロセスはCPUスケジューリングクラスを継承します。 io優先順位はプロセスのCPUレベルから派生します(カーネル2.6.26以前と同じ)。
2.6.26をリリースしましたが、まだいくつかの未解決の質問が残っています(CFQと仮定します)。
スケジュールされたクラスの継承マッピングは何ですか? TS SCHED_OTHER =最善の努力(ioクラス2)?
値を取得するためにionice -pコマンドを使用すると返されます
none: prio 0
。ただし、ionice manで言及された式は、同じプロセス(CPUパフォーマンスが0の場合)がbest-effort: prio 4
(0 + 20)/ 5 = 4であるためです。
だから今私の仮定はnone: prio 0
=best-effort: prio 4
ですが、誰かがこれが絶対に正確であることを証明するためにいくつかのカーネルソースコードを引用できることを願っています。
答え1
1)文書から計画設計 - CFS.txt:
CFSは「Completely Fair Scheduler」の略で、Ingo Molnarによって実装され、Linux 2.6.23にマージされた新しい「デスクトップ」プロセススケジューラです。これは、通常のスケジューラの以前のSCHED_OTHERインタラクションコードを置き換えます。
O(1) スケジューラと CFQ io スケジューラを混同しているようです。
そのため、SCHED_{NORMAL、BATCH、IDLE}戦略があります。 IDLEには優先順位はありません。無料で一生懸命勉強するリアルタイムクラスを予約してください。
2)残念ながら、入力した命令は表示されません。たとえば、initのio-schedulingをベストエフォートクラスに変更します。
# ionice -p 1
なし:prio 0
#ionice -c2 20 -p 1
#ionice -p 1
ベストエフォート:prio 4