Эксперимент по реализации http-сервера, взаимодействующего напрямую с сетевым адаптером
12 декабря 2013 года
Группа исследователей, среди которых небезызвестный разработчик 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:
На менее мощном сервере (8GB ОЗУ, двухъядерный CPU Intel Xeon X5355 и идентичная двухпортовая карта Intel 82599EB 10Gb) разница более заметна:
При тестировании на сервере с четырёхъядерным CPU Intel Xeon E5-2643, 128GB ОЗУ и 6 сетевыми контроллерами Sandstorm обогнал конфигурации nginx в три раза:
Код Sandstorm планируется открыть под свободной лицензией в течение нескольких месяцев, после его доработки до пригодного для широкого использования вида. В дальнейшем, используя наработки проекта не исключается создание иных серверных приложений, поставляемых с собственным TCP-стеком, оптимизированным для конкретных задач и типа нагрузки.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.