Читать содержимое кэша процессора

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

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

Спасибо!!

Ответ 1

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, чтобы обеспечить полное тестирование кэшей в программном обеспечении.

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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