Существует определенный кольцевой буфер, который я хочу сохранять в кеше, но он может оставаться неиспользованным в течение продолжительных периодов времени. Это приводит к отсутствию кэша.
У меня есть свободный цикл, который может взять на себя ответственность за поддержание местоположения в горячем состоянии, но я не могу найти способ сделать это, используя только открытый интерфейс без фактической вставки / удаления элементов.
Есть ли какое-либо действие с использованием открытого интерфейса, которое, когда циклический буфер пуст, будет сохранять горячую точку вставки в кеше?
Вы можете разогреть свой полный быстрый путь периодически, выполняя его полностью и останавливая как можно меньше от его последствий.
Если вы можете получить указатель на переднюю часть контейнера, вы можете использовать __builtin_prefetch
на нем, чтобы принести его в кэш. С другой стороны, push
а также pop
элемент.
Возможно, вы захотите изучить использование CAT (Cache Allocation Technology). Я не уверен, где это в данный момент, но посмотрим https://lwn.net/Articles/694800/ где Linux был с ним в июле 2016 года.
CAT — это технология Intel для разделения частей кеша и выделения их для различных целей. Потоки, которым назначен один фрагмент кэша, не могут высвобождать данные, принадлежащие другим фрагментам, хотя я полагаю, что они все еще могут использовать его для чтения.