lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 20 Apr 2009 02:56:15 +0200 From: Carl Henrik Lunde <chlunde@...g.uio.no> To: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org> Cc: Jens Axboe <jens.axboe@...cle.com> Subject: CFQ: Preemption/timeout logic reversed? Hi! It seems the preemption "bonus" logic in CFQ is reversed, a preempted process is given an additional delay in start time instead of a bonus. This seems unfair. I'm not sure if it's a good idea to let slice_resid grow without limit as shown below, but isn't this more like the way it was intended to work? Or did I misunderstand something? PS! The comment above cfq_preempt_queue seems outdated too. Code not tested, just showing what I mean: diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 664ebfd..ea18d45 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -292,7 +292,8 @@ cfq_prio_to_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq) static inline void cfq_set_prio_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq) { - cfqq->slice_end = cfq_prio_to_slice(cfqd, cfqq) + jiffies; + cfqq->slice_end = cfq_prio_to_slice(cfqd, cfqq) + cfqq->slice_resid + jiffies; + cfqq->slice_resid = 0; cfq_log_cfqq(cfqd, cfqq, "set_slice=%lu", cfqq->slice_end - jiffies); } @@ -489,8 +490,6 @@ static void cfq_service_tree_add(struct cfq_data *cfqd, rb_key += jiffies; } else if (!add_front) { rb_key = cfq_slice_offset(cfqd, cfqq) + jiffies; - rb_key += cfqq->slice_resid; - cfqq->slice_resid = 0; } else rb_key = 0; @@ -1851,8 +1850,7 @@ cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq, } /* - * cfqq preempts the active queue. if we allowed preempt with no slice left, - * let it have half of its nominal slice. + * cfqq preempts the active queue. start a new time slice. */ static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq) { -- mvh Carl Henrik -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists