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 コマンドを使用してインターネット制御メッセージ プロトコル (ICMP) パケットをリモート コンピューターに送信すると、応答に否定的な応答時間が表示されることがあります。 たとえば、次の ping コマンドを使用すると、次の応答が生成される場合があります。

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

出力:

32 バイトのデータで x.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 を更新します。 または、/usepmtimer スイッチを使用するように Boot.ini ファイルを変更します。 これを行うには、次の手順を実行します。

  1. 管理者資格情報を持つアカウントを使用して、コンピューターにログオンします。

  2. [ スタート] をクリックし、[ 実行] をクリックし、「」と入力 notepad c:\boot.iniし、[OK] をクリック します

  3. Boot.ini ファイルでは、"default" で始まる行が "[ブート ローダー]" セクションにあります。 この行は、既定のオペレーティング システムの場所を指定します。 行は次のように表示される場合があります。

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

    [[オペレーティング システム]] セクションで、"既定" 行に対応するオペレーティング システムの行を見つけます。 たとえば、コンピューターが Microsoft Windows Server 2003 Enterprise x64 Edition を実行している場合、行は次のようになります。

    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 Server 2003 x64 Edition など、Windows x64 エディションを個別に購入した場合、テクニカル サポートについてはマイクロソフトにお問い合わせください。

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。