Как отключить кеш процессора на процессоре PowerPC? - PullRequest
1 голос
/ 16 сентября 2008

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

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

Ответы [ 5 ]

4 голосов
/ 03 ноября 2008

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

Итак, моя точка зрения такова: если существует определенное подмножество кода, которое должно выполняться в детерминированное время, возможно, вы найдете этот код (через командный файл компоновщика) в области памяти, которая определена как не кэшируемая на странице. таблицы? Таким образом, весь код, который может / должен извлечь выгоду из кэша, делает, и (мы надеемся) подмножество кода, которое не должно, не делает.

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

2 голосов
/ 16 сентября 2008

Из справочного руководства E600:
Регистр специального назначения HID0 содержит несколько битов, которые делают недействительными, отключают и блокируют кэши команд и данных.

Вы должны использовать HID0 [DCE] = 0, чтобы отключить кэш данных.
Вы должны использовать HID0 [ICE] = 0, чтобы отключить кэш команд.

Обратите внимание, что при включении питания оба кэша отключены. Вам нужно будет написать это в ассемблерном коде.

1 голос
/ 28 сентября 2009

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

Чтобы добиться стабильной скорости выполнения, рассмотрите один из следующих подходов:

1) Заблокируйте часть или весь кеш. Все текущие чипы PowerPC от Freescale, IBM и AMCC предлагают эту функцию.

2) Если это чип Freescale с кешем L2, рассмотрите возможность отображения части этого кеша как встроенную память.

1 голос
/ 03 октября 2008

Что это за ядро ​​PPC? Управление кешем сильно различается в разных ядрах разных производителей ... кроме того, отключение кеша вообще считается очень плохой вещью для машины. Производительность становится настолько медленной, что вы бы поступили так же со старым 8-битным процессором (немного преувеличивая). У некоторых вариантов ARM есть TCM, тесно связанные воспоминания, которые работают вместо кэшей, но я не знаю ни одного варианта PPC с этим средством.

Может быть, лучшим решением будет сохранить кеши 1-го уровня активными и использовать вместо них кэш-память L2 на кристалле в качестве статически отображаемой ОЗУ? По крайней мере, это характерно для современных устройств PowerQUICC.

1 голос
/ 03 октября 2008

Возможно, вы не хотите глобально отключать кеш, вы хотите отключить его только для определенного диапазона адресов?

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

Единственный PowerPC, на котором я делал это, был PowerPC 440EP (от IBM, затем AMCC), поэтому я не знаю, работают ли все PowerPC одинаково.

...