Spec-Zone.ru › Ansible

Производительность 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."

Модули Ansible для Windows используют PowerShell. Эта оптимизация сокращает время запуска PowerShell, удаляя эти накладные расходы из каждого вызова.

Этот фрагмент использует генератор нативных образов ngen для предварительного создания нативных образов для сборок, от которых зависит PowerShell.

Решение проблемы высокой загрузки ЦП при загрузке для ВМ/облачных экземпляров

Если вы создаете образы золотой сборки для запуска экземпляров, вы можете избежать проблем с высокой загрузкой ЦП вблизи запуска, обрабатывая очередь ngen в процессе создания образа золотой сборки, если вам известно, что типы ЦП не изменятся между процессом сборки образа золотой сборки и временем выполнения.

Поместите следующее в конце вашего плейбука, учитывая факторы, которые могут привести к тому, что нативные образы станут недействительными (см. MSDN).

- name: generate native .NET images for CPU
  win_dotnet_ngen:

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/os_guide/windows_performance.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API