Группа китайских разработчиков высоконагруженных систем открыла наработки проекта Fastsocket, в рамках которого подготовлена альтернативная реализация сокетов и сетевой подсистемы ядра Linux. В отличие от штатной сетевой подсистемы ядра, Fastsocket обеспечивает практически линейную масштабируемость, что позволяет добиться существенно более высокой производительности на многоядерных компьютерах. Система является стабильной и хорошо зарекомендовала себя в промышленном использовании. В частности, Fastsocket используется для обеспечения работы online-службы SINA (17-й по посещаемости сайт в мире). Все наработки проекта поставляются под лицензией GPLv2.

Fastsocket бесшовно интергрируется с существующими серверными приложениями - достаточно через LD_PRELOAD загрузить библиотеку libfsocket.so, которая подменит собой традиционные функции работы с сокетами. Например, для использования Fastsocket в nginx достаточно запустить сервер командой "LD_PRELOAD=./libfsocket.so nginx". При этом включение поддержки Fastsocket в ядре сопряжено с некоторыми трудностями - для применения Fastsocket следует использовать специально подготовленную отдельную сборку ядра Linux, вместо штатного ядра из дистрибутива. В настоящее время предлагается вариант ядра 2.6.32-431.17.1.el6 для использования в RHEL/CentOS 6.5.

Но игра стоит свеч, на сервере с 24 ядрами CPU рост производительности при выполнении Nginx и Haproxy составляет 290% и 620%, по сравнению с обычным сетевым стеком, предоставляемым ядром из состава CentOS-6.5. Более того, Fastsocket обеспечивает дополнительный прирост производительности при использовании Hyper-Threading и Flow-Director. В частности, активация Hyper-Threading даёт прирост в 20% производительности, а использование сетевой карты на базе контроллера Intel 82599 прибавляет 15% при работе в роли прокси.

Наибольшая эффективность работы Fastsocket достигается на системах, имеющих от 8 до 24 процессорных ядер, при использовании приложений, применяющих epoll для организации неблокирующего ввода/вывода и запускающих несколько параллельно работающих процессов-обработчиков соединений, таких как haproxy, nginx и lighttpd. Текущая реализация рассчитана в основном на обработку коротких TCP-соединений. Разработчиками проекта также подготовлен код для повышения эффективности обработки длительных TCP-соединений, который позволит увеличить производительность таких приложений, как СУБД Redis. Данный код будет опубликован после его стабилизации.



Источник: http://www.opennet.ru/opennews/art.shtml?num=40907