本文主要介绍如何在挂载NVMe磁盘的Linux操作系统实例中,配置NVMe磁盘的超时时间。
注意
本实践仅针对Linux操作系统且使用NVMe磁盘的实例有效,例如i3s、ebmg3id、ebmhpcpni2l等规格。更多规格详情可查看实例规格介绍。
使用NVMe(Nonvolatile Memory Express,非易失性内存标准)磁盘的实例,可通过如下参数配置NVMe磁盘进行I/O命令或Admin命令超时时间。
用于指定设备I/O命令(用于数据传输操作的命令,如读写磁盘)的超时时间,单位秒,默认为30秒。
当驱动检测到I/O操作超时,会唤醒超时Handler(指处理超时错误的机制或模块),根据错误处理策略,决定重试I/O操作、返回失败信息或进行设备恢复。
用于指定设备Admin命令(用于主机管理和控制SSD操作的命令,如创建I/O的提交队列)的超时时间,单位秒,默认为60秒。
当驱动检测到Admin操作超时,会唤醒超时Handler(指处理超时错误的机制或模块),根据错误处理策略,决定重试I/O操作、返回失败信息或进行设备恢复。
对于需要快速响应的应用程序,您可以适当减小超时时间,提升I/O操作响应速度。
若资源紧张,需要提高资源利用率,您可以适当减小超时时间,可以更快地释放超时的I/O操作所占用的资源,以便其他任务或I/O操作可以及时获取资源,提高系统的整体效率。
如需提高NVMe磁盘的I/O吞吐量,您可以适当增加超时时间,可以允许更多的I/O操作同时进行,从而充分利用 NVMe 设备的并行处理能力,提高数据传输速度和整体性能。
对于需要高可靠且需要数据完整的场景,您可以适当增加超时时间,确保I/O操作有足够的时间完成,减少因超时导致的数据丢失或错误。
注意
超时参数原理是增大延时容忍度,即延迟发送abort(中止)命令。当超时时间设置过大,并且磁盘后续也没响应时,会导致在很长一段时间内NVMe磁盘的I/O操作没有被abort(中止),也不会进行重试,进而使得业务程序卡在了该I/O操作中,运行异常。
执行如下命令,查看grub文件是否已配置超时参数。
grep -r "timeout" /etc/default/grub
说明
请按需将命令中4294967295
替换为实际超时时间,单位秒。
sed -i "/GRUB_CMDLINE_LINUX=/s/\"$/ nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 \"/" /etc/default/grub
vim /etc/default/grub
i
键进入编辑模式,修改nvme_core.io_timeout
与nvme_core.admin_timeout
参数值。说明
请按需修改超时时间,单位秒。
esc
键,输入:wq
并按回车键,保存并退出文件。根据操作系统与启动方式类型,执行如下命令固化超时参数配置。
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
grub-mkconfig -o /boot/grub2/grub.cfg
grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg
grub-mkconfig -o /boot/grub2/grub.cfg
grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg
执行如下命令重启实例,使配置生效。
reboot
执行如下命令,查看启动参数信息。
cat /proc/cmdline | grep "timeout"
如下图所示,实例I/O操作与Admin操作的超时时间均为4294967295
秒。
执行如下命令,查看NVMe模块参数信息。
cat /sys/module/nvme_core/parameters/io_timeout cat /sys/module/nvme_core/parameters/admin_timeout
如下图所示,实例I/O操作与Admin操作的超时时间均为4294967295
秒。