bfq如何优先服务新产生的优先级高的task

1. st->active对task的组织
(1). __bfq_activate_entity计算entity→start:
min_vstart = st→vtime;
entity->start = min_vstart;
(2). 随后调用bfq_update_fin_time_enqueue计算entity→finish:
entity->finish = entity->start +
bfq_delta(service, entity→weight);
这里可以看到权重高的task对应的entity->finish会比较小。
(3).调用bfq_active_insert把当前task加到st:
bfq_insert(&st->active, entity);
这里st→active tree以entity->finish为key进行组织,entity->finish小的挂到树左边。
所以权重高的task会挂到st→active tree的左边,进而可以被优先服务。

2. sd->next_in_service成员的更新
当新task开始运行的时候,bfq会调用bfq_update_next_in_service对当前group的next_in_service成员进行更新,其中有一个条件是: bfq_gt(next_in_service->finish,new_entity->finish),也就是说新task的finish成员越小,越有机会抢占别的task拿到IO资源,而finish成员的计算公式正是保证了这一点:
entity->finish = entity->start +
bfq_delta(service, entity→weight);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值