最好的 Unix 命令是什么?

mah*_*off 9 performance ionice nice

对于快速的基准测试,如何将 nice 和 ionice 结合到最大效果,即让命令使用尽可能少的资源(完全不空闲)?

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

Aus*_*arn 10

你想要的完整命令是:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
Run Code Online (Sandbox Code Playgroud)

chrt开头的命令会切换到批处理调度类,相当于nice值加0.5。ionice 的 -n 选项是实时 ( -c 1) 和尽力而为 ( -c 2) 选项的简单优先级,与 nice 值一样,较低的值具有较高的优先级(但在 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}
Run Code Online (Sandbox Code Playgroud)

niceLinux 上的命令镜像 SVR4 版本,这意味着它不能更改调度类,只有很好的值(这在 Linux 上的行为也与经典 UNIX 不同,但这有点过时)。由于最初的替代调度类是 POSIX.1E realtimeSCHED_RRSCHED_FIFO,因此设置调度类的命令最终被调用chrt。该-i选项指定使用SCHED_IDLE调度类

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

ionice -c 3 {command or PID}
Run Code Online (Sandbox Code Playgroud)

-c选项指定要使用的调度类,3 是空闲类的编号。请注意,根据正在使用的块 I/O 调度程序,这实际上可能不会产生任何影响。特别是,noopI/O 调度器根本不支持优先级或调度类,而且我很确定deadline调度器(传统调度器和 blk-mq调度器)也不支持。

如果您想以编程方式执行此操作,无论是为您自己的程序,还是为其他进程调整内容,请查看系统调用sched_setschedulerioprio_set系统调用的手册页(尽管如果您只想了解更多背景知识,两者都值得一读)。