优化linux内核pick_next_task函数
来源:互联网 发布:最优化求非线性方程 编辑:程序博客网 时间:2024/05/01 16:09
linux3.3.7的pick_next_task函数的源码如下:
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.h_nr_running)) {p = fair_sched_class.pick_next_task(rq);if (likely(p))return p;}for_each_class(class) {p = class->pick_next_task(rq);if (p)return p;}BUG(); /* the idle class will always have a runnable task */}仔细分析该代码,发现在rq->nr_running==0的时候,并不是最优的代码,fair_sched_class.pick_next_task会被执行两次,stop_sched_class.pick_next_task以及rt_sched_class.pick_next_task会各被执行一次,最后才能执行到idle_sched_class.pick_next_task。那么如何进行优化呢?
static inline struct task_struct *pick_next_task(struct rq *rq){ struct task_struct *p; if(rq->nr_running!=0){ p = stop_sched_class.pick_next_task(rq); if(p) return p; if(rq->rt.rt_nr_running){ p = rt_sched_class.pick_next_task(rq); if(p) return p; } if(rq->cfs.nr_running){ p = fair_sched_class.pick_next_task(rq); if(p) return p; } } else{ p = idle_sched_class.pick_next_task(rq); if(p) return p; } BUG(); /* the idle class will always have a runnable task */}
改为上面的代码后,当rq->nr_running==0的时候便可以直接选择idle_sched_class.pick_next_task,但是不知道有没有什么副作用?
- 优化linux内核pick_next_task函数
- varnish linux 内核优化
- linux内核优化
- 优化Linux内核参数
- linux 内核参数优化
- Linux内核参数优化
- Linux 内核网络优化
- Linux 内核网络优化
- 优化Linux内核
- Linux 内核优化
- Linux内核优化
- 优化linux内核参数
- Linux 内核优化
- linux 内核参数优化
- Linux 内核优化
- linux 内核优化
- linux内核优化
- linux内核优化
- iphone 博客大全
- Visio中的大括号
- JPA 教程(一) .
- 关于 cocos2d-x win32 版本的 cpu 占用改良
- 希尔排序 以及c的实现函数
- 优化linux内核pick_next_task函数
- sock5代理服务器-SOCKS5篇
- 图片格式
- 细数Linux中的那些可爱的查找命令
- js和css压缩工具
- Bitmap
- 面试题8答案
- 如何查找技术资料----我的一点心得体会
- 国信办举行《平凡的感动》首发暨赠书仪式