Тюнинг типовых ролей Windows. Часть первая: Файлы и печать |
Начинаем небольшой цикл статей, посвященных тюнингу производительности сервера Windows и его типовых ролей. Материал будет полезен как при попытке выжать из старого сервера максимум (помимо покраски в красный цвет), так и при планировании новых высоконагруженных систем без покупки топовых серверов (как это советуют интеграторы).
Процессор - он как сердце сервера, поэтому от него зависит очень много в плане производительности. Благодаря маркетологам мы знаем - чем больше ядер и мегагерцев, тем круче. На самом деле всё не совсем так:
Выбирайте 64-битный процессор. Современные серверные Windows не поддерживают 32-битные процессоры, да и памяти он может адресовать намного больше.
Количество ядер не имеет большого значения. Не все приложения и сервисы могут использовать несколько ядер, и в общем случае одно ядро с большой частотой будет эффективнее, чем два с меньшей.
Hyperthreading - гиперпоточность - когда одно физическое ядро процессора определяется как два логических. Функция процессора позволяет обрабатывать два разных потока на одном ядре, что в общем случае увеличивает производительность. Но бывает, что производительность наоборот снижается из-за того, что кэш процессорного ядра один.
Кэш процессора. Тут все просто: чем он больше, тем лучше, и часто больший кэш дает большую производительность, чем частота процессора.
Не нужно сравнивать процессоры разных поколений и производителей по частоте: скорость обработки данных зависит и от многих других факторов вроде кэша и частоты шины.
Проверка процессора под требования Hyper-V.
С оперативной памятью все довольно просто: чем она больше и быстрее, тем лучше. Чуть интереснее становится, если оперативной памяти недостаточно и системе необходимо использовать файл подкачки. Тут можно ограничиться следующими рекомендациями:
файл подкачки стоит положить на отдельный физический диск. Чем он быстрее, тем лучше. Если такой возможности нет, то лучше разместить его на диске, к которому меньше файловых обращений;
Размещение файла подкачки на системном диске - не лучший вариант.
Теперь о сетевых адаптерах. Из интересных особенностей можно отметить:
Только адаптеры с поддержкой 64-разрядных систем имеют DMA (Direct Memory Access) - технологию прямого доступа к памяти по сети. Если нужна действительно быстрая сеть между нодами кластера - на это стоит обратить внимание.
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;
Разумеется, конкретно эти значения - не панацея. Параметры должны подбираться индивидуально.
Параметры, настраиваемые через 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 |
Если же говорить уже непосредственно про файловый сервер, то вот несколько общих рекомендаций:
Для лучшего быстродействия не используйте ненужные функции вроде мини-фильтров файловой системы, IPSec, шифрование и сжатие NTFS, шифрование SMB и другие. Включение антивируса может существенно подпортить быстродействие, и если периметр сети защищен, лучше его и не устанавливать.
Регулярно стоит проверять актуальность драйверов, особенно на сетевые карты. Встречались ситуации, когда из-за кривых драйверов сетевая карта стабильно работала только при принудительном выставлении сто мегабит. И только с выходом свежих драйверов удалось выжать полноценный гигабит.
Для оценки быстродействия работы протокола 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;
Этот параметр отвечает за дополнительные рабочие процессы, отвечающие за процедуры записи и чтения в системном кэше файловой системы. По умолчанию дополнительных процессов нет, и изменение этого параметра может существенно ускорить работу файлового сервера. Особенно при наличии многоядерных процессоров и производительной дисковой системы. Задумываться об увеличении этого параметра можно при росте счетчика производительности «Кэш - «Грязные» страницы».
В качестве примера тюнинга можно привести следующие значения параметров:
AdditionalCriticalWorkerThreads = 64;
MaxThreadsPerQueue = 64;
Значения также должны подбираться индивидуально.
Имя параметра | Значение по умолчанию | Тип параметра | За что отвечает | Комментарий |
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 -ComputerName -RenderingMode BranchOffice
Технология не работает, если используется обработка печати на сервере.
Для диагностики узких мест при печати обратите внимание на три процесса:
Spoolsv.exe;
Printfilterpipelinesvc.exe;
А также смотрите на расход этими процессами памяти, процессора и нагрузки на жесткий диск. Для более тонкого поиска узких мест помогут специальные счетчики производительности.
Набор типовых счетчиков производительности подсистемы печати.
Название | Описание |
Всего заданий напечатано | Количество напечатанных заданий |
Всего напечатано страниц | Количество напечатанных страниц |
Вызовов добавления сетевого принтера | Количество подключений к расшаренному принтеру с момента последнего перезапуска службы |
Заданий | Количество напечатанных заданий с момента последнего перезапуска службы |
Заданий, обрабатываемых диспетчером печати | Текущее количество заданий в службе печати |
Максимум заданий, обрабатываемых диспетчером | Максимальное количество заданий в службе печати |
Максимум ссылок | Максимальное количество обращений к очереди печати |
Ошибок заданий | Количество ошибок заданий |
Ошибок «Отсутствует бумага» | Количество ошибок, вызванных отсутствием бумаги |
Ошибок «Принтер не готов» | Количество ошибок принтера |
Печатаемых байт/c | Скорость текущей печати в байтах, позволяет приблизительно оценить время занятости принтера |
Ссылок | Текущее количество обращений к очереди печати |
В общем, подобрав параметры под конкретную ситуацию, можно повысить производительность этих простых ролей до 50%. А refurbished сервер еще даст прикурить современным монстрам с настройками «по умолчанию».
Расскажите в комментариях, про повышение быстродействия каких ролей Windows вам было бы интересно почитать. Приходилось ли вам заниматься тюнингом ролей и сервисов? Каких результатов достигли?
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |