Como desativar os caches L1 e L2 do processador?

10

É possível desativar o cache L1 e / ou L2 no Ubuntu 14.04 (de preferência em uma linguagem de nível superior como Python)? Se sim, como?

Além disso, a desativação do cache diferirá significativamente entre diferentes arquiteturas? Nesse caso, estou mais interessado em um ARM Cortex-A15.

EDITAR

Enquanto pesquisava como desativar o cache, descobri o arquivo "drop_caches" em / proc / sys / vm / na documentação do kernel.org

"Escrever isso fará com que o kernel elimine caches limpos, além de objetos recuperáveis ​​de lajes, como dentries e inodes. Uma vez descartados, sua memória fica livre".

...

"Este arquivo não é um meio de controlar o crescimento dos vários caches do kernel (inodes, dentries, pagecache, etc ...). Esses objetos são automaticamente recuperados pelo kernel quando a memória é necessária em outra parte do sistema."

Isso não parece o que estou procurando, além de não desabilitar o cache, pensei que a memória virtual reside no sistema operacional e não no hardware. Meu objetivo é desativar o cache para que a memória desejada seja procurada em outro lugar, como na RAM.

EDITAR

Para esclarecer, entendo o que a desativação do cache fará no sistema. No entanto, é uma técnica comum usada em aplicações espaciais para aumentar a confiabilidade de aplicações críticas à segurança. Aqui estão alguns recursos que documentam esse fenômeno:

Reduzindo falhas induzidas por radiação de software incorporado através de memórias de cache

Diretriz para teste de radiação no solo de microprocessadores no ambiente de radiação espacial

Existem até livros sobre o tema:

Efeitos de radiação ionizante em eletrônicos: de memórias a imagers

AustinTronics
fonte
Se você está tentando fazer coisas como desabilitar o cache, está fazendo programação incorporada; se está fazendo programação incorporada, provavelmente deve estar usando uma linguagem incorporada (C) e eu não usaria um sistema operacional. Como um cache de desativação à parte, o sistema ficará extremamente lento.
18716 Sam
Tenho outras maneiras de acelerar meu sistema sem cache, mas não sei dizer até que ponto esses métodos são eficazes até desabilitar o cache e executar benchmarks. Estou ciente de que C ou montagem é a escolha preferida para aplicativos incorporados. No entanto, existem várias coisas de alto nível acontecendo que fazem mais sentido em Python. Seria mais conveniente se o Python tivesse suporte para fazer algo como desabilitar o cache do meu aplicativo em particular. Quanto a retirar o sistema operacional, o bare-metal não é uma opção para mim, infelizmente.
AustinTronics

Respostas:

2

Você não pode fazer isso diretamente no Python, pois você precisa de um módulo do kernel para fazer isso (e direitos de root para carregar esse módulo).

Consulte http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 para saber o que é necessário para invalidar o cache L1 (invalidar, não desativar).

Arquiteturas de CPU diferentes (por exemplo, x86 x ARM) requerem código de montagem diferente (instruções da CPU) para desativar o cache. Não tenho certeza se o kernel do Linux tem alguma possibilidade de desativar os caches L1 / L2 / L3 / L4 e, se houver, acredito que seria usado apenas internamente por um curto período de tempo, pois a CPU está lenta sem esses caches.

Consulte Existe uma maneira de desativar o cache da CPU (L1 / L2) em um sistema Linux? para obter um link sobre como você pode desativar o cache em um sistema x86 / x64 (é necessário alterar o registro cr0). Para ARM, verifique o comportamento do cache desativado .

Não tenho certeza de que você entende completamente o que os caches da CPU fazem. Você pode explicar por que você quer prejudicar o desempenho do seu sistema?

tehnicaorg
fonte
O aplicativo é computação embarcada de alto desempenho para aeroespacial. O tempo de atividade é mais importante para o meu aplicativo do que o desempenho. Eu sei que isso parece estranho, mas o fenômeno está bem documentado.
AustinTronics
Como você pode ter um aplicativo de "alto desempenho" sem um cache de CPU? O que os caches têm a ver com o tempo de atividade?
Tehnicaorg 19/10/2016
2
Sou desenvolvedor de software em P&D, fazemos muitas coisas loucas. Desculpe se parece que estou deixando de fora informações ou sendo vago ao longo de minhas respostas, mas não posso entrar tanto quanto gostaria, pois são informações de propriedade. Se você está interessado no que o cache tem a ver com o tempo de atividade em aplicativos aeroespaciais, aqui está um artigo do JPL disponível ao público . Aqui também está um jornal .
21716 AustinTronics
1
Ironicamente, desabilitar o cache L1 faz sentido hoje!
Anel Ø
4

Você pode fazer isso com um pouco de código ASM, consulte o capítulo 11 do Guia de programação do sistema Intel

11.5.3 Impedindo o armazenamento em cache

Para desativar os caches L1, L2 e L3 depois que eles foram ativados e receberam preenchimentos de cache, execute as seguintes etapas: 1. Entre no modo de cache sem preenchimento. (Defina o sinalizador de CD no registro de controle CR0 como 1 e o sinalizador NW como 0. 2. Limpe todos os caches usando a instrução WBINVD. 3. Desative os MTRRs e defina o tipo de memória padrão como sem cache ou defina todos os MTRRs para o tipo de memória sem cache (consulte a discussão sobre a discussão do campo TYPE e o sinalizador E na Seção 11.11.2.1, “IA32_MTRR_DEF_TYPE MSR”).

Eu não estou ciente de um módulo Python que implementa isso.

Gaius
fonte