Балансировка ресурсов на RDS ферме Windows Server 2019

DFSSДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов по системному администрированию Pyatilistnik.org. В прошлый раз мы с вами разобрали группы доступности AlwaysOn. Сегодня я хочу рассмотреть еще одну часто встречающуюся проблему в практике системного администратора, речь пойдет о балансировке и распределении системных ресурсов (CPU, Сеть, Диск) на хостах RDS фермы Windows Server 2019, но актуально будет и для более старых версий, вплоть до Windows Server 2012 R2. Мы научимся равномерно распределять нагрузку по пользовательским сессиям с помощью Dynamic Fair Share Scheduling (DFSS).

Проблема: один из пользователей потребляет 90% и более CPU

Опишу реальный случай с которым вы обязательно столкнетесь, если у вас в компании используются терминальные столы. И так есть RDS ферма построенная на базе Windows Server 2012 R2 до Windows Server 2019. На каждом из RDSH хостов могут одновременно работать свыше 30 пользователей. В среднем они суммарно не потребляют более 30% процессорных мощностей, но когда приходит период отчетности некоторые пользователи начинают нагружать сервера куда интенсивнее. Очень часто можно встретить, что пользователь работающий с Excel, 1С и похожими программами начинает потреблять 80-90% процессорных мощностей, в результате чего начинают страдать остальные пользователи этого RDSH хоста.

Ранее для решения это проблемы в Windows Server 2008 R2 был замечательный компонент диспетчер системных ресурсов (Windows System Resource Manager), но Microsoft его посчитала устаревшим и выпилила из состава компонентов, аж с Windows Server 2012 R2 и выше. Но не думайте, что доблестные разработчики не подумали чем вам восполнить этот пробел, они придумали и включили в состав Windows Server компонент "Динамическое планирование долевого распределения" или как в оригинале "Dynamic Fair Share Scheduling (DFSS)".

Что такое Dynamic Fair Share Scheduling (DFSS)?

Так как официального метода вернуть Windows System Resource Manager не существует, а есть лишь костыльные, нам придется работать с тем, что есть. "Динамическое планирование долевого распределения" или как в оригинале "Dynamic Fair Share Scheduling (DFSS)" - это механизм автоматической балансировки и распределения сетевой нагрузки, дисковых, процессорных мощностей между всеми пользовательскими сессиями на RDSH хосте. Все эти три варианта имеют цель предотвратить чрезмерное использование ресурсов одним пользователем и предоставить всем пользователям одинаковые возможности. Однако методы FairShare не гарантируют, что ресурсы не будут исчерпаны, это все еще может иметь место. Если все пользователи используют все ресурсы ЦП, FairShare гарантирует, что все пользователи получат некоторую емкость ЦП, но все же может быть, что все процессоры загружены на 100%, а пользователи испытывают снижение производительности, это нужно учитывать.

Вот так называются три компонента входящие в состав DFSS

хочу отметить, что в отличии от диспетчера системных ресурсов, вы не обнаружите для Dynamic Fair Share Scheduling оснасток и графических консолей, которые вам бы помогли что-то настроить. Тут работает полная автоматика, которая сама все делает и у вас есть только два варианта, включить или выключить компонент

  • CPU Fair Share - Динамически распределяет процессорное время между пользовательскими сессиями. Тут будет учитываться их количество и интенсивность использования.
  • Network Fair Share - Динамически распределяет полосу пропускания сетевого интерфейса между пользовательскими сессиями. Советую использовать совместно с Qos.
  • Disk Fair Share - данная функция защищает ваши диски от очень интенсивного использования одним пользователем, позволяет равномерно балансировать дисковые операции между всеми.

Как включить Dynamic Fair Share Scheduling (DFSS)?

Если говорить про Windows Server 2019, то динамическое планирование долевого распределения уже по умолчанию там активно, то же самое и на Windows Server 2016, а вот в Windows Server 2012 R2, ее нужно активировать. Для того чтобы у вас в системе был активен встроенный балансировщик ресурсов DFSS, у вас должна быть выключена одна политика или выставлен нужный ключ реестра.

Балансировка CPU на RDSH хосте

Для того, чтобы у вас на RDS ферме была балансировка процессорных мощностей, необходимо наличие активной политики:

Конфигурация компьютера - Административные шаблоны - Компоненты Windows - Службы удаленных рабочих столов - Узел сеансов удаленных рабочих столов - Подключения - Отключить планирование ЦП со справедливым разделением (Computer Configuration - Administrative Templates - Windows Components - Remote Desktop Services - Remote Desktop Session Host - Connections - Turn off Fair Share CPU Scheduling)

Как включить Dynamic Fair Share Scheduling (DFSS)

Как я и писал выше функция планирования ЦП со справедливым разделением в 2019 системе включена по умолчанию, и данная политика имеет статус не задано.

Планирование ЦП со справедливым разделением позволяет динамически распределять время процессора между сеансами служб удаленных рабочих столов на одном и том же сервере узла сеансов удаленных рабочих столов в зависимости от числа сеансов и потребности во времени процессора в каждом сеансе.

Если этот параметр политики включен, то планирование ЦП со справедливым разделением отключено. Если этот параметр политики отключен или не настроен, планирование ЦП со справедливым разделением включено

Так же эта настройка имеет и аналог в виде ключа реестра, найти его можно по пути:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System\EnableCpuQuota

Как включить Dynamic Fair Share Scheduling (DFSS) через реестр

Если ключ EnableCpuQuota имеет значение 1, то значит планирование ЦП со справедливым разделением включено. Хочу отметить, что в Windows Server 2012 R2, хоть в системе и есть политика, но данного ключа нет, а его желательно бы создать если хотите использовать CPU Fair Share.

Как отключать CPU Fair Share

Существуют ситуации, при которых требуется выключить DFSS, приведу пример. Citrix Xenapp также имеет свои собственные политики для разделения процессорного времени между пользователями, и неудивительно, что они не могут сосуществовать с политиками Microsoft. Управление процессорами Citrix не вступит в силу, если DFSS все еще включен. На самом деле, вы получите следующую ошибку на сервере:

Журнал: Приложение
Источник: MetaframeEvents
ID: 3
Описание: В настоящее время активирована функция динамического планирования долевого распределения (DFSS) роли служб удаленных рабочих столов. Управление использованием ЦП не работает правильно, когда включен DFSS, поэтому служба Citrix Independent Management Architecture (IMAService) не запустит управление использованием ЦП. Чтобы разрешить IMAService запускать управление использованием процессора, отключите DFSS. Инструкции по отключению DFSS см. В справке по службам удаленного рабочего стола Microsoft или Citrix XenApp.

Для отключения CPU Fair Share в Windows Server 2019, вам нужно сначала включить политику "Отключить планирование ЦП со справедливым разделением (Turn off Fair Share CPU Scheduling)". Сделать, это можно через групповые политики или же через локальный редактор политик (gpedit.msc).

включить политику "Отключить планирование ЦП со справедливым разделением (Turn off Fair Share CPU Scheduling)"

После нужно выполнить обновление групповой политики, когда первое действие выполнено вы можете изменить значение ключа EnableCpuQuota на "0". По идее все должно работать, но иногда бывают случаи, что приходилось произвести перезагрузку сервера.

Как отключать CPU Fair Share через реестр
Так же отключить DFSS можно и через PowerShell, для этого введите команду изменяющую значение реестра:

$RegKey ="HKLM:\\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System"
Set-ItemProperty -path $RegKey -name "EnableCpuQuota" -value 0

Как отключать CPU Fair Share через PowerShell
Пример использования CPU Fair Share

Чтобы показать работу FairShare, я использовал инструмент CPUstress, созданный Тимом Манганом. С помощью этого инструмента вы можете вызвать чрезмерное использование ресурсов процессора. В тесте будут участвовать два пользователя, Барбоскин Геннадий Викторович и Администратор.

Первый тест с включенной опцией динамического распределения процессорного время между пользовательскими сессиями. Я зашел на свою RDS ферму и запустил из под каждого пользователя CPUstress. Как видно из картинки мой процессор загружен на 100% и все его мощности делятся в равных частях между пользователями сервера.

Пример использования CPU Fair Share

А вот тест когда CPU Fair Share выключен, как видите тут уже идет борьба за ресурсы между пользователями, у администратора в моем примере 73%, а у barboskin.g 25%. Потом эти доли могут кардинально поменяться.

Пример использования CPU Fair Share
Балансировка дисковых операций на RDSH хосте

Управление балансировкой дисковых операций осуществляется через компонент Disk Fair Share. Данный компонент включается или выключается исключительно через ключ реестра EnableFairShare.

HKLM_SYSTEM\CurrentControlSet\Services\ TSFairShare\Disk\EnableFairShare

"1" означает, что компонент активен, а вот "0" отключает Disk Fair Share.

Балансировка дисковых операций на RDSH хосте
С помощью FairShare of Resources в RD Session Host Microsoft реализовала приятную функциональность. Это здорово, что Microsoft расширила функциональность с помощью Network and Disks, но лично я думаю, что большинство компаний будут чаще использовать CPU FairShare. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Быстрая проверка включение DFSS

  • Через команду в PowerShell, если будет "1", то DFSS включен.

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

P.S.

Если вы хотите все же найти замену WSRM и ограничивать мощности по процессам, то есть платный продукт IntelliPerform (https://www.thinscale.com/products/intelliperform-desktop-resource-management/), может быть кому-то подойдет

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. Василий

    Хорошая статься. Существует балансировка по ОЗУ ?

  2. Иван Семин автор

    Да, но это уже средствами балансировщиков, например Kemp, там ставится клиент, который снимает все данные.

  3. Дэн

    В WinServer2019 точно эта штука есть? Вернее, она по-умолчанию отключена.