Поделиться через


Производительность и потребление памяти в WOW64

Производительность и потребление памяти в WOW64 определяются следующими факторами:

  • Оборудование процессора. Эмуляция инструкций выполняется на микросхеме. На процессоре x64 инструкции x86 выполняются в собственном коде процессором. Таким образом, скорость выполнения в WOW64 на x64 аналогична скорости выполнения в 32-разрядной версии Windows. На процессоре Intel Itanium и любом процессоре ARM64 больше программного обеспечения участвует в эмуляции, и производительность страдает в результате.
  • Затраты на API. Эта нагрузка невелика по сравнению с системными вызовами ядра NT. Функции ядра NT предназначены для вызова редко.
  • Размер виртуальной памяти. На процессоре Intel Itanium WOW64 добавляет значительные издержки, если одновременно выполняются два или более экземпляров одного и того же 32-разрядного приложения. Это связано с собственными 8 КБ-страницами в Intel Itanium, что усложняет эмуляцию собственных 4 КБ страниц на архитектуре x86 (дополнительные страницы помечены как доступные для записи; все записываемые страницы являются закрытыми для процесса). Это может негативно повлиять на масштабируемость служб терминалов на определенных процессорах. Это не так для процессора x64.
  • Рабочий набор. WOW64 увеличивает размер рабочего набора приложения.

WOW64 позволяет 32-разрядным приложениям использовать 64-разрядное ядро. Поэтому 32-разрядные приложения могут использовать большее количество дескрипторов ядра и дескрипторов окон. Однако 32-разрядные приложения могут не создавать столько потоков в WOW64, сколько они могут при работе в системах на основе x86, так как WOW64 выделяет дополнительный 64-разрядный стек (обычно 512 КБ) для каждого потока. Кроме того, для самого WOW64 зарезервировано некоторое количество адресного пространства и структуры данных, которые он использует. Зарезервированная сумма зависит от процессора; больше зарезервировано для Intel Itanium, чем на процессорах x64 или ARM64.

Если в заголовке образа установлен флаг IMAGE_FILE_LARGE_ADDRESS_AWARE, каждое 32-разрядное приложение получает 4 ГБ виртуального адресного пространства в среде WOW64. Если флаг IMAGE_FILE_LARGE_ADDRESS_AWARE не задан, каждое 32-разрядное приложение получает 2 ГБ виртуального адресного пространства в среде WOW64.