34.5. プロセスのタイムスライスの表示

SCHED_RR (ラウンドロビン) ポリシーは、SCHED_FIFO (先入れ先出し) ポリシーとは少し異なります。SCHED_RR は、ラウンドロビンローテーションで同じ優先度を持つ並行プロセスを割り当てます。このようにして、各プロセスにタイムスライスが割り当てられます。sched_rr_get_interval() 関数は、各プロセスに割り当てられたタイムスライスを報告します。

注記

POSIX では、この関数が SCHED_RR スケジューラーポリシーで実行するように設定されたプロセスでのみ機能する 必要があります が、sched_rr_get_interval() 関数は Linux 上の任意のプロセスのタイムスライス長を取得できます。

タイムスライス情報は timespec として返されます。これは、1970 年 1 月 1 日のグリニッジ標準時 00:00:00 の基準時間からの秒数およびナノ秒数です。

struct timespec {
  time_t tv_sec;  /* seconds / long tv_nsec; / nanoseconds */
};

手順

  1. sched_timeslice.c ソースファイルを作成し、テキストエディターで開きます。

    $ {EDITOR} sched_timeslice.c
  2. 次の行を sched_timeslice.c ファイルに追加します。

    #include <stdio.h>
    #include <sched.h>
    
    int main()
    {
       struct timespec ts;
       int ret;
    
       /* real apps must check return values */
       ret = sched_rr_get_interval(0, &ts);
    
       printf("Timeslice: %lu.%lu\n", ts.tv_sec, ts.tv_nsec);
    
       return 0;
    }
  3. ファイルを保存して、エディターを終了します。
  4. プログラムをコンパイルします。

    $ gcc sched_timeslice.c -o sched_timeslice
  5. さまざまなポリシーと優先順位でプログラムを実行します。

    $ chrt -o 0 ./sched_timeslice
    Timeslice: 0.38994072
    $ chrt -r 10 ./sched_timeslice
    Timeslice: 0.99984800
    $ chrt -f 10 ./sched_timeslice
    Timeslice: 0.0

関連情報

  • nice(2) の man ページ
  • getpriority(2) の man ページ
  • setpriority(2) の man ページ