Я о том что за обработчиком soft_irq выше стоит планировщик процессов, который режет время для него и ограничивает его время исполнения.
Если очень мало времени выделено на выполнение потока то куча ресурсов будет уходить на переключение контекста и перегруз кешей.
Про буфера карты - на стенде у меня система показывала худшую производительность с большими буферами, видимо всё зависит от размеров кешей проца и если буфер очень большой то много ожиданий подгрузки кеша при перекладке пакета из DMA буфера в память, потому как из буфера хоть как копирование идет в оперативку.
При сборке ядра частота тактирования планировщика выбирается, либо может быть собрано без него tickless, ну и разумеется HPET должен быть включен, хотя в этом плане думаю в курсе.
Я крутил мудрил и в итоге по всем тестам вынес RX на 2 ядра 4 потока 4 очереди, а уже фильтрацию и TX раскидал по другим процессорам через RPS что там дальше после приема и какие задержки будут для меня
было не так критично.
Можно попробовать покрутить на живую опции планировщика.
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 3000000
kernel.sched_latency_ns = 15000000
kernel.sched_wakeup_granularity_ns = 3000000
kernel.sched_tunable_scaling = 1
kernel.sched_features = 7279
kernel.sched_migration_cost = 500000
kernel.sched_nr_migrate = 32
kernel.sched_time_avg = 1000
kernel.sched_shares_window = 10000000
kernel.timer_migration = 1
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.sched_compat_yield = 0
kernel.sched_rr_timeslice_ms = 100
kernel.sched_autogroup_enabled = 0
kernel.sched_cfs_bandwidth_slice_us = 5000