- Windows dynamic fair share scheduling
- Проблема: один из пользователей потребляет 90% и более CPU
- Что такое Dynamic Fair Share Scheduling (DFSS)?
- Вот так называются три компонента входящие в состав DFSS
- Как включить Dynamic Fair Share Scheduling (DFSS)?
- Балансировка CPU на RDSH хосте
- Как отключать CPU Fair Share
- Пример использования CPU Fair Share
- Балансировка дисковых операций на RDSH хосте
- Fair Share technologies are enabled by default in Remote Desktop Services
- Summary
- Fair Share CPU Scheduling
- Dynamic Disk Fair Share
- Dynamic Network Fair Share
- Долго открывается конфигуратор
- Разделение ресурсов в Windows Server 2012 Remote Desktop Services
Windows dynamic fair share scheduling
Добрый день! Уважаемые читатели и гости одного из крупнейших 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 все еще включен. На самом деле, вы получите следующую ошибку на сервере:
Для отключения CPU Fair Share в Windows Server 2019, вам нужно сначала включить политику «Отключить планирование ЦП со справедливым разделением (Turn off Fair Share CPU Scheduling)». Сделать, это можно через групповые политики или же через локальный редактор политик (gpedit.msc).
После нужно выполнить обновление групповой политики, когда первое действие выполнено вы можете изменить значение ключа EnableCpuQuota на «0». По идее все должно работать, но иногда бывают случаи, что приходилось произвести перезагрузку сервера.
Так же отключить DFSS можно и через PowerShell, для этого введите команду изменяющую значение реестра:
Пример использования 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.
Fair Share technologies are enabled by default in Remote Desktop Services
This article describes how a Remote Desktop Session Host (RDSH) server uses Fair Share technologies to balance CPU, disk, and network bandwidth resources among multiple Remote Desktop sessions.
Original product version: В Windows Server 2016, Windows Server 2012 R2
Original KB number: В 4494631
Summary
Remote Desktop Services (RDS) in Windows Server 2012 use Fair Share technology to manage resources. Fair Share technologies for CPU resources were introduced in Windows Server 2008 R2. In Windows Server 2012, RDS builds on the Fair Share technologies to add features for allocating network bandwidth and disk resources. Fair Share technologies are enabled by default, but you can disable them using Windows PowerShell and WMI. For more information about the related properties in WMI, see Win32_TerminalServiceSetting class: Properties.
Fair Share CPU Scheduling
Fair Share CPU Scheduling dynamically distributes processor time across all Remote Desktop Services sessions on the same RD Session Host server, based on the number of sessions and the demand for processor time within each session. This process creates a consistent user experience across all of the active sessions, while sessions are being created and deleted dynamically. This feature builds on the Dynamic Fair Share Scheduling technology (DFSS) that was part of Windows Server 2008 R2.
Dynamic Disk Fair Share
When disk-intensive processes run in one or more Remote Desktop sessions, they can starve non-disk intensive processes and prevent them from ever accessing disk resources. To fix this issue, the Dynamic Disk Fair Share feature balances disk access among the different sessions by balancing disk IO and throttling excess disk usage.
Dynamic Network Fair Share
When bandwidth-intensive applications run in one or more Remote Desktop sessions, they can starve applications in other sessions of bandwidth. To equalize network consumption among the sessions, the Network Fair Share feature uses a round-robin approach to allocate bandwidth for each session.
In a centralized computing scenario, the Dynamic Network Fair Share feature tries to fairly distribute network interface bandwidth load among the sessions.
Долго открывается конфигуратор
В ОС Windows Server 2012 бывает полезно выключать службу Dynamic Fair Share Scheduling (DFSS позволяет балансировать и распределять ресурсы между пользователями) чтобы повысить производительность 1С:Преприятие 8 в ряде случаев. На момент написания заметки платформа может неудачно взаимодействовать с Dynamic Fair Share Scheduling. Одним из таких признаков может быть долгое открытие конфигуратора в терминальном сервере. Предположительно эта служба Dynamic Fair Share Scheduling думает что 1С:Предприятие потенциально окажет негативное влияния сессией текущего пользователя, захватившего большое количество вычислительных ресурсов, на сессии других пользователей. Служба старается «предотвратить» чрезмерное использования например дисков одним пользователем, пытаясь организовать равномерное распределение дисковых операций I/O между сессиями.
Чтобы выключить балансировку ресурсов надо выполнить следующие шаги:
Шаг первый. Определить что служба включена, для этого открываем PowerShell и запускаем команду:
1 — включено, 0 — выключено.
Если получаем 0, то дополнительно действий не требуется.
Шаг второй. Если предыдущий шаг вернул 1, то продолжаем. После чего открываем реестр windows (regedit) и меняем в следующих ветках некоторые значения:
Разделение ресурсов в Windows Server 2012 Remote Desktop Services
Одним из главных недостатков архитектуры Remote Desktop Services/ Terminal Services (RDS) – потенциальная возможность негативного влияния сессии одного пользователя, захватившего большое количество вычислительных ресурсов, на сессии других пользователей. В качестве первого шага борьбы с подобной проблемой в Windows Server 2008 R2 появилась функция под названием Dynamic Fair Share Scheduling (DFSS), позволяющая балансировать и распределять ресурсы CPU между пользователями. Эта проактивная функция по умолчанию активна и процессорная мощность динамически распределяется в зависимости от того, сколько сессии пользователей обслуживается в текущий момент и сколько ресурсов CPU доступно. В Windows Server 2012 возможности распределения ресурсов существенно расширены и добавлена возможность управления ресурсами сети и дисковой подсистемы.
В службе RDS Windows Server 2012 RC существуют следующие возможности совместного использования ресурсов:
- Network Fair Share. Динамическое распределение полосы пропускания сетевого канала между сессиями в зависимости от количества активных сессий.
- Disk Fair Share. Предотвращение чрезмерного использования дисков одним пользователем, равномерное распределение дисковых операций I/O между сессиями.
- CPU Fair Share. Динамическое распределение процессорного времени между сессиями в зависимости от количества активных сессий и общего уровня загрузки (напомню, что функция появилась еще в Windows Server 2008 R2).
В Windows Server 2012 (на данный момент RC), насколько я понял, управление распределением ресурсов на сервере RDS сведено к минимуму: эту функцию можно только включить или отключить, все остальное система настроит сама. Если вы используете Citrix XenApp, встроенную функцию распределения ресурсов Windows можно отключить и положиться целиком на возможности XA.
Включить или отключить возможность распределения ресурсов можно с помощью реестра или групповой политики, однако на момент выхода Windows Server 2012 RC, в групповых политиках мне удалось найти только пункт, касающийся управления CPU – Turn off Fair Share CPU Scheduling (вероятно, в окончательном релизе появятся и остальные параметры).
Этот же самый параметр находится в значении параметра EnableCpuQuota (HKLM_SYSTEM\CurrentControlSet\Control\Session Manager\Quota System).
Для управление дисковыми ресурсами используется ключ EnableFairShare в ветке HKLM_SYSTEM\CurrentControlSet\Services\TSFairShare\Disk (1 – включить, 0 – отключить).
Данная автоматическая модель распределения ресурсов будет хорошо работать в случае, когда 100% пользователей запускают одинаковые приложения и работают по типовым схемам. Трудности могут начаться, когда необходимо создать приоритет одних приложений над другими. В этой ситуации может пригодиться функция Windows System Resource Manager (WSRM), впервые появившаяся еще в Windows Server 2003. С помощью WSRM можно гранулировано определить лимиты потребления ресурсов для определенного пользователя, приложения, сессии или целого пула приложений IIS. Однако следует понимать, что WSRM является реактивным инструментом, т.е. функция начинает работать после превышения значения контролируемого параметра.
Интересен также тот факт, что в Server 2012 RC функция WSRM отмечена как устаревшая и в последующих версиях серверных ОС Windows она поддерживаться не будет, и рекомендуется от нее отказываться. Что придет ей на замену – тоже пока не понятно.