Як відключити кеші L1 та L2 процесора?


10

Чи можна відключити кеш L1 та / або L2 на Ubuntu 14.04 (бажано, мовою вищого рівня, як Python)? Якщо так, то як?

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

EDIT

Під час дослідження, як відключити кеш, я дізнався про файл "drop_caches" в / proc / sys / vm / з документації на kernel.org

"Якщо записати це, це призведе до того, що ядро ​​скине чисті сховища, а також відновлювані об'єкти плит, такі як стоматологи та індекси. Після того, як їх випало, їх пам'ять стає вільною."

...

"Цей файл не є засобом контролю за зростанням різних кешів ядер (inodes, dentries, pagecache тощо). Ці об'єкти ядро ​​автоматично відновлюється, коли пам'ять потрібна в іншому місці системи."

Це не схоже на те, що я шукаю, бо не тільки це не здається, що це відключить кеш, я подумав, що віртуальна пам'ять знаходиться в операційній системі, а не в апаратному забезпеченні. Моя мета - відключити кеш, тому потрібну пам'ять потрібно шукати в іншому місці, наприклад, в ОЗУ.

EDIT

Для уточнення я розумію, що відключення кешу буде робити для системи. Однак це звичайна методика, що використовується в космічних додатках для підвищення надійності для критично важливих для безпеки програм. Ось деякі ресурси, які документують це явище:

Зменшення вбудованих програмних променів, викликаних радіацією, через кеш-пам'ять

Керівництво для випробування наземного випромінювання мікропроцесорів у космічному радіаційному середовищі

На тему навіть є книги:

Іонізуючі ефекти випромінювання в електроніці: від спогадів до зображень


Якщо ви намагаєтеся робити такі речі, як відключення кешу, ви займаєтесь вбудованим програмуванням, якщо ви займаєтесь вбудованим програмуванням, ви, ймовірно, використовуєте вбудований мову (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 перевірка кеш-поведінки відключена .

Я не впевнений, що ви повністю розумієте, чим займаються кеші процесора. Чи можете ви, будь ласка, пояснити, чому ви хочете калічити продуктивність вашої системи?


Додаток - це високоефективні вбудовані обчислення для аерокосмічної галузі. Продовження часу важливіше для моєї програми, ніж продуктивність. Я знаю, це звучить дивно, але це явище добре задокументоване.
AustinTronics

Як можна мати "високоефективну" програму без кешу процесора? Які кеші мають відношення до часу роботи?
tehnicaorg

2
Я розробник програмного забезпечення в галузі досліджень і розробок, ми робимо багато божевільних речей. Вибачте, якщо здається, що я залишаю інформацію або я розпливаюсь у своїх відповідях, але я не можу потрапити настільки, як хотілося б, оскільки це інформація про власність. Якщо вас цікавить, який кеш стосується часу роботи в аерокосмічних додатках, ось документ, доступний JPL . Ось і журнальний документ про це.
AustinTronics

1
Як не дивно, відключення кешу L1 має сенс сьогодні!
Кільце Ø

4

Ви можете досягти цього за допомогою невеликого коду ASM, див. Розділ 11 Посібника з програмування системи Intel

11.5.3 Запобігання кешування

Щоб відключити кеші L1, L2 та L3 після того, як вони були включені та отримали заповнення кешу, виконайте наступні дії: 1. Введіть режим кешу без заповнення. (Встановіть прапор CD в регістрі керування CR0 на 1, а прапор NW - на 0. 2. Очистіть усі кеші, використовуючи інструкцію WBINVD. 3. Відключіть MTRR і встановіть тип пам'яті за замовчуванням на кеш-пам'ять або встановіть всі MTRR для не кешованого типу пам'яті (див. обговорення дискусії поля TYPE та прапора E у розділі 11.11.2.1, "IA32_MTRR_DEF_TYPE MSR").

Мені невідомий модуль Python, який реалізує це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.