Linux SCSI 命令超时是什么?默认是否适合软件 raid?

Linux SCSI 命令超时是什么?默认是否适合软件 raid?

我对 SCSI 超时的理解是,任何读取、写入、刷新和其他命令都有有限的时间来完成。如果超过,命令将被中止并向上层报告错误。在等待命令完成时,任何依赖 I/O 的应用程序都将停滞。

我的下一层将是 mdraid,即 Linux 软件 RAID。据我所知,mdraid 本身没有超时,但依赖于较低层来使命令超时。

对于内核 3.2(Debian),默认 SCSI 超时值为 90 秒。

遇到读取错误的硬盘会尽力在固件定义的时间范围内纠正错误。对于台式机驱动器(通常是独立驱动器,因此纠正具有高优先级),该超时设置较高,而对于服务器驱动器(通常是 RAID,因此尽快报告坏扇区,让其他驱动器回答)则设置较低。有时可以通过 smartctl(SCTERC、TLER 等)进行调整。

所以我猜想如果硬盘的 ERC 超时设置较高,内核默认会等待 90 秒,然后中止请求。只有这样,mdraid 才会将应用程序的请求重定向到另一个磁盘。

90 秒对于网页加载来说是一个很长的时间。

是否可以正确地假设默认的 SCSI 超时是针对桌面目的或非硬盘 SCSI 设备(想到磁带驱动器、磁带库),并且可以安全地调低至 7 秒以用于 RAID?

答案1

适用性取决于您的需求。对您来说,90 秒似乎不太合适。

我以前见过供应商文档建议为了更好地处理阵列故障转移、控制器固件更新等问题,HBA 超时应设置为 60 秒以上。缺点正如您所指出的:它可能导致存储返回延迟非常长。

事实上这并不是一件坏事。如果 LUN 的 HBA 超时,许多操作系统都会强制卸载该 LUN,这比偶尔长时间延迟返回块要麻烦得多。诀窍是平衡以下几点:

  • 您的存储堆栈产生长时间滞后的可能性
  • 您对延迟数据的容忍度
  • 您对卸载 LUN 的容忍度

一般而言,磁盘您放入 RAID 阵列的数据应该具有较低的超时值,因为它可以让 RAID 控制器知道在其他地方处理块请求。这就是为什么消费级驱动器与硬件 RAID 卡一起使用时不是一个好主意的一个重要原因;它们的超时时间很长,这可能会导致您不想要的问题。

相关内容