cfs调度算法
1. 外贸中CFS是什么
CFS是集装箱货运站(CONTAINER FREIGHT STATION)是处理拼箱货的场所,它办理拼箱货的交接,配载积载后,将箱子送往CY(Container Yard, 集装箱(货柜)堆场),并接受CY交来的进口货箱,进行拆箱,理货,保管,最后拨给各收货人。同时也可按承运人的委托进行铅封和签发场站收据等业务。
CFS的费用,通常是以一个方多少来算的。因为CFS是拼箱产生的费用,所以在装运港和目的港都有发生。在FOB条件下,CFS这一项费用单独列出来向出口商或工厂收取。(因为FOB是运费到付的,所以装运港的费用不计算在运费内);而在CIF条件下,装运港的CFS费用已经包含在货代报给你的海运价之内,所以在装运港不再单收CFS。但进口商在目的港那边还是要付他们那边的CFS费用。
the CFS is issued by your FDA,not CCPIT.However,it must be legalized by CCPIT and then Thai FDA too.Please note that we can not import medical instruments to Thailand without this document(CFS).翻译:CFS是由FDA签发的,而不是中国贸促会,但它必须由中国贸促会合法化,然后由泰国FDA批准。请注意,没有本文件(CFS),我们不能向泰国进口医疗器械。
拓展资料:
CFS完全公平调度程序试图按照对 CPU 时间的 “最大需求(gravest need)” 运行任务;这有助于确保每个进程可以获得对 CPU 的公平共享。如果某个任务休眠时间 “非常短”,那么 CFS 不会将该任务视为休眠任务 — 短暂休眠的进程可能会获得一些额外时间,但是决不会超过它的未休眠时间。
CFS(Completely Fair Scheler,CFS)完全公平调度程序linux 2.6.23 内核附带了一个模块化调度程序内核和一个被实现为调度模块的完全公平调度程序(Completely Fair Scheler,CFS)。Linux 2.6.23 内核的调度程序为其他调度模块并行处理内核打好了基础(这里所说的 “模块化” 并不意味着将调度程序分解为若干可加载的模块,而是指代码本身模块化)。有关调度程序工作原理的更多细节,请参考 developerWorks 文章 “Inside the Linux scheler”(参见本文末尾 参考资料 小节中的链接)。
2. centos采用的是用什么调度算法
题目本身有问题,你想问的是io驱动模型还是进程调度算法?一般来说,说调度算法都是说进程调度算法。
还有你问的centos没有说版本号,没说版本号也就不知道内核版本号。进程调度算法是在不断演进的。2.6版本的内核后就是使用cfs公平调度算法了。
3. linux内核怎么调度系统
1.调度器的概述
多任务操作系统分为非抢占式多任务和抢占式多任务。与大多数现代操作系统一样,Linux采用的是抢占式多任务模式。这表示对CPU的占用时间由操作系统决定的,具体为操作系统中的调度器。调度器决定了什么时候停止一个进程以便让其他进程有机会运行,同时挑选出一个其他的进程开始运行。
2.调度策略
在Linux上调度策略决定了调度器是如何选择一个新进程的时间。调度策略与进程的类型有关,内核现有的调度策略如下:
#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
0: 默认的调度策略,针对的是普通进程。
1:针对实时进程的先进先出调度。适合对时间性要求比较高但每次运行时间比较短的进程。
2:针对的是实时进程的时间片轮转调度。适合每次运行时间比较长得进程。
3:针对批处理进程的调度,适合那些非交互性且对cpu使用密集的进程。
SCHED_ISO:是内核的一个预留字段,目前还没有使用
5:适用于优先级较低的后台进程。
注:每个进程的调度策略保存在进程描述符task_struct中的policy字段
3.调度器中的机制
内核引入调度类(struct sched_class)说明了调度器应该具有哪些功能。内核中每种调度策略都有该调度类的一个实例。(比如:基于公平调度类为:fair_sched_class,基于实时进程的调度类实例为:rt_sched_class),该实例也是针对每种调度策略的具体实现。调度类封装了不同调度策略的具体实现,屏蔽了各种调度策略的细节实现。
调度器核心函数schele()只需要调用调度类中的接口,完成进程的调度,完全不需要考虑调度策略的具体实现。调度类连接了调度函数和具体的调度策略。
武特师兄关于sche_class和sche_entity的解释,一语中的。
调度类就是代表的各种调度策略,调度实体就是调度单位,这个实体通常是一个进程,但是自从引入了cgroup后,这个调度实体可能就不是一个进程了,而是一个组
- static inline struct task_struct *pick_next_task(struct rq *rq){ const struct sched_class *class; struct task_struct *p; /*
- * Optimization: we know that if all tasks are in
- * the fair class we can call that function directly:
- *///基于公平调度的普通进程
- if (likely(rq->nr_running == rq->cfs.nr_running)) {
- p = fair_sched_class.pick_next_task(rq); if (likely(p)) return p;
- }//基于实时调度的实时进程
- class = sched_class_highest; for ( ; ; ) {
- p = class->pick_next_task(rq); //实时进程的类
- if (p) return p; /*
- * Will never be NULL as the idle class always
- * returns a non-NULL p:
- */
- class = class->next; //rt->next = fair; fair->next = idle
- }
- }
- struct rt_prio_array {
- DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1); /* include 1 bit for delimiter */
- struct list_head queue[MAX_RT_PRIO];
- };
- define DECLARE_BITMAP(name,bits)
- unsigned long name[BITS_TO_LONGS(bits)]
- #include <sched.h>#include <stdlib.h>#include <stdio.h>#include <errno.h>#define DEATH(mess) { perror(mess); exit(errno); }void printpolicy (int policy){ /* SCHED_NORMAL = SCHED_OTHER in user-space */
- if (policy == SCHED_OTHER) printf ("policy = SCHED_OTHER = %d ", policy); if (policy == SCHED_FIFO) printf ("policy = SCHED_FIFO = %d ", policy); if (policy == SCHED_RR) printf ("policy = SCHED_RR = %d ", policy);
- }int main (int argc, char **argv){ int policy; struct sched_param p; /* obtain current scheling policy for this process */
- //获取进程调度的策略
- policy = sched_getscheler (0);
- printpolicy (policy); /* reset scheling policy */
- printf (" Trying sched_setscheler... ");
- policy = SCHED_FIFO;
- printpolicy (policy);
- p.sched_priority = 50; //设置优先级为50
- if (sched_setscheler (0, policy, &p))
- DEATH ("sched_setscheler:"); printf ("p.sched_priority = %d ", p.sched_priority); exit (0);
- }
- [root@wang schele]# ./get_schele_policy policy = SCHED_OTHER = 0
- Trying sched_setscheler...
- policy = SCHED_FIFO = 1
- p.sched_priority = 50
4.schele()函数
linux 支持两种类型的进程调度,实时进程和普通进程。实时进程采用SCHED_FIFO 和SCHED_RR调度策略,普通进程采用SCHED_NORMAL策略。
preempt_disable():禁止内核抢占
cpu_rq():获取当前cpu对应的就绪队列。
prev = rq->curr;获取当前进程的描述符prev
switch_count = &prev->nivcsw;获取当前进程的切换次数。
update_rq_clock() :更新就绪队列上的时钟
clear_tsk_need_resched()清楚当前进程prev的重新调度标志。
deactive_task():将当前进程从就绪队列中删除。
put_prev_task() :将当前进程重新放入就绪队列
pick_next_task():在就绪队列中挑选下一个将被执行的进程。
context_switch():进行prev和next两个进程的切换。具体的切换代码与体系架构有关,在switch_to()中通过一段汇编代码实现。
post_schele():进行进程切换后的后期处理工作。
5.pick_next_task函数
选择下一个将要被执行的进程无疑是一个很重要的过程,我们来看一下内核中代码的实现
对以下这段代码说明:
1.当rq中的运行队列的个数(nr_running)和cfs中的nr_runing相等的时候,表示现在所有的都是普通进程,这时候就会调用cfs算法中的pick_next_task(其实是pick_next_task_fair函数),当不相等的时候,则调用sched_class_highest(这是一个宏,指向的是实时进程),这下面的这个for(;;)循环中,首先是会在实时进程中选取要调度的程序(p = class->pick_next_task(rq);)。如果没有选取到,会执行class=class->next;在class这个链表中有三种类型(fair,idle,rt).也就是说会调用到下一个调度类。
在这段代码中体现了Linux所支持的两种类型的进程,实时进程和普通进程。回顾下:实时进程可以采用SCHED_FIFO 和SCHED_RR调度策略,普通进程采用SCHED_NORMAL调度策略。
在这里首先说明一个结构体struct rq,这个结构体是调度器管理可运行状态进程的最主要的数据结构。每个cpu上都有一个可运行的就绪队列。刚才在pick_next_task函数中看到了在选择下一个将要被执行的进程时实际上用的是struct rq上的普通进程的调度或者实时进程的调度,那么具体是如何调度的呢?在实时调度中,为了实现O(1)的调度算法,内核为每个优先级维护一个运行队列和一个DECLARE_BITMAP,内核根据DECLARE_BITMAP的bit数值找出非空的最高级优先队列的编号,从而可以从非空的最高级优先队列中取出进程进行运行。
我们来看下内核的实现
数组queue[i]里面存放的是优先级为i的进程队列的链表头。在结构体rt_prio_array 中有一个重要的数据构DECLARE_BITMAP,它在内核中的第一如下:
5.1对于实时进程的O(1)算法
这个数据是用来作为进程队列queue[MAX_PRIO]的索引位图。bitmap中的每一位与queue[i]对应,当queue[i]的进程队列不为空时,Bitmap的相应位就为1,否则为0,这样就只需要通过汇编指令从进程优先级由高到低的方向找到第一个为1的位置,则这个位置就是就绪队列中最高的优先级(函数sched_find_first_bit()就是用来实现该目的的)。那么queue[index]->next就是要找的候选进程。
如果还是不懂,那就来看两个图
由结果可以看出当nice的值越小的时候,其睡眠时间越短,则表示其优先级升高了。
7.关于获取和设置优先级的系统调用:sched_getscheler()和sched_setscheler
输出结果:
可以看出进程的优先级已经被改变。
4. CFS是什么意思
CFS释义:
1、是集装箱货运站(CONTAINER FREIGHT STATION),是处理拼箱货的场所。它办理拼箱货的交接,配载积载后,将箱子送往CY(Container Yard, 集装箱(货柜)堆场),并接受CY交来的进口货箱,进行拆箱,理货,保管,最后拨给各收货人。同时也可按承运人的委托进行铅封和签发场站收据等业务。
2、慢性疲劳综合症(chronic fatigue syndromes ,CFS)是一种以慢性或反复发作的极度疲劳持续至少半年以上为特征的症候群,同时伴有低热、淋巴结肿痛、肌肉酸痛、关节疼痛、神经精神症状、免疫学异常和其它非特异表现的综合征,1987 年3 月由美国疾病控制中心(CDC) 的holmes 等正式定名并拟定了CFS的诊断标准。
3、cfs是"cubic feet per second"的缩写,流量单位,表示“立方尺/秒”。
4、CFS(Completely Fair Scheler,CFS),完全公平调度程序。
5. Linux上CFS调度算法与实时调度算法的区别
1、实时调度优先于CFS。
2、CFS是按照各进程静态优先级的比例进行时间的分配,在一个周期内各进程都有运行机会;实时调度总是调度实时优先级最高的进程运行,运行时间和机会上都不公平。
6. 深度调度概念深度调度的概念
咨询记录 · 回答于2021-07-17
7. CFS的调度程序
CFS(Completely Fair Scheler,CFS)
完全公平调度程序 Linux 2.6.23 内核附带了一个模块化调度程序内核和一个被实现为调度模块的完全公平调度程序(Completely Fair Scheler,CFS)。
Linux 2.6.23 内核的调度程序为其他调度模块并行处理内核打好了基础(这里所说的 “模块化” 并不意味着将调度程序分解为若干可加载的模块,而是指代码本身模块化)。有关调度程序工作原理的更多细节,请参考 developerWorks 文章 “Inside the Linux scheler”(参见本文末尾 参考资料 小节中的链接)。 最新版调度程序引入的主要特性包括:
模块化调度程序完全公平调度程序(Completely Fair Scheler,CFS)CFS 组调度 模块化调度程序
调度类的引入显着增强了内核调度程序的可扩展性。这些类(调度程序模块)封装了调度策略。这个调度程序将调度策略模块化,但是与 Pluggable CPU 调度程序框架不同的是,并没有把调度程序本身模块化(后者在内核编译时选择默认调度程序,而通过在启动时向内核传递参数来使用其他 CPU 调度程序)。
CFS
完全公平调度程序(CFS)试图按照对 CPU 时间的 “最大需求(gravest need)” 运行任务;这有助于确保每个进程可以获得对 CPU 的公平共享。如果某个任务休眠时间 “非常短”,那么 CFS 不会将该任务视为休眠任务 — 短暂休眠的进程可能会获得一些额外时间,但是决不会超过它的未休眠时间。
CFS 组调度
考虑一个两用户示例,用户 A 和用户 B 在一台机器上运行作业。用户 A 只有两个作业正在运行,而用户 B 正在运行 48 个作业。组调度使 CFS 能够对用户 A 和用户 B 进行公平调度,而不是对系统中运行的 50 个作业进行公平调度。每个用户各拥有 50% 的 CPU 使用。用户 B 使用自己 50% 的 CPU 分配运行他的 48 个作业,而不会占用属于用户 A 的另外 50% 的 CPU 分配。
CFS 调度模块(在 kernel/sched_fair.c 中实现)用于以下调度策略:SCHED_NORMAL、SCHED_BATCH 和 SCHED_IDLE。对于 SCHED_RR 和 SCHED_FIFO 策略,将使用实时调度模块(该模块在 kernel/sched_rt.c 中实现)。
鉴于以下原因,需要对策略作出一些更改:
更好地支持服务器和台式机调度。 提供用户要求的新特性。改进启发式(heuristic)处理。vanilla 调度程序使用启发式处理可以更轻易地实现调度。同样,如果启发式处理错误估测了场景,将导致意料之外的行为。
8. 如何修改CFS调度算法为随机调度算法
在2.6以前,采用的是内核非抢占调度算法。在2.6之后,调度算法可以简单的归为两大类:CFS(公平调度类)和实时调度类,而实时调度类支持内核和用户态抢占。
9. 内核bfs和cfs的区别
CFS是针对小型设备优化的内核种类,没有得到linux官方的认证.而BFS内核则是官方认证的标准内核.详细特点请看:
本帖隐藏的内容
CFS是针对小型设备优化的内核种类,没有得到linux官方的认证.而BFS内核则是官方认证的标准内核.
BFS:宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位址,彻底地搜索整张图,直到找到结果为止。
CFS:一种新的调度算法,根据CPU的最大需求运行进程,降低代码阅读维护难度,算法思路更为简捷.主要难度特点就是动态优先级的运算.我个人认为从这两个角度要比BFS省电.
10. 如何将linux内核的CFS调度算法修改为随机调
1、实时调度优先于CFS。 2、CFS是按照各进程静态优先级的比例进行时间的分配,在一个周期内各进程都有运行机会;实时调度总是调度实时优先级最高的进程运行,运行时间和机会上都不公平。