找不到DEADLINE日程安排政策 [英] DEADLINE scheduling policy not found

查看:265
本文介绍了找不到DEADLINE日程安排政策的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆