Крупнейшая профессиональная конференция для разработчиков высоконагруженных систем

Возвращение zero-copy: как мы прикрутили kTLS к Apache Kafka.

Производительность enterprise-систем

Java
Оптимизация производительности

Доклад принят в программу конференции

Целевая аудитория

Команды использующие Apache Kafka в своих продуктах и сервисах.

Тезисы

Наивный способ отправлять файлы по сети – это читать данные в буфер из файла (системный вызов read) и записывать этот буфер в сокет (системный вызов send). Такой подход не самый эффективный, потому что переключения контекста и лишние копирования из кэша ядра в пространство пользователя и, наоборот, из пространства пользователя в буфер сетевой карты очевидно излишни. Для оптимизации такой задачи еще в начале 2000-х в ядре linux появился системный вызов sendfile, в него можно было передать файловый дескриптор, сокет, количество байт и отступ, и в итоге за один системный вызов ядро делало необходимую работу без лишнего копирования и только с одним переключением контекста. Проблема только в том, что данная схема не работает если мы используем TLS, потому что данные перед отправкой в сокет надо зашифровать блочным шифром. С версии ядра 4.13 уже появилась частичная поддержка (TLS 1.2), а с версии ядра 5.1 полноценная поддержка (TLS 1.3) шифрования трафика на стороне ядра — kernel TLS (сокращенно kTLS). В докладе подробно будет рассказано каким образом можно реализовать поддержку kTLS, с упором на java. Реализация этого функционала позволила значительно улучшить скорость отдачи данных консьюмерам в кластере Apache Kafka.

Apache Ignite committer, мейнтейнер Apache Ignite python client.
Занимается разработкой Apache Ignite.

SberTech

.

Видео

Другие доклады секции

Производительность enterprise-систем