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

10

Можно ли отключить кэш L1 и / или L2 в Ubuntu 14.04 (желательно на языке более высокого уровня, например Python)? Если так, то как?

Кроме того, будет ли существенно различаться отключение кэша в разных архитектурах? Если это так, меня больше интересует ARM Cortex-A15.

РЕДАКТИРОВАТЬ

При изучении того, как отключить кэш, я узнал о файле drop_caches в / proc / sys / vm / из документации kernel.org

«Запись этого приведет к тому, что ядро ​​удалит чистые кэши, а также исправляемые объекты слэба, такие как дентрии и иноды. После удаления их память станет свободной».

...

«Этот файл не является средством управления ростом различных кэшей ядра (inode, dentries, pagecache и т. Д.). Эти объекты автоматически восстанавливаются ядром, когда требуется память в другом месте системы».

Это не похоже на то, что я ищу, поскольку не только не похоже, что это отключило бы кеш, я думал, что виртуальная память находится внутри операционной системы, а не на оборудовании. Моя цель - отключить кеш, чтобы искомая память искалась в другом месте, например, в ОЗУ.

РЕДАКТИРОВАТЬ

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

Снижение радиационных отказов встроенного программного обеспечения благодаря кэш-памяти

Руководство по наземным радиационным испытаниям микропроцессоров в космической радиационной среде

Есть даже книги на эту тему:

Эффекты ионизирующего излучения в электронике: от воспоминаний к тепловизорам

AustinTronics
источник
Если вы пытаетесь сделать что-то вроде отключения кеша, вы занимаетесь встроенным программированием, если вы занимаетесь встроенным программированием, вам, вероятно, следует использовать встроенный язык (C), а я бы не стал использовать ОС. Кроме того, отключение кэша значительно замедлит работу вашей системы.
Сэм
У меня есть другие способы ускорить мою систему без кеша, но я не могу сказать, насколько эффективны эти методы, пока не отключу кеш и не проведу тесты. Я очень хорошо знаю, C или сборка является предпочтительным выбором для встроенных приложений. Однако, есть несколько вещей высокого уровня, которые имеют больше смысла делать в Python. Было бы гораздо удобнее, если бы в Python была поддержка для чего-то вроде отключения кэша для моего конкретного приложения. Что касается удаления ОС, то, к сожалению, голый металл для меня не вариант.
AustinTronics

Ответы:

2

Вы не можете сделать это напрямую в Python, так как для этого нужен модуль ядра (и права root для загрузки этого модуля).

См. Http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21, чтобы узнать, как сделать недействительным кэш L1 (сделать недействительным, не отключить).

Различные архитектуры ЦП (например, x86 против ARM) требуют различного кода сборки (инструкции ЦП) для отключения кеша. Я не уверен, есть ли у ядра Linux какая-либо возможность отключить кеши L1 / L2 / L3 / L4, и если это будет так, я считаю, что он будет использоваться внутренне только в течение короткого периода времени, так как процессор медленный без этих кешей.

См. Есть ли способ отключить кэш процессора (L1 / L2) в системе Linux? для ссылки на то, как вы можете отключить кэш в системе x86 / x64 (вам нужно изменить регистр cr0). Для ARM проверьте отключенное поведение Cache .

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

tehnicaorg
источник
Приложение представляет собой высокопроизводительные встроенные вычисления для аэрокосмической промышленности. Время работы важнее для моего приложения, чем производительность. Я знаю, это звучит странно, но это явление хорошо задокументировано.
AustinTronics
Как получить высокопроизводительное приложение без кеша процессора? Какое отношение имеют кэши к времени безотказной работы?
Техникаорг
2
Я разработчик программного обеспечения в R & D, мы делаем много сумасшедших вещей. Извините, если мне кажется, что я опускаю информацию или являюсь расплывчатым во всех моих ответах, но я не могу получить столько, сколько хотел бы, поскольку это информация о правомерности. Если вам интересно, какое отношение имеет кэш-память к работоспособности в аэрокосмических приложениях, вот публично доступный документ JPL . Вот журнальная статья об этом также.
AustinTronics
1
По иронии судьбы отключение кэша L1 имеет смысл сегодня!
Кольцо Ø
4

Вы можете сделать это с помощью небольшого кода ASM, см. Главу 11 Руководства по системному программированию Intel.

11.5.3. Предотвращение кеширования

Чтобы отключить кэши L1, L2 и L3 после их включения и получения заполнений кэша, выполните следующие действия: 1. Войдите в режим кэша без заполнения. (Установите флаг CD в регистре управления CR0 на 1, а флаг NW на 0. 2. Сбросьте все кэши, используя инструкцию WBINVD. 3. Отключите MTRR и установите тип памяти по умолчанию как uncached или установите все MTRR для типа кэшированной памяти. (см. обсуждение обсуждения поля TYPE и флага E в разделе 11.11.2.1, «MS32 IA32_MTRR_DEF_TYPE»).

Я не знаю о модуле Python, который реализует это.

Gaius
источник