Как стать автором
Обновить
49.75
СЕРВЕР МОЛЛ
Серверное и сетевое оборудование

Тюнинг типовых ролей Windows. Часть первая: Файлы и печать

Время на прочтение 14 мин
Количество просмотров 37K


Начинаем небольшой цикл статей, посвященных тюнингу производительности сервера Windows и его типовых ролей. Материал будет полезен как при попытке выжать из старого сервера максимум (помимо покраски в красный цвет), так и при планировании новых высоконагруженных систем без покупки топовых серверов (как это советуют интеграторы).


Общие рекомендации по железу


Процессор ― он как сердце сервера, поэтому от него зависит очень много в плане производительности. Благодаря маркетологам мы знаем ― чем больше ядер и мегагерцев, тем круче. На самом деле всё не совсем так:


  1. Выбирайте 64-битный процессор. Современные серверные Windows не поддерживают 32-битные процессоры, да и памяти он может адресовать намного больше.


  2. Количество ядер не имеет большого значения. Не все приложения и сервисы могут использовать несколько ядер, и в общем случае одно ядро с большой частотой будет эффективнее, чем два с меньшей.


  3. Hyperthreading ― гиперпоточность ― когда одно физическое ядро процессора определяется как два логических. Функция процессора позволяет обрабатывать два разных потока на одном ядре, что в общем случае увеличивает производительность. Но бывает, что производительность наоборот снижается из-за того, что кэш процессорного ядра один.


  4. Кэш процессора. Тут все просто: чем он больше, тем лучше, и часто больший кэш дает большую производительность, чем частота процессора.


  5. Не нужно сравнивать процессоры разных поколений и производителей по частоте: скорость обработки данных зависит и от многих других факторов вроде кэша и частоты шины.


  6. Для Hyper-V важно, чтобы процессор поддерживал SLAT (Second Level Address Translation). В терминологии Intel возможность называется Extended Page Tables (EPT), у AMD ― Nested Page Tables (NPT). Проверить наличие этой функции процессора можно с помощью утилиты systeminfo.exe.


Проверка процессора под требования Hyper-V.


С оперативной памятью все довольно просто: чем она больше и быстрее, тем лучше. Чуть интереснее становится, если оперативной памяти недостаточно и системе необходимо использовать файл подкачки. Тут можно ограничиться следующими рекомендациями:


  • файл подкачки стоит положить на отдельный физический диск. Чем он быстрее, тем лучше. Если такой возможности нет, то лучше разместить его на диске, к которому меньше файловых обращений;


  • лучше не хранить файл подкачки на отказоустойчивом массиве вроде RAID1― он проигрывает по скорости одному диску. Хорошей идеей будет поместить файл подкачки на RAID0 или несколько файлов подкачки на разных физических дисках.


Размещение файла подкачки на системном диске ― не лучший вариант.


Теперь о сетевых адаптерах. Из интересных особенностей можно отметить:


  1. Только адаптеры с поддержкой 64-разрядных систем имеют DMA (Direct Memory Access) ― технологию прямого доступа к памяти по сети. Если нужна действительно быстрая сеть между нодами кластера ― на это стоит обратить внимание.


  2. Многопортовые адаптеры удобны для распределения нагрузки и отказоустойчивости. Но 2 адаптера с одним портом будут быстрее, чем один адаптер с 2 портами. Также нужно иметь в виду, что устанавливать больше сетевых адаптеров, чем ядер в сервере чревато падением быстродействия.


HPE ProLiant DL360 Gen7 обладает изначально четырьмя сетевыми портами.


На этом закончу небольшую вводную и перейду непосредственно к оптимизации ролей сервера. Начнем с самого простого ― с файлового сервера.


Файловый сервер


Обычно при установке и работе файлового сервера вопрос быстродействия не стоит. Но только до тех пор, пока на обычной файлопомойке на заводятся базы данных, чудовищные файлы Excel и им подобные «интересные» вещи. Расскажу про параметры, которые могут улучшить или ухудшить быстродействие SMB.


Отдельно отмечу вопрос быстродействия сервера, который обрабатывает не только клиентов внутри локальной сети, но и удаленных ― например, по VPN. Лично я сталкивался с ситуацией, когда в сети на Windows XP\2003 начали появляться компьютеры на Windows 7\2008. Тогда мы столкнулись с тем, что быстродействие сети новых компьютеров оставляет желать лучшего при общении со старыми ОС. Начитавшись интернетов, выполнили на новых машинах следующий скрипт:


netsh int tcp set global autotuning=disabled

netsh int tcp set global autotuninglevel=disabled

netsh int tcp set global rss=disabled chimney=disabled

Сеть заработала, скрипт был добавлен в разворачиваемые образа систем.


И все было хорошо, пока в сети не появился удаленный сегмент с повышенным требованием к скорости работы сети. Файлы передавались по VPN не быстрее 2 Мб/с. Проблему локализовали: оказалось, что специально для работы в LAN\WAN сетях в новых операционных системах добавили функцию autotuning. С помощью нее системы определяют скорость соединения и договариваются о размерах кадра TCP для оптимального быстродействия. Чтобы VPN работала быстро, и сервера не тормозили при обращениях к WIndows 2003, достаточно было не отключать autotuning, а ограничить его командой:


netsh int tcp set global autotuninglevel=highlyrestricted

Но перейдем к более специализированным параметрам.


Помним, что изменения параметров реестра и настроек служб могут привести к чему угодно. Поэтому делаем все аккуратно.


Начнем с тюнинга клиентов файловых серверов. За подключение к серверу SMB отвечает служба LanmanWorkstation. Большинство параметров находятся в следующей ветке реестра:


HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters

В большинстве своем параметры имеют тип REG_DWORD. В современных Windows управление частью настроек возможно через командлет Set-SmbClientConfiguration. Просмотреть текущие значения ― соответственно, Get-SmbClientConfiguration.



Значения параметров клиента SMB.


Параметры, на которые стоит обратить внимание в первую очередь при вопросах быстродействия:


Имя параметра Значение по умолчанию Варианты значений За что отвечает Комментарий
DisableBandwidthThrottling 0 0―1 Включение ― отключение троттлинга для сетей с высокой задержкой Включение параметра может повысить пропускную способность сетей с высокой задержкой (WAN)
FileInfoCacheEntriesMax 64 1―65536 Максимальное количество значений в кэше метаданных файлов Увеличение параметра уменьшает трафик и повышает пропускную способность сети при обращении к большому количеству файлов
DirectoryCacheEntrySizeMax 64 1―65536 Максимальный размер кэша для каталогов Измеряется в килобайтах
FileNotFoundCacheEntriesMax 128 1―65536 Максимальное количество значений в кэше информации о файлах Увеличение параметра уменьшает трафик и повышает пропускную способность сети при обращении к большому количеству файлов
MaxCmds 50 1―65536 Максимальное количество команд в сеансе Увеличение параметра увеличит расход памяти, но поднимет быстродействие. Только для SMB v1
DormantFileLimit 1023 1―65536 Максимальное количество файлов, которые могут быть открыты, после того как «отпущены» приложением
ScavengerTimeLimit 10 0―127 Как часто запускается «мусорщик», очищающий кэш дескрипторов файлов Измеряется в секундах, актуально для Windows XP\2003

В качестве примера тюнинга, можно привести следующие значения:


  • DisableBandwidthThrottling = 1;


  • FileInfoCacheEntriesMax = 32768;


  • DirectoryCacheEntriesMax = 4096;


  • FileNotFoundCacheEntriesMax = 32768;


  • MaxCmds = 32768;


  • DormantFileLimit = 32768;


  • ScavengerTimeLimit = 60.

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


С другими параметрами, которые меньше влияют на быстродействие, предлагаю ознакомится под спойлером.

Параметры, настраиваемые через powershell и реестр:


Имя параметра Значение по умолчанию Варианты значений За что отвечает Комментарий
ConnectionCountPerNetworkInterface 1 1―16 Максимальное количество подключений к серверу с интерфейсом без поддержки RSS MS не рекомендует изменять значение по умолчанию
ConnectionCountPerRssNetworkInterface 4 1―16 Максимальное количество подключений к серверу с интерфейсом c поддержкой RSS
ConnectionCountPerRdmaNetworkInterface 2 1―16 Максимальное количество подключений к серверу с интерфейсом с поддержкой RDMA
MaximumConnectionCountPerServer 32 1―64 Максимальное количество подключений к одному серверу
DormantDirectoryTimeout 600 Максимальное количество времени обработки каталога Измеряется в секундах
FileInfoCacheLifetime 10 Время хранения информации о файле в кэше
DirectoryCacheLifetime 10 Время хранения метаданных каталога в кэше
FileNotFoundCacheLifetime 5 Время хранения кэша не найденных файлов
CacheFileTimeout 10 Время хранения кэша для файла, после того как файл «отпущен» приложением
DisableLargeMtu 0 (Win8) 0―1 Включение―отключение большого размера MTU С включенным параметром размер запроса ограничен 64 КБ, с включенным ― 1 МБ.
RequireSecuritySignature 0 0―1 Включение―отключение обязательной подписи SMB Включение этого параметра замедляет скорость работы, но повышает защиту от атаки MITM
DirectoryCacheEntriesMax 16 1―4096 Максимальное количество значений в кэше информации о каталогах Увеличение параметра уменьшает трафик и повышает пропускную способность сети при обращении к большим каталогам
MaxCredits 128 Максимальное количество команд в сеансе Тоже самое, что и MaxCmds, но для SMB v2

Параметры, настраиваемые через powershell:


EnableMultiChannel 1 0―1 Включение―отключение использования нескольких физических адаптеров
EnableByteRangeLockingOnReadOnlyFiles True True\False Включение―отключение блокировки файлов «только для чтения»
EnableInsecureGuestLogons True True\False Включение―отключение гостевого входа на ресурс Отключение не позволит заходить без авторизации на расшаренные для всех папки на недоменном сервере (NAS)
EnableLoadBalanceScaleOut True True\False Включение―отключение поддержки распределения нагрузки при подключении к кластеру
EnableSecuritySignature True True\False Включение―отключение возможности подписи SMB
ExtendedSessionTimeout 1000 Время ожидания ответа от сервера Измеряется в секундах
KeepConn 600 Время до закрытия неактивной сессии Измеряется в секундах, применимо только к SMB v1
OplocksDisabled False True\False
Переключается автоматически в зависимости от значения параметра UseOpportunisticLocking
SessionTimeout 60 Время до закрытия неактивной сессии Измеряется в секундах
UseOpportunisticLocking True True\False Включение―отключение режима гибких блокировок (oplock) файлов с их буферизацией Включенный механизм сильно увеличивает быстродействие, но в ненадежных сетях может привести к повреждению файлов
WindowSizeThreshold 1 для серверных систем, 8 для клиентских Минимальный размер окна до включения режима Multichannel

Если же говорить уже непосредственно про файловый сервер, то вот несколько общих рекомендаций:


  1. Для лучшего быстродействия не используйте ненужные функции вроде мини-фильтров файловой системы, IPSec, шифрование и сжатие NTFS, шифрование SMB и другие. Включение антивируса может существенно подпортить быстродействие, и если периметр сети защищен, лучше его и не устанавливать.


  2. Регулярно стоит проверять актуальность драйверов, особенно на сетевые карты. Встречались ситуации, когда из-за кривых драйверов сетевая карта стабильно работала только при принудительном выставлении сто мегабит. И только с выходом свежих драйверов удалось выжать полноценный гигабит.


  3. Копирование файлов ― довольно регулярная операция для файлового сервера. При копировании по сети предпочтительнее использовать утилиту robocopy.exe с ключом /mt, включающим многопоточность для большого количества мелких файлов. Немного быстродействия добавит и отсутствие вывода в консоль ― ключ /log для robocopy и /q для xcopy.

Для оценки быстродействия работы протокола SMB можно использовать счетчики производительности, которые существуют как для сервера, так и для клиента.


Напомню, как их посмотреть.

Тут поможет утилита perfmon.exe. После запуска удобно переключить отображение в режим «отчет»:



Потом необходимо добавить нужные счетчики производительности. Для примера добавим счетчик «Общие ресурсы SMB сервера», нажав на зеленый плюс, выбрав нужный нам счетчик и общий ресурс:



И наслаждаемся результатом:



Более полно с процедурой использования счетчиков производительности, сбора и анализа результата рекомендую ознакомиться в блоге Microsoft.


Перейдем к тюнингу. За работу сервера SMB отвечает служба Lanmanserver, поэтому часть параметров можно изменить в соответствующей ветке реестра:


HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters.

Удобнее, конечно, использовать командлет Set-SmbServerConfiguration.



Вывод значений параметров с помощью командлета Get-SmbServerConfiguration.


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


Имя параметра Значение по умолчанию Тип параметра За что отвечает Комментарий
Smb2CreditsMax 8192 uint32 Максимальное количество команд SMB v2 Эти два параметра позволяют динамически распределять нагрузку. Иногда при использовании скоростных каналов с высокой задержкой (WAN) изменение этих параметров увеличит скорость. Посмотреть, есть ли проблемы, поможет счетчик производительности «Общие ресурсы SMBклиента ― Задержек кредита/c»
Smb2CreditsMin 512 uint32 Минимальное количество команд SMB v2
MaxThreadsPerQueue 20 unit32 Максимальное количество потоков сервера при обработке одновременных запросов Увеличение параметра влияет на аппаратную загрузку, но увеличивает производительность. Показателем к изменению параметра может служить значение счетчика производительности «Рабочие очереди сервера ― Длина очереди ― SMB2 NonBlocking» становится больше 100.
AsynchronousCredits 512 uint32 Максимальное количество одновременных асинхронных команд в одной сессии В ряде случаев, например, при использовании нагруженного веб-сервера, увеличение значения параметра увеличивает производительность
MaxMpxCt 50 uint32 Максимальное количество невыполненных клиентских запросов для каждого клиента Влияет только на клиентов SMB v1

Существует еще один параметр реестра, не контролируемый командлетом powershell:


  • путь: HKLM\System\CurrentControlSet\Control\Session Manager\Executive;


  • параметр: REG_DWORD c именем AdditionalCriticalWorkerThreads;


  • значение по умолчанию: 0.

Этот параметр отвечает за дополнительные рабочие процессы, отвечающие за процедуры записи и чтения в системном кэше файловой системы. По умолчанию дополнительных процессов нет, и изменение этого параметра может существенно ускорить работу файлового сервера. Особенно при наличии многоядерных процессоров и производительной дисковой системы. Задумываться об увеличении этого параметра можно при росте счетчика производительности «Кэш ― «Грязные» страницы».


В качестве примера тюнинга можно привести следующие значения параметров:


  • AdditionalCriticalWorkerThreads = 64;


  • MaxThreadsPerQueue = 64;


  • MaxMpxCt = 32768.

Значения также должны подбираться индивидуально.


Про другие параметры предлагаю почитать под спойлером.
Имя параметра Значение по умолчанию Тип параметра За что отвечает Комментарий
AnnounceComment null string Представление сервера
AnnounceServer False boolean Включение ― отключение представления сервера
AuditSmb1Access False boolean Включение ― отключение аудита доступа по протоколу SMB v1 Параметр появился только в Windows 10\2016
AutoDisconnectTimeout 15 uint32 Время, после которого отключается неактивная сессия
AutoShareServer True boolean Включение ― отключение сетевых ресурсов сервера по умолчанию
AutoShareWorkstation True boolean Включение ― отключение сетевых ресурсов рабочей станции по умолчанию
CachedOpenLimit 10 uint3 Максимальное количество открытых файлов в кэше
DurableHandleV2TimeoutInSeconds 180 uint32 Время отключения неактивного дескриптора
EnableAuthenticateUserSharing False boolean Включение ― отключение возможности общего доступа к соединению
EnableDownlevelTimewarp False boolean Включение ― отключение низкоуровневого искажения времени
EnableForcedLogoff True boolean Включение ― отключение принудительного выхода
EnableLeasing True boolean Включение ― отключение аренды
EnableMultiChannel True boolean Включение ― отключение использования нескольких физических адаптеров
EnableOplocks True boolean Включение ― отключение гибких блокировок (oplock)
EnableSecuritySignature False boolean Включение ― отключение возможности подписи SMB
EnableSMB1Protocol True boolean Включение ― отключение протокола SMB v1
EnableSMB2Protocol True boolean Включение ― отключение протокола SMB v2+
EnableStrictNameChecking True boolean Включение ― отключение проверки имени входящего подключения
EncryptData False boolean Включение ― отключение поддержки шифрования данных
IrpStackSize 15 unit32 Размер стека IRP (запросов ввода ― вывода)
KeepAliveTime 2 unit32 Частота TCP запросов keepalive для подключения SMB
MaxChannelPerSession 32 unit32 Количество каналов в одной сессии
MaxMpxCount 50 unit32 Максимальное количество команд в сессии Параметр должен быть настроен так же, как и параметр MaxCmds клиента
MaxSessionPerConnection 16384 unit32 Максимальное количество сессий в одном соединении
MaxWorkItems 1 uint32 Максимальное количество рабочих элементов Параметр влияет только на SMB v1
NullSessionPipes null string Каналы, доступные в нулевой сессии
NullSessionShares null string Сетевые ресурсы, доступные в нулевой сессии
OplockBreakWait 35 uint32 Время ожидания до прерывания блокировки
PendingClientTimeoutInSeconds 120 uint32 Время ожидания клиента
RejectUnencryptedAccess True boolean Включение ― отключение незашифрованных запросов на доступ
RequireSecuritySignature False boolean Включение ― отключение обязательной подписи SMB Включение этого параметра замедляет скорость работы, но повышает защиту от атаки MITM
ServerHidden True boolean Включение ― отключение представления сервера По умолчанию сервер не представляет себя
SmbServerNameHardeningLevel 0 uint32 Уровень упрощения имени сервера
TreatHostAsStableStorage False boolean Включение ― отключение надежного дискового хранилища Включение этого параметра говорит серверу о надежности дискового хранилища, стоит включать его при работе с диском с энергонезависимым кэшем на запись. Тогда сервер не будет дожидаться подтверждения записи на диск, что ускорит быстродействие.
ValidateAliasNotCircular True boolean Включение ― отключение использования псевдонимов
ValidateShareScope True boolean Включение ― отключение проверки имени ресурсов при создании нового ресурса
ValidateShareScopeNotAliased True boolean Включение ― отключение проверки псевдонимов ресурсов при создании нового ресурса
ValidateTargetName True boolean Включение ― отключение проверки имени целевого ресурса при создании псевдонима

Повторюсь: изменение параметров может привести к неработоспособности сервера. Поэтому лучше сначала «потренироваться на кошках». Или хотя бы делать бэкапы.


Перейду к следующей, казалось бы, простой роли ― сервер печати.


Сервер печати


Помимо рекомендаций вида «быстрее, выше, сильнее» в плане аппаратной части, нужно отметить несколько других интересных моментов.


Перенос очереди печати на несистемный диск довольно сильно увеличит производительность сервера. Это делается в свойствах сервера печати, на вкладке «дополнительные параметры».



Настройка размещения очереди печати.


По возможности лучше отрисовывать задачи на клиенте. В таком случае клиент будет сам переводить документ в специальный формат для печати (PDL). Сервер же не будет тратить ресурсы на это преобразование.


По умолчанию эта возможность уже включена, включить―выключить можно групповой политикой для всех принтеров. Индивидуальную настройку принтеров можно провести с помощью команды


printui /Xs /n "printer" ClientSideRender disabled

Отключать отрисовку на клиенте имеет смысл при достаточном запасе производительности сервера печати для разгрузки клиентов.


Принтеры с поддержкой XPS (OpenXPS) меньше нагружают сервер, чем принтеры без нее. Принтеры с поддержкой PCL 6 и Postscript чуть менее эффективны из-за векторного формата. Поэтому при выборе принтера лучше подбирать с поддержкой XPS, и устанавливать соответствующий драйвер.


С выходом Windows 8\2012 появилась поддержка драйверов печати v4. Драйвера 4-й версии более производительны, но Windows 7 будет печатать на драйвере четвертого типа, отрисовывая задачи на клиенте. Поэтому если в сети еще встречаются старые Windows, стоит установить и драйвера третьего типа. Посмотреть на тип драйвера можно в свойствах сервера печати на вкладке «Драйверы»:



Окно установки дополнительных драйверов.


Если говорить о возможностях драйверов четвертого типа, то к ним можно отнести:


  • использование видеокарты для отрисовки задач печати. Да, теперь для повышения быстродействия при отрисовке задач на сервере можно установить в принтсервер видеокарту;


  • упрощенная система подключения «расшаренного» принтера: теперь не нужно ставить драйвера под разные архитектуры процессора.

Заслуживает внимания и технология Branch Office. С ее помощью клиент работает с принтером напрямую, минуя какую-либо обработку на сервере печати. Правда, понадобятся принтеры с поддержкой TCP\IP или WSD. Подробнее ознакомиться с технологией можно на сайте Microsoft, а включить или отключить для конкретного принтера можно с помощью командлета powershell:


Set―Printer ―name <printername> ―ComputerName <computername> ―RenderingMode BranchOffice

Технология не работает, если используется обработка печати на сервере.


Для диагностики узких мест при печати обратите внимание на три процесса:


  • Spoolsv.exe;


  • Printfilterpipelinesvc.exe;


  • Printisolationhost.exe;

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



Набор типовых счетчиков производительности подсистемы печати.


Список счетчиков с разъяснениями ― под спойлером.
Название Описание
Всего заданий напечатано Количество напечатанных заданий
Всего напечатано страниц Количество напечатанных страниц
Вызовов добавления сетевого принтера Количество подключений к расшаренному принтеру с момента последнего перезапуска службы
Заданий Количество напечатанных заданий с момента последнего перезапуска службы
Заданий, обрабатываемых диспетчером печати Текущее количество заданий в службе печати
Максимум заданий, обрабатываемых диспетчером Максимальное количество заданий в службе печати
Максимум ссылок Максимальное количество обращений к очереди печати
Ошибок заданий Количество ошибок заданий
Ошибок «Отсутствует бумага» Количество ошибок, вызванных отсутствием бумаги
Ошибок «Принтер не готов» Количество ошибок принтера
Печатаемых байт/c Скорость текущей печати в байтах, позволяет приблизительно оценить время занятости принтера
Ссылок Текущее количество обращений к очереди печати

В общем, подобрав параметры под конкретную ситуацию, можно повысить производительность этих простых ролей до 50%. А refurbished сервер еще даст прикурить современным монстрам с настройками «по умолчанию».


Расскажите в комментариях, про повышение быстродействия каких ролей Windows вам было бы интересно почитать. Приходилось ли вам заниматься тюнингом ролей и сервисов? Каких результатов достигли?

Теги:
Хабы:
+13
Комментарии 14
Комментарии Комментарии 14

Публикации

Информация

Сайт
servermall.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия