четверг, 16 февраля 2017 г.

Mmaped Netlink in Linux kernel

В процессе поиска решения одной интересной задачи, связанной с zero-copy между ядром Linux и приложением пользователя, я наткнулся на реализацию mmaped Netlink IO от Patrick McHardy.
Если кратко, Netlink это способ межпроцессной коммуникации между ядром Linux и приложениями пользователя, использующий существующее socket API.
Приложение открывает сокет, тип которого AF_NETLINK, указывает получателем ядро, и с помощью функций socket API, передает через открытый сокет данные. Все хорошо, если бы не накладные расходы на копирование данных между user-space и kernel-space. Для больших объемов данных такой способ не очень подходит.