forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.LINUX

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 16.10.2024, 03:11
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Denis Sovkov написал(а) к All в Oct 24 01:46:54 по местному времени:


Нello everybody!

Входные данные такие: имеем устройство с PCI Express на плисине XC6SLX35T, драйвер для этого устройства в видео модуля ядра и программу, которая читает и пишет память ПЛИС отмапленную mmap'ом. В ПЛИС крутится процессорное ядро, которое выполняет основные функции устройства. И, по замыслу, мапится часть адресного пространства ПЛИСины на память user-space приложения, которое с этим устройством работает. Проблема следующая: при записи с компа в устройство и из устройства в комп не всегда данные попадают из источника в приемник. А иногда вообще и устройство и комп "гоняют на своей волне", т.е. память не синхронизируется вообще. Подозреваю, что дело во флагах MAP_SНARED и ему подобных, но пока не удалось подобрать "правильную" комбинацию. Ман читал, но "по диагонали" - нет совершенно времени. ЧЯДНТ? Надеюсь на помощь зала =)

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #2  
Старый 16.10.2024, 23:52
Nil A
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Nil A написал(а) к Denis Sovkov в Oct 24 22:40:46 по местному времени:

Нello, Denis!

16 Oct 24 01:46, from Denis Sovkov -> All:

DS> Входные данные такие: имеем устройство с PCI Express на плисине
DS> XC6SLX35T, драйвер для этого устройства в видео модуля ядра и
DS> программу, которая читает и пишет память ПЛИС отмапленную mmap'ом. В
DS> ПЛИС крутится процессорное ядро, которое выполняет основные функции
DS> устройства. И, по замыслу, мапится часть адресного пространства
DS> ПЛИСины на память user-space приложения, которое с этим устройством
DS> работает. Проблема следующая: при записи с компа в устройство и из
DS> устройства в комп не всегда данные попадают из источника в приемник. А
DS> иногда вообще и устройство и комп "гоняют на своей волне", т.е. память
DS> не синхронизируется вообще. Подозреваю, что дело во флагах MAP_SНARED
DS> и ему подобных, но пока не удалось подобрать "правильную" комбинацию.

Мало входных данных. Что-то работало и потом поломалось? Драйвер самописный или шёл с неким устройством? Одного просто mmap не достаточно. Нужен какой-то механизм синхронизации. А как вообще DMA запрограммирован?

Best Regards, Nil
--- GoldED+/LNX 1.1.5-b20240306
Ответить с цитированием
  #3  
Старый 17.10.2024, 00:41
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Denis Sovkov написал(а) к Nil A в Oct 24 23:24:04 по местному времени:


Нello Nil!

16 Oct 24 22:40, you wrote to me:

NA> Мало входных данных. Что-то работало и потом поломалось? Драйвер
NA> самописный или шёл с неким устройством? Одного просто mmap не
NA> достаточно. Нужен какой-то механизм синхронизации. А как вообще DMA
NA> запрограммирован?


Драйвер самописный, по образцу с Хабра - по сути просто сообщает системе, что есть такое-то устройство и разрешает (enable) его работу. Затем в /sys/bus/pci появляется сам девайс и с ним можно работать. DMA стандартный, Xilinx'овский. Просто прокидывание адресного пространства и все. Вот, собственно, вопрос с этой синхронизацией и связан. Что-то я не догуглил, что то я не дочитал видимо...

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #4  
Старый 17.10.2024, 00:41
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Denis Sovkov написал(а) к Nil A в Oct 24 23:27:22 по местному времени:


Нello Nil!

16 Oct 24 22:40, you wrote to me:

NA> Мало входных данных. Что-то работало и потом поломалось? Драйвер

В том то и дело, оно то работает, то не работает, видимо где-то надо пнуть ядро, чтоб синхронизировать память...

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #5  
Старый 17.10.2024, 03:01
Nil A
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Nil A написал(а) к Denis Sovkov в Oct 24 01:41:26 по местному времени:

Нello, Denis!

16 Oct 24 23:27, from Denis Sovkov -> Nil A:

NA>> Мало входных данных. Что-то работало и потом поломалось? Драйвер
DS> В том то и дело, оно то работает, то не работает, видимо где-то надо
DS> пнуть ядро, чтоб синхронизировать память...

Попробуй в mmap задать MAPNORESERVE и MAPPOPULATE. Может сходу поможет.

Но ваще проблема в том, что оно же кешируется, mmap мапит на page cache.
Может быть натыкать pgprotnoncached() или pgprot_writecombine(). В mmap vm_pageprot надо подкрутить
vma->vmpage_prot = pgprot_noncached(vma->vm_pageprot);

Потом надо бы в драйвере барьеров натыкать wmb() на запись, или полный mb();

С DMA тоже может быть не всё хорошо. Память надо аллоцировать с помощью dmaalloc_coherent(), или юзать dma_map*() функции, чтобы кешь когерентным был.

Кстати, ещё из юзерспейса же можно msync() дёргать, чтобы кешь сбросить.

Best Regards, Nil
--- GoldED+/LNX 1.1.5-b20240306
Ответить с цитированием
  #6  
Старый 17.10.2024, 13:01
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Denis Sovkov написал(а) к Nil A в Oct 24 11:42:04 по местному времени:

Привет, Nil!

17-10-2024 01:41 Nil A -> Denis Sovkov:

NA> Попробуй в mmap задать MAPNORESERVE и MAPPOPULATE. Может сходу
NA> поможет.

Спасибо за исчерпывающий ответ! Дома буду - обязательно попробую, а то сейчас
с работы, через ББУку пишу ))

Пока.


--- Tornado/DPMI 1.71.1/Release
Ответить с цитированием
  #7  
Старый 17.10.2024, 23:12
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Denis Sovkov написал(а) к Nil A в Oct 24 22:05:32 по местному времени:


Нello Nil!

17 Oct 24 01:41, you wrote to me:

NA> Попробуй в mmap задать MAPNORESERVE и MAPPOPULATE. Может сходу
NA> поможет.

Попробовал, но получилось только в одну сторону - комп читает устройство, все обновляется, а в обратную сторону - ни-ни. Буду копаться дальше.

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #8  
Старый 17.10.2024, 23:32
Nil A
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Nil A написал(а) к Denis Sovkov в Oct 24 22:26:46 по местному времени:

Нello, Denis!

17 Oct 24 22:05, from Denis Sovkov -> Nil A:

NA>> Попробуй в mmap задать MAPNORESERVE и MAPPOPULATE. Может сходу
NA>> поможет.

DS> Попробовал, но получилось только в одну сторону - комп читает
DS> устройство, все обновляется, а в обратную сторону - ни-ни.

Тогда проще. Dirty pages кто-то должен когда-то сбрасывать "на диск", видимо когда dirty_ratio случится. Ты можешь тупо вызывать msync() каждый раз после записи.
Но я тебе чуть больше шагов в предыдущем письме расписал. Там надо аккуратно с кешированием разобраться, с барьерами, DMA. Хотя, если всё вот так вот нахаляву заработает, и более-менее будет работать, то забей :-)

Best Regards, Nil
--- GoldED+/LNX 1.1.5-b20240306
Ответить с цитированием
  #9  
Старый 19.10.2024, 15:31
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Denis Sovkov написал(а) к Nil A в Oct 24 14:13:48 по местному времени:

Привет, Nil!

17-10-2024 22:26 Nil A -> Denis Sovkov:

NA> Тогда проще. Dirty pages кто-то должен когда-то сбрасывать "на диск",
NA> видимо когда dirty_ratio случится. Ты можешь тупо вызывать msync()

Попбовал и msync и fsync. Dirty-ratio ставил в ноль - все вно не помогает.
Один раз переписалось из компа в девайс при перезагрузке компа(!). Видимо
все-таки что-то не так, нахаляву не получилось (( Видимо, придется разбираться
с этим более тонко.

Пока.


--- Tornado/DPMI 1.71.1/Release
Ответить с цитированием
  #10  
Старый 19.10.2024, 16:21
Andrei Mihailov
Guest
 
Сообщений: n/a
По умолчанию mmap и синхронизация

Andrei Mihailov написал(а) к Denis Sovkov в Oct 24 15:10:29 по местному времени:

Нello, Denis Sovkov.
On 19.10.2024 14:13 you wrote:

NA>> Тогда проще. Dirty pages кто-то должен когда-то сбрасывать "на диск", видимо когда
NA>> dirty_ratio случится. Ты можешь тупо вызывать msync()
DS> Попбовал и msync и fsync. Dirty-ratio ставил в ноль - все вно не помогает.
DS> Один раз переписалось из компа в девайс при перезагрузке компа(!). Видимо все-таки что-то не
DS> так, нахаляву не получилось ((

Раз нахаляву не получилось, значит оно устроено так, что за это надо кому-то заплатить деньги ;) Под бесплатным линуксом это, конечно, выглядет странно, но бывает...


--
С наилучшими пожеланиями! Опубликовано ХотДогом с планеты Ведроид
--- ХотДог/2.14.5/Android
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 20:18. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot