linux内核编程4部曲之三:修改O(1)调度算法

xiaoxiao2021-02-28  109

 

linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说

linux内核编程4部曲之二:增加linux内核系统调用

linux内核编程4部曲之三:修改O(1)调度算法

linux内核编程4部曲之四:模块编程

 

一、实验目的

    修改O(1)调度程序,使交互性非常强的程序(IO密集型)在时间片用完后,不放置到活动数组,而放入过期数组(与O(1)调度实现相反),并测试cpu密集型和IO密集型进程的调度性能。 二、修改调度程序     该调度逻辑在2.6.12内核中,是在kernel/sched.c文件里的scheduler_tick()函数里实现的,进入该函数,定位到如下代码: if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) {enqueue_task(p, rq->expired);if (p->static_prio < rq->best_expired_prio) rq->best_expired_prio = p->static_prio;} else enqueue_task(p, rq->active);}

 第一个if判断里就是判断CPU消耗和IO消耗的,去掉if判断,使在时间片用完时,系统直接将进程不加判断直接加入过期队列,修改后的代码如下:

    enqueue_task(p, rq->expired);if(p->static_prio < rq->best_expired_prio)rq->best_expired_prio = p->static_prio 三、编译内核,修改grub引导程序     该内核重新编译,并修改grub启动选项,从而可以使实验在两个O(1)调度程序下运行,如下图。如我们要测试更改前的调度,就引导第三个系统选项,如果要测试更改后的,则引导第一个(默认)。     四、性能测试     1、测试修改调度前后cpu密集程序和IO密集程序前后性能变化     A、测试cpu密集程序前后性能的程序cpu_app_test.cpp关键代码为:          B、测试IO密集型前后性能对比程序io_app_test.cpp关键代码为:                  C、将两个程序分别编译成可执行文件:cpu_app_test、io_app_test       D、编写测试程序性能的调用脚本auto_test.sh                E、分别在修改调度的系统和未修改调度的系统,调用测试脚本,auto_test.sh,并且查看记录文件cpu_app_test.log和io_app_test.log                                                             未修改调度的系统 cpu 密集程序结果                                        修改了调度的 cpu 密集程序结果                                                未修改调度的 IO 密集型程序结果                                                  修改了调度的 IO 密集型程序结果 2、测试修改前后cpu密集程序与IO密集型程序性能比较 A、在测试基础上,修改cpu_app_test.cpp和io_app_test.cpp程序,将子进程的时间间隔打印功能注释掉      B、屏蔽掉子进程的时间间隔功能后,我们可以专注于整个程序(cpu密集或IO密集)所有子进程完成后的总时间,分别在两个系统中利用auto_test.sh脚本,测试运行20次。 C、分别在两个系统中查看日志文件,io_app_test.log、cpu_app_test.log      D、对比结果    修改调度前的结果:        修改调度后的结果     <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 阅读(66) | 评论(0) | 转发(0) | 0

上一篇:linux内核编程4部曲之二:增加linux内核系统调用

下一篇:linux内核编程4部曲之四:模块编程

相关热门文章 linux 常见服务端口xmanager 2.0 for linux配置【ROOTFS搭建】busybox的httpd...openwrt中luci学习笔记Linux里如何查找文件内容... 给主人留下些什么吧!~~ 评论热议
转载请注明原文地址: https://www.6miu.com/read-57885.html

最新回复(0)