Я ищу способ очистить кеш L1-L2 с помощью модуля ядра. Есть ли способ полностью сбросить весь кеш кластера (конфигурация с 4 ядрами) или, что еще лучше, записать обратно грязные строки кеша в основную память?
Как выполнить обратную запись грязных строк кэша L1-L2 в ARMv8
Ответы (3)
Звучит странно, что вы хотите сбросить кеши из модуля ядра. Это должно быть сделано ядром ядра, и вам, как драйверу, не следует об этом беспокоиться.
Есть ли какая-то конкретная причина, по которой вам нужно сделать это в драйвере?
volatile
(см. здесь)? Это предотвращает запись данных в кеш в первую очередь
- person jonnyx; 20.09.2018
Я думаю, вы хотите взглянуть на 3.9 из «Understanding the Linux Virtual Memory Manager» [1] от Мела Гормана. Я думаю, что вы ищете flush_cache_page(...)
[1] https://www.kernel.org/doc/gorman/
Что ж, похоже, на самом деле это отличается от того, как кеши очищаются в разных архитектурах. Тем не менее, я не нашел реализации, которая работает. НО, что я сделал, так это нашел запись таблицы страниц (PTE) конкретной страницы, которую я хочу сбросить, и изменил атрибуты памяти на некэшируемые. Затем данные отправлялись прямо в DRAM. (ARMv8) Ура