Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cfq-iosched: make io priorities inherit CPU scheduling class as well as nice

We currently set all processes to the best-effort scheduling class,
regardless of what CPU scheduling class they belong to. Improve that
so that we correctly track idle and rt scheduling classes as well.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>

+16 -2
+2 -2
block/cfq-iosched.c
··· 1303 1303 printk(KERN_ERR "cfq: bad prio %x\n", ioprio_class); 1304 1304 case IOPRIO_CLASS_NONE: 1305 1305 /* 1306 - * no prio set, place us in the middle of the BE classes 1306 + * no prio set, inherit CPU scheduling settings 1307 1307 */ 1308 1308 cfqq->ioprio = task_nice_ioprio(tsk); 1309 - cfqq->ioprio_class = IOPRIO_CLASS_BE; 1309 + cfqq->ioprio_class = task_nice_ioclass(tsk); 1310 1310 break; 1311 1311 case IOPRIO_CLASS_RT: 1312 1312 cfqq->ioprio = task_ioprio(ioc);
+14
include/linux/ioprio.h
··· 68 68 } 69 69 70 70 /* 71 + * This is for the case where the task hasn't asked for a specific IO class. 72 + * Check for idle and rt task process, and return appropriate IO class. 73 + */ 74 + static inline int task_nice_ioclass(struct task_struct *task) 75 + { 76 + if (task->policy == SCHED_IDLE) 77 + return IOPRIO_CLASS_IDLE; 78 + else if (task->policy == SCHED_FIFO || task->policy == SCHED_RR) 79 + return IOPRIO_CLASS_RT; 80 + else 81 + return IOPRIO_CLASS_BE; 82 + } 83 + 84 + /* 71 85 * For inheritance, return the highest of the two given priorities 72 86 */ 73 87 extern int ioprio_best(unsigned short aprio, unsigned short bprio);