Como desativar os caches L1 e L2 do processador?

10

É possível desabilitar o cache L1 e / ou L2 no Ubuntu 14.04 (preferencialmente em um idioma de nível superior como o Python)? Se sim, como?

Além disso, a desativação do cache será significativamente diferente entre as diferentes arquiteturas? Se assim for, estou mais interessado em um ARM Cortex-A15.

EDITAR

Enquanto pesquisava como desabilitar o cache, eu descobri o arquivo "drop_caches" em / proc / sys / vm / a partir do documentação do kernel.org

"Writing to this will cause the kernel to drop clean caches, as well as reclaimable slab objects like dentries and inodes. Once dropped, their memory becomes free."

...

"This file is not a means to control the growth of the various kernel caches (inodes, dentries, pagecache, etc...) These objects are automatically reclaimed by the kernel when memory is needed elsewhere on the system."

Isso não parece ser o que eu estou procurando, pois não parece que isso não desativa o cache, eu acho 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, eu 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 aplicativos críticos para a segurança. Aqui estão alguns recursos que documentam esse fenômeno:

Reduzindo falhas induzidas por radiação de software embarcado por meio de memórias cache

Diretriz para o solo Teste de Radiação de Microprocessadores no Ambiente de Radiação Espacial

Existem até livros sobre o assunto:

Efeitos da radiação ionizante na eletrônica: de memórias a criadores de imagens

    
por AustinTronics 16.10.2016 / 06:52

2 respostas

2

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

Veja link pelo que é preciso para invalidar o Cache L1 (invalidar, não desativar).

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

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

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

    
por 18.10.2016 / 23:13
4

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

11.5.3 Preventing Caching

To disable the L1, L2, and L3 caches after they have been enabled and have received cache fills, perform the following steps: 1. Enter the no-fill cache mode. (Set the CD flag in control register CR0 to 1 and the NW flag to 0. 2. Flush all caches using the WBINVD instruction. 3. Disable the MTRRs and set the default memory type to uncached or set all MTRRs for the uncached memory type (see the discussion of the discussion of the TYPE field and the E flag in Section 11.11.2.1, “IA32_MTRR_DEF_TYPE MSR”).

Não conheço um módulo Python que implemente isso.

    
por 18.10.2016 / 23:31