LINUX.ORG.RU

Кто может вкратце для тормозов объяснить как работает PCI с процом?

 


0

2

Вот есть сетевая карточка PCI. Когда приходит пакет, оно обязательно дёргает какое-то прерывание и процессор аппаратно перекидывается в какой-то ring0 обработчик? Или оно может принимать пакеты тихо и незаметно, складывая их по DMA прямо в оперативу до предела заполнения какого-то там буфера? Но непонятно, как процу узнать о пакете и отреагировать.

Вопрос в плоскости low latency: чем особо крутая low latency PCI карточка для HFT-трейдеров ( http://www.solarflare.com/Media/Default/PDFs/Platforms/Solarflare_SFN8542_40G... ) отличается в плане работы с PCI от какой-то обычной карточки? Трейдеры всегда говорят, что мы не хотим лишний раз делать вызов в ядро, ибо супердорогое переключение контекста. Но сама каточка ведь генерит прерывание на каждый пакет, что является тем же походом в ядро.



Последнее исправление: hlamotron (всего исправлений: 1)

Есть два стула... на одном прерывания точёны, на другом поллинг золочёный. Куда сам сядешь, куда трейдера посадишь?

Если кратко: зависит от реализации драйвера и железа. В простейшем случае на каждый пакет по прерыванию, в более сложном случае, прерывание по заполнению буфера. В особо упоротом случае, никаких прерываний, только перекладывание пакетов по DMA в буфер и дальше раз в n времени читать буфера и обрабатывать.

Вроде в основном делают так, причём стремятся делать как можно меньше копирований пакетов по памяти.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)

В Ethernet-контроллере есть 2 механизма ограничения количества прерываний: счётчик и таймер. В первом случае прерывание не генерируется, пока не придёт заданное число пакетов, во втором - до истечения заданного времени. Эти механизмы обычно работают в комбинации: если обмен интенсивный, то прерывания генерируются по счётчику, если нет - то по таймеру, не давая пакетам «зависать» в приёмном буфере контроллера.

x-signal ★★
()
Ответ на: комментарий от Dark_SavanT

Zerocopy, если используется их стэк, и пакеты падают прямо в память юзерского процесса.

40GbE через ядро - это шило, не летит.

mv ★★★★★
()
Ответ на: комментарий от mv

Zerocopy, если используется их стэк, и пакеты падают прямо в память юзерского процесса.

с DPDK вроде тоже так можно

dimon555 ★★★★★
()

Помимо всего вышеперечисленого современные сетевые карточки еще много чего могут (сами сщитают чексумы для IP заголовков, занимаются фрагментированием / дефрагментированием больших (больше MTU) TCP сегментов и еще у них там куча всяких наворотов есть).

zaz ★★★★
()
Ответ на: комментарий от tailgunner

Ковыряя глубины wifi драйвера, u-boot и так далее для ралинковских soc и не такое в голову придёт.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)

складывая их по DMA прямо в оперативу до предела заполнения какого-то там буфера?

У Intel'а на достаточно свежих платформах сетевые адаптеры пишут прямо в L3 кеш процессора.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

У Intel'а на достаточно свежих платформах сетевые адаптеры пишут прямо в L3 кеш процессора.

В часть L3, процентов 20, что ли.

Потом ядро видит эти пакеты, ковыряет, копирует в юзерспейс. Но не поспевает, поэтому пакеты успевают утечь в память, откуда их доставать долго.

Поэтому passthrough и zerocopy, сразу в юзерспейс.

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.