最好的 Unix 命令是什么?

最好的 Unix 命令是什么?

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

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

答案1

您想要的完整命令是:

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

最开始的命令chrt会把事情切换到批量调度类,相当于nice值加0.5。 ionice 的 -n 选项是实时 ( -c 1) 和尽力而为 ( -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}

Linux 上的命令nice镜像了 SVR4 版本,这意味着它不能更改调度类,只能更改好值(在 Linux 上的行为也与经典 UNIX 不同,但这有点 OT)。由于最初的替代调度类是 POSIX.1E realtime ,SCHED_RR因此SCHED_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系统调用的手册页(尽管如果您也只是想要更多背景知识,则两者都值得阅读)。

答案2

假设您不希望该命令完全等待其他命令完成,因此不会遭受潜在的损失资源匮乏,该行将是:

nice -n19 [command]

作为伊奥尼斯将在现代 Linux 内核上按比例设置。

顺便说一下,这chrt -b0与是否良好无关,而是与 CPU 从一个进程跳转到另一个进程的频率有关。这一行使得批处理程序更好地利用缓存的时间更长,但对于其他命令来说它毫无用处。正如所见这里

相关内容