Конференция разработчиков
высоконагруженных систем
Хочу быть в курсе событий!
Главная → 2013 → Архитектуры
Про сокеты и миллионы пакетов в секунду с одного CPU ядра
select(2) и poll(2) - медленные, epoll(7) - быстрый. Чтобы решить задачу c 10k запросов, мы используем потоки, мультиплексирование и многоядерные серверы. Но что будет, если эти 10 тыс. запросов придут одновременно (например, случится DDoS)? Как быстро сервер установит все эти соединения и обработает запросы? Сколько пакетов в секунду держат обычные сокеты на одном процессорном ядре?
В докладе будет рассказано
* о том, как пакет в Linux попадает с сетевого адаптера в TCP-сокет процесса;
* о том, как работает установление новых соединений, мультиплексирование и чтение из сокетов;
* о том, как ускорить прикладной сервер (оптимизация accept(), MSI-X и RPS/RFS, GRO);
* о том, что этого недостаточно - можно быстрее: как работает Oracle Reliable Datagram Sockets?
* О том, что можно делать все еще быстрее: переход к полностью синхронным сокетам (не путать с блокируемым вводом-выводом).