我对SCSI超时的理解是任何读,写,刷新和其他命令都只有有限的时间来完成.如果超出,则中止命令并向上层报告错误.在等待命令完成时,任何取决于I / O的应用程序都将停止.
我的下一层是mdraid,Linux软件RAID.从我读到的内容来看,mdraid本身没有超时但依赖于较低层的超时命令.
对于内核3.2(Debian),默认的SCSI超时值为90秒.
遇到读取错误的硬盘将尽力在固件定义的时间范围内纠正错误.桌面驱动器的超时设置(通常是独立的,因此更正具有高优先级)和服务器驱动器(通常为RAID,因此很快报告坏扇区,让其他驱动器应答)的设置为低.有时它可以通过smartctl(SCTERC,TLER等)进行调整.
所以我想如果硬盘设置为高ERC超时,内核将在中止请求之前默认等待90秒.只有这样,mdraid才会将应用程序的请求重定向到另一个磁盘.
加载网页的时间为90秒.
假设默认SCSI超时用于桌面目的或非硬盘SCSI设备(磁带驱动器,磁带库可以想到),并且可以安全地调低,例如7秒用于RAID使用,这是正确的吗?
解决方法
适用性取决于您的需求.对你而言,听起来像90秒不太合适.
我在过去看到供应商文档建议将超过60秒的fibre-channel HBA超时设置为更好地处理阵列故障转移,控制器的固件更新等事情.正如你所指出的那样,缺点是:它可能导致很长的滞后以返回存储.
实际上这不是一件坏事.如果LUN上的HBA超时,许多操作系统将强制卸载LUN,这可能比偶尔的长滞后返回块更具破坏性.诀窍是平衡以下几点:
>您的存储堆栈产生长滞后的可能性
>您对后期数据的容忍度
>您对已卸载LUN的容忍度
通常,放入RAID阵列的磁盘应具有较低的超时值,因为它让RAID控制器知道在其他地方处理块请求.这是消费级驱动器与硬件RAID卡一起使用时的一个重要原因;他们的超时很长,这可能导致你不想要的问题.