生活哲学

Linux中如何管理I/O进程的优先级

您是否曾经复制或移动过数十或数百 GB 的数据?如果你这样做了,你肯定会注意到系统在那段时间变得反应迟钝。在 Linux 上,您可以借助 ionice 命令避免这种情况。

使用 ionice 管理 Linux 中 I/O 进程的优先级

  1. 什么是 I/O 优先级?
  2. I/O 优先级如何工作?
  3. 如何使用 ionice 命令
    1. 离子调度类
    2. 有用的 ionice 示例

什么是I/O优先级?

I/O代表Input/Output(输入/输出)。 I/O 设备有很多种类型,但在这种情况下,它们是存储设备。

每个想要读取或写入数据到此类设备的进程都被分配了一个调度类和一个优先级编号(或“nice”值)。这适用于 ext4 等文件系统的 Linux。其他文件系统,例如 ZFS,可能会执行稍微不同的方法来安排驱动器上的读/写操作。此外,应启用 CFQ 调度程序以使其正常工作。您可以检查:

 cat/sys/block/*/queue/scheduler 

“nice”值高的进程优先级较低。

I/O 优先级如何工作?

显式存储设备每秒可以执行的 I/O 操作数 (IOPS) 有限。所以当两个进程要同时读/写时,每个进程都会得到一个IOPS部分。如果它们具有相同的优先级,则每个进程将获得大约 50% 的 IOPS。

Linux中如何管理I/O进程优先级的图1

但是 IOPS 看起来抽象而复杂。为简单起见,您只需要考虑最终结果:读/写速度。假设驱动器可以写入的最大速度为 100MB/s。过程 A 开始写操作。它以 100MB/s 的速度写入驱动器。进程 B 出现并想要写入同一个驱动器。它将以大约 50MB/s 的速度写入,并使进程 A 的写入速度达到相同的值,50MB/s。现在,如果你给进程 B 一个更高的 nice I/O 值,它会以 20MB/s 的速度写入,而让进程 A 以 80MB/s 的速度写入。进程A完成后,进程B将以100MB/s的速度开始写入。

这个例子对于理解一些可能会让一些人感到困惑的东西非常有用。如果一个进程的优先级很低(很好的高值),这并不意味着该进程每次都会变慢。如果它是使用驱动器的唯一进程,它将以最大速度读/写。但是当其他进程需要该驱动器时,它会暂时退出并允许这些进程使用更多的磁盘带宽。对于可能需要数小时才能完成的复制/写入操作,如果您想在此期间使用计算机,请将其分配给低优先级是个好主意。

如何使用ionice命令

命令的一般语法是:

 ionice-c scheduling_class-n priority_nice_value 命令 

离子调度类

Idle (class 3) : 只有当没有其他程序需要访问驱动器时,此类中的进程才会被读/写。这意味着读/写过程只有在不竞争时才会全速运行。当另一个程序需要磁盘时,空闲类中的进程将只读取/写入任何剩余资源。从 100MB/s 可以暂时以 5MB/s 写入,等其他程序完成对驱动器的访问后恢复到 100MB/s。这是您不想减慢系统速度的长期工作的完美课程。没有为此类指定优先级。

命令示例:

 ionice-c 3 cp/home/user/largefile/Backups 

Best-effort (class 2) : 07<之间有一个很好的优先级/值/强>。请记住,较低的数字意味着较高的优先级。当您想要微调两个或更多进程的磁盘访问时间时,请使用此类。

例如,您希望备份完成得更快,并将其值设为 0。此外,您还将 6 部电影传输到另一个驱动器,但不要ush,所以指定一个不错的值。因为这个过程是 7.

命令示例:

 ionice-c 2-n 0 backup_command 

Linux中如何管理I/O进程优先级的图2

Realtime (class 1) :仅在进程应尽快记录并且不被任何其他非常重要的程序中断时使用。大多数用户永远不需要它,应该避免使用它,除非在特殊情况下。这个类还支持从 07 的不错的值。只有 root 可以使用这个类。这意味着您必须在命令中添加 sudo 前缀。

请注意,优先级为 0 的 Realtime 类中的进程可以阻止其他资源进程。实际上,这意味着其他程序可能需要等待几分钟甚至几小时才能完成写入/读取几兆字节的数据。小心使用这个类,只有当你确定你需要它时。如果 2 或 3 类中的重要进程需要访问驱动器,您的系统可能会冻结,直到 Realtime 类中的进程完成。

命令示例:

 sudo ionice-c 1-n 7 bash 

有用的离子示例

在最后一个示例中,不是运行复制/移动命令,而是启动了 shell (Bash)。现在,您在该 shell 中输入的每个后续命令都将继承调度类 I/O 和优先级。您也可以在图形界面上执行此操作。

 ionice-c 3 pcmanfm 

最后一个命令将在 LXDE 桌面环境中启动一个文件浏览器。将 'pcmanfm' 替换为特定桌面中文件资源管理器的名称。现在,从那里开始的所有驱动器活动都将通过 I/O 空闲调度来完成。

在其他情况下,复制/移动操作可能有效。在这种情况下,您可以以不同的方式使用 ionice。

 ionice-c 3-p 4910 

这会改变正在运行的程序的优先级,进程 ID 4910。 您可以通过任务管理器或使用命令,例如 pgrep.

Linux中如何管理I/O进程优先级的图3

ionice 命令在您不想在复制/移动大文件时遇到延迟的桌面上很有用。但请记住,ionice 在服务器上可能更有用。您当然不希望您作为访问者托管的网站在进行完整备份时遇到延迟,对吗?

希望你成功。

相关资讯

评论

回复