Эксперимент по реализации http-сервера, взаимодействующего напрямую с сетевым адаптером

Группа исследователей, среди которых небезызвестный разработчик FreeBSD Роберт Ватсон, провела эксперимент (отчёт в PDF) по оценке эффективности реализации высокопроизводительного TCP/IP стека, работающей в пространстве пользователя и напрямую взаимодействующей с сетевой картой для отправки пакетов минуя дополнительные прослойки и исключая операции копирования данных (zerocopy). Для тестов был создан http-сервер Sandstorm, написанный с задействованием Netmap Framework для маппинга буфера сетевой карты в пространство пользователя и прямого взаимодействия с сетевым адаптером, минуя сетевую подсистему ядра ОС. В Sandstorm используется собственная реализация слоя для работы с Ethernet и легковесный TCP/IP-стек. TCP/IP-стек был оптимизирован специально для отдачи файлов небольшого размера, что дало преимущество перед штатными TCP-стеками Linux и FreeBSD, которые спроектированы для обеспечения высокой пропускной способности при длительных передачах (например, при передаче файлов по 8 Кб была достигнута 85% загрузка CPU, но удалось задействовать только половину возможной пропускной способности сетевого адаптера).

В итоге эксперимента, удалось добиться производительности сервера Sandstorm, заметно опережающей системы, использующие штатный системный TCP/IP стек. Например, Sandstorm продемонстрировал пропускную способность, заметно опережающую nginx, при этом меньше нагружал CPU.

Результаты тестирования на сервере с четырёхядерном CPU Intel Xeon E5–2643, 128GB ОЗУ и двухпортовой картой Intel 82599EB 10Gb:

0_1386867474.png 0_1386867488.png На менее мощном сервере (8GB ОЗУ, двухядерный CPU Intel Xeon X5355 и идентичная двухпортовая карта Intel 82599EB 10Gb) разница более заметна:

0_1386866990.png 0_1386867003.png Код Sandstorm планируется открыть под свободной лицензией в течение нескольких месяцев, после его доработки до пригодного для широкого использования вида. В дальнейшем, используя наработки проекта не исключается создание иных серверных приложений, поставляемых с собственным TCP-стеком, оптимизированным для конкретных задач и типа нагрузки.

©  OpenNet