31просмотров
59.6%от подписчиков
24 марта 2026 г.
Score: 34
Network Performance in the Linux Kernel, Getting the most out of the Hardware Доклад и презентация от Bootlin. Доклад про то, как организована высокопроизводительная работа с сетью в ядре Linux. Автор объясняет, как пакет проходит через систему (от патчкорда до приложения) и какие есть механизмы, чтобы эффективно использовать многоядерные процессоры. ▎Что отметил (без какой-то структуры) Верхнеуровнего про путь пакета Пакет попадает в NIC, далее MAC-контроллер с помощью DMA записывает его в оперативную память, не нагружая CPU. После записи данных NIC посылает сигнал (IRQ), чтобы сообщить CPU о новом пакете. Есть NAPI - современный механизм, который отключает прерывания на время обработки пачки пакетов. Вместо одного прерывания на пакет, ядро обрабатывает их пачками, что снижает нагрузку на CPU. Описываются механизмы 🟢 RSS (Receive Side Scaling): Аппаратный механизм. Сетевая карта сама хэширует заголовки пакета (5-tuple) и на основе хэша раскладывает их по разным очередям. Каждая очередь привязана к своему ядру CPU. 🟢RPS (Receive Packet Steering): То же, что и RSS, но программно в ядре. Полезно, если у сетевой карты мало очередей. 🟢RFS (Receive Flow Steering): Улучшение RPS. Следит за тем, на каком ядре работает приложение и направляет пакеты именно на это ядро для попадания в кэш. 🟢XPS (Transmit Packet Steering): То же самое, но для отправки пакетов, чтобы очередь на отправку была привязана к нужному ядру. 🟢Механизмы Offloading: Чтобы ядро делало меньше работы, часть задач перекладывается на сетевую карту: - Checksum: Проверка целостности заголовков сетевой картой на лету, ядро оставляет поля пустыми - Filtering: Аппаратная фильтрация до того, как они попадут в ядро. Приводятся примеры MAC и VLAN filtering. 🟢Data insertion and segmentation: Сетевая карта может добавлять VLAN-теги на лету 🟢TSO (TCP Segmentation Offload): Сетевая арта сама нарезает большие куски данных на мелкие TCP-сегменты. Хорошее описание как это работает тут. 🟢XDP (eXpress Data Path): Самый быстрый путь обработки. BPF выполняется прямо в драйвере сетевой карты, как только пакет появился в памяти. Это позволяет дропать или перенаправлять пакеты с большой скоростью, до того как ядро начнет их полноценно обрабатывать. 🎤 Будни сетевика 😊