реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> функции для работы с кешем процессора, под линуксом
novartis
сообщение Dec 16 2015, 05:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Здравствуйте.
Закидываю я данные с pci express девайса напрямую в юзер спейс программу. Данные кидаю в буфер озу.
Процессором читаю эти данные.
Понятно, что процессор читает не саму озу, а данные из кеша, где хранится копия данных из озу.

Начитался теории, что строки кеша сопровождаются флагами (MESI, изменено, эксклюзив, шаред, инвалидейт и т.д., и более сложные)
Есть ли какие функции для получения статуса кеш строки?
Конкретно под линуксом.
Чтобы знать, что прочитанная переменная соответствует ее оригиналу в озу.
Go to the top of the page
 
+Quote Post
gerber
сообщение Dec 22 2015, 09:34
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



К участкам памяти, предназначенных для "слива" данных с периферии посредством DMA (PCI Bus Master и т. п.), предъявляется довольно много требований - участок должен быть непрерывен в физической памяти (если только не Scatter-Gather DMA), неперемещаем системой, выровнен с гранулярностью, удобной "железу", и не должен участвовать в страничной перетасовке виртуальной памяти с файлом подкачки с диска (non-pageable).
Поэтому кидать данные напрямую в юзер-спейс - это жесть, конечно. Буфер, который вы выделите new или malloc() не будет соответствовать вышеописанным требованиям. Нужен мало-мальский модуль ядра, который умеет выделять буфера с нужными свойствами.
Что касается кэширования, то специальным образом программисту не нужно заботиться о кэше - кэш-строки инвалидируются (помечаются, как устаревшие) автоматически контроллером памяти при сторонней модификации памяти посредством DMA, и при следующей попытке чтения перезагружаются из памяти в кэш.
Цитата(novartis @ Dec 16 2015, 08:32) *
Чтобы знать, что прочитанная переменная соответствует ее оригиналу в озу.

Тут volatile не забываем (хотя это и не имеет отношения к кэшу, только чтобы компилятор не заоптимизировал переменную в регистры).


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016