Глобальная информационная сеть охватывает сегодня все сферы современного общества – от частной жизни людей, образования, науки, медицины до государственной безопасности. Поэтому можно с уверенностью утверждать, что благополучие современного мира зависит от надежности и эффективности функционирования информационных систем. В настоящей статье отражены результаты исследования вопросов нагрузочного тестирования этих систем.
Отметим, что научные исследования в данной сфере сосредоточены на вопросах создания тестов [1–7], автоматизации процессов анализа результатов тестирования [8, 9], а также адаптации существующих методов к проведению нагрузочного тестирования распределенных систем [10]. Многие методы имеют ad hoc-природу, то есть создаются для конкретного тестирования. Однако вопросы создания нагрузки, которая представляет собой множество тестовых запросов, направленных на тестируемую систему, исследованы недостаточно.
Абсолютное большинство информационных систем глобальной сети построено с помощью клиент-серверной архитектуры. В соответствии с ней в ответ на запросы со стороны клиента программы сервера предоставляют свои ресурсы в виде данных либо сервисных функций. Сами запросы представляют собой набор байтов. На начальных этапах нагрузочного тестирования до стадии запуска тестов (создания нагрузки) осуществляется создание тестовых скриптов, которые представляют собой имитацию типичных действий пользователя с тестируемой системой. Каждое конкретное действие пользователя – это запрос к тестируемой системе. Эффективность стадии создания нагрузки и сбора результатов зависит от качества реализации программного обеспечения. Под эффективностью автор понимает количество тестовых запросов, которые может сгенерировать один компьютерный узел в единицу времени с одновременным сбором результатов. В большинстве случаев для создания требуемой нагрузки ресурсов одного компьютерного узла не хватает. Поэтому разработчики ПО для нагрузочного тес- тирования предлагают различные механизмы ее повышения. Эти механизмы основаны на применении совокупности соединенных компьютерных узлов и представлены в виде облачных, кластерных и распределенных вычислений на базе локальной сети. Ввиду того, что для применения облачных и кластерных вычислений необходимо подключение к глобальной сети, данным способом тестируют уже готовые информационные системы. В остальных случаях применяют распределенные вычисления на базе локальной сети.
Несмотря на обилие приложений для проведения нагрузочного тестирования, логика их функционирования в целом совпадает. Она построена на том, что после создания тестов их исполнение осуществляется программой-нагрузчиком, а сбор данных – отдельными процессами. Программа-нагрузчик порождает большое количество процессов виртуальных пользователей, а мощностей процессора компьютера зачастую не хватает для создания достаточной нагрузки на тестируемую систему. Поэтому создают распределенную систему, состоящую из нескольких компьютеров, объединенных в сеть. Один компьютер выступает при этом в роли ведущего, который раздает тесты и получает результаты от ведомых. На ведомых компьютерах запускаются упрощенные программы-нагрузчики без графического интерфейса, их задачами являются получение задания, создание нагрузки, сбор данных и отправка результатов ведущему компьютеру.
В данном исследовании предлагается иной подход. Вместо дополнительных компьютеров используется специализированный аппаратный блок на базе программируемых логических интегральных схем (ПЛИС). Его задачами являются создание нагрузки и сбор данных. Современные ПЛИС представляют собой мощные и удобные инструменты для решения различных задач – от цифровой обработки сигналов до управления авиаци- онной электроникой [11, 12]. Как показывают результаты работы ученых Англии и США, применение ПЛИС для решения прикладных задач, связанных с сетью, имеет высокую эффективность [13–15]. В своих исследованиях они применяли подтип ПЛИС – программируемые пользователем вентильные матрицы (ППВМ, или FPGA – Field Programmable Gate Arrays).
Разработанная автором система представляет собой нагрузчик, не зависящий от тестируемого приложения и реализованный в виде прошивки для кристалла ПЛИС. Его задачи – формирование запросов, сбор метрик и отправка результатов в БД. Итогом работы являются записи в БД, состоящие из запросов, ответов, времени отправки запросов и времени получения ответов. В качестве аппаратной основы выступает плата «Altera DE2-115 Development and Education Board» компании Terasic с кристаллом ПЛИС типа FPGA «Altera Cyclone IV EP4CE115» [16]. Данная плата обладает большим количеством современных интерфейсов и достаточной памятью. Используемая FPGA имеет следующие характеристики: 114 480 логических элементов, 3 888 Кбит встроенной памяти, 266 встроенных умножителей 18x18, 528 пользовательских портов ввода/вывода, 4 элемента фазовой автоподстройки частоты (ФАПЧ) (PLL) общего назначения.
Взаимодействие с ПЛИС осуществляется посредством интерфейса USB JTAG. Прошивка создается с помощью САПР Quartus II. Обобщенная структура аппаратного нагрузчика представлена на рисунке 1. Его текущая реализация использует 17 098 логических элементов (15 % от общего объема логических ресурсов), 1 308 992 бита памяти (33 % от общего объема) и 2 элемента ФАПЧ (50 % от общего объема).
При работе с аппаратным нагрузчиком загружаются запросы для тестируемого приложения, конфигурируются сетевые параметры и параметры тестирования. Далее аппаратный нагрузчик начинает в автоматическом режиме создавать нагрузку и собирать метрики. При этом он генерирует большое количество сетевых пакетов с запросами, предназначенными для удаленного узла. Процесс генерации запросов включает выборку информации о TCP (Transmission Control Protocol) сессии из памяти, создание сетевых заголовков, подготовку данных к отправке и собственно передачу данных контроллеру Ethernet. Благодаря архитектуре ПЛИС некоторые стадии могут быть совмещены. Время генерации одного сетевого пакета определяется следующим образом: tgen = tss + +tghdp, где tss – время извлечения информации о сессии из памяти; tghdp – время генерации заголовка и подготовки данных к передаче.
Общее время, необходимое для генерации пакета и его отправки в контроллер среды передачи, рассчитывается по формуле , где N – длина отправляемого пакета; D – ширина шины, по которой отправляются данные; T – период синхросигналов.
После завершения отправки сетевого пакета генерируется новый пакет в зависимости от состояния TCP-сессии. Таким образом, характеристики аппаратного нагрузчика зависят от производительности тестируемого узла. Например, перед передачей запроса необходимо отправить запрос на создание соединения, после чего ожидать подтверждения от тестируемого узла. Соответственно при ожидании ответов от удаленного узла растет время tss.
Благодаря возможностям и ресурсам ПЛИС можно измерить tобщее созданного нагрузчика. Для этого разработана дополнительная логика, вычисляющая количество тактов, необходимых для генерации и отправки пакета, с одновременным вычислением их размеров. Эти данные позволяют рассчитать tgen. Измерения сначала записываются в динамическую память, а после завершения эксперимента переписываются на инструментальный компьютер.
В ходе проведенного эксперимента за 10 секунд аппаратный нагрузчик сгенерировал 108 050 пакетов. В процессе этого были выделены две стадии. В ходе первой аппаратный нагрузчик создает большое количество соединений с тестируемым компьютером. Во время второй стадии тестируемой системе отправляются запросы. Производительность аппаратного нагрузчика во время первой стадии не зависит от тестируемого узла, а в ходе второй стадии зависит. Соответственно первая стадия позволяет определить характеристики аппаратного нагрузчика. Результаты ее измерений следующие: tgen worst = 340 нс, tgen best = = 220 нс, .
Изменение времени генерации обусловлено ожиданием доступа к памяти сессий. В то время, когда аппаратный нагрузчик создает соединения, тестируемая система отправляет подтверждения на создание соединений. Получая эти подтверждения, аппаратный нагрузчик обновляет информацию, находящуюся в памяти сессий. Поэтому во время обновления информации блоку создания нагрузки приходится ожидать освобождения памяти.
На базе полученных данных можно рассчитать пропускную способность аппаратного нагрузчика:
= 2 773 152,16 пакета/с,
2 083 333,33 пакета/с,
= 2 777 777,77 пакета/с.
Эти данные отражают пропускную способность для пакетов длиной 56 байт, содержащих служебную TCP-информацию. Пропускная способность аппаратного нагрузчика для пакетов длиной 232 байта, содержащих запрос к тестируемому приложению удаленного узла, следующая: = 1 249 062,45 пакета/с, Cworst = 1 086 956,52 пакета/с, Cbest = 1 250 000 пакетов/с. Зависимость интенсивности генерации сообщений от размера сообщения показана на рисунке 2.
Представленные графики демонстрируют высокую нагрузочную способность аппаратного нагрузчика с предельной пропускной способностью около 380 Мб в секунду. В худшем случае разработанной системе требуется 340 наносекунд для генерации одного сообщения. Для сравнения: время, необходимое одной лишь операционной системе компьютерного узла для обработки и формирования одного запроса, по данным английских исследователей [13], составляет около 15–20 микросекунд. Эти данные были получены на компьютере с четырехъядерным процессором 2,4 ГГц AMD Opteron и операционной системой RedHat Enterprise Linux 5. Автор данной статьи участвовал в серии экспериментов с целью определения нагрузочной способности компьютерных узлов. В рамках этих экспериментов измерялось время, необходимое операционной системе для обработки одного сообщения. В процессе работы применялись следующие компьютерные узлы:
– экспериментальная платформа (ЭП) № 1, компьютер Intel Core i7 920 2,67 ГГц, DDR3-1066 9 Гб, CentOS 6.4;
– ЭП № 2, ноутбук Samsung R580-JS03 Intel Core i5 430M 2,26 ГГц, DDR3-1066 3 Гб, Ubuntu 12.10;
– ЭП № 3, ноутбук MacBook Air Intel Core i7 3667U 2 ГГц, DDR3L-1600 МГц 8 Гб, OS X 10.9.2.
Результаты проведенных измерений представлены в таблице.
Таким образом, характеристики разработанного аппаратного нагрузчика на порядок превышают возможности существующих компьютерных систем. Применение подобного устройства позволит значительно повысить эффективность проведения стадии создания нагрузки и сбора результатов. На базе таких устройств можно строить распределенные вычисления, позволяющие создавать эксплуатационную нагрузку для крупнейших информа- ционных систем глобальной сети. При этом для построения аппаратного нагрузчика могут применяться платы с FPGA, стоимость которых меньше стоимости полноценного компьютера или на уровне стоимости офисного компьютера. Предлагаемая версия разработанной системы может применяться для нагрузочного тестирования различных приложений, использующих транспортный протокол TCP. Учитывая распространенность этого протокола, устройство может применяться для тестирования широкого круга приложений – от веб-серверов и БД до систем пирингового обмена файлами и ряда мультимедиа-приложений. Аппаратный нагрузчик фактически является сетевым стеком, лишенным прикладного уровня. Соответственно выбор приложения зависит от того, какие запросы будут загружены в устройство из инструментального компьютера. Кроме того, благодаря реконфигурируемости этих устройств имеется возможность добавлять новые протоколы, функции и возможности, легко адаптировать аппаратный нагрузчик для различных целей нагрузочного тестирования. Возможности аппаратного нагрузчика позволяют применять его не только для задач нагрузочного тестирования, но и для стресс-тестирования и тестирования безопасности информационных систем.
Нагрузочное тестирование является одним из основных способов проверки работоспособности информационной системы в ходе эксплуатационной нагрузки. Исследование было направлено на поиск наиболее эффективных методов его проведения. Результатом исследования стал метод, основанный на применении аппаратного нагрузчика на базе FPGA ПЛИС.
Литература
1. Силаков Д.В. Автоматизация тестирования web-приложений, основанных на скриптовых языках // Тр. Ин-та системного программирования РАН. 2008. № 2. С. 159–178.
2. Сортов А., Хорошилов А. Функциональное тестирование Web-приложений на основе технологии UniTesK // Тр. Ин-та системного программирования РАН. № 8. 2004. С. 77–97.
3. Яковенко П.Н., Сапожников А.В. Инфраструктура тестирования веб-сервисов на базе технологии TTCN-3 и платформы .NET // Тр. Ин-та системного программирования РАН. 2009. № 17. С. 63–74.
4. Zhang P., Elbaum S., Dwyer M.B. Automatic Generation of Load Tests. Proc. 26th IEEE/ACM Intern. Conf. on Automated Software Engineering, 2011, pp. 43–52.
5. Zhang P., Elbaum S., Dwyer M.B. Compositional load test generation for software pipelines. Proc. Intern. Sympos. on Software Testing and Analysis, 2012, pp. 89–99.
6. Morrison K., Haddad H.M. Converting users to testers: an alternative approach to load test script creation, parameterization and data correlation. Journ. of Computing Sciences in Colleges, December 2012, vol. 28, iss. 2, pp. 188–196.
7. Cai Y., Grundy J., Hosking J. Synthesizing client load models for performance engineering via web crawling. Proc. 22nd IEEE/ACM Intern. Conf. on Automated Software Engineering, 2007, pp. 353–362.
8. Jiang Z.M. Automated analysis of load testing results. Proc. 19th Intern. Sympos. on Software Testing and Analysis, 2010, pp. 143–146.
9. Malik H. A Methodology to Support Load Test Analysis. Proc. 32nd ACM/IEEE Intern. Conf. on Software Engineering, 2010, vol. 2, pp. 421–424.
10. Ермыкин А.А. Разработка метода построения комплекса нагрузочного тестирования распределенной информационной системы: дис…канд. тех. наук. СПб, 2005. 147 с.
11. Программируемая пользователем вентильная матрица. 2013. URL: http://ru.wikipedia.org/wiki/Программируемая_пользователем_вентильная_матрица (дата обращения: 10.03.2014).
12. Guidance and Control. Altera Measurable Advantage, 2014. URL: http://www.altera.com/end-markets/military-aerospace/guidance/mil-guidance.html (дата обращения: 10.03.2014).
13. Morris G.W., Thomas D.B., Luk W. FPGA Accelerated Low-Latency Market Data Feed Processing. Proc. 17th IEEE Sympos. on High Performance Interconnects, 2009, pp. 83–89.
14. Weaver N., Paxson V., Gonzalez J.M. The shunt: an FPGA-based accelerator for network intrusion prevention. Proc. of the ACM/SIGDA 15th Intern. Sympos. on Field Programmable Gate Arrays, 2007, pp. 199–206.
15. Mühlbach S., Koch A. A Scalable Multi-FPGA Platform for Complex Networking Applications. Proc. of the IEEE 19th Annual Intern. Sympos. on Field-Programmable Custom Computing Machines, 2011, pp. 81–84.
16. Altera DE2-115 Development and Education Board. 2013. URL: http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=139&No=502 (дата обращения: 10.03.2014).
References
1. Silakov D.V. Automated Testing of Web Applications Written in Scripting Languages. Trudy Instituta sistemnogo
programmirovaniya RAN [Proceedings of ISP RAS]. 2008, vol. 14.2, pp. 159–178 (in Russ.).
2. Sortov A., Khoroshilov A. Functional testing of Web application based on the UniTesK technology. Trudy Instituta
sistemnogo programmirovaniya RAN [Proceedings of ISP RAS]. 2004, vol. 8, pp. 77–97 (in Russ.).
3. Yakovenko P.N., Sapozhnikov A.V. Test infrastructure of web services based on the technology TTCN-3 and .NET.
Trudy Instituta sistemnogo programmirovaniya RAN [Proceedings of ISP RAS]. 2009, vol. 17, pp. 63–74.
4. Zhang P., Elbaum S., Dwyer M.B. Automatic generation of load tests. ASE '11 Proc. 26th IEEE/ACM Int. Conf. on
Automated Software Engineering. 2011, pp. 43–52.
5. Zhang P., Elbaum S., Dwyer M.B. Compositional load test generation for software pipelines. ISSTA 2012, Proc. of
the Int. Symp. on Software Testing and Analysis. 2012, pp. 89–99.
6. Morrison K., Haddad H.M. Converting users to testers: an alternative approach to load test script creation,
parameterization and data correlation. Journ. of Computing Sciences in Colleges. 2012, vol. 28, iss. 2, pp. 188–196.
7. Cai Y., Grundy J., Hosking J. Synthesizing client load models for performance engineering via web crawling. ASE'07
Proc. 22nd IEEE/ACM Int. Conf. on Automated Software Engineering. 2007, pp. 353–362.
8. Jiang Z.M. Automated analysis of load testing results. ISSTA'10 Proc. 19th Int. Symp. on Software Testing and
Analysis. 2010, pp. 143–146.
9. Malik H. A methodology to support load test analysis. ICSE'10 Proc. 32nd ACM/IEEE Int. Conf. on Software
Engineering. 2010, vol. 2, pp. 421–424.
10. Ermykin A.A. Razrabotka metoda postroeniya kompleksa nagruzochnogo testirovaniya raspredelennoy
informatsionnoy sistemy [Development of a Method to Create a Distributed Information System Load Testing Complex].
PhD diss. St. Petersburg, St. Petersburg National Research Univ. of Information Technologies, Mechanics and Optics, 2005
(in Russ.).
11. Programmiruemaya polzovatelem ventilnaya matritsa [Field-programmable Gate Array]. Available at: http://en.wiki-pedia.org/wiki/Field-programmable_gate_array (accessed March 10, 2014).
12. Guidance and Control. Available at: http://www.altera.com/end-markets/military-aerospace/guidance/mil-gui-dance.html (accessed March 10, 2014).
13. Morris G.W., Thomas D.B., Luk W. FPGA Accelerated Low-Latency Market Data Feed Processing. HOTI'09 Proc.
17th IEEE Symp. on High Performance Interconnects. 2009, pp. 83–89.
14. Weaver N., Paxson V., Gonzalez J.M. The shunt: an FPGA-based accelerator for network intrusion prevention.
FPGA'07 Proc. of the ACM/SIGDA 15th Int. Symp. on Field Programmable Gate Arrays. 2007, pp. 199–206.
15. Mühlbach S., Koch A. A Scalable Multi-FPGA Platform for Complex Networking Applications. FCCM'11 Proc. of
the IEEE 19th Annual Int. Symp. on Field-Programmable Custom Computing Machines. 2011, pp. 81–84.
16. Altera DE2-115 Development and Education Board. Available at: http://www.terasic.com.tw/cgi-bin/page/archi-ve.pl?Language=English&CategoryNo=139&No=502 (accessed March 10, 2014).