定期的で特定の期限があるいくつかのタスクを実行したいと考えています。Linux スケジューラ (CFS) がこれらのタスクをどのように処理するかを知りたいです。これにはリアルタイム OS は必要ありませんが、通常の Linux システムがこのような種類のワークロードにどのように反応し、どのような期限が守られていないかを確認したいと考えています。
これを行うにはどうすればよいですか?
同様のことができる SCHED_DEADLINE に出会いました。ただし、タスクを RT として扱い、ジョブで EDF などの RT スケジューリング アルゴリズムを呼び出します。それでも私はこれを試してみたかったのですが、失敗しました:
#include <sched.h>
int main ()
{
struct sched_attr attr;
attr.size = sizeof(struct sched_attr);
attr.sched_policy = SCHED_DEADLINE;
attr.sched_runtime = 30000000;
attr.sched_period = 100000000;
attr.sched_deadline = attr.sched_period;
if (sched_setattr(gettid(), &attr, 0))
perror("sched_setattr()");
return 0;
}
このエラーが発生しています:
periodic-task.c: In function ‘main’:
periodic-task.c:5:20: error: storage size of ‘attr’ isn’t known
struct sched_attr attr;
^
periodic-task.c:6:21: error: invalid application of ‘sizeof’ to incomplete type ‘struct sched_attr’
attr.size = sizeof(struct sched_attr);
^
periodic-task.c:7:22: error: ‘SCHED_DEADLINE’ undeclared (first use in this function)
attr.sched_policy = SCHED_DEADLINE;
^
periodic-task.c:7:22: note: each undeclared identifier is reported only once for each function it appears in