找不到DEADLINE日程安排政策 [英] DEADLINE scheduling policy not found
问题描述
我想在C中实现DEADLINE调度策略.我知道该功能是从Linux 3.14.10
开始实现的,并且我正在使用应该足够新的Ubuntu 14.04 Linux #### 3.17.0-031700-lowlatency #201410060605 SMP PREEMPT
.我使用Eclipse开发程序(以sudo启动).
I want to implement the DEADLINE scheduling policy in C. I know the feature is implemented since Linux 3.14.10
and I'm using Ubuntu 14.04 Linux #### 3.17.0-031700-lowlatency #201410060605 SMP PREEMPT
which should be recent enough. I develop the program with Eclipse (launched as sudo).
我已经定义了_GNU_SOURCE
并包含了sched.h
,但是我仍然无法使用关键字SCHED_DEADLINE
,定义struct sched_attr
或使用类似sched_getattr
的功能.
I've defined _GNU_SOURCE
and included sched.h
and I'm still unable to use the keyword SCHED_DEADLINE
, to define a struct sched_attr
or to use function like sched_getattr
.
#define _GNU_SOURCE
#include <sched.h>
在我的/usr/include/
文件夹中都没有定义这些关键字或函数,但是我设法在/usr/src/linux-headers-3.17.0-031700/include/
中找到它们.
我试图将此文件夹包含在项目的构建选项中,但似乎会产生链接错误.
None of these keywords nor functions are defined in my /usr/include/
folder but I've managed to find them in /usr/src/linux-headers-3.17.0-031700/include/
.
I've tried to include this folder in my project's build options but it seems to generate link error.
我不太习惯C语言开发(我本来是JS开发人员),所以如果有人可以向我解释我做错了什么以及如何解决这个问题,那将非常好.
I'm not really used to C developpment (I'm originally a JS developper) so if someone can explain me what I'm doing wrong and how to fix this, that would be very nice.
/usr/include/linux/sched.h
#ifndef _LINUX_SCHED_H
#define _LINUX_SCHED_H
/*
* cloning flags:
*/
#define CSIGNAL 0x000000ff /* signal mask to be sent at exit */
#define CLONE_VM 0x00000100 /* set if VM shared between processes */
#define CLONE_FS 0x00000200 /* set if fs info shared between processes */
#define CLONE_FILES 0x00000400 /* set if open files shared between processes */
#define CLONE_SIGHAND 0x00000800 /* set if signal handlers and blocked signals shared */
#define CLONE_PTRACE 0x00002000 /* set if we want to let tracing continue on the child too */
#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */
#define CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */
#define CLONE_THREAD 0x00010000 /* Same thread group? */
#define CLONE_NEWNS 0x00020000 /* New namespace group? */
#define CLONE_SYSVSEM 0x00040000 /* share system V SEM_UNDO semantics */
#define CLONE_SETTLS 0x00080000 /* create a new TLS for the child */
#define CLONE_PARENT_SETTID 0x00100000 /* set the TID in the parent */
#define CLONE_CHILD_CLEARTID 0x00200000 /* clear the TID in the child */
#define CLONE_DETACHED 0x00400000 /* Unused, ignored */
#define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */
#define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
/* 0x02000000 was previously the unused CLONE_STOPPED (Start in stopped state)
and is now available for re-use. */
#define CLONE_NEWUTS 0x04000000 /* New utsname group? */
#define CLONE_NEWIPC 0x08000000 /* New ipcs */
#define CLONE_NEWUSER 0x10000000 /* New user namespace */
#define CLONE_NEWPID 0x20000000 /* New pid namespace */
#define CLONE_NEWNET 0x40000000 /* New network namespace */
#define CLONE_IO 0x80000000 /* Clone io context */
/*
* Scheduling policies
*/
#define SCHED_NORMAL 0
#define SCHED_FIFO 1
#define SCHED_RR 2
#define SCHED_BATCH 3
/* SCHED_ISO: reserved but not implemented yet */
#define SCHED_IDLE 5
/* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */
#define SCHED_RESET_ON_FORK 0x40000000
#endif /* _LINUX_SCHED_H */
编辑
我想要的文件位于/usr/src/linux-headers-3.17.0-031700/include/
文件夹中.无论如何,我尝试使用几种方法将文件夹添加到我的项目中.首先使用gcc的-I
标志,然后使用C_INCLUDE_PATH
环境变量.
Files I want are located in the /usr/src/linux-headers-3.17.0-031700/include/
folder. Anyway, I tried to add the folder to my project using several methods. Firstly using -I
flag of gcc and next using the C_INCLUDE_PATH
environment variable.
在两种方式下,gcc都在默认位置优先搜索并找到了错误的<sched.h>
文件.我尝试使用-nostdinc
选项禁止显示默认位置,但情况更糟……我收到很多错误.
In both ways, gcc searched in priority in default locations and found the wrong <sched.h>
file. I tried to used -nostdinc
option to suppress default locations but this is even worse... I get a lot of errors.
推荐答案
我实际上是用kernel 4.4.0-21-lowlatency
升级到Ubuntu 16.04 LTS
的,现在默认情况下定义了关键字SCHED_DEADLINE
.
I actually upgraded to Ubuntu 16.04 LTS
with a kernel 4.4.0-21-lowlatency
and the key word SCHED_DEADLINE
is now defined by default.
问题是struct sched_attr
,方法sched_getattr() / sched_setattr()
仍然缺失!
The problem is struct sched_attr
and methods sched_getattr() / sched_setattr()
are still missing !
经过一番研究(感谢Google),我发现了这条文章由内核开发人员发出.在文档的末尾,它描述了如何使用截止日期调度策略.他们只是简单地定义结构,并使用syscall
作为get/set方法.
After some research (thanks Google) I found this article emitted by the kernel developpers. At the end of the document, it is describe how to use deadline scheduling policy. They simply define by themselves the structure and use syscall
for the get/set methods.
这篇关于找不到DEADLINE日程安排政策的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!