mirror of
https://github.com/torvalds/linux.git
synced 2025-11-04 18:49:34 +02:00
CFQ has an optimization for cooperated applications. if several io-context have close requests, they will get boost. But the optimization get abused. Considering thread a, b, which work on one file. a reads sectors s, s+2, s+4, ...; b reads sectors s+1, s+3, s +5, ... Both a and b are sequential read, so they can open idle window. a reads a sector s and goes to idle window and wakeup b. b reads sector s+1, since in current implementation, cfq_should_preempt() thinks a and b are cooperators, b will preempt a. b then reads sector s+1 and goes to idle window and wakeup a. for the same reason, a will preempt b and reads s+2. a and b will continue the circle. The circle will be very long, and a and b will occupy whole disk queue. Other applications will nearly have no chance to run. Fix this limiting coop preempt until a queue is scheduled normally again. Signed-off-by: Shaohua Li <shaohua.li@intel.com> Acked-by: Jeff Moyer <jmoyer@redhat.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com> |
||
|---|---|---|
| .. | ||
| as-iosched.c | ||
| blk-barrier.c | ||
| blk-core.c | ||
| blk-exec.c | ||
| blk-integrity.c | ||
| blk-ioc.c | ||
| blk-iopoll.c | ||
| blk-map.c | ||
| blk-merge.c | ||
| blk-settings.c | ||
| blk-softirq.c | ||
| blk-sysfs.c | ||
| blk-tag.c | ||
| blk-timeout.c | ||
| blk.h | ||
| bsg.c | ||
| cfq-iosched.c | ||
| compat_ioctl.c | ||
| deadline-iosched.c | ||
| elevator.c | ||
| genhd.c | ||
| ioctl.c | ||
| Kconfig | ||
| Kconfig.iosched | ||
| Makefile | ||
| noop-iosched.c | ||
| scsi_ioctl.c | ||