Windows对磁盘发出读/写的请求之后,操作系统会等待磁盘子系统从存储返回确认信息。如果存储端没有确认信息发回给操作系统,则Windows会继续等待,Windows I/O Timeout是一个存放在注册表中的键值,它决定了操作系统这种等待的时间长短。本文将对Windows I/O Timeout值进行介绍并且提供配置方法与EMC的建议设置。
Windows I/O Timeout配置方法与建议值:
Windows I/O Timeout值存储在以下的注
册表位置:
HKEY_LOCAL_MACHINESystemCurrentControlSetServicesDisk
配置这个值,用户可以通过注册表编辑工具,运行regedit,在左侧展开HKEY_LOCAL_MACHINE – System – CurrentControlSet – Services – Disk。找到TimeoutValue,双击进行修改。EMC建议的是60(60秒),然后重启Windows。如果用户安装Emulex、Qlogic、Brocade等HBA驱动,安装后也会默认将这个设置设置成60。
操作系统达到这个超时值会发生什么?我们假设某些情况下,Fibre Channel网络掉包,而且进一步夸张的情况下,达到了60秒的超时,Windows的disk.sys磁盘类库会在一段时间内对I/O操作进行8次的重试(也就是8分钟),这段时间内,因为Windows还在等待SAN返回数据,Windows操作系统可能会出现卡死状况(也会根据写入数据类型而定)。
60秒的设置对于用户而言,用户不会马上看到I/O Timeout被记录到Windows的Event Log中。然后再要过8分钟,在Disk.sys对I/O进行重试8次以后,才会记录到Event Log中。
为什么不能将I/O Timeout设置到越小越好
可能看到这里,读者会想为什么需要等到8分钟那么长时间才看到超时的Event Log,不能调得更小吗?减少到10秒以下或者更小,甚至有读者认为存储系统1秒超时还是太慢。但是我们需要考虑到的I/O Timeout是一个对于Windows的全局设定。假设用户将超时设定到1秒,就意味着还会影响其他的情况,例如操作系统只能能够等待1秒将一个设休眠的磁盘叫醒。还有,如果Windows操作系统不链接到SAN,还有本地的光盘驱动器启动同样需要操作5秒或者更多时间。所以,将I/O Timeout设置到很小的值会带来磁盘的超时误报,从而影响到正常I/O操作。60秒的设置是EMC的建议值,因为小于这个值在实际存储系统使用环境中,例如Symmetrix SAN boot,Windows Event Log记录超时会带来潜在的性能下降和不正常的错误日志的发生概率。
Windows对磁盘发出读/写的请求之后,操作系统会等待磁盘子系统从存储返回确认信息。如果存储端没有确认信息发回给操作系统,则Windows会继续等待,Windows I/O Timeout是一个存放在注册表中的键值,它决定了操作系统这种等待的时间长短。