Производительность Windows
В этом документе представлены некоторые оптимизации производительности, которые можно применить к узлам Windows, чтобы ускорить их работу при использовании Ansible и в целом.
Оптимизация производительности PowerShell для сокращения накладных расходов задач Ansible
Чтобы ускорить запуск PowerShell примерно в 10 раз, выполните следующий фрагмент PowerShell в сеансе администратора. Выполнение займёт несколько десятков секунд.
Примечание
Если собственные образы уже были созданы задачей или службой ngen, вы не заметите разницы в производительности (однако в этом случае выполнение фрагмента займёт меньше времени).
function Optimize-Assemblies {
param (
[string]$assemblyFilter = "Microsoft.PowerShell.",
[string]$activity = "Native Image Installation"
)
try {
# Get the path to the ngen executable dynamically
$ngenPath = [System.IO.Path]::Combine([Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory(), "ngen.exe")
# Check if ngen.exe exists
if (-Not (Test-Path $ngenPath)) {
Write-Host "Ngen.exe not found at $ngenPath. Make sure .NET Framework is installed."
return
}
# Get a list of loaded assemblies
$assemblies = [AppDomain]::CurrentDomain.GetAssemblies()
# Filter assemblies based on the provided filter
$filteredAssemblies = $assemblies | Where-Object { $_.FullName -ilike "$assemblyFilter*" }
if ($filteredAssemblies.Count -eq 0) {
Write-Host "No matching assemblies found for optimization."
return
}
foreach ($assembly in $filteredAssemblies) {
# Get the name of the assembly
$name = [System.IO.Path]::GetFileName($assembly.Location)
# Display progress
Write-Progress -Activity $activity -Status "Optimizing $name"
# Use Ngen to install the assembly
Start-Process -FilePath $ngenPath -ArgumentList "install `"$($assembly.Location)`"" -Wait -WindowStyle Hidden
}
Write-Host "Optimization complete."
} catch {
Write-Host "An error occurred: $_"
}
}
# Optimize PowerShell assemblies:
Optimize-Assemblies -assemblyFilter "Microsoft.PowerShell."
PowerShell используется каждым модулем Ansible для Windows. Эта оптимизация сокращает время запуска PowerShell, устраняя эти накладные расходы при каждом вызове.
Этот фрагмент использует генератор собственных образов ngen, чтобы заранее создать собственные образы для сборок, от которых зависит PowerShell.
Устранение высокой загрузки ЦП при запуске виртуальных машин и облачных экземпляров
Если вы создаёте эталонные образы для запуска экземпляров, можно избежать значительной нагрузки на ЦП вскоре после запуска, обработав очередь ngen во время создания эталонного образа, если типы ЦП не изменятся между созданием эталонного образа и запуском экземпляров.
Добавьте следующий фрагмент ближе к концу плейбука, учитывая факторы, которые могут привести к аннулированию собственных образов (см. MSDN).
- name: generate native .NET images for CPU win_dotnet_ngen:
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/os_guide/windows_performance.html