你目前正处于脱机状态,正在等待 Internet 重新连接

启用了写入缓存功能时磁盘性能下降

Support for Windows XP has ended

Microsoft ended support for Windows XP on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

症状
如果硬盘实现写入缓存,并且计算机使用下面任一种操作系统,那么某些硬盘写入操作的性能可能会比预想的更低:
  • Windows 2000 Service Pack 3 (SP3)
  • 安装有以下 Microsoft 知识库文章中介绍的修补程序的 Windows 2000 Service Pack 2 (SP2):
    281672 在启用“启用了写入缓存”功能后可能会丢失数据
  • Windows XP
尤其是,硬盘写入性能可能会比 SP3 以前的 Windows 2000 各种版本更低。此外,在群集计算机中,对共享磁盘执行的硬盘写入操作可能导致各个节点之间的写入性能有很大差异。
原因
SP3 以前的 Windows 2000 各种版本中包含了一个会阻止某些磁盘命令发出的错误。这些命令只向启用了写入缓存功能的硬盘发出。这些命令会强制将关键数据立即写入磁盘设备,而不是将其临时保存在磁盘的后写缓存中。

有关此错误的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
281672在启用“启用了写入缓存”功能后可能会丢失数据

知识库文章 281672 中描述的修补程序纠正了此错误,使得这些命令在启用写入缓存功能的情况下能够按预期方式发送到磁盘。此修补程序包括在 Windows 2000 SP3 中。类似的修补程序还包括在 Windows XP 中。

按照设计,为了保证关键数据的安全,这些命令会牺牲某些性能。它们确保了关键数据能够立即写入磁盘。只有在特定的磁盘设备启用了写入缓存功能而且它能够通过标准的机制检测到时,才会发出这些命令。当对实现了写入缓存功能的磁盘强制实行此安全行为时,在某些磁盘操作期间您会发现性能有所下降。有关更多详细信息,请参见本文“更多信息”一节。此外,在群集计算机中,硬盘信息可能无法传递到在群集资源发生故障转移时接管该资源的节点。因此,各个节点之间的硬盘写入操作性能可能出现差异。
解决方案

对于运行 Windows 2000 的计算机

警告:如果您实现此项修复(通过安装更新后的驱动程序,并打开“Power Protected”写入缓存选项),Windows 2000 磁盘驱动程序中内置的保护功能(确保关键数据立即写入磁盘,而不是稍后从磁盘的内置缓存中写入磁盘)将被删除。一般情况下请不要执行此项修复,除非您的计算机和任何连接的硬盘都通过硬件设计(可能包括冗余备用电池电源这样的功能)针对意外或无意间断电提供了保护。请与您的计算机和存储设备供应商联系,以确定您的硬件提供的保护级别。除非您了解并愿意接受可能带来的风险级别,并确信已通过适当的硬件电源保护降低了此风险,否则请不要执行此项修复。此外,在群集计算机中,可以通过在各个节点中设置“Power Protected”写入缓存选项,来解决对共享磁盘的硬盘写入操作的性能在各节点之间有所差异的问题。

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
281672在启用“启用了写入缓存”功能后可能会丢失数据

第 1 部分:安装 Windows 2000 更新

Microsoft 现在推出了一种可修改产品默认行为的受支持功能,但是它只能用于修改本文中描述的行为。请只在需要此功能的系统中应用此功能。此功能可能还会接受进一步的测试。因此,如果系统在缺少此功能的情况下并不会受到严重影响,那么 Microsoft 建议您等待包含此功能的下一个 Windows 2000 Service Pack。

要立即获得此功能,请与 Microsoft 产品支持服务部门联系。要获取 Microsoft 产品支持服务电话号码和支持费用信息的完整列表,请访问下面的 Microsoft 网站: 此修补程序的英文版具有下表中列出的文件属性(或更新的属性)。这些文件的日期和时间按协调世界时 (UTC) 列出。当您查看文件信息时,此时间将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用“控制面板”中的“日期和时间”工具中的“时区”选项卡。
日期         时间   版本           大小    文件名-------------------------------------------------------15-Jan-2003  19:42  5.0.2195.6655  34,832  Classpnp.sys15-Jan-2003  19:43  5.0.2195.6655  30,768  Disk.sys				
注意:本修补程序所包含的文件具有 SP3 以后的版本号,但是他们既能在基于 Windows 2000 SP2 的计算机上使用,也能在基于 Windows SP3 的计算机上使用。修补程序包将安装在基于 Windows 2000 SP2 和基于 Windows 2000 SP3 的计算机上。

第 2 部分:配置“Power Protected”写入缓存选项

在安装 Windows 2000 更新然后重新启动计算机以便加载更新的驱动程序后,还必须为每个启用了写入缓存并针对意外断电为其写入缓存提供了保护的磁盘打开“Power Protected” 写入缓存选项。如果“Power Protected”写入缓存选项没有打开,则此更新不会在磁盘行为或性能方面实现任何更改。

要在选定的磁盘上配置“Power Protected”写入缓存选项,请使用 Dskcache.exe 工具。Dskcache.exe 是单独提供的。 有关 Dskcache.exe 工具以及如何启用“power protected”写入缓存选项的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
811392获取 Dskcache.exe 工具以配置“Power Protected”写入缓存选项
注意“Power Protected”写入缓存选项只有在当前磁盘存在的情况下才能启用。默认情况下,“Power Protected”写入缓存选项是禁用的。因此,对于任何可能在应用此设置之后添加的磁盘,此选项是禁用的。如果添加了其他磁盘,请为这些添加的磁盘启用“Power Protected”写入缓存选项,以使该设置生效。

对于运行 Windows XP 的计算机

由于 Windows 2000 和 Windows XP 之间存在的设计差异,目前尚未计划为 Windows XP 发行针对此行为的受支持的更新。
状态
这种现象是设计导致的。
更多信息
通过使用机载缓存,许多磁盘设备提供了增强的性能。机载缓存为正在从磁盘中读取的数据提供了预读缓存,同时对正在写入磁盘的数据提供了后写缓存(又叫延迟写入或“惰”写入)。在某些情况下,将数据立即写入物理磁盘而不是存放在磁盘的机载写入缓存中以等到空闲时才写入是非常重要的。例如,这可以防止在磁盘或控制器(实现写入缓存的任何位置)突然断电时,这些数据丢失或被损坏。

通常可使用两个命令强制将缓存的数据立即写入物理磁盘:
  • flush buffers 命令(用于 SCSI 和 IDE/ATAPI 磁盘设备)会指示磁盘立即将所有缓存数据写入磁盘。对于 SCSI 磁盘,这是通过向磁盘发出 SYNCHRONIZE CACHE 命令实现的。对于 IDE/ATAPI 磁盘,会向磁盘发出 FLUSH CACHE 命令。此命令一般是作为 Windows 程序调用 FlushFileBuffers API 的结果而发出的。写入注册表就是导致调用 FlushFileBuffers API 和向磁盘发出 SYNCHRONIZE CACHE 命令的操作的一个实例。
  • 写入命令(只用于 SCSI 磁盘设备)通过向具有 ForceUnitAccess (FUA) 位设置的磁盘发出 WRITE 命令来实现。此类命令指示磁盘将当前的数据包立即写入磁盘,而绕过机载写入缓存。这通常是调用 WriteFile API 的 Windows 程序向它已打开(通过调用设置了 FILE_FLAG_WRITE_THROUGH 标志的 CreateFile API)的文件写入的结果。病毒扫描软件通常都在设置 FILE_FLAG_WRITE_THROUGH 标志的情况下打开文件。对 FUA 位的支持是可选的,只有一些 SCSI 和光纤信道 (FC) 设备(通常是单个的驱动器,而非 RAID 阵列)实现了此功能。
按照设计,这些命令牺牲了一些性能(这些性能一般由磁盘的机载写入缓存提供)以维护正在写入磁盘的数据的安全。如果这些数据没有通过这些命令立即写入磁盘,并且磁盘突然断电,这些数据将会丢失,而且正在写入的文件可能被损坏。

SP3 以前的 Windows 2000 各种版本中,这些命令不能按要求正确地向磁盘发出。例如,当程序调用 FlushFileBuffers,并且在打开具有 FILE_FLAG_WRITE_THROUGH 设置的文件时未为 WRITE 命令设置 FUA 位时,就不会向磁盘发出 SYNCHRONIZE CACHE 命令。知识库文章 281672 中描述的修补程序解决了此问题,使得这些命令能够按照需要发出,从而提供了预期的保护功能以防止关键数据丢失。

注意:Microsoft SQL Server 在本地数据库数据、日志文件及备份文件上广泛使用 FILE_FLAG_WRITE_THROUGH。本地数据库数据可以包含 SCSI 驱动器和 SAN 驱动器上的数据,但不会包含 NAS 驱动器上的数据。如果在保护其写入缓存的硬件上未启用 Power Protected Storage 功能,则在大型数据库检查点进程中,SQL Server 的性能可能会受到影响。

当在“设备管理器”中为磁盘设备配置“启用了写入缓存”选项时,会出现两种情况:
  • 一个打开或关闭“写入缓存”的命令被发送到磁盘设备。
  • 保存了一个注册表值,磁盘驱动程序使用此值来确定是否将写入缓存管理命令(刷新、写入)发送到磁盘。
本文描述的修补程序提供了一个附加的配置选项,即“Power Protected” 写入缓存选项。在“写入缓存”和“Power Protected”选项均打开时,磁盘的写入缓存将被启用而且磁盘驱动程序将认识到这一情况,但磁盘驱动程序不将写入缓存管理命令(Flush、Write-Through)发送到磁盘。这避免了性能方面的损失(将数据从写入缓存刷新到磁盘媒体时会出现此类性能损失),但带来了以下风险:如果在磁盘的写入缓存中仍有尚未写入磁盘的数据时断电,则磁盘数据可能会丢失或损坏。

下表总结了“写入缓存”和“Power Protected”选项的效果:
写入缓存 Power Protected
效果
禁用 N/A 磁盘不缓存写入数据。
驱动程序不发送刷新/写入命令。
(只有没有在硬件中启用写入缓存的驱动器才可能出现这种情况。)
启用 禁用 磁盘缓存写入数据。
驱动程序发送刷新/写入命令。
(SP3 所具有的默认行为,并且在应用此更新之后,适用于在硬件中启用了写入缓存的驱动器。)
启用 启用 磁盘缓存写入数据。
驱动程序不发送刷新/写入命令。
(SP3 以前版本中的错误引起的行为,适用于在硬件上启用写入缓存的驱动器。)
属性

文章 ID:332023 - 上次审阅时间:12/05/2007 08:38:00 - 修订版本: 12.1

  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows 2000 Service Pack 3
  • Microsoft Windows 2000 Service Pack 2
  • Microsoft Windows 2000 Service Pack 3
  • Microsoft Windows 2000 Service Pack 2
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Service Pack 3
  • kbbug kbfix kbqfe kbhotfixserver KB332023
反馈
t type="text/javascript" src="https://c.microsoft.com/ms.js" '="">