Jump to content
    

функции для работы с кешем процессора

Здравствуйте.

Закидываю я данные с pci express девайса напрямую в юзер спейс программу. Данные кидаю в буфер озу.

Процессором читаю эти данные.

Понятно, что процессор читает не саму озу, а данные из кеша, где хранится копия данных из озу.

 

Начитался теории, что строки кеша сопровождаются флагами (MESI, изменено, эксклюзив, шаред, инвалидейт и т.д., и более сложные)

Есть ли какие функции для получения статуса кеш строки?

Конкретно под линуксом.

Чтобы знать, что прочитанная переменная соответствует ее оригиналу в озу.

 

Share this post


Link to post
Share on other sites

К участкам памяти, предназначенных для "слива" данных с периферии посредством DMA (PCI Bus Master и т. п.), предъявляется довольно много требований - участок должен быть непрерывен в физической памяти (если только не Scatter-Gather DMA), неперемещаем системой, выровнен с гранулярностью, удобной "железу", и не должен участвовать в страничной перетасовке виртуальной памяти с файлом подкачки с диска (non-pageable).

Поэтому кидать данные напрямую в юзер-спейс - это жесть, конечно. Буфер, который вы выделите new или malloc() не будет соответствовать вышеописанным требованиям. Нужен мало-мальский модуль ядра, который умеет выделять буфера с нужными свойствами.

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

Чтобы знать, что прочитанная переменная соответствует ее оригиналу в озу.

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

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.

×
×
  • Create New...