在我提交并自己打上child-runs-first补丁之前,我做了一个实验,目的是验证一下我先前理论分析的结果,我觉得子进程无论如何抢占父进程的几率都会比不抢占要大些,当然前提是要有的,具体见下面的试验。空有理论是没有用的,理论上cfs调度器执行严格的归一化,然而实际上却不是那样的,实践结果永远比理论更加现实,因为不执行归一化丝毫影响不了cfs调度器选择最小vruntime的进程,这很简单,每一个进程按照自己的权值和当前的系统调度周期执行动态时间片的时间,同时按照不同的速率推进自己的虚拟时间,调度器只要能保证各个进程在运行按照其权值分给它们的不同时间片之后可以向前推进相同的虚拟时间就可以了,管他什么归一化呢?正是这样,cfs调度器运行的很好。

环境:单cpu,HZ=250,linux-2.6.28原始内核(没有打我的child_runs_first补丁)

内核配置与实验前提:sysctl_sched_child_runs_first=0,sysctl_sched_features=(仅打开AKEUP_PREEMPT),sysctl_sched_wakeup_granularity=0,sysctl_sched_latency_ns=20000000.

目的:在没有sysctl_sched_child_runs_first策略的情况下测试cfs调度器在子进程被唤醒时的行为

测试程序:

-------stub--------

/*模拟cpu进程,将cfs_rq的nr_running提高到一定数量*/

int main(int argc,char*argv[] )

{

nice(atoi(argv[1]));

int a = 1,b=0;

while(a++||1)

{

b+=a;

}

}

-------child_run_delay--------

/*父进程延迟一会再fork,避免托shell在fork父进程时给了父进程min_vruntime的福*/

#include

#include

#include

int main(int argc,char *argv[])

{

int v = atoi(argv[1]);

nice(v);

unsigned long i = 1000000;

while(i-->0)

{

v++;

}

if(fork() == 0)

{

printf("sub/n");

exit(0);

}

printf("main,%d/n",v);

}

-------child_run_nodelay--------

/*马上fork子进程,托父进程vruntime很小的福*/

#include

#include

#include

int main(int argc,char *argv[])

{

int v = atoi(argv[1]);

nice(v);

if(fork() == 0)

{

printf("sub/n");

exit(0);

}

printf("main/n");

}

测试过程:连续创建9个stub进程,nice值分散开来,然后以不同的nice值运行child_run_delay和child_run_nodelay。

结果:

测试代码中i=1000时的测试结果

0

收藏

dog250

1243篇文章,156W+人气,0粉丝

Ctrl+Enter 发布

发布

取消

推荐专栏更多

5353379fc95da1d7d34fd243b9ace17f.jpg
全局视角看大型园区网

路由交换+安全+无线+优化+运维

共40章 | 51CTO夏杰
¥51.00 1697人订阅
45862f289339dc922ffda669fd74ad9b.jpg
网工2.0晋级攻略 ——零基础入门Python/Ansible

网络工程师2.0进阶指南

共30章 | 姜汁啤酒
¥51.00 1570人订阅
a940c66317ecbe58436a2ad3831c2d7d.png
基于Python的DevOps实战

自动化运维开发新概念

共20章 | 抚琴煮酒
¥51.00 431人订阅
629650e188ddde78b213e564c2e9ebff.jpg
负载均衡高手炼成记

高并发架构之路

共15章 | sery
¥51.00 507人订阅
dc6736c5fd50474b5df8b76b040e3d03.jpg
带你玩转高可用

前百度高级工程师的架构高可用实战

共15章 | 曹林华
¥51.00 462人订阅
f92360e227f9d91cdff7ea95120630ef.png
left-qr.jpg

扫一扫,领取大礼包

0

分享
qr-url?url=https%3A%2F%2Fblog.51cto.com%2Fdog250%2F1274136
dog250
noavatar_middle.gif