dmitry-tomsk 0 21 декабря, 2022 Опубликовано 21 декабря, 2022 · Жалоба 13 hours ago, faa said: А опрос через pio регистра состояния без пауз/таймаутов? пауза for (int i = 0; i < 10000; i++). Менял на 100000 без разницы. Сейчас другой работой занят, на следующей неделе буду дальше копать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 21 декабря, 2022 Опубликовано 21 декабря, 2022 · Жалоба какбы такие паузы компилятор просто игнорирует (выбрасывает). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 23 декабря, 2022 Опубликовано 23 декабря, 2022 · Жалоба On 12/14/2022 at 5:28 AM, dxp said: Это в DMA режиме или в PIO? Конфигурация линка какая (сколько лейнов в линке)? Прошу прощения за небольшой оффтопичек, хотя всё же вопрос очень близок к теме. На платформе Linux есть dma_alloc_coherent и оно дает буфер смежный. Его можно один раз выделить и пользоваться им "вечно". Но я и сам это видел, что нельзя выделить буфер большой, иногда проблемы, предположительно из за фрагментации, не позволяли даже взять буфер 128 килобайт. С тех пор я решал эту проблему выделением N страниц памяти и постоянным обменом этими адресами с устройством, хотя coherent dma очень удобно И тут я узнал про CMA, ни один линуксоид не упоминал про эту штуку на тематических форумах, и оно позволяет выделить слитный кусок coherent dma памяти да хоть 32 гигабайта! Система резевирует отдельную область при старте. Есть ли какие то проблемы с этим механизмом? Накладные расходы, сложности? Падение производительности? Тут подробнее https://stackoverflow.com/questions/56508117/how-to-allocate-large-contiguous-memory-regions-in-linux dma_alloc_coherent(&pdev->dev, dbsize, paddr, GFP_KERNEL); // dbsize may specify up to 32G. Подумать только 32 гигабайта, а мне и 16 мегабайт будет большой помощью Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
faa 4 24 декабря, 2022 Опубликовано 24 декабря, 2022 · Жалоба 10 часов назад, 1891ВМ12Я сказал: И тут я узнал про CMA, ни один линуксоид не упоминал про эту штуку на тематических форумах, и оно позволяет выделить слитный кусок coherent dma памяти да хоть 32 гигабайта! Система резевирует отдельную область при старте. Есть ли какие то проблемы с этим механизмом? Накладные расходы, сложности? Падение производительности? Тут подробнее https://stackoverflow.com/questions/56508117/how-to-allocate-large-contiguous-memory-regions-in-linux dma_alloc_coherent(&pdev->dev, dbsize, paddr, GFP_KERNEL); // dbsize may specify up to 32G. Подумать только 32 гигабайта, а мне и 16 мегабайт будет большой помощью CMA должен быть включен в ядре, что не во всех дистрибутивах сделано. Или ядро пересобирать надо. Есть еще варианты: 1. В проекте wupper драйвер cmem собирает обычные 4К странички в непрерывную область с проверкой неразрывности физ.адресов. CMA не используют. Но если затребовать буфер большого размера, то это может происходить очень долго и не всегда успешно. 2. Наши программисты через HugePage выделяют буфера, в cmdline размер HP установлен в макс.допустимый для платформы, отдельный драйвер преобразует вирт.адреса HP в физические. Только макс.размер HP может отличаться на разных платформах: на x86_64 он 1G, на aarch64 512M. Но в этом способе еще нюанс: HP надо выделять на правильной ноде, где пристегнут endpoint с dma. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 24 декабря, 2022 Опубликовано 24 декабря, 2022 · Жалоба 11 hours ago, 1891ВМ12Я said: Прошу прощения за небольшой оффтопичек, хотя всё же вопрос очень близок к теме. На платформе Linux есть dma_alloc_coherent и оно дает буфер смежный. Его можно один раз выделить и пользоваться им "вечно". Но я и сам это видел, что нельзя выделить буфер большой, иногда проблемы, предположительно из за фрагментации, не позволяли даже взять буфер 128 килобайт. С тех пор я решал эту проблему выделением N страниц памяти и постоянным обменом этими адресами с устройством, хотя coherent dma очень удобно И тут я узнал про CMA, ни один линуксоид не упоминал про эту штуку на тематических форумах, и оно позволяет выделить слитный кусок coherent dma памяти да хоть 32 гигабайта! Система резевирует отдельную область при старте. Есть ли какие то проблемы с этим механизмом? Накладные расходы, сложности? Падение производительности? Тут подробнее https://stackoverflow.com/questions/56508117/how-to-allocate-large-contiguous-memory-regions-in-linux dma_alloc_coherent(&pdev->dev, dbsize, paddr, GFP_KERNEL); // dbsize may specify up to 32G. Подумать только 32 гигабайта, а мне и 16 мегабайт будет большой помощью под windows windriver выдаёт склеенные страницы, когда делаешь lock памяти уровня пользователя. Склеивает до 144 страниц, в результате число дескрипторов меньше числа страниц в среднем в 10 раз. Блочной памяти 4kx64бит хватает для описания 160 МБайт памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться