Why does ionice(1) ban the user to set back to 'none' class?
Hi Jens,
I meet a problem when I use ionice(1) to adjust a process's io priority. I do the following operations:
$ ionice -p${pid}
none: prio 0
$ ionice -p${pid} -c2 -n4
$ ionice -p${pid}
best-effort: prio 4
$ ionice -p${pid} -c0 -n0
$ ionice -p${pid}
best-effort: prio 0So I cannot set scheduling class back to 'none'. If I call ioprio_set(2) directly, it will be fine. But if I use ionice(1), I cannot change it. I read the docs about ionice in [1]. I notice this code:
switch (ioprio_class) {
case IOPRIO_CLASS_NONE:
ioprio_class = IOPRIO_CLASS_BE;
^^^^^^^^^^^^^^^^
*It means that we cannot set back to none.*
break;
case IOPRIO_CLASS_RT:
case IOPRIO_CLASS_BE:
break;
case IOPRIO_CLASS_IDLE:
ioprio = 7;
break;
default:
printf("bad prio class %d\n", ioprio_class);
return 1;
}My question is why we need to ban the user to set back to 'none'. Is there some reasons? Thank you.
[Sorry, I don't subscribe linux-doc and linux-kernel mailing list. Please CC to me.]
1. ${linux_src}/Documentation/block/ioprio.txt.
Regards,
Zheng
Quoted 35 lines · Zheng Liu
Hi Jens,
I meet a problem when I use ionice(1) to adjust a process's io priority. I do the following operations:
$ ionice -p${pid} none: prio 0 $ ionice -p${pid} -c2 -n4 $ ionice -p${pid} best-effort: prio 4 $ ionice -p${pid} -c0 -n0 $ ionice -p${pid} best-effort: prio 0So I cannot set scheduling class back to 'none'. If I call
ioprio_set(2)directly, it will be fine. But if I use ionice(1), I cannot change it. I read the docs about ionice in [1]. I notice this code:switch (ioprio_class) { case IOPRIO_CLASS_NONE: ioprio_class = IOPRIO_CLASS_BE; ^^^^^^^^^^^^^^^^ *It means that we cannot set back to none.* break; case IOPRIO_CLASS_RT: case IOPRIO_CLASS_BE: break; case IOPRIO_CLASS_IDLE: ioprio = 7; break; default: printf("bad prio class %d\n", ioprio_class); return 1; }
Quoted 2 lines
My question is why we need to ban the user to set back to 'none'. Is there some reasons? Thank you.
The kernel code does allow it, so it's only in the tool that this restriction exists. I don't think we have a particularly good reason to have it there. This is a tools question, though, not a kernel issue. I suggest you take it up with the util-linux crew. I'm fine with removing this restriction from ionice, especially since you could just roll your own that did it.
Signature · 1 line
Jens Axboe
[CC'd to util-linux mailing list]
Quoted 39 lines · Jens Axboe
Quoted 35 lines · Zheng Liu
Hi Jens,
I meet a problem when I use ionice(1) to adjust a process's io priority. I do the following operations:
$ ionice -p${pid} none: prio 0 $ ionice -p${pid} -c2 -n4 $ ionice -p${pid} best-effort: prio 4 $ ionice -p${pid} -c0 -n0 $ ionice -p${pid} best-effort: prio 0So I cannot set scheduling class back to 'none'. If I call
ioprio_set(2)directly, it will be fine. But if I use ionice(1), I cannot change it. I read the docs about ionice in [1]. I notice this code:switch (ioprio_class) { case IOPRIO_CLASS_NONE: ioprio_class = IOPRIO_CLASS_BE; ^^^^^^^^^^^^^^^^ *It means that we cannot set back to none.* break; case IOPRIO_CLASS_RT: case IOPRIO_CLASS_BE: break; case IOPRIO_CLASS_IDLE: ioprio = 7; break; default: printf("bad prio class %d\n", ioprio_class); return 1; }Quoted 2 lines
My question is why we need to ban the user to set back to 'none'. Is there some reasons? Thank you.
Quoted 7 lines
The kernel code does allow it, so it's only in the tool that this restriction exists. I don't think we have a particularly good reason to have it there. This is a tools question, though, not a kernel issue. I suggest you take it up with the util-linux crew. I'm fine with removing this restriction from ionice, especially since you could just roll your own that did it.
Thanks for your reply. Hopefully we can get some feedbacks from util-linux crew.
Regards,
Zheng
Quoted 52 lines · On 06/19/2012 04:11 AM, [email protected] wrote:
[CC'd to util-linux mailing list]
Quoted 39 lines · Jens Axboe
Quoted 35 lines · Zheng Liu
Hi Jens,
I meet a problem when I use ionice(1) to adjust a process's io priority. I do the following operations:
$ ionice -p${pid} none: prio 0 $ ionice -p${pid} -c2 -n4 $ ionice -p${pid} best-effort: prio 4 $ ionice -p${pid} -c0 -n0 $ ionice -p${pid} best-effort: prio 0So I cannot set scheduling class back to 'none'. If I call
ioprio_set(2)directly, it will be fine. But if I use ionice(1), I cannot change it. I read the docs about ionice in [1]. I notice this code:switch (ioprio_class) { case IOPRIO_CLASS_NONE: ioprio_class = IOPRIO_CLASS_BE; ^^^^^^^^^^^^^^^^ *It means that we cannot set back to none.* break; case IOPRIO_CLASS_RT: case IOPRIO_CLASS_BE: break; case IOPRIO_CLASS_IDLE: ioprio = 7; break; default: printf("bad prio class %d\n", ioprio_class); return 1; }Quoted 2 lines
My question is why we need to ban the user to set back to 'none'. Is there some reasons? Thank you.
Quoted 7 lines
The kernel code does allow it, so it's only in the tool that this restriction exists. I don't think we have a particularly good reason to have it there. This is a tools question, though, not a kernel issue. I suggest you take it up with the util-linux crew. I'm fine with removing this restriction from ionice, especially since you could just roll your own that did it.
Quoted 2 lines
Thanks for your reply. Hopefully we can get some feedbacks from util-linux crew.
That has already been fixed by commit v2.15-45-g5dc9371 more than 2 years ago:
Author: Jakob Unterwurzacher <[email protected]> 2009-01-17 02:38:32
Committer: Karel Zak <[email protected]> 2009-05-27 23:43:18
and the change made it into 2.16.
The current piece of code looks like this:
switch (ioclass) {
case IOPRIO_CLASS_NONE:
if ((set & 1) && !tolerant)
warnx(_("ignoring given class data for none class"));
data = 0;
break;
case IOPRIO_CLASS_RT:
case IOPRIO_CLASS_BE:
break;We'are currently at version 2.21.2.
Have a nice day,
Berny
Quoted 19 lines · Bernhard Voelker
That has already been fixed by commit v2.15-45-g5dc9371 more than 2 years ago:
Author: Jakob Unterwurzacher <[email protected]> 2009-01-17 02:38:32
Committer: Karel Zak <[email protected]> 2009-05-27 23:43:18and the change made it into 2.16.
The current piece of code looks like this:
switch (ioclass) { case IOPRIO_CLASS_NONE: if ((set & 1) && !tolerant) warnx(_("ignoring given class data for none class")); data = 0; break; case IOPRIO_CLASS_RT: case IOPRIO_CLASS_BE: break;
Quoted 1 line
We'are currently at version 2.21.2.
Thanks for pointing out it. I use ionice(1) in rhel5 and its version is 2.13. :-p
Obviously, Documentation/block/ioprio.txt is out of date. Later I will send a patch to fix it.
Regards,
Zheng
Quoted 35 lines · Zheng Liu
Hi Jens,
I meet a problem when I use ionice(1) to adjust a process's io priority. I do the following operations:
$ ionice -p${pid} none: prio 0 $ ionice -p${pid} -c2 -n4 $ ionice -p${pid} best-effort: prio 4 $ ionice -p${pid} -c0 -n0 $ ionice -p${pid} best-effort: prio 0So I cannot set scheduling class back to 'none'. If I call
ioprio_set(2)directly, it will be fine. But if I use ionice(1), I cannot change it. I read the docs about ionice in [1]. I notice this code:switch (ioprio_class) { case IOPRIO_CLASS_NONE: ioprio_class = IOPRIO_CLASS_BE; ^^^^^^^^^^^^^^^^ *It means that we cannot set back to none.* break; case IOPRIO_CLASS_RT: case IOPRIO_CLASS_BE: break; case IOPRIO_CLASS_IDLE: ioprio = 7; break; default: printf("bad prio class %d\n", ioprio_class); return 1; }
Quoted 2 lines
My question is why we need to ban the user to set back to 'none'. Is there some reasons? Thank you.
Since I'm CC'd, I'll explicitly say I haven't a clue why it does this.
Rob
Signature · 2 lines
GNU/Linux isn't: Linux=GPLv2, GNU=GPLv3+, they can't share code. Either it's "mere aggregation", or a license violation. Pick one.
Quoted 36 lines · Rob Landley
Quoted 35 lines · Zheng Liu
Hi Jens,
I meet a problem when I use ionice(1) to adjust a process's io priority. I do the following operations:
$ ionice -p${pid} none: prio 0 $ ionice -p${pid} -c2 -n4 $ ionice -p${pid} best-effort: prio 4 $ ionice -p${pid} -c0 -n0 $ ionice -p${pid} best-effort: prio 0So I cannot set scheduling class back to 'none'. If I call
ioprio_set(2)directly, it will be fine. But if I use ionice(1), I cannot change it. I read the docs about ionice in [1]. I notice this code:switch (ioprio_class) { case IOPRIO_CLASS_NONE: ioprio_class = IOPRIO_CLASS_BE; ^^^^^^^^^^^^^^^^ *It means that we cannot set back to none.* break; case IOPRIO_CLASS_RT: case IOPRIO_CLASS_BE: break; case IOPRIO_CLASS_IDLE: ioprio = 7; break; default: printf("bad prio class %d\n", ioprio_class); return 1; }
Quoted 4 lines
Quoted 2 lines
My question is why we need to ban the user to set back to 'none'. Is there some reasons? Thank you.
Since I'm CC'd, I'll explicitly say I haven't a clue why it does this.
Thank you all the same. :-)
Regards,
Zheng