6 #ifndef UTILS_UTL_SCHED_H
7 #define UTILS_UTL_SCHED_H
9 #include <linux/sched.h>
10 #include <linux/types.h>
13 #define gettid() syscall(__NR_gettid)
17 #define __NR_sched_setattr 314
18 #define __NR_sched_getattr 315
22 #define __NR_sched_setattr 351
23 #define __NR_sched_getattr 352
27 #define __NR_sched_setattr 380
28 #define __NR_sched_getattr 381
35 enum class SchedType { OTHER, DEADLINE, FIFO, RR };
55 inline int schedSetAttr(pid_t pid,
const SchedAttr* attr,
unsigned int flags) {
56 return syscall(__NR_sched_setattr, pid, attr, flags);
59 inline int schedGetAttr(pid_t pid, SchedAttr* attr,
unsigned int size,
unsigned int flags) {
60 return syscall(__NR_sched_getattr, pid, attr, size, flags);
63 inline bool schedSelect(pid_t pid, SchedType sched_type,
unsigned int dt_usec,
int priority = 0) {
64 SchedAttr sched_attr = {};
65 sched_attr.size =
sizeof(sched_attr);
67 case SchedType::DEADLINE:
68 sched_attr.sched_policy = SCHED_DEADLINE;
69 sched_attr.sched_period = sched_attr.sched_deadline = dt_usec * 1000;
70 sched_attr.sched_runtime = sched_attr.sched_period * 0.9;
73 sched_attr.sched_policy = SCHED_FIFO;
74 sched_attr.sched_priority = priority;
77 sched_attr.sched_policy = SCHED_RR;
78 sched_attr.sched_priority = priority;
80 case SchedType::OTHER:
82 sched_attr.sched_policy = SCHED_OTHER;
83 sched_attr.sched_nice = priority;
87 return schedSetAttr(pid, &sched_attr, 0) >= 0;
94 #endif // UTILS_UTL_SCHED_H