Q: Получение пакетов в пространство пользователя Linux Написал утилиту на Golang для обработки заголовков TCP/IP, для захвата пакетов в userspace использую libnetfilter_nfqueue, скорость конечно падает, из-за копирования пакетов через ядро, интересует есть ли какие-либо альтернативвы очередям netllibnetfilter_nfqueue, для доставки изменения и вставки пакетов в сетевой интрфейс.Увидел такую фичу как DMA, есть ли возможность её использовать,если да то хотелось бы примеров,чтобы посмотреть как это работает.

A: 
Увидел такую фичу как DMA, есть ли возможность её использовать

Нет, DMA используется драйверами ядра для общения с устройствами. Вообще говоря, из пользовательского пространства возможно взаимодействовать с устройством напрямую через DMA, но для этого, во-первых, должен быть специальный драйвер в ядре, который предоставит этот доступ, так, например, работает графическая подсистема в linux. И, во-вторых, в данном случае пришлось бы написать полноценный драйвер сетевой карты и реализацию стека IP в пользовательском пространстве, что, само собой, за пределами разумного для задачи фильтрации пакетов, хотя, например, проект dpdk по факту это и делает.

есть ли какие-либо альтернативвы очередям netllibnetfilter_nfqueue, для доставки изменения и вставки пакетов в сетевой интрфейс

nfqueue нужен для произвольной фильтрации/изменения пакетов, предназначенных другим приложениям. Для простого чтения/отправки пакетов L2 OSI есть пакетные сырые сокеты(AF_PACKET/SOCK_RAW), см. подробности в man 7 packet. Они не позволят фильтровать/изменять пакеты, но и не будут значительно тормозить обмен по сети другими приложениями.
Собственно альтернативой является написание модуля ядра для netfilter.
Также для увеличения скорости можно в nfqueue отправлять не все пакеты, а предварительно отфильтровать нужные средствами ядра, т.е., например, создать правило iptables вида:
iptables -A INPUT -p tcp --destination-port 8080 -j NFQUEUE

