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

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

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

Благодаря!!

caching,hardware,cpu,cpu-cache,

11

Ответов: 4


8 принят

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 прольет свет.

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


1

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

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


0

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

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

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

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

кэширование, аппаратное обеспечение, процессор, процессор-кэш,
Похожие вопросы
Яндекс.Метрика