如何检查块设备是否支持nowait特性(Ubuntu 22.04内核6.2.6)
如何检查Ubuntu 22.04(内核6.2.6)对nowait异步IO特性的支持
针对你的需求,下面是具体的检查步骤,覆盖块设备、内核/文件系统以及用户空间支持三个层面:
块设备层面的检查
nowait的支持很大程度依赖块设备本身的硬件和驱动配置,你可以这么做:
查看设备的队列属性
先看目标设备是否是非旋转存储(比如SSD,这类设备对nowait的支持更友好):cat /sys/block/[你的设备名]/queue/rotational返回
0代表非旋转设备,1是机械硬盘。
再看设备使用的IO调度器,多队列调度器(如mq-deadline、kyber)通常更好支持nowait:cat /sys/block/[你的设备名]/queue/scheduler括号里的是当前正在使用的调度器。
用fio工具做实际测试
这是最直接的验证方式,先安装fio:sudo apt install fio创建一个测试配置文件(注意替换成你的测试分区,务必备份数据):
[nowait-validation] ioengine=libaio rw=randread bs=4k numjobs=1 size=512M filename=/dev/[你的测试分区] direct=1 iodepth=16 nowait=1运行测试:
sudo fio nowait-validation.fio如果没有出现
nowait not supported这类报错,说明设备支持nowait。
内核与文件系统层面的检查
检查内核编译配置
Ubuntu 22.04的6.2.6内核默认应该开启了nowait相关的支持,你可以查看内核配置确认:grep -E "CONFIG_AIO|CONFIG_EXT4_FS_NOWAIT|CONFIG_NOWAIT" /boot/config-$(uname -r)只要能看到
CONFIG_AIO=y(异步IO基础支持)、对应文件系统的nowait配置(比如ext4的CONFIG_EXT4_FS_NOWAIT=y),就说明内核层面支持。验证文件系统的nowait挂载支持
尝试给测试分区重新挂载并添加nowait选项:sudo mount -o remount,nowait /dev/[你的测试分区] [挂载点]如果没有报错,说明该文件系统支持nowait挂载。不要随便在根分区做这个操作,建议用单独的测试分区。
用户空间依赖检查
nowait需要依赖libaio库,确认它的开发包是否安装:
dpkg -l | grep libaio-dev
如果没安装,执行下面的命令安装:
sudo apt install libaio-dev
内容的提问来源于stack exchange,提问作者YjyJeff
相关产品推荐
相关产品推荐

