Size: a a a

2020 May 15

V

Vladimir in ntwrk
Stanislav
правда ты все равно получаешь cache miss гарантированно на первый пакет, а вот была бы память побыстрее, может и не так критично было бы
ну оно ж на батч размазывается
источник

V

Vladimir in ntwrk
у нас префетчинг лупы выглядят примерно вот так:
http://lxr.dpdk.org/dpdk/v19.11/source/lib/librte_fib/dir24_8.c#L169
источник

V

Vladimir in ntwrk
for (i = 0; i < prefetch_offset; i++)
   rte_prefetch0(some_ptr[i]);
for (i = 0; i < (n - prefetch_offset); i++) {
   rte_prefetch0(some_ptr[i + prefetch_offset]);
   do_work_over(some_ptr[i]);
}
for (; i < n; i++)
   do_work_over(some_ptr[i]);
источник

V

Vladimir in ntwrk
получается что доступ к первому адресу в
do_work_over(some_ptr[i]);
будет дорогим, а дальше уже по накатанной
источник

IE

Ivan EKbfh in ntwrk
амазон приунывает всего лишь из-за гта5?
источник

AK

Anatoliy Kushner in ntwrk
Ivan EKbfh
амазон приунывает всего лишь из-за гта5?
ага
источник

S

Stanislav in ntwrk
https://github.com/vpp-dev/vpp/blob/master/src/vnet/ip/ip4_input.c#L238
вот так в vpp дабл луп выглядит, если интересно
источник

V

Vladimir in ntwrk
Vladimir
получается что доступ к первому адресу в
do_work_over(some_ptr[i]);
будет дорогим, а дальше уже по накатанной
правда если "do_work_over(some_ptr[i]);" инлайнится, там нет барьеров и относительно мало инструкций, то в префетчинге нет смысла, так как ООО спекулятивно будет загружать данные из памяти
источник

IE

Ivan EKbfh in ntwrk
Спс
источник

AG

Anton Gorlov in ntwrk
хз. у меня на 1 из аплинков выросли пинги до LINX и всего что за ними.. в 2 раза
источник

AG

Anton Gorlov in ntwrk
увёл на другую ноду
источник

S

Stanislav in ntwrk
Vladimir
for (i = 0; i < prefetch_offset; i++)
   rte_prefetch0(some_ptr[i]);
for (i = 0; i < (n - prefetch_offset); i++) {
   rte_prefetch0(some_ptr[i + prefetch_offset]);
   do_work_over(some_ptr[i]);
}
for (; i < n; i++)
   do_work_over(some_ptr[i]);
первый тоже префетчится получается?
источник

V

Vladimir in ntwrk
да, у нас похожие конструкции ща ребята из марвелла завозят для rte_graph либы в реализации роутинг ноды, в ручную анролят лупы
http://patches.dpdk.org/patch/66914/
источник

V

Vladimir in ntwrk
Stanislav
первый тоже префетчится получается?
да, конечно
источник

V

Vladimir in ntwrk
Вот что Рей пишет по поводу анрола в впп
>Suggest you don't reuse the hand-unrolling optimization from FD.io
>VPP.
>I have never found any performance benefit from them, and they
>make the code unnecessarily verbose.
источник

S

Stanislav in ntwrk
Vladimir
Вот что Рей пишет по поводу анрола в впп
>Suggest you don't reuse the hand-unrolling optimization from FD.io
>VPP.
>I have never found any performance benefit from them, and they
>make the code unnecessarily verbose.
ну вот у ментейнеров vpp другое мнение)
https://lists.fd.io/g/vpp-dev/topic/10641176#2909
хотя возможно из-за того что там и префетч по другому для каждого лупа
источник

VK

Vladimir Komendant in ntwrk
понятно все только в общих чертах, но очень интересно
источник

V

Vladimir in ntwrk
Stanislav
ну вот у ментейнеров vpp другое мнение)
https://lists.fd.io/g/vpp-dev/topic/10641176#2909
хотя возможно из-за того что там и префетч по другому для каждого лупа
бегло посмотрел код, похоже они не использовали префетчинг луп в том виде, в котором мы используем в дпдк (загрузка по одному с оффсетом). И да, приведеный код это не лукап, это условно санити чек пришедших пакетов, самые первые шаги обработки. Лукап делается в другой ноде
источник

S

Stanislav in ntwrk
ну да, я просто для примера взял первую попавшуюся ноду
источник

V

Vladimir in ntwrk
что касается лукапа, для в4 они используют mtrie 16 bit stride на первом этапе и 8bit stride на последующих. Получается 16-8-8. В дпдк у нас 24-8, получается больше памяти, но быстрее
источник