Обнаружение шумного соседа с п... Заметка

Обнаружение шумного соседа с помощью eBPF

Netflix использует eBPF для непрерывного мониторинга задержки очереди запуска, показателя шумных соседей (контейнеров, интенсивно использующих ресурсы сервера, ухудшающих производительность в соседних контейнерах).eBPF хуки (sched_wakeup, sched_wakeup_new, sched_switch) используются для захвата задержки очереди запуска и ассоциирования ее с контейнерами (идентификаторами cgroup) с помощью kfuncs (функций ядра) для безопасного доступа к данным, защищенным RCU.Ограничитель скорости в eBPF сбалансирует наблюдаемость с производительностью, ограничивая количество отправляемых в пользовательское пространство данных.Процессы в пользовательском пространстве обрабатывают события из кольцевого буфера eBPF и отправляют метрики в Atlas, включая задержку очереди запуска (runq.latency) и количество прерываний (sched.switch.out) по идентификатору cgroup.Обе метрики runq.latency и sched.switch.out необходимы для выявления шумных соседей, поскольку runq.latency сама по себе может быть вводящей в заблуждение, когда контейнеры достигают своего лимита ЦП.Изучение конкретного случая демонстрирует проблему шумного соседа, вызывающую всплеск задержки очереди запуска и прерываний, когда новый контейнер полностью использует ресурсы хоста.Системные процессы были выявлены как шумные соседи с помощью метрики sched.switch.out.Оптимизации кода eBPF, включая использование BPF_MAP_TYPE_HASH, прямой доступ к членам структуры задачи и игнорирование задач ядра, минимизируют накладные расходы.Патч для ядра Linux был отправлен и принят для улучшения расчета статистики в ядре.BPFtop, инструмент мониторинга процессов eBPF с открытым исходным кодом, был использован для измерения накладных расходов кода eBPF.