ядра Linux 2.4 и 2.6 в серверном применении: сравнительное тестирование
В ядро версии 2.6 было внесено множество улучшений, имеющих направленность на корпоративное применение. В данной статье речь пойдет о результатах сравнения версий 2.4 и 2.6 при использовании в веб, полученных в IBM Linux technology center. Будут рассмотрены ключевые улучшения версии 2.6, методики тестирования и собственно сами результаты тестов. Вкратце: ядро версии 2.6 намного быстрее ядра версии 2.4 при обслуживании веб-страниц; при этом стабильность не пострадала.
обзор тестирования
Для тестирования веба применялись два основных сервера — веб-сервер и сервер приложений.
Веб-сервер.Страницы просматривались веб-браузером путем обработки запросов по протоколу HTTP.
Сервер приложений —это обобщенный сервер, который переносит бизнес-логику на клиентские приложения через различные протоколы, возможно включающие HTTP. Он выполняет гораздо более сложные функции, чем веб-сервер, например, управление сессиями, балансировку загрузки, передачу сообщений, управление транзакциями, обеспечение безопасности и т.д. В некоторых случаях сервер приложений — это некоторое расширение веб-сервера.
Для тестирования было выбрано несколько веб-серверов и серверов приложений, включая Apache, Jakarta-Tomcat, IBM WebShpere Application Server и JBoss. Большинство из них является проектами с открытым исходным кодом и может быть бесплатно загружено.
различия в тестировании версий 2.4 и 2.6
Тестирование ядра версии 2.5/2.6 с использованием веб-серверов и серверов приложений было намного сложнее, чем для версии 2.4. При тестировании версии 2.4 использовались только Apache и WebSphere. Основным инструментом тестирования был The Web Perfomance Tool (WPT).
При тестировании версий 2.5/2.6 были разработаны намного более сложные и всеобъемлющие методики тестирования. Тестирование веб-сервера и сервера приложений широко используется для тестов интеграции и симуляции пользователей.
В дополнение к увеличению числа серверов, увеличилось также и число клиентских программ для того, чтобы симулировать как можно больше различных типов пользовательских окружений. Среди них: WPT, Hammerhead, Httperf, и Pagepoker. Все эти серверные и клиентские инструменты запускались с различной продолжительностью (24 часа и 96 часов) на последней доступной версии ядра.
Наконец, тестовое оборудование не ограничивалось однопроцессорной системой на базе Intel. Тесты прогонялись на 1, 4 и 8-процессорном IBM eServer xSeries и на 64-битном IBM PowerPC. Дефекты в ядре были открыты в системе Linux kernel bug tracking.
основные улучшения версии 2.6
Веб играет ключевую роль в корпоративном мире. В версии 2.6 были сделаны значительные улучшения, касающиеся поддержки корпоративных приложений. Поддержка нового оборудования, нового программного обеспечения и внутренние улучшения ядра делают версию 2.6 более стабильной и масштабируемой. Ядро 2.6 обладает гораздо большей по сравнению с ядром 2.4 производительностью при большой нагрузке на нескольких процессорах и большом количестве памяти. Некоторые существенные для корпоративного применения улучшения следующие:
Поддержка нового оборудования. Linux поддерживает большое количество аппаратных платформ. Ядро версии 2.6 поддерживает новые архитектуры, такие как 64-битный Power PC, 64-битный AMD Opteron, и процессоры встроенных систем.
Hyper-threading.Поддержка hyper-threading, инновационной разработки Intel, является одним из основных улучшений в поддержке аппаратуры в версии 2.6. Hyper-threading позволяет создать несколько виртуальных процессоров из одного, используя технологию одновременной многопоточности (simultaneous multi-threading technology (SMT)), позволяя тем самым одновременно запускать несколько потоков приложений на одном процессоре. Для того чтобы использовать преимущества этой технологии, приложения должны быть разбиты на потоки.
Для веб-серверов Hyper-threading имеет множество преимуществ. Она может увеличить число обрабатываемых транзакций, уменьшить время отклика сервера, и позволит серверам справляться с большей нагрузкой и большим числом пользовательских запросов.
Гибридная архитектура NUMA (Non-Uniform Memory Access).NUMA—это еще одно существенное дополнение версии 2.6, позволяющее поднять производительность системы. В традиционной модели поддержки мультипроцессорности (симметричная мультипроцессорная обработка) каждый процессор имеет равный доступ к памяти и вводу/выводу. Высокая загрузка системной шины становится узким местом, ограничивающим производительность системы. Архитектура NUMA позволяет увеличить производительность процессора, не увеличивая загрузку процессорной шины. В системах с этой архитектурой процессор приближен к некоторой части памяти. Несколько сгруппированных процессоров называются узлом. В каждом узле есть несколько процессоров и память. Кроме обращения к собственной памяти, узлы могут взаимодействовать между собой. Наибольшая производительность достигается при работе узлов со своей памятью. Производительность системы можно поднять путем минимизации межузлового взаимодействия.
Для поддержки аппаратуры NUMA во многие части ядра Linux внесено множество изменений. Изменены: планировщик, разветвленный ввод/вывод, пользовательский API для того, чтобы пользователь понимал размещение используемых ресурсов процессоров и памяти, и внутренние API ядра для того, чтобы подсистемы ядра могли понимать топологию NUMA. В качестве примеров машин с архитектурой NUMA можно привести NEC Azusa, IBM x440, и IBM NUMA-Q.
Расширенная поддержка оборудования.Ядро версии 2.6 поддерживает большее количество разнообразного оборудования. Благодаря внесенным изменениям, оно поддерживает больше миллиона подустройств на тип. Это должно оказаться весьма полезным для хай-энд корпоративных систем.
Улучшения организации поточной обработки.Ядро версии 2.6 имеет новую библиотеку потоков, Native POSIX Thread Library (NTPL). Эта библиотека построена на модели 1:1 и полностью соответствует POSIX. Тест, проведенный Red Hat, показал, что на IA-32 системе, состоящей из двух процессоров Intel Xeon 450 МГц, 100000 потоков могут быть созданы и уничтожены за 2,3 секунды (с одновременно запущенными 50 потоками) при использовании NTPL.
NTPL дает ядру существенный прирост производительности многопоточной обработки в SMP-средах. Это весьма значительно для «тяжелых» приложений масштаба предприятия, таких как, например, приложения на Java или же программы веб-сервера и сервера приложений.
Еще одно существенное изменение заключается в том, что максимальное число PID увеличилось с 32000 до 1 миллиарда. Это увеличивает производительность запуска приложений на сильно загруженных системах. Ядро версии 2.4 часто страдало при запросе приложениями большего числа PID, чем оно позволяло.
O(1) планировщик.O(1) планировщик был добавлен в дерево ядра 2.5 в 2002 году. O(1) планировщик увеличивает масштабируемость и общую производительность Linux путем улучшения пропускной способности большого числа процессов, особенно на больших SMP. О(1) хорошо масштабируется с большим числом процессоров и предупреждает ситуации, когда процессы перепрыгивают с процессора на процессор. O(1) планировщик также позволяет осуществлять балансировку загрузки между процессорами, а также балансировку загрузки с учетом NUMA.
Улучшения ввода/вывода. Код подсистемы ввода/вывода был переписан в ядре 2.6 для улучшения масштабируемости и производительности. Запрет на глобальные запросы ввода/вывода снят. Буфер ввода/вывода (kiobuf) теперь разрешает запросы большие, чем PAGE_SIZE. Планировщик ввода/вывода был полностью переписан. Было сделано также еще несколько улучшений, касающихся поддержки SCSI.
Асинхронный ввод/вывод.Асинхронный ввод/вывод является нововведением в версии 2.6. Он позволяет приложениям корпоративного характера, таким как веб-серверы и базы данных, масштабироваться без применения сложных внутренних механизмов пулинга для сетевых соединений.
Другие улучшения. Кроме описанных выше изменений, существует еще несколько не менее важных. Например, версия 2.6 имеет поддержку нескольких новых файловых систем, включая JFS, XFS, NFS v4, и Andrew File System (AFS). Новые сетевые протоколы и возможности, например, Stream Control Transmission Protocol (SCTP), Internet Protocol Security (IPSec), улучшенная поддержка IPv6, и IP Payload Compression (IPComp) предоставляют пользователям ядра 2.6 лучшую безопасность сети и качество передачи.
Разумеется, не все улучшения версии 2.6 будут влиять на все корпоративные приложения. Некоторые из них требуют наличия специфического аппаратного или программного обеспечения. Тем не менее, большинство перечисленных здесь улучшений являются весьма значительными улучшениями ядра, призванными помочь Linux преодолеть корпоративный барьер.
тестовая инфраструктура
В данном разделе будет описана методика тестирования веб-служб, включая аппаратное обеспечение, выбранные веб-серверы, серверы приложений, программные тесты и стратегия тестирования с типичными сценариями тестов.
серверы, обслуживающие веб
В тестировании ядра версии 2.6 применялись 4 сервера. Два из них были веб-серверами (Apache и Jacarta-Tomcat) , а два — серверами приложений (WebSphere Application Server и Jboss).
Apacheявляется лидером рынка веб-серверов. Обзор веб-серверов Netcraft показал, что более чем 64% сайтов в Интернет используют Apache. Следует отметить, что он является проектом с открытым исходным кодом.
Jacarta-Tomcat— это контейнер сервлетов с открытым исходным кодом и окружением JSP, доступным под лицензией Apache. Jacarta-Tomcat имеет встроенный веб-сервер и может также использоваться с другими веб-серверами.
WebSphere Application Server— сервер приложений масштаба предприятия для динамических приложений e-бизнеса. В его основу положены технология J2EE и службы веб. IBM WebSphere Application Server предоставляет высокую производительность и легко масштабируемый движок транзакций на большом числе операционных систем. В настоящее время все больше и больше приложений WebSphere переносятся с традиционной операционной системы UNIX на Linux для снижения финансовых затрат при схожей производительности.
Jboss Application Serverтакже является сервером приложений с открытым исходным кодом, наследующий все особенности J2EE. Начав развитие с EJB контейнера, в настоящее время JBoss позиционируется как корпоративный сервер приложений.
инструменты тестирования
Довольно много тестовых инструментов доступно он-лайн. Ниже будут перечислены инструменты с открытым исходным кодом, которые мы применяли для симуляции всплеска активности веб-клиентов при тестировании ядра версии 2.6.
Httperf— программа для измерения производительности веба. Httperf позволяет задавать частоту генерации запросов, общее число соединений и значения тайм-аутов.
Hammerhead— стресс-тест, разработанный для оценки веб-серверов. Hammerhead позволяет инициализировать множество соединений с IP-псевдонимов и симулировать множество (256+) пользователей в любое заданное время.
Page pockerявляется модулем Perl, определяющим агент браузера с возможностями тестирования веб-серверов. Вместе с Page pocker поставляются три скрипта для различного использования, включая множество клиентов, стресс-тест и оценку производительности;
Web perfomance tool (WPT)— инструмент тестирования веба, разработанный IBM.
Кроме описанных инструментов, IBM имеет также программу, называющуюся Trade3, которая представляет собой тест производительности WebSphere.
стратегия тестирования
Тесты веб-служб пытались создать сценарий поведения пользователей, позволяющие оценить систему в целом. Продолжительность первого запуска была равна 24 часам. Второй прогон длился 96 часов, а третий и четвертый — 7 и 14 дней соответственно. Все сценарии, основанные на различных комбинациях клиентских и серверных инструментов, запускались на 8-процессорных IBM xSeries и PSeries серверах. Для слежения и записи текущего уровня стресса ядра использовались утилиты системного мониторинга.
На рисунке 1 показано, как разные тестовые инструменты использовались с разными веб-серверами или серверами приложений. Разные тестовые инструменты симулировали разные пользовательские окружения.
Рис.1. Тестовое окружение.
На рисунке 2 показано окружение стресс-теста при использовании IBM WebSphere и Trade3 и симуляции онлайновой биржи.
Рис.2. Стресс-тест.
результаты тестирования
В данном разделе будут приведены результаты тестов ядер версий 2.4 и 2.6. Типичный тест Apache/WPT на 8-процессороном SMP IBM xSeries демонстрирует очень большой рост производительности ядра 2.6 без ухудшения качества обслуживания.
Тестовая конфигурация:
Машина:IBM xSeries Netfinity 8500R 8681-7RY.
CPU:(8) Pentium 3 700 МГц.
Память:9 Гб.
Место под своп:2 Гб.
Дистрибутив Linux:Red Hat 7.3.
Веб-сервер:Apache Http Server 2.0.47.
Инструмент тестирования:WPT 1.9.4.
Примечания:
— два теста проводились на одной и той же системе с одной и той же конфигурацией, единственным отличием была версия ядра;
— WPT использовался для симуляции веб-клиентов. Было создано 30 клиентов, каждый из которых имел по два потока;
— за одно и то же время Apache обслужил в 6 раз больше веб-страниц на ядре 2.6 чем на ядре 2.4. Среднее время для обработки страницы на ядре 2.6 было равно всего лишь 1/5 от времени той же операции под ядром 2.4;
— при тестировании обеих версий ядра не было никаких неудачных соединений.
Рис.3. Количество «выданных» веб-страниц за разные промежутки времени.
Таблица 1. Сравнение результатов.
Ядро | средняя загрузка процессора | средняя загрузка памяти | Средняя загрузка свопа | Всего обслужено веб-страниц | Обслужено страниц в секунду | Среднее время обработки | Неудач- ные под- ключения |
2.4.18- smp | 100% (user: 7.38% system:92.62%) | 6.41% | 0% | 8,845,147 | 102.37 | 294.44 | 0 |
2.6.0- test5 | 99.42% (user: 39.35% system:60.07%) | 35.96% | 0% | 53,827,939 | 623 | 57.71 | 0 |
выводы
В ходе тестирования установлено, что при использовании типичного сценария (Apache/WPT на 8-процессорном SMP IBM xSeries), сервер Apache имеет лучшую масштабируемость и производительность на ядре 2.6 по сравнению с ядром 2.4. На одинаковой системе с одинаковой нагрузкой сервер Apache c ядром 2.6.0-test5 более эффективно использовал системные ресурсы и обслужил в шесть раз больше запросов, чем со старым ядром 2.4.18. Эти реальные данные демонстрируют, что множество различных нововведений помогают ядру версии 2.6 предоставлять лучшую масштабируемость и производительность и делают его достаточно «взрослым», чтобы применяться в приложениях уровня предприятия.
Ли Джи, перевод Дмитрия Герусса.
Сетевые решения. Статья была опубликована в номере 01 за 2004 год в рубрике software