Unix命令最好的是什么?


9

对于快速的基准测试,如何将nice和ionice结合在一起以发挥最大的作用,即命令使用尽可能少的资源(完全不闲置)?

(我认为它类似于`nice -n 19 ionice -c 2 [command],但不确定ionice的“ -n”(类数据参数),手册页对其相关性含糊不清。)


3
加一个聪明的问题标题,但这通常也是一个很好的问题。
Lizardx

Answers:


10

您想要的完整命令是:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]

chrt开头的命令会将内容切换到批处理调度类,这相当于将nice值加0.5。ionice的-n选项是realtime(-c 1)和best-effort(-c 2)选项的简单优先级,较低的值与较高的值一样具有较高的优先级(但范围为0-7)。然而,ionice命令不是严格必需的,因为I / O调度类和优先级是由从CPU调度参数导出缺省,和nice -n 19暗示ionice -c 2 -n 7

但是,通过将CPU和I / O调度类都设置为空闲,可以获得绝对的最小资源使用。在这两种情况下,“空闲”调度程序实际上都不是空闲的调度程序,您仍然可以使用资源,只是所有内容都将具有更高的优先级。

对于CPU调度类,这也使用chrt命令,尽管不需要nice(必须0在空闲调度类中将优先级设置为),如下所示:

chrt -i 0 {command or PID}

niceLinux上的命令镜像了SVR4版本,这意味着它不能更改调度类,只能更改值(该值在Linux上的行为与传统UNIX有所不同,但这有点麻烦)。由于原来的替代调度类是所述POSIX.1E实时SCHED_RRSCHED_FIFO,该命令结束了一套调度类被调用chrt。该-i选项指定使用SCHED_IDLE调度类

对于I / O调度类,请使用ionice。确切的命令如下所示:

ionice -c 3 {command or PID}

-c选项指定要使用的调度类,3是空闲类的编号。请注意,根据使用的是哪个块I / O调度程序,这实际上可能不会有任何影响。特别是,noopI / O调度程序根本不支持优先级或调度类,而且我敢肯定,deadline调度程序(既是传统的调度程序,又是blk-mq调度程序)都不支持。

如果要以编程方式执行此操作(对于您自己的程序,还是要为其他进程进行调整),请查看手册页中的sched_setschedulerioprio_set系统调用(尽管如果您也想要更多的背景知识,那么两者都值得一读)。


0

假设您不希望该命令完全等待其他命令完成,以免造成资源匮乏,则该行将是:

nice -n19 [command]

as ionice将在现代Linux内核上按比例设置。

顺便说一句chrt -b0,它与优美程度无关,而与CPU从一个进程跳到另一个进程的频率有关。这行代码使批处理程序可以更好地利用高速缓存,但是对于其他命令则没有用。如这里所见。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.