Наш сетевой драйвер терял пакеты. Не время от времени, а постоянно. На пропускной способности линии с 64-байтными пакетами мы теряли 31% всего трафика.В качестве оборудования использовался Ethernet-контроллер на 1 Гбит/с на SoC RISC-V. В спецификациях говорилось, что он может справляться со скоростью проводного трафика. Движок DMA работал корректно. Обработчик прерываний срабатывал вовремя. Тем не менее, пакеты исчезали.Я начал с очевидного подозреваемого: очереди получения. Реализация выглядела вполне логично — простой связанный список с указателями на голову и хвост. Под нагрузкой (64-байтные пакеты на пропускной способности линии) драйвер терял 31% пакетов! При профилировании обнаружилась причина проблемы: производительность убивали связанный список и спин-блокировки.Я переписал драйвер, использовав кольцевой буфер без блокировок. Результаты: потеря 31% пакетов превратилась в 0,12% — улучшение в 258 раз!В этой главе мы поговорим о структуре очередей для драйверов устройств. Читать далее
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | [Перевод] Структуры данных на практике. Глава 17: Структуры данных загрузчиков | 0 | 5 | 29-06-2026 |
| 2 | [Перевод] Структуры данных на практике. Глава 16: Фильтры Блума и вероятностные структуры данных | 0 | 8 | 28-06-2026 |
| 3 | [Перевод] Вы можете победить бинарный поиск | 5 | 7 | 15-06-2026 |
| 4 | OSDEV: Разработка аллокатора на С++ часть 5. osdev-libstdc | 0 | 5 | 28-06-2026 |
| 5 | Вам не нужен BloodHound | 0 | 6 | 11-06-2026 |
| 6 | OSDEV: Itanium часть 2: One-time Construction API и сигнлтоны Майерса | 0 | 5 | 08-07-2026 |
| 7 | Проигрыватель WAV файлов на STM32 | 5 | 7 | 02-07-2026 |
| 8 | УМНЫЙ К1 — контроллер на базе ESP32 с REST, syslog и много опенсорса | 2 | 6 | 30-06-2026 |
| 9 | Писать свои инструменты лучший способ изучить CAN-шину | 5 | 7 | 09-07-2026 |
| 10 | Диктофон на микроконтроллере (WM8731 + I2S + STM32 + SDIO + FAT16) | 5 | 7 | 06-07-2026 |