0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デッドラインスケジューリングポリシー(SCHED_DEADLINE)

Posted at

デッドラインスケジューリングポリシー(SCHED_DEADLINE)とは

SCHED_DEADLINEは、Linux 3.14で導入されたリアルタイムスケジューリングポリシー。
デッドライン駆動型のスケジューリングを実現する。
タスクごとに、

  • 実行時間(Runtime)
  • デッドライン(Deadline)
  • 周期(Period)

を指定し、期限内に処理が完了するよう管理する。
ハードリアルタイム性が求められる自動運転、ロボティクス、金融取引などの分野で有用。
SCHED_FIFOやSCHED_RRよりも精密なスケジューリングが可能で、Linux上でリアルタイム制御を実現する選択肢の一つ。

スケジューリングポリシーごとの優先度

スケジューリングポリシー 概要
SCHED_DEADLINE 最高優先度。指定した期限内に処理が完了するよう管理
SCHED_FIFO 優先度が高いタスクが終了するまで CPU を独占。固定優先度
SCHED_RR SCHED_FIFO と同じ優先度だが、一定時間ごとに CPU を譲る(ラウンドロビン方式)。
SCHED_OTHER(CFS) Linux におけるデフォルト優先度。各プロセスに平等にCPU時間を割り当てる

サンプル

コード(参考文献より引用)

#include<linux/sched.h>
#include<linux/sched/types.h>
#include<memory.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/syscall.h>
int sched_setattr(pid_t pid, const struct sched_attr *attr, unsigned int flags)
{
  return syscall(__NR_sched_setattr, pid, attr, flags);
}
int main(int argc, char **argv){
  struct sched_attr attr;
  memset(&attr, 0, sizeof(attr));
  attr.size = sizeof(attr);
  attr.sched_policy = SCHED_DEADLINE;
  attr.sched_runtime = 500000;
  attr.sched_deadline = 900000;
  attr.sched_period = 10000000;
  if ( sched_setattr(0, &attr, 0)) {
    perror("sched_setattr");
    return 1;
  }
  for(;;){
    printf("test\n");
  }
  return 0;
}

実行結果

$ gcc sample.c
$ sudo ./a.out
$ ps -eo 'pid,class,comm'
    PID CLS COMMAND
    ・
    ・
  28972 TS  sudo
  28973 DLN a.out
  29041 TS  ps

CLS が DLN (デッドライン) として動作していることが確認できる。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?