Как отключить кэш процессора на процессоре PowerPC?

StackOverflow https://stackoverflow.com/questions/73312

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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