Вопрос

Есть ли какой-нибудь способ прочитать содержимое кэша процессора?Архитектура предназначена для ARM.

Я объявляю недействительным диапазон адресов, а затем хочу убедиться, признан ли он недействительным или нет.Хотя я могу выполнять чтение и запись диапазона адресов с недействительностью и проверкой недействительности и без нее, я хочу знать, возможно ли прочитать содержимое кэша

Спасибо!!

Это было полезно?

Решение

ARM9 предоставляет управление кэшем и тестовые регистры, которые позволяют вам проверять состояние кэша.Вот разумная отправная точка:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0151c/Chdcfejb.html

ICache и DCache поддерживаются с использованием инструкций MCR и MRC для регистров 7 и 9 CP15, определенных программной моделью ARM v4T.Дополнительные операции доступны с использованием MCR и MRC для регистра CP15 15.Эти операции объединяются с операциями, использующими регистры 7 и 9, чтобы обеспечить возможность тестирования кэшей полностью в программном обеспечении.

Это привилегированные инструкции, поэтому они могут быть недоступны на вашей целевой платформе.

Я бы начал с простой программы, которая сбрасывает состояние всех строк кэша.Это должно дать вам достаточно информации для чтения данных в кэше, просто прочитав ячейки памяти, предоставляемые тегами кэша.

Другие советы

Я не решаюсь написать, что это невозможно, поэтому я пишу, что это чрезвычайно сложно.Вероятно, общего ответа не существует.учитывая, что кэш процессора работает прозрачно, невозможно прочитать его содержимое с подключенного процессора без изменения содержимого кэша.Кэши процессора обычно реализуются как CAM (память, адресуемая содержимому, ассоциативная память), если процессор пытается получить доступ к данным, выполняется поиск кэша, если данных там нет, они извлекаются из памяти, но я боюсь, что этот процесс прозрачен для процессора.

Вариант состоит в том, чтобы использовать своего рода модуль наблюдения HW и отслеживать системную шину, которая соединяет кэш с оперативной памятью.Если запрос на данные появлялся бы на шине, значит, запрошенных данных не было в кэше.

надеюсь, что кто-то с более глубокими знаниями HW прольет свет.

в википедии есть запись, в которой обсуждается кэширование процессора:http://en.wikipedia.org/wiki/CPU_cache

По определению, все, что вам нужно было бы сделать, чтобы прочитать содержимое кэша, - это загрузить ячейку памяти, хранящуюся в кэше.Если кэш работает должным образом, он извлечет содержимое из кэша.

Однако, если вы пытаетесь прочитать содержимое I-cache, это зависит от архитектуры.Кроме того, вам нужно будет учитывать условия гонки.Инструкция для чтения содержимого кэша может непреднамеренно перезаписать само содержимое кэша.

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

Чтобы сделать что-то подобное, потребуется либо процессор с поддержкой кэша (со специальными инструкциями для управления кэшем;Я понятия не имею, существуют ли они на самом деле), или вам нужно было бы установить отдельный модуль HW для просмотра кэша.Вот 2 идеи, которые у меня есть для этого:

  1. Замените ваш оригинальный контроллер кэша на тот, который обладает дополнительными функциями управления и может быть подключен к системной шине для считывания данных.Этот контроллер находится "между" процессором и кэшем.

  2. Поместите вторичный модуль параллельно с исходным кэшем с доступом к кэшу только для чтения.Используя специальную линию прерывания (или аналогичный аппаратно-НЕ-программный сигнал), центральный процессор может затем запустить дамп кэша в память этого модуля, а затем прочитать его обратно (по шине) позже.Этот контроллер не повлияет на работу вашего кэша;это просто позволило бы вам делать моментальные снимки в любой момент времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top