читать содержимое кеша процессора - PullRequest
11 голосов
/ 17 июня 2009

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

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

Спасибо !!

Ответы [ 4 ]

8 голосов
/ 29 июня 2009

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

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

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

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

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

2 голосов
/ 17 июня 2009

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

Опция заключается в использовании своего рода модуля наблюдения HW и сниффе на системной шине, которая подключает кеш к ОЗУ. Если запрос данных появится на шине, то запрошенные данные не будут в кеше.

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

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

1 голос
/ 18 июня 2009

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

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

0 голосов
/ 17 июня 2009

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

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

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

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

...