Программы, использующие функцию QueryPerformanceCounter, могут работать плохо

В этой статье описывается решение проблемы, возникающей на 32-разрядных компьютерах и компьютерах под управлением 64-разрядных систем, на которых в BIOS включена технология AMD Cool'n'Quiet.

Применимо к: Windows Server 2012 R2, Windows 10 — все выпуски
Оригинальный номер базы знаний: 895980

Симптомы

В следующих операционных системах:

  • Windows Server 2000
  • Windows XP
  • Windows Server 2003
  • Windows Server 2000 guest O.S.
  • Windows XP guest O.S.
  • Гостевой ОС Windows Server 2003

Программа, использующая функцию QueryPerformanceCounter для запроса системного времени, может работать плохо.

Например:

При использовании команды ping для отправки пакетов ICMP на удаленный компьютер в ответе может отображаться отрицательное время отклика. Например, следующая команда ping может создать следующие ответы:

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

Результат:

Pinging x.x.x.x с 32 байтами данных:

Ответ из 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

Кроме того, при использовании счетчиков производительности для логического или физического диска может быть неправильно указано значение высокой задержки.

Примечание.

Эта проблема возникает на компьютере под управлением версии Windows на базе x86 или x64.

Причина

Эта проблема возникает, если на компьютере включена технология AMD Cool'n'Quiet (двухъядерные процессоры AMD) в BIOS или некоторых многоядерных процессорах Intel. Многоядерные или многопроцессорные системы могут столкнуться со смещением счетчика меток времени (TSC), если время между разными ядрами не синхронизировано. Эта проблема может возникнуть в операционных системах, использующих TSC в качестве ресурса хронометрирования.

Разрешение

Чтобы устранить эту проблему, проверка с поставщиком оборудования, чтобы узнать, доступно ли новое обновление драйвера или встроенного ПО для устранения проблемы.

Примечание.

Установка драйвера может добавить параметр /usepmtimer в файл Boot.ini. Этот параметр рассматривается в разделе "Обходной путь".

Обходной путь

Чтобы обойти эту проблему, обновите 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, 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. Перезагрузите компьютер.

Ниже приведен пример файла Boot.ini для системы, содержащей параметр /usepmtimer.

[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. Поскольку 64-разрядный выпуск Windows входил в комплект поставки данного оборудования, обязанности по предоставлению технической поддержки несет изготовитель оборудования. Изготовитель оборудования может устанавливать 64-разрядную версию Windows с собственными компонентами. например специальными драйверами устройств, и использовать дополнительные настройки параметров для повышения производительности оборудования. Корпорация Майкрософт предоставляет ограниченную техническую поддержку пользователям 64-разрядных версий Windows. Однако в первую очередь следует обращаться непосредственно к изготовителю оборудования. Изготовитель обладает наилучшими возможностями по поддержке установленного им программного обеспечения. Если вы приобрели Windows x64, например версию Microsoft Windows Server 2003 x64 отдельно, обратитесь в Корпорацию Майкрософт за технической поддержкой.

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.