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