В целом, я не думаю, что это возможно. Он работает для DRAM и файла подкачки, поскольку это управляемый ОС, кэш управляется самим ЦП.
ОС может выполнять сжатый временной цикл чтения в памяти и попытаться проверить, достаточно ли он достаточно быстро, чтобы быть в кеше, или если он должен был выйти в основную память - это было бы очень подвержено ошибкам.
В системах с многоядерными/многопроцессорными системами есть cache coherency protocols, которые используются между процессорами, чтобы определить, когда им нужно сделать недействительными кеши друг друга. Я полагаю, у вас может быть собственное устройство, которое будет отслеживать этот протокол, что ОС будет запрашивать.
Что вы пытаетесь сделать? Если вы хотите что-то вставить в память, текущие процессоры x86 поддерживают предварительную выборку памяти в кеш неблокируемым способом, например, с Visual C++ вы можете использовать _mm_prefetch
для извлечения строки в кеш.
EDIT: Я сам этого не делал, поэтому используйте на свой страх и риск. Чтобы определить пропуски кеша для профилирования, вы можете использовать некоторые регистры, специфичные для архитектуры. http://download.intel.com/design/processor/manuals/253669.pdf, Приложение A дает «События настройки производительности». Это нельзя использовать, чтобы определить, находится ли отдельный адрес в кеше или когда он загружен в кеш, но может использоваться для общей статистики. Я считаю, что это то, что использует vTune (феноменальный профилировщик для этого уровня).
Спасибо. Мне интересно, потому что я собираюсь писать ядра. Я заинтересован в профилировании пропусков строки кэша на реальном оборудовании. Я не понимал, насколько они вредны для современных процессоров, пока я не увидел слайды Херба Саттера: http://is.gd/oWwp –
Есть способы профилировать это в аппаратном обеспечении, vtune делает. – Michael
Многие современные процессоры имеют счетчики производительности, которые могут предоставлять все виды информации, включая статистику, связанную с кешем. – sigjuice