SCHED_RRタイムスライスまたはプロセス/スレッドごとの時間を設定するには?

SCHED_RRタイムスライスまたはプロセス/スレッドごとの時間を設定するには?

ポリシーがあるスレッドのタイムスライス(時間量子とも呼ばれる)は、以下に基づいて行うことがSCHED_RRできます。sched_rr_get_interval のマニュアルページ以下を使用して取得できます。

int sched_rr_get_interval(pid_t pid, struct timespec *tp);

これは、異なるプロセス/スレッドに対して異なる値を設定できることを示しています。 ~によると同じマニュアルページただし、を使用してこの値(カーネル3.9ベース)を調整できます。/proc/sys/kernel/sched_rr_timeslice_msしかし、これはスレッド固有の構成を合理的な方法で変更することを許可しないようです。

リアルタイムスケジューリングを扱う他の場所でも、SCHED_RR各スレッドのスレッドタイムスライスを設定する方法に関する情報は提供されません(男性キリストsched_setattrSO:Linuxスケジューラのタイムスライスをどうやって知ることができますか?)。

各スレッドにSCHED_RR個別にタイムスライスを設定できますか?それでは、好まれるアプローチは何ですか?

答え1

リンクされたマニュアルページによると、sched_rr_get_intervalPOSIX.1-2001およびPOSIX.1-2008規格に準拠しています。したがって、POSIX標準は、異なるプロセスが異なるタイムスライス値を持つことを可能にしますが、同じマニュアルページに「POSIXはサイクル時間のサイズを制御するメカニズムを指定しません」と記載されています。

これがおそらく、Linuxでプロセスまたはスレッドごとにサイクルタイムスライス値を設定する既知の方法がない理由です。あなたが指摘したように、私が知って発見した限り、時間の部分はglobalsを介してのみ変更できます/proc/sys/kernel/sched_rr_timeslice_ms

関連情報