- 论坛徽章:
- 1
|
10可用积分
我的想法是故意地减少IO进程的运行时间:修改代码如下
static inline void
__update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr,
unsigned long delta_exec)
{
unsigned long delta_exec_weighted;
struct task_struct *my_p;
+ my_p = task_of(curr);
schedstat_set(curr->exec_max, max((u64)delta_exec, curr->exec_max));
//判断当前进程是不是IO进程
+ if(my_p->ioac.write_bytes > 0){
//是IO进程则减慢vruntime的增长
+ if(count_io > 1){
+ curr->sum_exec_runtime += delta_exec;
+ schedstat_add(cfs_rq, exec_clock, delta_exec);
+ delta_exec_weighted = calc_delta_fair(delta_exec, curr);
+ curr->vruntime += delta_exec_weighted;
+ count_io --;
+ if (entity_is_task(curr)) { //组调度策略由update_curr函数移到这里做一个控制
+ struct task_struct *curtask = task_of(curr);
+ cpuacct_charge(curtask, delta_exec);
+ account_group_exec_runtime(curtask, delta_exec);
+ }
+ }else{//运行IO进程后不作记账
+ schedstat_add(cfs_rq, exec_clock, delta_exec);
+ count_io++;
+ }
+ }else{//不是IO进程则正常运行
+ curr->sum_exec_runtime += delta_exec;
+ schedstat_add(cfs_rq, exec_clock, delta_exec);
+ delta_exec_weighted = calc_delta_fair(delta_exec, curr);
+ curr->vruntime += delta_exec_weighted;
+ if (entity_is_task(curr)) {
+ struct task_struct *curtask = task_of(curr);
+ cpuacct_charge(curtask, delta_exec);
+ account_group_exec_runtime(curtask, delta_exec);
+ }
+ }
update_min_vruntime(cfs_rq);
}
static void update_curr(struct cfs_rq *cfs_rq)
{
struct sched_entity *curr = cfs_rq->curr;
u64 now = rq_of(cfs_rq)->clock;
unsigned long delta_exec;
if (unlikely(!curr))
return;
/*
* Get the amount of time the current task was running
* since the last time we changed load (this cannot
* overflow on 32 bits):
*/
delta_exec = (unsigned long)(now - curr->exec_start);
__update_curr(cfs_rq, curr, delta_exec);
curr->exec_start = now;
- if (entity_is_task(curr)) {//移到__update_curr函数中控制运行
- struct task_struct *curtask = task_of(curr);
- cpuacct_charge(curtask, delta_exec);
- account_group_exec_runtime(curtask, delta_exec);
- }
}
修改后性能并没有提升,请各位大神给点自己的意见,谢谢 |
最佳答案
查看完整内容
此类问题建议从业务模型方面优化,效果可能更明显,比如绑核,专核用于IO。。
|