V
>Условный Cavium ... не занимается пересыланием полной строки кеша при доступе к uint32
странно, а тут https://www.7-cpu.com/cpu/Octeon2.html написано что размер кеш линии 128 байт. Да и кеш имеет место быть. Как так?
Более того, в задаче обработки трафика spatial locality встречается повеместно, так что кеш более чем необходим.
>а вот копаться в том самом хедере
зависит от задачи и реализации. Некоторый код становится очень ветвистым, могут возникнуть проблемы. Частенько решается правильным использованием векторизации.
>сравнивать его поля со структурами в памяти - это дорого для платформ общего применения
опять таки зависит от задачи. Сделать лукап по в4 фул вью - дело <20 тактов.
>Само ядро даже десятилетней платформы х86 может легко обрабатывать на уровне десятков миллионов пакетов на нетривиальном пути, но мгновенно упирается в память.
В неоптимальном коде. Используя префетчинг техники удается сгладить большую латенси памяти. С пропускной способностью проблем пока не встречал. И да, чтобы эффективно префетчить нужно обрабатывать пакеты балком. Это как раз таки выгодно отличает дпдк реализации сетевых функций от реализованый в том же ядре.
> но пакетная часть - она довольно ограничена в контексте параллеливания
просьба пояснить, что является "пакетной частью" ДПДК
>большинство структур там под локами, и также совсем не дружелюбно к деталям памяти
это не так. Большинство структур защищается локами только на control path, data path же локлесс. Так же структуры в основном дружелюбны к памяти, учитываетмся НУМА, для мемпулов учитываются даже ранки памяти.
>но если 100Г+ - то будет больно.
обрабатываю и больше. ЧЯДНТ? :)