Тонкая настройка производительности серверных версий Windows
Ульяна Смелая
По умолчанию Win2k3 и Win2k8 оптимизированы под стандартную сетевую среду. Но если серверную ОС настроить надлежащим образом, в расчете на потребности конкретной организации, то это благоприятно отразится на каждом аспекте работы сети, начиная собственно с самого оборудования и заканчивая пользователями, подключенными к серверу.
Содержание:
- Анализируем причину
- Ищем бутылочное горлышко
- Тюнинг системы
- Оптимизация сети
- Дисковая подсистема
- Заключение
- Врезка: 32 bit vs 64 bit
- Боковые выносы
Любая внештатная ситуация, в том числе и снижение производительности сервера, требует тщательного анализа происшедшего. Не собрав всей информации, можно сделать не оптимальное или вовсе неправильное решение. Возьмем такой случай. Контроллер домена (КД) уже не справляется со своими обязанностями, пользователи подолгу регистрируются в системе или не могут зайти в сетевую папку. В зависимости от топологии сети, вариантов выхода из ситуации может быть несколько. Например, можно модернизировать железо, перераспределить нагрузку между серверами (в том случае, когда КД выполняет еще и другую задачу) или же снизить нагрузку на основной КД за счет установки еще одного КД в отдельном подразделении компании. Причем при использовании Win2k8 в удаленном офисе можно установить контроллер домена только для чтения (RODC), не боясь за нарушение функционирования всего леса в случае компрометации сервера или банальной кражи оборудования (подробности смотри в статье «В лабиринте AD» в этом же номере – прим. ред.) Так мы разгрузим основной КД и снизим нагрузку на сеть, в том числе и на внешний канал, если для соединения между офисами используется интернет.
Узкие места могут возникать по нескольким причинам:
-
системные ресурсы сервера или сети исчерпали свои возможности – как правило, требуется наращивание или модернизация;
-
отдельные системы или участки сети нагружены неравномерно – требуется перераспределение ресурсов;
-
ресурс используется в монопольном режиме – возможно, потребуется замена программы на аналог, запуск ее только по требованию или в периоды низкой загрузки;
-
неправильная настройка – необходимо изменение параметров.
Теперь разберем некоторые моменты подробнее.
Производительность систем и сервисов, т.е. время, за которое они выполняют некоторую задачу, зависит от ресурсов процессора и памяти, емкости и производительности дисковых накопителей и пропускной способности сети. Все они имеют свой лимит, при превышении запаса прочности одного из ресурсов производительность начинает резко снижаться, образуя узкое место. Как результат, общая производительность сервера определяется именно этим ресурсом, хотя остальное в норме.
В новой Win2k8 и Win2k3, которая еще долго будет верой и правдой служить на серверах, системы мониторинга несколько отличаются, хотя, в общем, и не настолько, чтобы не разобраться при смене системы. Диспетчер задач, вызываемый по <Ctrl+Alt+Del> (в Win2k8 нужно будет выбрать в меню еще и Start Task Manager) или <Ctrl+Shift+Esc>, позволяет во вкладке 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 увидим 4 графика, выводящие информацию о загрузке 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.
Повышение производительности сервера – это сугубо индивидуальная операция, которую нужно производить с точностью хирурга, контролируя каждый этап. Но ничего сложного здесь нет, потратив некоторое время, ты неизменно получишь результат. А какой, зависит только от тебя.
Учитывая, что 32-битные процессоры, можно сказать, уходят со сцены, а 32 или 64 версии ОС имеют одинаковую стоимость, использование 64-битной архитектуры на серверах выглядит предпочтительнее. Кроме того, приложения, оптимизированные под 64-битную архитектуру, показывают, как правило, большую производительность. Исключение может быть лишь при несовместимости приложения с 64-битной ОС. Также в 64-битных системах отсутствуют некоторые ограничения, которые могут быть существенными. Например, в 32-битных ОС невозможно использовать память объемом более 3,5 Гб (3,5 до 4 Гб заняты под адресацию). Плюс каждый 32-битный процесс может использовать не более 2 Гб ОЗУ. Хотя в Win2k3 и Win2k Advanced Server предусмотрена функция регулировки ОЗУ 4GT (4-gigabyte tuning). Она позволяет разделить пространство памяти процесса на две части: 3 Гб выделяется на память приложения и 1 Гб — на системную память, т.е. фактически снимает 2 Гб ограничение. Включается 4GT установкой ключа /3GB в параметрах загрузчика. В Win2k3 – в Boot.ini, в Win2k8 командой:
> bcdedit /set IncreaseUserVA 3072
К слову, 64-битный процесс в 64-битной ОС может использовать до 8 Тб ОЗУ. Еще один вариант выделения 32-битному процессу до 4 Гб памяти в 32- и 64-битных версий ОС – компиляция программы с флагом IMAGE_FILE_LARGE_ADDRESS_AWARE.
C 16-битными приложениями ситуация обстоит на порядок хуже. 64-разрядные версии ОС с ними работать не могут, а запуск в 32-битной системе из-за специфики работы приведет к общему падению производительности. Поэтому лучше либо от них отказаться вообще, перейдя на современную версию программы, либо запускать на отдельном компьютере. Благо такие приложения, как правило, не требовательны к ресурсам.
INFO
-
Если расчеты показывают, что 100 Мбит будет не достаточно, следует подумать о гигабитной карте. Но подключать Gigabit Ethernet в обычный PCI-слот не целесообразно, лучше остановить свой выбор на PCI-X, PCIe x8 и выше.
-
Желательно настроить сеть так, чтобы вынести в отдельную подсеть системы, используемые одной группой пользователей или формирующие большой трафик (базы данных, файловый сервер).
-
Для перераспределения рабочей нагрузки можно воспользоваться распределенной файловой системой (о том, как настроить DFS, читай в X_12_2007).
WWW
-
Подробные инструкции по 4GT смотри в статье Q171793 «Сведения о регулировке ОЗУ для приложений с помощью функции 4GT» ().
WARNING
-
Утилита Diskpart уничтожает данные. Не забудь предварительно создать резервную копию.
Статья опубликована в ноябрьском номере журнала «Xakep» за 2008 год.





