Win2k3 и Win2k8 по умолчанию оптимизированы под стандартную сетевую среду. Но
если серверную ОС надлежащим образом настроить (например, под требования
компании), то это благоприятно отразится на каждом аспекте работы сети, начиная
от самого оборудования и заканчивая пользователями, подключенными к серверу.
Анализируем причину
Любая внештатная ситуация, в том числе и снижение производительности сервера,
требует тщательного анализа. Не собрав всей информации, можно нагородить дел.
Возьмем такой случай. Контроллер домена (КД) уже не справляется со своими
обязанностями — пользователи подолгу регистрируются в системе или не могут зайти
в сетевую папку. В зависимости от топологии Сети, вариантов решения может быть
несколько.
Например, можно модернизировать железо, перераспределить нагрузку между
серверами (в том случае, когда КД выполняет еще и другую задачу) или же снизить
нагрузку на основной КД за счет установки еще одного КД в отдельном
подразделении компании. При использовании Win2k8 в удаленном офисе есть вариант
установить контроллер домена только для чтения (RODC). Тогда в случае
компрометации сервера или банальной кражи оборудования можно не бояться за
нарушение функционирования всего леса (подробности смотри в статье «В лабиринте
AD»). Так мы разгрузим основной КД и снизим нагрузку на Сеть (в том числе и на
внешний канал, если для соединения между офисами используется интернет).
Узкие места могут возникать по нескольким причинам:
системные ресурсы сервера или сети исчерпали свои возможности — как
правило, требуется наращивание или модернизация;
отдельные системы или участки сети нагружены неравномерно — требуется
перераспределение ресурсов;
ресурс используется в монопольном режиме — возможно, потребуется замена
программы на аналог, запуск ее только по требованию или в периоды низкой
загрузки;
неправильная настройка — необходимо изменение параметров.
Теперь разберем некоторые моменты подробнее.
Ищем бутылочное горлышко
Производительность систем и сервисов, то есть время, за которое они выполняют
некоторую задачу, зависит от ресурсов процессора и памяти, емкости и
производительности дисковых накопителей и пропускной способности сети. Все они
имеют свой лимит. При превышении запаса прочности одного из ресурсов
производительность начинает резко снижаться, образуя узкое место. Как результат,
общая производительность сервера определяется именно этим ресурсом, хотя
остальное в норме.
В новой Win2k8 и Win2k3, которая еще долго будет верой и правдой служить на
серверах, системы мониторинга несколько отличаются, но не настолько, чтобы не
разобраться при смене системы. Диспетчер задач, вызываемый по (в
Win2k8 нужно будет выбрать в меню еще и Start Task Manager) или ,
позволяет во вкладке Performance увидеть состояние основных системных ресурсов (CPU,
ОЗУ) и Сети (во вкладке Networking). В обеих системах можно оценить вклад
отдельного процесса в общую потерю производительности. Если информации
недостаточно, добавляем счетчики производительности. Для этого достаточно
перейти во вкладку «Processes» и выбрать в меню View — Select Columns, после
чего установить флажки напротив нужных пунктов. По умолчанию активировано всего
два счетчика: CPU Usage (загрузка ЦП) и Memory — Private Working Set (Memory
Usage в Win2k3, Использование памяти). Названия некоторых счетчиков в системах
отличаются, но разобраться несложно.
В Win2k3 для наблюдения за производительностью системы в штатную поставку
входит «Монитор Производительности» (вызывается через Старт —
Администрирование — Производительность, perfmon.msc), который выводит показания
активных счетчиков в виде графиков, диаграмм или таблиц. Ведется история
событий, помогающая отследить все изменения. При достижении порогового значения
можно, например, отправить сообщение админу — в общем, выполнить действие.
Подробности о «Мониторе Производительности» и основных счетчиках смотри в статье
«Поставь сервер на
счетчик», опубликованной в X_11_2007.
На сайте Microsoft для Win2k3 доступно еще одно эффективное, хотя и
малоизвестное средство анализа производительности — Server Performance Advisor
V2.0 (SPA). С помощью этой утилиты можно собрать информацию о настройках, данные
со счетчиков с одного или нескольких серверов, отслеживать события (Event
Tracing). По результатам работы получим удобные для чтения и анализа отчеты о
производительности, содержащие предупреждения и рекомендации по устранению
неполадок. В SPA имеется более 90 предварительно настроенных групп коллекторов.
Причем самые востребованные уже настроены! Например, коллектор System Overview
содержит основные системные счетчики: CPU usage, Memory usage, занятые файлы и
TCP-клиенты, top-потребители CPU, а также счетчики для основных серверов —
контроллеров домена, файловых служб AD, IIS, DNS, Terminal Services, SQL и др.
В Win2k8 контроль за основными параметрами системы возложен на Reliability
and Performance Monitor (RPM), который вобрал в себя функции отдельных
приложений, доступных в Win2k3. Запустить его можно несколькими способами: из
меню Administrative Tools, нажатием клавиши Resource Monitor во вкладке
Performance в Task Manager, выбрав пункт в меню Diagnostic в Server Manager или
введя в консоли perfmon.exe. В главном окне RPM увидим четыре графика, выводящие
информацию о загрузке CPU, Disk, Memory и Network в реальном времени. Чуть ниже
расположены таблицы с подробной информацией, разбитой по этим же группам. В
каждой показан процесс и связанные с ним данные (PID, объем ОЗУ, загрузка CPU,
Response Time дисковых операций, количество переданных и принятых сетевых
пакетов и прочее).
Зачастую достаточно одного взгляда на графики и таблицу, чтобы оценить
обстановку и принять решение. Но и это еще не все. «Монитор Производительности»
находится в меню Performance Monitor. По умолчанию активирован только один
счетчик Processor Time, но достаточно выбрать в контекстном меню Add
Counter, как откроется одноименное окно, в котором можно выбрать нужный счетчик.
Полный список охватывает все параметры системы и сервисов. Следующее меню, хотя
и не связано с оценкой производительности, — тем не менее, очень полезно при
поиске неисправностей. Речь идет о Reliability Monitor («Монитор Надежности»).
Справа от графика выводится индекс ожидания появления проблемы System Stability
Index («Системный Индекс Устойчивости»). График Stability Index помогает быстро
найти дату, когда было замечено первое появление проблемы (уменьшился System
Stability Index). В поле System Stability Report показаны детали возникшей
проблемы.
Два меню Data Collector Sets и Reports выступают в роли удобного аналога SPA.
Так, в первом из них содержатся шаблоны коллекторов, которые могут быть
использованы с любой программой, предназначенной для сбора данных. Выполнив,
например, LAN Diagnostics или System Performance (то есть любой коллектор или
группу), в соответствующем подменю в Reports получим полный отчет.
Тюнинг системы
Информация собрана, а значит, пора принимать решение. Чтобы добиться
увеличения производительности, можно изменить алгоритм работы буксующей
подсистемы, модифицировав соответствующий системный параметр. Признаю, это
временная мера, которая не всегда улучшает ситуацию. Но при правильном подходе
она позволит серверу продержаться на должном уровне еще несколько месяцев, пока
начальство не раскошелится на новое оборудование.
Перед внесением изменений сформулируем для себя несколько правил:
одновременно вносим не более одного изменения, даже если узкое место
требует настройки нескольких параметров. Так легче будет сделать откат в
случае неудачи. Следующее изменение производим, только убедившись, что идем
правильным путем. Внесение сразу нескольких настроек делает невозможным
определение результата для каждого конкретного параметра;
после каждого изменения повторяем наблюдение в течение некоторого
времени, достаточного для сбора статистической информации;
так как изменения могут повлиять на другие ресурсы, сохраняем подробную
информацию об изменениях и результатах наблюдений за производительностью.
Среди советов встречаются такие, как отключение «лишних» сервисов и проверка
запланированных заданий, но в Win2k8 изначально запущено только то, что
действительно нужно. Поэтому эти советы больше актуальны для ранних версий
Windows.
Оптимизация сети
Сетевая подсистема в Win2k3/Win2k8 (как, впрочем, и в любой другой ОС)
является многоуровневой. Глубокий тюнинг следует производить на каждом уровне,
начиная от драйвера и NDIS (спецификация интерфейса сетевых драйверов) и
заканчивая уровнем приложений. Начнем «снизу».
Вызываем свойства адаптера и изучаем активные протоколы. Любой протокол
генерирует некоторый трафик, поэтому даже в небольшой сети путешествует гораздо
больше пакетов, чем нужно для ее нормального функционирования. Например,
адаптеру, который смотрит в интернет, часто ни к чему NetBEUI (да и с точки
зрения безопасности, это минус). Поэтому отключаем все лишнее, в том числе и
IPv6 (в нашей стране пока необходимости в нем нет). Параллельно включаем снифер
и отлавливаем «лишние» пакеты, определяя их источник. Если расположить более
быстрый или часто используемый протокол в начале списка, то это позволит
увеличить производительность.
Локальные файлы HOSTS (для TCP/IP) и LMHOSTS (NetBEUI), хранящие адреса и
имена систем, помогают уменьшить количество запросов на разрешение имен. Эти
настройки можно произвести как вручную, так и зайдя в свойства TCP/IP в
настройках сетевой карты, и затем выбрав Advanced. Распространять изменения в
этих файлах можно в небольших сетях вручную, а в AD — при помощи политик.
Присутствие DNS- и WINS-серверов также способно уменьшить количество лишних
задержек.
Кстати, новая концепция ролей в Win2k8 приносит свои плоды: в настройках Сети
после установки системы ничего лишнего не включено, а новые алгоритмы настройки
и оптимизации требуют меньше телодвижений со стороны администратора. Например,
автоматическая настройка TCP Receive Window Auto-Tuning динамически изменяет
размер принимающего буфера TCP, используемого для хранения входящих данных, тем
самым повышая пропускную способность, скажем, при передаче больших файлов на
высокоскоростных каналах (поэтому ключ реестра TcpWindowSize в Win2k8
игнорируется). Средство Compound TCP (CTCP) увеличивает количество одновременно
отправляемых данных — ну, и так далее. Впрочем, кое-что нам оставили и для
ручной настройки.
Нажав кнопку Configure в свойствах адаптера, получаем во вкладке Advanced
доступ к ряду настроек (их количество зависит от конкретного адаптера).
Например, для файлового и FTP сервера рекомендуется задействовать следующие
опции: IPv4, TCP и UDP Checksum offload, Segmentation offload и TCP offload
engine (TOE). Поддержка последнего включается следующим образом:
netsh int tcp set global chimney = enabled
Для веб-сервера и сервера базы данных желательно активировать еще и
Receive-side scaling (RSS). Но если сетевой адаптер не справляется с нагрузкой,
— наоборот, пробуем по одному отключать все offload настройки. В Link Speed &
Duplex указывается режим работы адаптера (по умолчанию он выбирается
автоматически), а в Transmit/Receive Buffers — буфер приема и передачи. В целях
экономии ресурсов размер буфера по дефолту установлен в минимальное или среднее
значение. При больших нагрузках это чревато потерями пакетов. Если адаптер
позволяет вручную изменить размер буфера, то увеличиваем, не задумываясь.
Параметр Interrupt Moderation по умолчанию установлен в Adaptive.
Проигравшись с настройками, можно попробовать выбрать приемлемый результат между
производительностью Сети и нагрузкой на CPU. Если на сервере несколько CPU и
сетевых карт, то возможна привязка CPU к сетевому адаптеру. Это положительно
скажется на производительности Сети и системы за счет уменьшения количества
«лишних» прерываний. Конечно, это не все, что может сделать админ для разгрузки
Сети. Например, для настройки драйвера http.sys, который используется IIS, есть
целая ветка реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters
Что-то можно сделать и на прикладном уровне. Например, в ISA Server
реализована функция сжатия данных, передаваемых по протоколу HTTP. Правда, за
меньший трафик придется платить большей нагрузкой на CPU. В медленных сетях
пропускная способность повышается на 30%. Также уменьшается задержка при
передаче информации, хотя нагрузка на процессор не увеличивается более чем на
20%. Для разгрузки сервера терминалов в Computer Configuration — Administrative
Templates — Windows Components — Terminal Services — Terminal Server можно
уменьшить глубину цвета и размер рабочего стола, установить сжатие RDP,
отключить обои и т.д.
Дисковая подсистема
Часто именно дисковая подсистема служит основной причиной потери
производительности. Она ограничена числом физических обращений к диску в секунду
(зависит от скорости вращения диска и от того, насколько случайный характер
имеют операции обращения). Самым простым методом сокращения частоты обращения к
диску будет установка дополнительных дисков или использование RAID.
Кое-что можно сделать и самому. По умолчанию файл подкачки равен 1.5 объема
ОЗУ и расположен на системном диске. Последний обычно сильно загружен, к тому же
подвержен фрагментации. Поэтому, если имеется несколько дисков, создаем файл
подкачки на каждом. Для этого в Control Panel System выбираем Advanced System
Setting и получаем знакомое окно System Properties («Свойства системы»).
Нажимаем во вкладке Advanced в поле Performance кнопку Setting, снова щелкаем
Advanced, а затем кнопку Change. В появившемся окне снимаем флажок «Automatically
manage paging file for all driver» и указываем, на каких дисках и разделах
следует создать файл подкачки. При этом следует помнить, что использование
нескольких разделов одного диска для файла подкачки, мягко говоря,
нецелесообразно. Своп лучше размещать на разделах с меньшей буквой, на которых,
как правило, скорость повыше.
По умолчанию Windows записывает данные блоками по 64 Кб, но жесткие диски и
приложения могут использовать блоки других размеров. Данные в этом случае
придется записывать на несколько секторов, что снижает производительность. В
состав Win2k8 и Win2k3 SP1 входит программа Diskpart, предназначенная для
создания разделов диска. С ее помощью можно задать другое смещение. Пользоваться
программой просто. Для запуска в командной строке набираем diskpart.exe. Далее
командой «List Disk» выводим список дисков, выбираем нужный диск — «Select Disk
1», создаем раздел «Create Partition Primary Align=64» и присваиваем ему букву
(«Assign Letter=D»). Помни, что Diskpart уничтожает данные, поэтому
предварительно создай резервную копию!
Также стоит отключить индексацию файлов для (якобы) быстрого поиска и
компрессию диска (если взведен флажок «Compress this drive to save disk space»).
И, конечно же, не забываем о периодической дефрагментации (Свойства диска —
Tools — Defragment Now). В подменю Shadow Copies находятся настройки теневых
копий. Если резервирование производится другими средствами, то для повышения
производительности их можно отключить или изменить алгоритм работы.
Не помешает знать и о некоторых параметрах реестра (они подходят и для
Win2k3). Так, параметр NumberOfRequests, зависимый от драйвера сетевой карты,
позволяет задать количество запросов, ускоряя работу за счет распараллеливания.
Драйвер сам устанавливает оптимальное значение, но рекомендуется установить его
в диапазоне от 32 до 96.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MINIPORT_ADAPTER\Parameters\DeviceN\NumberOfRequests
(REG_DWORD)
Установка в 0 ключа CountOperations позволит отключить некоторые счетчики,
что также повлияет на производительность в лучшую сторону:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Session Manager\I/O System\CountOperations
Установка в 1 (REG_DWORD) ключа DontVerifyRandomDrivers запрещает
тестирование и проверку некорректно работающих драйверов:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Session Manager\Memory
Management\DontVerifyRandomDrivers
В Win2k8 используется сложный алгоритм, индивидуально управляющий приоритетом
I/O. Если для экспериментов ты захочешь его отключить, установи в 0:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\DeviceClasses\{Device
GUID}\DeviceParameters\Classpnp\IdlePrioritySupported\I/O Priorities
Чтобы запретить обновление даты последнего обращения к файлу, устанавливаем в
1 (REG_DWORD) ключ:
HKLM\System\CurrentControlSet\Control\FileSystem\NtfsDisableLastAccessUpdate
Это только основные параметры. А подробную информацию по настройке дисковой
подсистемы можно найти в документе «Disk Subsystem Performance Analysis for
Windows» на сайте Microsoft.
Точность хирурга
Повышение производительности сервера — это сугубо индивидуальная операция,
которую нужно производить с точностью хирурга, контролируя каждый этап. Но
ничего сложного здесь нет! Потратив некоторое время, ты неизменно получишь
результат. А какой именно, — зависит только от тебя.