简介
在本次实验中,我们将探讨如何在 Linux 环境中确定已配置的磁盘调度器。了解当前活动的 I/O 调度器对于性能调优和优化存储操作至关重要。
我们将通过以下方法实现这一目标:检查 /sys
文件系统以直接查询块设备的调度器配置;使用 dmesg
命令验证内核环形缓冲区中的调度器信息;检查可能影响设备配置(包括调度器)的 udev 规则。
在本次实验中,我们将探讨如何在 Linux 环境中确定已配置的磁盘调度器。了解当前活动的 I/O 调度器对于性能调优和优化存储操作至关重要。
我们将通过以下方法实现这一目标:检查 /sys
文件系统以直接查询块设备的调度器配置;使用 dmesg
命令验证内核环形缓冲区中的调度器信息;检查可能影响设备配置(包括调度器)的 udev 规则。
cat /sys/block/*/queue/scheduler
检查调度器在这一步中,我们将探讨如何检查 Linux 中块设备正在使用的 I/O 调度器。I/O 调度器是一个内核组件,它决定了块 I/O 操作提交到存储设备的顺序。不同的调度器针对不同的工作负载进行了优化。
我们可以通过查看 /sys
文件系统中的文件来获取这些信息。/sys
文件系统是一个虚拟文件系统,它提供了访问内核数据结构的接口。
要检查所有块设备的调度器,我们可以使用 cat
命令和通配符。*
通配符可以匹配任意字符,因此 /sys/block/*/queue/scheduler
将匹配 /sys/block/
下列出的每个块设备的调度器文件。
如果终端尚未打开,请打开它。你可以通过点击桌面左侧的 Xfce Terminal 图标来打开终端。
现在,输入以下命令并按回车键:
cat /sys/block/*/queue/scheduler
你将看到类似如下的输出:
noop [deadline] cfq
noop [deadline] cfq
输出显示了可用的调度器,当前正在使用的调度器用方括号 []
括起来。在这个例子中,deadline
调度器当前正在为块设备启用。
了解哪个调度器处于活动状态对于性能调优非常重要,特别是在服务器环境或有特定存储需求的系统中。
dmesg
中验证调度器在上一步中,我们使用 /sys
文件系统检查了当前活动的 I/O 调度器。另一个可以找到内核和设备初始化信息的地方是内核环形缓冲区,你可以使用 dmesg
命令查看它。
dmesg
命令用于打印内核的消息缓冲区。这个缓冲区包含了内核在启动和运行期间产生的消息,包括检测到的硬件和设备驱动的信息。
我们可以使用 dmesg
查看系统启动过程中与块设备及其配置的调度器相关的消息。由于 dmesg
的输出可能很长,我们将使用 grep
命令过滤输出,查找包含 "scheduler" 这个词的行。
在终端中输入以下命令并按回车键:
dmesg | grep scheduler
|
符号称为管道。它将左边命令(dmesg
)的输出作为输入传递给右边的命令(grep
)。然后,grep scheduler
会在接收到的输入中搜索包含 "scheduler" 这个词的行。
你应该会看到类似如下的输出:
[ X.XXXXXX] io scheduler noop registered
[ X.XXXXXX] io scheduler deadline registered
[ X.XXXXXX] io scheduler cfq registered
[ X.XXXXXX] sdX: [sd-mod] Asking for cache data failed
[ X.XXXXXX] sdX: [sd-mod] Assuming drive cache: write through
[ X.XXXXXX] sdX: [sd-mod] Enabled discard support
[ X.XXXXXX] sdX: [sd-mod] **Using deadline scheduler**
查找提到 "Using [调度器名称] scheduler" 的行。这可以确认在启动时为你的块设备选择了哪个调度器。输出可能会根据具体的系统配置略有不同,但你应该会看到已注册的调度器以及正在使用的调度器的相关信息。
这种方法提供了系统启动过程中的历史信息,而检查 /sys
文件系统则能让你了解当前的状态。这两种方法都是了解系统 I/O 配置的有用方式。
/etc/udev/rules.d
中的 udev 规则在前面的步骤中,我们学习了如何使用 /sys
和 dmesg
检查活动的 I/O 调度器。现在,让我们来看看系统在检测到设备时是如何配置以自动设置调度器的。这通常由 udev
处理。
udev
是 Linux 内核的设备管理器。它管理 /dev
中的设备节点,并处理系统中添加或移除硬件设备时的所有用户空间事件。udev
使用规则来匹配设备并执行操作,例如设置权限或配置设备参数(如 I/O 调度器)。
udev
规则通常存储在 /etc/udev/rules.d/
目录中。这些文件的扩展名为 .rules
。我们可以检查这些文件,看看是否有针对某些设备专门设置 I/O 调度器的规则。
首先,让我们使用 ls
命令列出 /etc/udev/rules.d/
目录中的文件:
ls /etc/udev/rules.d/
你会看到一个文件列表,可能包含一些与块设备或存储相关的文件。输出可能如下所示:
10-snapd.rules 50-cloudimg-settings.rules 70-snap.core.rules 70-snap.lxd.rules 70-snap.microk8s.rules 70-snap.snapd.rules 70-snap.snapd-desktop-integration.rules 99-vmware-scsi-udev.rules
现在,让我们查看其中一个文件,看看是否能找到与调度器相关的规则。我们将使用 cat
命令显示文件内容。例如,让我们查看 99-vmware-scsi-udev.rules
(确切的文件名可能会因环境而异,但要找一个看起来与存储或设备相关的文件):
cat /etc/udev/rules.d/99-vmware-scsi-udev.rules
你可能会看到匹配特定设备属性然后设置属性的规则。查找使用 ATTR
关键字匹配设备属性并使用 ATTR{queue/scheduler}
属性设置调度器的行。
例如,设置 deadline
调度器的规则可能如下所示:
## Set scheduler for VMware SCSI devices
ACTION=="add|change", SUBSYSTEM=="block", ATTRS{idVendor}=="VMware", ATTRS{idModel}=="VMware Virtual S", ATTR{queue/scheduler}="deadline"
此规则匹配具有特定厂商和型号属性的块设备 (SUBSYSTEM=="block"
),并在它们被添加或更改时将其调度器设置为 deadline
。
通过检查这些规则,你可以了解系统上的默认 I/O 调度器是如何配置的。
在本次实验中,我们学习了如何使用两种主要方法检查 Linux 中配置的磁盘调度器。首先,我们使用 cat
命令查看 /sys/block/*/queue/scheduler
的内容,从而利用 /sys
文件系统。这使我们能够查看可用的调度器,并通过方括号标识出当前正在使用的调度器。
其次,我们使用 dmesg
命令探索内核环形缓冲区,以验证设备初始化期间的调度器信息。这为确认活动调度器提供了另一种方法,并让我们深入了解与存储设备相关的内核消息。最后,我们简要提及了检查 /etc/udev/rules.d
中的 udev 规则,它可能是调度器配置的位置,不过在提供的内容中并未详细介绍具体步骤。