Jump to content
Калькуляторы

DMA Engine в Linux

Собственно давно мучают вопросы по пункту DMA Engine support в ядре линукса.

А конкретнее вот какие:

1) Просто включение этого пункта без выбора какого либо драйвера для dma engine(Intel I/OAT DMA support, etc...)

включает какую то базовую поддержку dma?

2) Intel I/OAT DMA support - написано что это только для новых процессоров xeon. Имеет ли смысл это включать на core duo/quad?

3) Intel MID DMA support for Peripheral DMA controllers - как я себе понимаю сервер SuperServer 5015A на Atom D510 тоже относится к MID и в атоме есть DMA engine. Нужно ли его включать для такого вот сервера?

4) Реально ли добавляется производительность при включении Network: TCP receive copy offload и нужно ли для этого включить один из dma enigines(Intel I/OAT DMA support or Intel MID DMA support for Peripheral DMA controllers)

 

Проясните знающие люди эти вопросы...а то гугливание что то особо не помогло мне (

Заранее спасибо.

Edited by adron2

Share this post


Link to post
Share on other sites

Для I/OAT - прироста нет, по моему опыту, а вот глюки бывали. Видимо прирост бывает в каких-то специфических ситуациях, например когда контент обрабатывается локально. Будет время, потестирую снова, на свежем железе.

Share this post


Link to post
Share on other sites

В случае роутинга хватит ДМА сетевух, а базовый=системный будет простаивать.

Базовый нужен только если у вас внутри ворочаются горы памяти, типа база стоит или что то ещё.

Для раздачи с диска - уже давно есть свои ДМА.

 

Если кратко: пакеты наваливаются в буфер сетевухи, она их своим ДМА пишет в память и через прерывание сообщает что оно уже есть в памяти, дальше ядро просматривает заголовки полученных пакетов и инициализирует ДМА для отправки дальше. В обоих случаях это ДМА самой сетевухи, никаких крупных операций с память не происходит, дма системы там применить просто некуда, дешевле копировать процом те жалкие десятки байт.

Share this post


Link to post
Share on other sites

Базовый нужен только если у вас внутри ворочаются горы памяти, типа база стоит или что то ещё.

I/OAT DMA - его задача, если не ошибаюсь, положить данные в кеш проца, а не память. Тут может и быть прирост, а может и не быть или быть незаметным, в зависимости от латентности памяти и накладных расходов на этот самый I/OAT DMA.

Share this post


Link to post
Share on other sites

С пакетов чекается не больше 48 байт, такое проще копировать, чем инитить дма и потом его запускать и хэндлить.

А собственно в кеш запихать можно и обычным способом - прочитав.

 

Кстати, по п4 - при роутинге TCP вообще не разбирается, так что пофик включено или нет. На карточках наооборот выключают разбор (лро, гсо и пр).

Share this post


Link to post
Share on other sites

С пакетов чекается не больше 48 байт, такое проще копировать, чем инитить дма и потом его запускать и хэндлить.

ДМА все равно инитится. Т.к. пакет из сетевухи ложится в память, и потом уже оттуда передается ядру. Если он будет ложиться не в память, а в кеш - это потенциально ускорит форвардинг.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.