使用 QueryPerformanceCounter 函数的程序可能性能不佳

本文解决了在 BIOS 中启用了 AMD Cool'n'Quiet 技术的 32 位计算机和基于 x64 的计算机中出现的问题。

适用于:Windows Server 2012 R2、Windows 10 - 所有版本
原始 KB 编号: 895980

症状

在以下操作系统中:

  • Windows Server 2000
  • Windows XP
  • Windows Server 2003
  • Windows Server 2000 来宾 O.S.
  • Windows XP 来宾 O.S.
  • Windows Server 2003 来宾 O.S.

使用 QueryPerformanceCounter 函数查询系统时间的程序可能表现不佳。

例如:

使用 ping 命令将 INTERNET 控制消息协议 (ICMP) 数据包发送到远程计算机时,回复可能会显示负响应时间。 例如,以下 ping 命令可能会生成以下答复:

C:\>ping x.x.x.x

输出:

使用 32 字节数据对 x.x.x 进行 Ping 处理:

来自 x.x.x.x 的回复:bytes=32 time=-59ms TTL=128
来自 x.x.x.x 的回复:bytes=32 time=-59ms TTL=128
来自 x.x.x.x 的回复:bytes=32 time=-59ms TTL=128
来自 x.x.x.x 的回复:bytes=32 time=-59ms TTL=128

此外,如果将性能计数器用于逻辑磁盘或物理磁盘,可能会错误地显示高延迟值。

注意

运行基于 x86 的 Windows 版本或基于 x64 的 Windows 版本的计算机上会出现此问题。

原因

当计算机具有在 BIOS 或某些 Intel 多核处理器中启用的 AMD Cool'n'Quiet 技术 (AMD 双核) 时,会出现此问题。 当不同核心之间的时间不同步时,多核或多处理器系统可能会遇到时间戳计数器 (TSC) 偏移。 使用 TSC 作为计时资源的操作系统可能会遇到此问题。

解决方案

若要解决此问题,检查硬件供应商,查看是否有新的驱动程序/固件更新可用于解决此问题。

注意

驱动程序安装可能会在 Boot.ini 文件中添加 /usepmtimer 开关。 此开关将在“解决方法”部分讨论。

解决方法

若要解决此问题,请更新计算机上的 BIOS。 或者,修改 Boot.ini 文件以使用 /usepmtimer 开关。 为此,请按照下列步骤操作:

  1. 使用具有管理凭据的帐户登录到计算机。

  2. 单击 “开始”,单击“ 运行”,键入 notepad c:\boot.ini,然后单击“ 确定”。

  3. 在 Boot.ini 文件中,以“default”开头的行位于“[启动加载程序]”部分。 此行指定默认操作系统的位置。 该行可能如下所示:

    default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
    

    在“[操作系统]”部分中,找到与“默认”行对应的操作系统行。 例如,如果计算机运行的是 Microsoft Windows Server 2003 企业版 x64 版本,则行应如下所示:

    multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003 Enterprise x64 Edition" /fastdetect /NoExecute=OptIn
    
  4. 在行的末尾,添加一个空格,然后键入 /usepmtimer。 该行现在应如下所示。

    multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003 Enterprise x64 Edition" /fastdetect /NoExecute=OptIn /usepmtimer
    
  5. 保存文件,然后退出记事本。

  6. 重启计算机。

下面是包含 /usepmtimer 开关的系统的示例 Boot.ini 文件。

[boot loader]  
timeout=0  
default=multi(0)disk(0)rdisk(0)partition(2)\\WINDOWS  
[operating systems]  
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003 Enterprise x64 Edition" /fastdetect /NoExecute=OptIn /usepmtimer

注意

Boot.ini 文件位于系统驱动器的根文件夹中。
使用 /UsePmTimer 设置可能会降低性能。

对基于 x64 的 Microsoft Windows 版本的技术支持

如果你的硬件已安装 Windows x64 版本,则硬件制造商会为 Windows x64 版本提供技术支持和帮助。 在这种情况下,硬件制造商会提供支持,因为硬件已随附 Windows x64 版本。 硬件制造商可能使用单独组件自定义了 Windows x64 版本的安装。 单独组件可能包括特定设备驱动程序,也可以包括可选设置以最大限度提高硬件性能。 如果需要有关 Windows x64 版本的技术帮助,Microsoft 将提供合理的帮助。 但是,你可能需要直接与制造商联系。 制造商最有资格为他们在硬件上安装的软件提供支持。 如果单独购买了 Windows x64 版本(如 Microsoft Windows Server 2003 x64 版本),请联系 Microsoft 寻求技术支持。

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。