Эксперимент по реализации http-сервера, взаимодействующего напрямую с сетевым адаптером
Для тестов был создан 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-стеком, оптимизированным для конкретных задач и типа нагрузки.
Источник: http://www.opennet.ru/opennews/art.shtml?num=38653
|
0 | Tweet | Нравится |
|