Статья является переводом текста Гилберта Гонга (Gilbert Gong), опубликованного по адресу http://www.daemonnews.org/200108/benchmark.html. От переводчика Большинство пользователей компьютеров даже не подозревают какая мощь заложена в их аппаратные средства -- так как они используют программное обеспечение в конфигурации «по умолчанию». К сожалению ожидать максимальных показателей производительности от «умолчальных» конфигураций не приходится -- ведь они обязаны работать на подавляющем большинстве компьютеров, а следовательно подразумевают некий средний компьютер, ради которого производительность приносится в жертву совместимости. Однако существуют люди, которых не удовлетворяет такая ситуация -- в мире Windows именно такие люди «роются» в дебрях системного реестра и пишут разного рода твикеры. К счастью в мире бесплатных UNIX-подобных операционных систем все обстоит гораздо проще -- надо лишь немного почитать документацию (см. man tuning в FreeBSD) и все «секреты» операционной системы будут у вас как на ладони -- фраза «читайте доки, они -- рулез» набирает все большую популярность среди опытных пользователей. Предлагаемая вниманию читателей статья является очень хорошей иллюстрацией того к чему может привести даже незначительная оптимизация работы FreeBSD-системы чисто программными средствами. Несмотря на казалось бы элементарные действия по настройке, автору удалось добиться впечатляющих результатов не только в плане повышения производительности, но и стабильности работы операционной системы в целом. Надеюсь читатели заинтересуются темой оптимизации использования доступных вычислительных реурсов.
Введение Обычная инсталляция FreeBSD устанавливает пользователю систему, которая создана для удовлетворения потребностей большинства людей и является попыткой компромисса между безопасностью, надежностью и производительностью в многопользовательском окружении. Таким образом совершенно очевидно, что подобная конфигурация системы не оптимизирована для использования в качестве высокопроизводительного сетевого сервера. В этой статье я рассмотрю получаемый эффект от тонкой настройки системы для работы в качестве выделенного сетевого сервера.
Описание системы и методика тестирования Для тестирования использовалась следующая конфигурация аппаратных средств: процессор Pentium III 600 MHz, 512 MB оперативной памяти, материнская плата Super Micro P6SBU. К встроенному Adaptec Ultra2 SCSI-контроллеру был подключен винчестер IBM DNES-309170W SA30 (объем 8GB). В качестве сетевого интерфейса использовалась плата фирмы 3COM 3c905B-TX. В процессе тестирования использовалась стандартная файловая система -- UFS. Когда это было необходимо в качестве сетевого клиента использовался компьютер с процессором Celeron 400 MHz имеющий 128 MB оперативной памяти. Сервер был оснащен операционной системой FreeBSD-4.3-RELEASE. На клиенте были установлены несколько различных версий FreeBSD (это было сделано в связи с тем, что меры направленные на повышение безопасности в 4.3-RELEASE непреднамеренно уменьшают скорость взаимодействия двух серверов между собой. В стандартной установке нет способа исправления этой ситуации, хотя «заплатка» для устранения такого поведения была выпущена). Я запускал на сервере три различных бенчмарка по очереди в обоих конфигурациях (стандартная и подвергшаяся настройке). Результаты тестов не следует воспринимать как безусловное мерило производительности -- они предназначены лишь для иллюстрации различий производительности стандартной и «подстроенной» конфигурации. Были использованы следующие тесты -- http_load ( http://www.acme.com/software/http_load), для оценки производительности http-сервера (Apache), postmark ( http://www.netapp.com/tech_library/3022.html), для оценки общей производительности системы и postal ( http://www.coker.com.au/postal), для оценки производительности почтового сервера (на базе postfix).
Настройка Техника оптимизации в основном взята со страниц встроенной документации (man tuning). 1. Перекомпиляция ядра. Пожалуй это первый шаг с которого следует начать при оптимизации FreeBSD. Для этого из файла конфигурации ядра следует удалить все компоненты которые не являются важными для вашей системы и увеличить значения параметров maxusers и NMBCLUSTERS. Я использовал такой файл:
# Основано на GENERIC-ядре
machine i386 cpu I686_CPU # Оптимизация для процессоров Pentium Pro и выше
ident TUNED # Название сборки ядра maxusers 512 options NMBCLUSTERS=65536 # maxusers и NMBCLUSTERS самые важные настройки в оптимизированной конфигурации
options INET # Поддержка TCP/IP options FFS # Berkeley Fast Filesystem (файловая система FreeBSD) options FFS_ROOT # FFS может являться корневой файловой системой options SOFTUPDATES # Разрешить мягкие обновления для файловых систем options MFS # Файловая система в оперативной памяти options PROCFS # Файловая система процессов options COMPAT_43 # Совместимость с BSD4.3 options SCSI_DELAY=5000 # Задержка перед пробой SCSI-устройств options UCONSOLE # Позволяет пользователям захватить консоль options USERCONFIG options VISUAL_USERCONFIG options KTRACE options SYSVSHM options SYSVMSG options SYSVSEM options P1003_1B options _KPOSIX_PRIORITY_SCHEDULING #options ICMP_BANDLIM # Включает лимитирование ICMP-трафика options KBD_INSTALL_CDEV # Обратите внимание параметр ICMP_BANDLIM закомментирован, так как ограничение ICMP трафика может сказаться на других видах трафика (на мой взгляд это излишняя перестраховка, прим. переводчика) # Удалены ненужные файловые системы ISO9660 (CDROM), NFS (сетевая файловая система)
device isa device pci
# Поддержка дисководов device fdc0 at isa? port IO_FD1 irq 6 drq 2 device fd0 at fdc0 drive 0 device fd1 at fdc0 drive 1
device ahc # Adaptec SCSI-контроллерAHA2940 и AIC7xxx device scbus # SCSI-шина device da # Прямой доступ (для дисков)
# Удалены многочисленные ненужные SCSI/IDE/RAID драйверы
device atkbdc0 at isa? port IO_KBD device atkbd0 at atkbdc? irq 1 flags 0x1 device psm0 at atkbdc? irq 12 device vga0 at isa? pseudo-device splash # необходимо для screensaver device sc0 at isa? flags 0x100 # системная консоль
device npx0 at nexus? port IO_NPX irq 13 # сопроцессор
# COM-порты device sio0 at isa? port IO_COM1 flags 0x10 irq 4 device sio1 at isa? port IO_COM2 irq 3 device sio2 at isa? disable port IO_COM3 irq 5 device sio3 at isa? disable port IO_COM4 irq 9
device ppbus # Шина параллельного порта
device miibus # Поддержка шины MII (необходима для сетевой карты) device xl # Драйвер сетевой карты 3COM 3c90x
pseudo-device loop # Интерфейс loopback (необходим) pseudo-device ether # Поддержка Ethernet #pseudo-device sl 1 # Kernel SLIP #pseudo-device ppp 1 # Kernel PPP #pseudo-device tun # Пакетный туннель pseudo-device pty # Псевдо-ttys (telnet etc) # Заметьте PPP и SLIP, а также туннель закомментированы. Не добавляйте эти интерфейсы в ядро, если они вам не нужны
2. Включение soft updates Это пожалуй один из важнейших этапов конфигурирования высокопроизводительного FreeBSD-сервера (подробнее про soft updates смотрите http://www.ece.cmu.edu/~ganger/papers/CSE-TR-254-95и http://www.mckusick.com/softdep). Soft updates это метод увеличения производительности обновления метаданных файловой системы (хочется отметить что soft updates не только повышают производительность (особенно при работе с большим количеством мелких файлов), но и существенно повышают надежность файловой системы -- прим. переводчика). Следующие команды были введены в однопользовательском режиме (вызывается командой shutdown now -- прим. переводчика):
tunefs -n enable / tunefs -n enable /usr tunefs -n enable /var tunefs -n enable /tmp
(К сожалению автор статьи несколько недоговаривает: во-первых перед подачей этих команд следует размонтировать файловые системы командой umount, а во-вторых первая команда (tuneft -n enable /) не выполнится, так как размонтировать корневую файловую систему не удастся -- прим. переводчика).
3. Sysctl Несколько sysctl-переменных должны быть изменены для достижения максимальной производительности. Следующие строки необходимо добавить в файл /etc/sysctl.conf:
vfs.vmiodirenable=1 kern.ipc.somaxconn=4096 kern.maxfiles=65536
4. Остальное Несколько последних штрихов включая установку параметра “noatime” (см. /etc/fstab -- прим. переводчика) на большинстве файловых систем и пристальное внимание к физическому расположению дисковых разделов (очевидно разделы к которым обращаются наиболее часто следует размещать ближе к нулевым дорожкам -- прим. переводчика).
Результаты теста Http_load Для проведения этого теста я установил Apache 1.3.19 из коллекции портов, изменив парамерт HARD_SERVER_LIMIT на 2048. Обычная (не тюнинговая) конфигурация не позволяет создавать 2048 процесса, я задал 128 процессов для начального запуска и максимально может быть запущено 1024 процесса. В оптимизированной конфигурации я установил 2048 постоянно работающих Apache-процесса. В ходе теста я запускал http_load несколько раз с количеством одновременных запросов от 10 до 1000. Я сконфгурировал сервер так что бы от отвечал по десяти IP-адресам, переключаясь между ними. Результаты представлены на рисунке: Оптимизированная конфигурация превосходит обычную более чем на порядок. Неоптимизированная конфигурация максимально обслуживает 17 запросов/сек, как результат нехватки сетевых буферов. В свою очередь оптимизированная конфигурация увеличивает производительность при увеличении количества запросов от 333 запросов/сек до 509 запросов/сек (1800%-2900% увеличение производительности по сравнению с обычной конфигурацией). Оптимизированная конфигурация также показывает заметно меньшее количество ошибок при обработке запросов (см. рисунок).
Результаты теста Postmark Postmark запускался с различными наборами параметров. Сначала он был запущен с конфигурацией описанной на сайте postmark’а. Эти результаты сведены в таблицу (включая результаты FreeBSD MFS -- файловой системы в памяти) : 1000/50000 Ultra 1 UFS1 Ultra 1 TMPFS1 Ultra 1 NFS F6302 FreeBSD Untuned FreeBSD MFS FreeBSD Tuned Транзакций в секунду 36 2000 253 61 2941 276 Чтение (Кб/сек) 115.67 4880 799.91 190.95 9460 878.59 Запись (Кб/сек) 118.27 7330 817.89 195.24 9670 898.33
20000/50000 Ultra 1 UFS1 Ultra 1 TMPFS1 Ultra 1 NFS F6302 FreeBSD Untuned FreeBSD MFS FreeBSD Tuned Транзакций в секунду 15 438 176 40 256 91 Чтение (Кб/сек) 29.93 663.64 383.41 74.22 560.37 219.75 Запись (Кб/сек) 54.22 1530 694.58 134.46 1020 398 (сравнение производится со станцией Sun Ultra 1). Система была проведена через серию тестов с различными размерами файлов и их количествами: (1000 файлов) (20000 файлов) Разница в быстродействии вполне очевидна в обоих случаях и составляет от 40% до 860% в данном тесте.
Результаты теста Postal Для проведения этого теста в систему был установлен из системы портов Postfix (postfix-20010228-pl01). Тест запускался на полчаса с интервалом количества параллельных сессий. На тестовом сервере было создано порядка 15000 пользовательских бюджетов, Postal пользуясь их списком рассылал им почту. Тесты выполнялись без промежуточной очистки очереди сообщений с небольшими временными промежутками, т.е. не посланные сообщения оставались в очереди до следующего теста создавая дополнительную нагрузку на сервер). Несмотря на надуманность такого теста, его результаты хорошо показывают различия в производительности конфигураций. Результаты теста смотрите на рисунке: Различия в быстродействии варьируются от 40% до 650%.
Заключение В заключении мы видим, что стандартная инсталляция FreeBSD оптимизирована для безопасности и целостности, совершенно не оптимизирована для использования в качестве высокопроизводительного сетевого сервера. В подавляющем большинстве случаев при обслуживании большого количества одновременных соединений, надежной поддержке большого количества процессов и высоким требованиям к производительности файловой системы, необходимо предпринять шаги для увеличения скорости системы по сравнению с конфигурацией «по умолчанию». Плюсы, которые могут быть извлечены из этого поистине огромны -- это повышение производительности как минимум в два раза! Комментарии: 1 Отправить другу |