powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
58 сообщений из 58, показаны все 3 страниц
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38167378
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
Может это будет быстрее или пусть даже чуть медленнее, но смысл в том, что можно заснуть на время копирования, отдав ядро другому потоку, сэкономив такты. Если конечно копируется достаточно большой объем.
Тут вот много обсуждали, но конкретного вывода чето не видно.
http://forum.ixbt.com/topic.cgi?id=26:38370] http://forum.ixbt.com/topic.cgi?id=26:38370
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38167448
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не применяется.
На уровне приложения - нет доступа к физической памяти. На уровне ОС - большие объемы из одного угла RAM в другой перебрасывать не нужно.
В принципе, теоретически, это возможно. Если будешь писать свой однозадачный контроллер с прямым доступом к памяти и контроллерам - можешь сделать себе соответствующие реализации для memmove() и использовать их в С/С++.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168120
White OwlНет, не применяется.
На уровне приложения - нет доступа к физической памяти.
Основная проблема для DMA это выгружаемость в своп и фрагментация страниц. На сколько я понял DMA не использует MMU и соответственно ничего не знает о TLB и виртуальной адресации.
Решается ли эта проблема залочиванием памяти через Virtuallock(Win)/mlock(nix)?
И как вариант использовать их в своем аллокаторе.
White OwlНа уровне ОС - большие объемы из одного угла RAM в другой перебрасывать не нужно.
В принципе, теоретически, это возможно. Если будешь писать свой однозадачный контроллер с прямым доступом к памяти и контроллерам - можешь сделать себе соответствующие реализации для memmove() и использовать их в С/С++.
А что понимается под однозадачным контроллером?
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168565
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM->RAM через DMA,

Применяется, там где это оправдано и архитектурно предусмотрено.

Могу сказать что в сигнальных процессорах от TI это широко применяется. Там очень мощный DMA. Если мне не изменяет память в 642 чипе 64 канала DMA.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168580
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAWhite OwlНет, не применяется.
На уровне приложения - нет доступа к физической памяти.
Основная проблема для DMA это выгружаемость в своп и фрагментация страниц.Не совсем верно. Основаная задача DMA это пересылка данных между памятью и любым другим устройством. Своп это всего-лишь частная задача (память-hdd).

RAM-RAM через DMAНа сколько я понял DMA не использует MMU и соответственно ничего не знает о TLB и виртуальной адресации.
Решается ли эта проблема залочиванием памяти через Virtuallock(Win)/mlock(nix)?
И как вариант использовать их в своем аллокаторе.Нет конечно. Эти локи все-го лишь попросят ОС не выгружать определенную виртуальную страницу в своп. Но замены виратуального адреса на физический оно не даст.

RAM-RAM через DMAWhite OwlВ принципе, теоретически, это возможно. Если будешь писать свой однозадачный контроллер с прямым доступом к памяти и контроллерам - можешь сделать себе соответствующие реализации для memmove() и использовать их в С/С++.
А что понимается под однозадачным контроллером?Тот который занимается одной задачей естественно. Которому не нужно делать виртуальную память для своих под-программ.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168626
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM->RAM через DMAПрименяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?Нет, за отсутствием искомого DMA.

P.S. Использование DMA-контроллера для пересылок память-память было медленнее простого movs уже в районе i80286-16MHz
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168632
White OwlRAM-RAM через DMAпропущено...

Основная проблема для DMA это выгружаемость в своп и фрагментация страниц.Не совсем верно. Основаная задача DMA это пересылка данных между памятью и любым другим устройством. Своп это всего-лишь частная задача (память-hdd).

RAM-RAM через DMAНа сколько я понял DMA не использует MMU и соответственно ничего не знает о TLB и виртуальной адресации.
Решается ли эта проблема залочиванием памяти через Virtuallock(Win)/mlock(nix)?
И как вариант использовать их в своем аллокаторе.Нет конечно. Эти локи все-го лишь попросят ОС не выгружать определенную виртуальную страницу в своп. Но замены виратуального адреса на физический оно не даст.

RAM-RAM через DMAпропущено...

А что понимается под однозадачным контроллером?Тот который занимается одной задачей естественно. Которому не нужно делать виртуальную память для своих под-программ.
Я имел ввиду именно проблему , а не задачу, т.е. препятствие которое мешает осуществить DMA - это выгрузка и фрагментация, а лок - решает её.
Тогда следующая проблема, получение физического адреса из виртуального, решается только один раз непосредственно перед запуском DMA-копирования. И далее в процессе ни MMU/TLB, ни CPU не нужны до прерывания.
Думаю многие сталкивались с обязательной необходимостью использования Virtuallock/mlock для DMA работы с RAM->Device.

А можете написать пример DMA-копирования RAM->RAM?
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168636
Basil A. SidorovRAM->RAM через DMAПрименяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?Нет, за отсутствием искомого DMA.

P.S. Использование DMA-контроллера для пересылок память-память было медленнее простого movs уже в районе i80286-16MHz
Ок. Но зато не тратится процессорное время, которое допустим критично в нашей задаче.

Резонно конечно сказать, что тупое копирование больших участков памяти - это ошибка архитектуры, но все же интересно постестировать.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168647
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM->RAM через DMAОк. Но зато не тратится процессорное время, которое допустим критично в нашей задаче.А закупорка шины, значит, вам некритична?

P.S. Поражает, каких только звонов не слушают люди ...
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168654
Basil A. SidorovRAM->RAM через DMAПрименяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?Нет, за отсутствием искомого DMA.
Пока что нашел такой вариант, но не совсем понял как пользоваться этой функцией, если кто знает приведите пример: int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm, struct vm_area_struct *vma)
http://forum.ixbt.com/topic.cgi?id=26:38370-2#25] http://forum.ixbt.com/topic.cgi?id=26:38370-2#25

И такой пример, который работает на серверах с Intel® I/O Acceleration Technology вроде как быстрее, чем memcpy(SSE/movs): async-tx-api.txt
функция async_memcpy
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168656
Basil A. SidorovRAM->RAM через DMAОк. Но зато не тратится процессорное время, которое допустим критично в нашей задаче.А закупорка шины, значит, вам некритична?

P.S. Поражает, каких только звонов не слушают люди ...
Бывает не закупорка, а загрузка шины, которая одинакова, как для RAM->CPU->RAM, так и для RAM->RAM, но в последнем случае не загружаются LLC и CPU (или если приятнее, не закупориваются LLC и CPU).
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168671
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без указания конкретных архитектур спор беспредметен
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168681
Изопропилбез указания конкретных архитектур спор беспредметен
x86_64 (Intel/AMD)
серверные и десктопные CPU
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168763
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может лучше это заменить на какой-нить COW. Или как там
копия процесса создаётся. А так ... антипаттерн мать его.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168837
maytonМожет лучше это заменить на какой-нить COW. Или как там
копия процесса создаётся. А так ... антипаттерн мать его.
Да.
А как насчет передачи RAM(CPU1) -> RAM(CPU2), с памяти одного процессора, в память другого для уменьшения задержек на многопроцессорной NUMA x86_64 системе?
Допустим есть сортированный массив в 1 GB, который редко обновляется, но активно параллельно используется на чтение для бинарного поиска в CPU1 и CPU2. Причем выбирается малый объем, но часто, и требует малых задержек .
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168928
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAmaytonМожет лучше это заменить на какой-нить COW. Или как там
копия процесса создаётся. А так ... антипаттерн мать его.
Да.
А как насчет передачи RAM(CPU1) -> RAM(CPU2), с памяти одного процессора, в память другого для уменьшения задержек на многопроцессорной NUMA x86_64 системе?
Допустим есть сортированный массив в 1 GB, который редко обновляется, но активно параллельно используется на чтение для бинарного поиска в CPU1 и CPU2. Причем выбирается малый объем, но часто, и требует малых задержек .Да и тут и нормальной жизни хватит.
CPU1 - сортирует массив и возвращает его в память, копия остается в его локальном кеше.
CPU2 - на первом запросе к массиву загружает его участок в свой кеш. Размер участка это грубо говоря размер шины. Постепенно, по мере надобности этот массив может быть целиком загружен в кеш CPU2. А если хочешь, то можно сразу после сортировки скомандовать CPU2 сделать полный скан массива, это загрузит его в локальный кеш. Последующие запросы уже будут идти к кешу.
Надобности в управлении DMA или копировании памяти нет никакой.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168930
White OwlRAM-RAM через DMAпропущено...

Да.
А как насчет передачи RAM(CPU1) -> RAM(CPU2), с памяти одного процессора, в память другого для уменьшения задержек на многопроцессорной NUMA x86_64 системе?
Допустим есть сортированный массив в 1 GB , который редко обновляется, но активно параллельно используется на чтение для бинарного поиска в CPU1 и CPU2. Причем выбирается малый объем, но часто, и требует малых задержек .Да и тут и нормальной жизни хватит.
CPU1 - сортирует массив и возвращает его в память, копия остается в его локальном кеше.
CPU2 - на первом запросе к массиву загружает его участок в свой кеш. Размер участка это грубо говоря размер шины. Постепенно, по мере надобности этот массив может быть целиком загружен в кеш CPU2. А если хочешь, то можно сразу после сортировки скомандовать CPU2 сделать полный скан массива, это загрузит его в локальный кеш. Последующие запросы уже будут идти к кешу.
Надобности в управлении DMA или копировании памяти нет никакой.
Маленький нюанс: массив в 1 GB ... массив может быть целиком загружен в кеш , гдеж кэш то такой взять? :)
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168971
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAМаленький нюанс: массив в 1 GB ... массив может быть целиком загружен в кеш , гдеж кэш то такой взять? :)Подожди пару лет - будет.
И вообще, вопрос уже давно ушел от С и С++. Не пора ли закрывать или переносить в hardware?
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38168974
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAДопустим есть сортированный массив в 1 GB, который редко обновляется, но активно параллельно используется на чтение для бинарного поиска в CPU1 и CPU2. Причем выбирается малый объем, но часто, и требует малых задержек .А вы kernel driver пишите или пользовательское приложение? Если драйвер, то использование 1Gb массива весьма странно. Если пользовательское приложение - забудьте про DMA: ОС не даст вам доступа к железу.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38169765
BarloneRAM-RAM через DMAДопустим есть сортированный массив в 1 GB, который редко обновляется, но активно параллельно используется на чтение для бинарного поиска в CPU1 и CPU2. Причем выбирается малый объем, но часто, и требует малых задержек .А вы kernel driver пишите или пользовательское приложение? Если драйвер, то использование 1Gb массива весьма странно. Если пользовательское приложение - забудьте про DMA: ОС не даст вам доступа к железу.
А API OS или готовых драйверов для данной задачи не бывает?
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38169769
White OwlRAM-RAM через DMAМаленький нюанс: массив в 1 GB ... массив может быть целиком загружен в кеш , гдеж кэш то такой взять? :)Подожди пару лет - будет.
И вообще, вопрос уже давно ушел от С и С++. Не пора ли закрывать или переносить в hardware?
Единственное кем это может использоваться - это C/C++ разработчики. А в ветке hardware уровень понимания этого на порядок ниже.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38170051
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAА API OS или готовых драйверов для данной задачи не бывает?

а переключение в ядро,постановка запроса в очередь,уведомление о завершении,обработка прерываний ,
фиксация страниц, трансляция адресов - весь профит в 0 а то и минус не сведут?
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38170105
ИзопропилRAM-RAM через DMAА API OS или готовых драйверов для данной задачи не бывает?

а переключение в ядро,постановка запроса в очередь,уведомление о завершении,обработка прерываний ,
фиксация страниц, трансляция адресов - весь профит в 0 а то и минус не сведут?
Для RAM -> Device (видеокарточка) DMA же не сводит профит к 0. И быстрее на 20%, и процессор не загружает.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38171499
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAДля RAM -> Device (видеокарточка) DMA же не сводит профит к 0. И быстрее на 20%, и процессор не загружает."Когда вы говорите, Иван Васильевич ..." (ц) одна популярная комедия.
DMA-контроллер, о котором вы бредите, это такая железка, которая существовала во времена жесточайшей экономии активных элементов в архитектуры IBM PC - не было периферийных устройств, умеющих управлять (общей) шиной (aka busmastering), не было буферов размером более одного байта.
Вот тогда и существовала железка, имевшая четыре канала и служившая посредником между (примитивной) периферией и оперативной памятью.
А сейчас такая железка просто не нужна: массовый басмастеринг в писюковой периферии появился к середине девяностых, а приличных размеров буферы - ещё раньше.
Сегодняшние процессоры гоняют байтовые массивы при помощи SIMD команд и умеют эффективно пересылать невыровненные данные. И нет железки, которая сделает эту работу быстрее процессора.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38171795
Basil A. SidorovRAM-RAM через DMAДля RAM -> Device (видеокарточка) DMA же не сводит профит к 0. И быстрее на 20%, и процессор не загружает."Когда вы говорите, Иван Васильевич ..." (ц) одна популярная комедия.
Т.е. тесты врут и в BestPractice от nVidia ошиблись и DMA-пересылка RAM -> Device (видеокарточка) медленнее чем это делает CPU?

Basil A. SidorovDMA-контроллер, о котором вы бредите, это такая железка, которая существовала во времена жесточайшей экономии активных элементов в архитектуры IBM PC - не было периферийных устройств, умеющих управлять (общей) шиной (aka busmastering), не было буферов размером более одного байта.
Вот тогда и существовала железка, имевшая четыре канала и служившая посредником между (примитивной) периферией и оперативной памятью.
А сейчас такая железка просто не нужна: массовый басмастеринг в писюковой периферии появился к середине девяностых, а приличных размеров буферы - ещё раньше.
Я лишь копирую цитаты из Intel, а вы называете это бредом. Уже писал вам про Intel IO AT, но научу вас пользоваться википедией.
http://en.wikipedia.org/wiki/I/O_Acceleration_Technology] http://en.wikipedia.org/wiki/I/O_Acceleration_Technology
авторI/O Acceleration Technology (I/OAT) is a DMA engine by Intel bundled with high-end server motherboards, that offloads memory copies from the main processor.
http://www.intel.ru/content/www/ru/ru/wireless-network/accel-technology.html] http://www.intel.ru/content/www/ru/ru/wireless-network/accel-technology.html

Модератор: спокойнее пожалуйста
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38171835
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMA,

Дык чего ж вы тогда спрашиваете есть ли такая возможность, когда в ссылке которую вы привели прямо написано что поддержка IOAT (включая прикрепление страниц вирт. памяти на время операции) добавлена в Линуксе начиная с 2.6.18 и в Винде с 2003sp1 (2006).

Только я вот думаю, что эта фича доступна только в режиме ядра, но не юзерскому коду.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38171847
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТолько я вот думаю, что эта фича доступна только в режиме ядра, но не юзерскому коду.
угу

http://communities.intel.com/thread/30456

авторNote also, that next Windows Server version (2012) will not support NetDMA and DCA, so I/OAT will become mostly useless.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38172014
Anatoly MoskovskyRAM-RAM через DMA,

Дык чего ж вы тогда спрашиваете есть ли такая возможность, когда в ссылке которую вы привели прямо написано что поддержка IOAT (включая прикрепление страниц вирт. памяти на время операции) добавлена в Линуксе начиная с 2.6.18 и в Винде с 2003sp1 (2006).

Только я вот думаю, что эта фича доступна только в режиме ядра, но не юзерскому коду.
Вот мне и интересно почему в Win2003SP1 ввели поддержку NetDMA, а в Win2012 отменили, говорит ли это о том, что есть более эффективные вещи?

Помимо этого мне интересно использовал ли кто-то фичи IOAT, не обязательно NetDMA (It's typically used for accelerating network traffic, but supports any kind of copies ) или если есть подобные у AMD и получал ли от этого профит?
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38172343
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAТ.е. тесты врут и в BestPractice от nVidia ошиблись и DMA-пересылка RAM -> Device (видеокарточка) медленнее чем это делает CPU?
...
Я лишь копирую цитаты из Intel, а вы называете это бредом.Вы цитируете, не понимая смысла.
Во всех ваших "примерах" с памятью общаются периферийные устройства. Обмен память-железка. В этом случае - да, пересылка под управлением ЦПУ менее эффективна, нежели пересылка под управлением самой железки.
Но задача, которую вы решаете - другая. И в этой задаче нет места периферии. Просто потому, что пересылку память-память быстрее всех делает именно ЦПУ.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38172510
Basil A. SidorovRAM-RAM через DMAТ.е. тесты врут и в BestPractice от nVidia ошиблись и DMA-пересылка RAM -> Device (видеокарточка) медленнее чем это делает CPU?
...
Я лишь копирую цитаты из Intel, а вы называете это бредом.Вы цитируете, не понимая смысла.
Во всех ваших "примерах" с памятью общаются периферийные устройства. Обмен память-железка. В этом случае - да, пересылка под управлением ЦПУ менее эффективна, нежели пересылка под управлением самой железки.
Но задача, которую вы решаете - другая. И в этой задаче нет места периферии. Просто потому, что пересылку память-память быстрее всех делает именно ЦПУ.
Такое ощущение, что вы сами с собой разговариваете.
Я в первом сообщении написал, что DMA RAM-RAM медленнее, и в чем смысл ваших выпадов убедить меня в этом же? :)
Учимся читать:
RAM->RAM через DMAПрименяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
Может это будет быстрее или пусть даже чуть медленнее , но смысл в том, что можно заснуть на время копирования, отдав ядро другому потоку, сэкономив такты . Если конечно копируется достаточно большой объем .
Если вы не поняли, то сэкономленные такты отдаются другим потокам и как вы думаете это сказывается на производительности всего приложения в целом?

Обмен памяти с какой периферийной железкой производит интеловская функция async_memcpy.c ?
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38173510
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAОбмен памяти с какой периферийной железкой производит интеловская функция async_memcpy.c ?Замечание про "не понимая смысла" остаётся в силе:
Код: sql
1.
if (device && is_dma_copy_aligned(device, src_offset, dest_offset, len)



P.S. Укажите, кто (кроме ЦПУ) умеет (быстро или медленно) копировать память-память и мы продолжим обсуждение.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38173668
Basil A. SidorovRAM-RAM через DMAОбмен памяти с какой периферийной железкой производит интеловская функция async_memcpy.c ?Замечание про "не понимая смысла" остаётся в силе:
Код: sql
1.
if (device && is_dma_copy_aligned(device, src_offset, dest_offset, len)



P.S. Укажите, кто (кроме ЦПУ) умеет (быстро или медленно) копировать память-память и мы продолжим обсуждение.
Устройство называется 5000 Series Chipset DMA Engine, а технология называется внезапно! I/OAT.

Это очевидно, что память не сама себя копирует, а делает это некий device (5000 Series Chipset DMA Engine).
Что оно из себя представляет физически, я не знаю: отдельный чип или MMU/Uncore/IMC переехавшие вместе с северным мостом на один кристалл с CPU.

Вы ответьте, что означают выделенные слова, здесь говориться, что копировать память-память может только CPU?
http://en.wikipedia.org/wiki/Direct_memory_access DMA can also be used for " memory to memory " copying or moving of data within memory. DMA can offload expensive memory operations, such as large copies or scatter-gather operations, from the CPU to a dedicated DMA engine . An implementation example is the I/O Acceleration Technology .

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.73.9125 Most of the receive packet processing time [15] is spent in copying the data from kernel buffer to user buffer . ... I/OAT offloads this copy operation with an additional DMA engine.

Вы как думаете, что это за устройство, которое ускоряет "сетевой" обмен между двумя виртуальными серверами расположенными на одном физическом сервере?
Очевидно, что тупым копированием не должно заниматься такое сложное устройство как ядро CPU.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38173678
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAОчевидно, что тупым копированием не должно заниматься такое сложное устройство как ядро CPU.
а в Майкрософт почему-то решили иначе.

Значит - неочевидно
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38173692
ИзопропилRAM-RAM через DMAОчевидно, что тупым копированием не должно заниматься такое сложное устройство как ядро CPU.
а в Майкрософт почему-то решили иначе.

Значит - неочевидно
В майкрософт решили не использовать NetDMA, не очевидно что они отказались от копирования DMA память-память, может они теперь делают это используя другое/по другому названное устройство? :)
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38173757
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAУстройство называется 5000 Series Chipset DMA Engine, а технология называется внезапно! I/OAT."I/O Acceleration (Intel(R) I/OAT)".
Вам абревиатуру I/O расшифровать?
Это первое.
А второе - если вас смущает "memory hub", то приведите тот кусок спецификации из которого явствует, что "5000 Series Chipset DMA Engine" предназначен для копирования память-память.Вы ответьте, что означают выделенные слова, здесь говориться, что копировать память-память может только CPU?Разницу между "также может использоваться для" и "используется для" - улавливаете?Most of the receive packet processing time is spent in copying the data from kernel buffer to user buffer А вот это - вообще пальцем в небо. Написано, что копирование данных из буферов ядра в пользовательскую память процессора требует много времени. Ну так это общеизвестно.
В IP-стеке с давних есть функции, позволяющие использовать память процесса в качестве "ядрёных буферов" и прочие оптимизации.
То, что интел реализовал какой-то из вариантов аппаратной поддержки - ну замечательно. И что?

P.S. По асинхронному копированию вопросов, как я понимаю, больше нет?

P.P.S. Весь современный ввод-вывод, включая обработку прерываний, может делаться "в память". Это всего лишь означает, что любая, сколько-нибудь современная железка, умеет отображать свои потроха на физических адреса.
На работу оперативной памяти (хоть в пределах одного узла, хоть между разными узлами NUMA-системы) это никак не влияет.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38173758
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovв пользовательскую память процессора требует много времени.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38173808
Basil A. SidorovВы ответьте, что означают выделенные слова, здесь говориться, что копировать память-память может только CPU?Разницу между "также может использоваться для" и "используется для"
"Может использоваться" - значит можно взять и использовать, и НЕ значит, что сейчас не существует якобы выдуманного мною DMA контроллера (5000 Series Chipset DMA Engine), как вы утверждали.

Раньше оно было особенно актуально из-за боттлнека в виде FSB и перегонять память вхолостую по ней было весьма медленно.
Другой вопрос существуют ли сейчас задачи для передачи информации между виртуалками, в которых нет никаких физических устройств способных к busmastering, и где копирование является неплохим паттерном?

Basil A. SidorovВ IP-стеке с давних есть функции, позволяющие использовать память процесса в качестве "ядрёных буферов" и прочие оптимизации.
То, что интел реализовал какой-то из вариантов аппаратной поддержки - ну замечательно. И что?

И как по вашему реализовано, так Net-(mapped on kernel buffer RAM)->-(DMA)->user buffer(RAM) или как?

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.73.9125 Most of the receive packet processing time [15] is spent in copying the data from kernel buffer to user buffer. In particular, the ratio of useful work done by the CPU to useless overheads such as CPU stalling for memory access or data movement, decreases as we go from 1 Gbps links to 10 Gbps links [17]. Especially for data movement operations, rather than waiting for a memory copy to finish, the host CPU can process other pending packets while the copy is still in progress. I/OAT offloads this copy operation with an additional DMA engine. This is a dedicated device which can perform memory copies. As a result, while the DMA is performing the data copy, the CPU becomes free to process other pending packets. For more details regarding this feature and its implementation please refer to [15, 17, 16].
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38174788
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMA"Может использоваться" - значит можно взять и использовать, и НЕ значит, что сейчас не существует якобы выдуманного мною DMA контроллера (5000 Series Chipset DMA Engine), как вы утверждали.Какой же вы трудный ...
Я не утверждал, что не существует DMA/busmastering/etc.
Я утверждал, что область применения всего этого великолепия ограничена обменом между оперативной памятью и периферийным устройством. В частности, всё, что вы упоминали предназначено для обеспечения нормальной работы высокоскоростных и/или многопортовых сетевых карт.
Ничто из перечисленного вами не может использоваться для обмена между двумя участками оперативной памяти.И как по вашему реализовано, так Net-(mapped on kernel buffer RAM)->-(DMA)->user buffer(RAM) или как?Железка обменивается с физическими адресами. Примите это как факт.
IP-стек предоставляет (ограниченную) возможность отобразить некоторый участок виртуального адресного пространства процесса на физическую память. Плюс механизм оповещения о завершении обмена с периферийным устройством.
Так вот, в вашей цепочке:
1. (DMA) находится не в том месте;
2. Вообще не относится к делу, т.к. представляет собой несущественные (аппаратные) детали процесса обмена между периферией и ОЗУ.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38174837
http://en.wikipedia.org/wiki/Direct_memory_access DMA can also be used for " memory to memory " copying or moving of data within memory. DMA can offload expensive memory operations, such as large copies or scatter-gather operations, from the CPU to a dedicated DMA engine . An implementation example is the I/O Acceleration Technology .
Basil A. Sidorov "также может использоваться для"
Basil A. Sidorov не может использоваться для обмена между двумя участками оперативной памяти.
Так вы определитесь то может, то не может, капризный какой. В википедии врут что I/OAT может использоваться для memory to memory?

Basil A. SidorovIP-стек предоставляет (ограниченную) возможность отобразить некоторый участок виртуального адресного пространства процесса на физическую память.
Отобразить некоторый участок виртуального адресного пространства процесса на физическую память - это делает MMU оперируя PTE и кэшируя их в TLB, и IP-стек тут абсолютно не причем.

Basil A. SidorovТак вот, в вашей цепочке:
1. (DMA) находится не в том месте;
Ну так скажите где он должен быть, вы вообще о нем не упомянули.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38175078
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAВ википедии врут что I/OAT может использоваться для memory to memory?Если мы об одной и той же статье, то в вики такого нет - это ваши собственные домыслы.Отобразить некоторый участок виртуального адресного пространства процесса на физическую память - это делает MMU оперируя PTE и кэшируя их в TLB, и IP-стек тут абсолютно не причем.Вы опять ничего не поняли ...
И MMU и PTE и TLB - детали аппаратной реализации, которые никак не решают проблемы:
1. Отобразить заданный виртуальный адрес на заданный физический;
2. "Объяснить" железке, что передача данных начинается с заданного физического адреса;
3. "Оповестить" приложение, что обмен завершён;
4. Предоставить все эти возможности приложению, не имеющему ни нужных привилегий, ни знаний не то, что о железке - об архитектуре сетевой подсистеме и об особенностях работы с драйверами устройств.Ну так скажите где он должен быть, вы вообще о нем не упомянули.Несущественная деталь, поэтому и не упомянул.
DMA - часть железки, поэтому, как максимум будет: "Net -> DMA", а правильно - "Hardware (with DMA) -> RAM -> API"
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38175372
Вообщем вы мне скажите, я правильно понял:
1. Давно было так, Net-hardware маппился на физические адреса kernel-buffer, а копирование kernel-buffer -> user-buffer делал CPU (было медленно из-за медленной FSB)
2. С появлением I/OAT, Net-hardware маппился на физические адреса kernel-buffer, а копирование kernel-buffer -> user-buffer делал DMA engine (преодолели ограничение FSB)
3. С переносом северного моста на один кристалл с CPU, в DMA отпала необходимость, т.к. исчезла FSB, DMA лишь добавлял задержку, а копирование kernel-buffer -> user-buffer с помощью CPU позволяло заодно и кэшировать в LLC. Да и ядер стало много и загружается не весь CPU, а только одно ядро (1/4 - 1/8) CPU.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38176545
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, неправильно вы поняли.
Есть две основные (и взаимоисключающие) схемы работы с железками в IBM PC (в хронологическом порядке):
1. Порты ввода-вывода
2. Отображение на память
Есть прямой доступ к памяти (тот самый DMA) - это способность железки управлять обменом с памятью без участия процессора.
Последнее тысячелетие, практически любое железо умеет и прямой доступ и отображение на память.
Есть различные API позволяющие управлять процессом отображения физический адресов на виртуальные - и API уровня ядра и API прикладного уровня.
Одна из целей разработки таких API - минимизировать копирование данных между адресными пространствами ядра и (пользовательских) процессов.

И есть, наконец, процедура копирования невыровненных байтовых массивов. Оптимизированная общая версия такой процедуры содержит сдвиги и лучше процессора никто её не выполнит. По крайней мере, пока не встроят нужный функционал прямо в чипы памяти.

Возвращаясь к вашему желанию копировать данные между узлами NUMA, я бы хотел напомнить, что желания подгоняют под действительность, а не наоборот.
В частности, если у вас нет эффективного способа минимизировать обмен данными между узлами, то не исключено, что оптимальным окажется вариант обсчёта всех данных на одном узле.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38176613
Basil A. SidorovНет, неправильно вы поняли.
Есть две основные (и взаимоисключающие) схемы работы с железками в IBM PC (в хронологическом порядке):
1. Порты ввода-вывода
2. Отображение на память
Есть прямой доступ к памяти (тот самый DMA) - это способность железки управлять обменом с памятью без участия процессора.
Последнее тысячелетие, практически любое железо умеет и прямой доступ и отображение на память.

Ок. Пару вопросов.
1. В следующей цитате, возможно имеется ли ввиду отображение железки на память и куда, на kernel buffer?
2. Имеется ли ввиду DMA-копирование с этой отображенной на память железки в память user buffer?
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.73.9125 Most of the receive packet processing time [15] is spent in copying the data from kernel buffer to user buffer . ... I/OAT offloads this copy operation with an additional DMA engine.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38177602
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMA1. В следующей цитате, возможно имеется ли ввиду отображение железки на память и куда, на kernel buffer?Никуда. Железка обменялась данными с памятью - это физические адреса.
Программы (ядрёные или нет - неважно) работают в пространстве виртуальных адресов.
Если ядрёные и пользовательские адреса отображаются на один и тот же участок физической памяти - возникают проблемы безопасности, разграничения доступа и т.п. Если на разные - требуется копировать данные, что накладно.
Соответственно, под некоторые задачи делается API, которое "и волки сыты и овцы цели и пастуху - вечная память" :)2. Имеется ли ввиду DMA-копирование с этой отображенной на память железки в память user buffer?Нет - железка ничего не знает о виртуальных адресах.
Железка передаёт данные из "своего" адресного пространства в физическую память, всё остальное - на усмотрение операционной системы.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38177690
Basil A. SidorovRAM-RAM через DMA1. В следующей цитате, возможно имеется ли ввиду отображение железки на память и куда, на kernel buffer? Никуда . Железка обменялась данными с памятью - это физические адреса.
Программы (ядрёные или нет - неважно) работают в пространстве виртуальных адресов.
Если ядрёные и пользовательские адреса отображаются на один и тот же участок физической памяти - возникают проблемы безопасности, разграничения доступа и т.п. Если на разные - требуется копировать данные, что накладно.
Соответственно, под некоторые задачи делается API, которое "и волки сыты и овцы цели и пастуху - вечная память" :)2. Имеется ли ввиду DMA-копирование с этой отображенной на память железки в память user buffer?Нет - железка ничего не знает о виртуальных адресах.
Железка передаёт данные из "своего" адресного пространства в физическую память, всё остальное - на усмотрение операционной системы.
Ок. Значит в следующей цитате:
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.73.9125 Most of the receive packet processing time [15] is spent in copying the data from kernel buffer to user buffer . ... I/OAT offloads this copy operation with an additional DMA engine.
Железка(сетевуха) никуда не отображается. И железка передаёт данные из "своего" адресного пространства в физическую память, которые не являются ни kernel-buffer, ни user-buffer, но непонятно зачем тогда они упомянуты в цитате :)
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38179053
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAЖелезка(сетевуха) никуда не отображается.Вообще-то - отображается.И железка передаёт данные из "своего" адресного пространства в физическую память, которые не являются ни kernel-buffer, ни user-buffer, но непонятно зачем тогда они упомянуты в цитате :)Бессмысленно передавать данные в никому недоступную память.
Пространства ядра и процесса (традиционно) различают на уровне операционной системы.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38179077
Basil A. SidorovRAM-RAM через DMA1. В следующей цитате, возможно имеется ли ввиду отображение железки на память и куда, на kernel buffer? Никуда .
Basil A. SidorovRAM-RAM через DMAЖелезка(сетевуха) никуда не отображается.Вообще-то - отображается .
Она отображается в никуда? :)
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38179098
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAM-RAM через DMAОна отображается в никуда? :)Она (железка) занимает определённый диапазон (физических) адресов. И в этом смысле она (железка) - никуда не отображается.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38179174
Basil A. SidorovRAM-RAM через DMAОна отображается в никуда? :)Она (железка) занимает определённый диапазон (физических) адресов. И в этом смысле она (железка) - никуда не отображается.
Basil A. SidorovВообще-то - отображается .
А как переводится mapped - отображаться?
http://lkml.indiana.edu/hypermail/linux/kernel/1105.0/00958.html mapped the mmio
The async_tx api only supports memory-to-memory transfers.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38180680
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задолбало уже, честно говоря.
Читайте организацию памяти. Виртуальные адреса, физические, механизмы трансляции ...
Мысленно поработайте диспетчером виртуальной памяти - картинка должна сложиться.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38180691
Basil A. SidorovЗадолбало уже, честно говоря.
Читайте организацию памяти. Виртуальные адреса, физические, механизмы трансляции ...
Мысленно поработайте диспетчером виртуальной памяти - картинка должна сложиться.
Ну у меня тогда будет такое же понимание насчет отображения, как и у вас? :)
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38181874
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мля ...
Есть адресное пространство, (частично) занятое оперативной памятью и периферийным оборудованием.
Передавать данные между адресными пространствами периферии и ОЗУ можно и при помощи процессора и при помощи самих периферийных железок.
Передавать данные между разными областями ОЗУ может только процессор.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38181892
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПередавать данные между разными областями ОЗУ может только процессор
если железка умеет читать и писать в RAM без участия процессора, можно заставить её заняться копированием основной памяти.

топикстартер уже третью страницу пытается выяснить, почему подобная возможность не особо популярна на практике
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38181902
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилесли железка умеет читать и писать в RAM без участия процессора, можно заставить её заняться копированием основной памяти.Ещё, блин, один писатель ...
Все они (железки) умеют обмениваться с памятью в обоих направлениях.
Тока, блин, для обмена память-память эта способность нифига не помогает.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38181907
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТока, блин, для обмена память-память эта способность нифига не помогает.
не помогает и не может - есть разница
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38181922
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилне помогает и не может - есть разницаА подумать?
Если изначально железка неспособна передавать данные память-память, то чем ей поможет способность читать-писать данные из/в памяти?
Даже в клёпанном (если правильно помню маркировку) 8259 обмен память-память требовал задействовать два канала. Причём без гарантии, что ероплан полетит.
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38181966
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

железка может инициировать ДВЕ транзакции -
память-> шина-> устройство
и устройство->шина->память

нужно это кому или нет - не обсуждаем.

P.S.
8259 - это контроллер прерываний
DMA занимался 8237
...
Рейтинг: 0 / 0
Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
    #38181989
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вопрос, почему в в C/C++ для std::copy/memcpy не применяется DMA ответ был дан еще во втором посте этого топика. Более ничего относящегося к языкам С и С++ не прозвучало.
Ругаться о железе идите в соответствующий форум. Здесь весь этот спор не нужен и бессмыслен.
Закрываем.
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Применяется ли в C/C++ для std::copy/memcpy копирование RAM->RAM через DMA?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]