Я пытаюсь найти конфигурацию или схему доступа к памяти для инструкции Intel clwb , которая не делает недействительной строку кэша. Я тестирую на процессоре Intel Xeon Gold 5218 с NVDIMM. Linux версия 5.4.0-3-amd64. Я попытался использовать режим Device-DAX и напрямую сопоставить это символьное устройство с адресным пространством. Я также попытался добавить эту энергонезависимую память в качестве нового узла NUMA и использовать команду numactl --membind
для привязки памяти к нему. В обоих случаях, когда я использую clwb для кэшированного адреса, он выселяется. Я наблюдаю выселение с помощью аппаратных счетчиков PAPI с отключенными устройствами предварительной выборки.
Это простой l oop, который я тестирую. переменные array и tmp, оба объявлены как volatile, поэтому загрузки действительно выполняются.
for(int i=0; i < arr_size; i++){
tmp = array[i];
_mm_clwb(& array[i]);
_mm_mfence();
tmp = array[i];
}
Обе операции чтения приводят к ошибкам кэша.
Мне было интересно, пытался ли кто-нибудь еще определить, существует ли какая-либо конфигурация или шаблон доступа к памяти, который оставил бы строку кэша в кэше?