Балансировка ресурсов на RDS ферме Windows Server 2019
- Проблема: один из пользователей потребляет 90% и более CPU
- Что такое Dynamic Fair Share Scheduling (DFSS)?
- Вот так называются три компонента входящие в состав DFSS
- Как включить Dynamic Fair Share Scheduling (DFSS)?
- Балансировка CPU на RDSH хосте
- Как отключать CPU Fair Share
- Пример использования CPU Fair Share
- Балансировка дисковых операций на RDSH хосте
- Быстрая проверка включение DFSS
- P.S.
Добрый день! Уважаемые читатели и гости одного из крупнейших 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
- 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 ферме была балансировка процессорных мощностей, необходимо наличие активной политики:
Как я и писал выше функция планирования ЦП со справедливым разделением в 2019 системе включена по умолчанию, и данная политика имеет статус не задано.
Если этот параметр политики включен, то планирование ЦП со справедливым разделением отключено. Если этот параметр политики отключен или не настроен, планирование ЦП со справедливым разделением включено
Так же эта настройка имеет и аналог в виде ключа реестра, найти его можно по пути:
Если ключ 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).
После нужно выполнить обновление групповой политики, когда первое действие выполнено вы можете изменить значение ключа EnableCpuQuota на "0". По идее все должно работать, но иногда бывают случаи, что приходилось произвести перезагрузку сервера.
Так же отключить DFSS можно и через PowerShell, для этого введите команду изменяющую значение реестра:
Set-ItemProperty -path $RegKey -name "EnableCpuQuota" -value 0
Пример использования CPU Fair Share
Чтобы показать работу FairShare, я использовал инструмент CPUstress, созданный Тимом Манганом. С помощью этого инструмента вы можете вызвать чрезмерное использование ресурсов процессора. В тесте будут участвовать два пользователя, Барбоскин Геннадий Викторович и Администратор.
Первый тест с включенной опцией динамического распределения процессорного время между пользовательскими сессиями. Я зашел на свою RDS ферму и запустил из под каждого пользователя CPUstress. Как видно из картинки мой процессор загружен на 100% и все его мощности делятся в равных частях между пользователями сервера.
А вот тест когда CPU Fair Share выключен, как видите тут уже идет борьба за ресурсы между пользователями, у администратора в моем примере 73%, а у barboskin.g 25%. Потом эти доли могут кардинально поменяться.
Балансировка дисковых операций на RDSH хосте
Управление балансировкой дисковых операций осуществляется через компонент Disk Fair Share. Данный компонент включается или выключается исключительно через ключ реестра EnableFairShare.
"1" означает, что компонент активен, а вот "0" отключает Disk Fair Share.
С помощью FairShare of Resources в RD Session Host Microsoft реализовала приятную функциональность. Это здорово, что Microsoft расширила функциональность с помощью Network and Disks, но лично я думаю, что большинство компаний будут чаще использовать CPU FairShare. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
Быстрая проверка включение DFSS
- Через команду в PowerShell, если будет "1", то DFSS включен.
P.S.
Если вы хотите все же найти замену WSRM и ограничивать мощности по процессам, то есть платный продукт IntelliPerform (https://www.thinscale.com/products/intelliperform-desktop-resource-management/), может быть кому-то подойдет
Хорошая статься. Существует балансировка по ОЗУ ?
Да, но это уже средствами балансировщиков, например Kemp, там ставится клиент, который снимает все данные.
В WinServer2019 точно эта штука есть? Вернее, она по-умолчанию отключена.