Справедливое распределение ресурсов Windows Server RDS с помощью Fair Share Scheduling

Одной из распространенных проблем терминальных серверов, на которых одновременно работает несколько пользователей, является возможность запуска одним из пользователей ресурсоемкого процесса, который будет негативно влиять на производительность в сессиях других пользователей. Например, если один из пользователей запустил процесс, который в моменте использует 90% CPU сервера, то другие пользователи при этом не смогут нормально работать.

Для предотвращения таких ситуаций в Windows Server с ролью Remote Desktop Services (RDSH) и в Windows 11/10 Enterprise multi-session доступна функция Dynamic Fair Share Scheduling (DFSS), позволяющая справедливо распределять доступные вычислительные ресурсы сервера между сессиями пользователей. DFSS может управлять использованием следующих вычислительных ресурсов хоста:

  • CPU Fair Share – используется для динамического распределения доступного времени CPU между сессиями (с учетом их количества и использования процессорного времени в каждой сессии). Позволяет предотвратить ситуации, когда один пользователь монополизирует CPU хоста RDS своим тяжелым процессом.
  • Disk Fair Share – позволяет равномерно распределить пропускную способность дисковой подсистемы для операций ввода/вывода между пользователям
  • Network Fair Share – позволяет с помощью механизма round-robin распределить доступную пропускную способность сетевого интерфейса между сеансами
DFFS не умеет балансировать доступную оперативную память (RAM) сервера между пользователя.

DFSS доступна, начиная с Windows Server 2008R2, в котором было возможно только равномерное распределение ресурсов CPU. Начиная с Windows Server 2012 и выше Fair Share Scheduling может работать для балансировки использования сети и дискового I/O.

равномерное распределение ресурсов CPU между пользователями сервера RDS

Fair Share включается в Windows Server 2016+ при установке роли RDSH. По умолчанию справедливое распределение нагрузки между сессиями выполняется только для ресурсов CPU. CPU Fair Share распределяет доступное процессорное время между сессиями пользователей равномерно. Если один из пользователей пытается использовать слишком много циклов процессора, DFSS автоматически снижает доступные ему ресурсы ЦП, освобождая их для других пользователей.

Чтобы проверь, включено ли справедливое распределение ресурсов DFSS, выполните PowerShell команду:

(gwmi win32_terminalservicesetting -N “root\cimv2\terminalservices”).enabledfss

Проверить, включен ли Fair Share в Windows Server

1 – DFSS включен

0 – Отключен

Для включения/отключения распределения CPU ресурсов хоста RDS доступен отдельный параметр групповых политик Turn off Fair Share CPU Scheduling (Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections) Групповая политика Turn off Fair Share CPU Scheduling

Этот параметр GPO не настроен, однако распределение ресурсов CPU включено по умолчанию. Это можно проверить по значению параметра реестра EnableCpuQuota:

Get-Itemproperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System\" -name EnableCpuQuota

EnableCpuQuota параметр реестра

При этом EnableFairShare отключены (значение 0) для дисков и сети (для них нет отдельного параметра GPO):

Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk\" -name EnableFairShare

Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TSFairShare\NetFS\" -name EnableFairShare

EnableFairShare для диска и сети

Получить значение всех трех параметров:

Get-WmiObject -Class win32_terminalservicesetting -Namespace root\cimv2\terminalservices | FL EnableDFSS,EnableDiskFSS,EnableNetworkFSS

Проверить значения EnableDFSS,EnableDiskFSS,EnableNetworkFSS

Включить использование справедливого распределения сети и дисков можно только через реестр, изменив значение EnableFairShare на 1.

Или командами:

Включить FSS для CPU:

$temp = (gwmi win32_terminalservicesetting -N "root\cimv2\terminalservices")
$temp.enableDFSS = 1
$temp.put()

Для диска:

$temp = (gwmi win32_terminalservicesetting -N "root\cimv2\terminalservices")
$temp.enableDiskFSS = 1
$temp.put()

Для сети:

$temp = (gwmi win32_terminalservicesetting -N "root\cimv2\terminalservices")
$temp.enableNetworkFSS = 1
$temp.put()

Соответственно, чтобы отключить DFSS, нужно изменить значения на 0.

В некоторых сценариях динамическое распределение может существенно влиять на производительность пользовательских приложений. Так, например, на терминальных серверах RDS с 1С включенный CPU Fair Share негативно влияет на производительность платформы, существенно увеличивая время открытия конфигураторы в терминальной сессии. В этом случае Dynamic Fair Share Scheduling рекомендуется отключать.


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)