Come disabilitare le cache L1 e L2 del processore?


10

È possibile disabilitare la cache L1 e / o L2 su Ubuntu 14.04 (preferibilmente in un linguaggio di livello superiore come Python)? Se é cosi, come?

Inoltre, la disabilitazione della cache differirà in modo significativo tra architetture diverse? In tal caso, sono più interessato a un ARM Cortex-A15.

MODIFICARE

Durante la ricerca su come disabilitare la cache, ho scoperto il file "drop_caches" in / proc / sys / vm / dalla documentazione di kernel.org

"Scrivere su questo farà sì che il kernel rilasci cache pulite, nonché oggetti di lastra recuperabili come dentisti e inode. Una volta rilasciati, la loro memoria si libera."

...

"Questo file non è un mezzo per controllare la crescita delle varie cache del kernel (inode, dentries, pagecache, ecc ...) Questi oggetti vengono automaticamente recuperati dal kernel quando è necessaria memoria altrove nel sistema."

Questo non sembra quello che sto cercando in quanto non solo non sembra che disabiliterebbe la cache, ho pensato che la memoria virtuale risiedesse all'interno del sistema operativo e non sull'hardware. Il mio obiettivo è disabilitare la cache, quindi la memoria desiderata deve essere cercata altrove, ad esempio all'interno della RAM.

MODIFICARE

Per chiarire, capisco cosa farà la disabilitazione della cache al sistema. Tuttavia, è una tecnica comune utilizzata nelle applicazioni spaziali per aumentare l'affidabilità per le applicazioni critiche per la sicurezza. Ecco alcune risorse che documentano questo fenomeno:

Riduzione degli errori indotti dalle radiazioni del software incorporato attraverso le memorie cache

Linee guida per i test delle radiazioni al suolo dei microprocessori nell'ambiente delle radiazioni spaziali

Ci sono anche libri sull'argomento:

Effetti delle radiazioni ionizzanti in elettronica: dai ricordi alle immagini


Se stai provando a fare cose come disabilitare la cache, stai facendo la programmazione integrata, se stai facendo la programmazione incorporata, dovresti probabilmente usare un linguaggio incorporato (C) e non userei un sistema operativo. Inoltre una cache disabilitante rallenterà enormemente il tuo sistema.
Sam,

Ho altri modi per velocizzare il mio sistema senza cache, ma non posso dire quanto siano efficaci questi metodi finché non disabilito la cache ed eseguo benchmark. Sono consapevole che C o assembly è la scelta preferita per le applicazioni integrate. Tuttavia, ci sono diverse cose di alto livello che hanno più senso fare in Python. Sarebbe solo più conveniente se Python avesse il supporto per fare qualcosa come disabilitare la cache per la mia particolare applicazione. Per quanto riguarda lo stripping del sistema operativo, purtroppo il bare metal non è un'opzione per me.
AustinTronics,

Risposte:


2

Non è possibile farlo direttamente in Python, poiché è necessario un modulo del kernel per farlo (e diritti di root per caricare quel modulo).

Vedere http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 per sapere cosa serve per invalidare la cache L1 (invalidare, non disabilitare).

Architetture CPU diverse (ad es. X86 vs ARM) richiedono un codice assembly diverso (istruzioni CPU) per disabilitare la cache. Non sono sicuro che il kernel Linux abbia qualche possibilità di disabilitare le cache L1 / L2 / L3 / L4 e se lo avesse, credo che sarebbe usato solo internamente per un breve periodo di tempo, poiché la CPU è lenta senza queste cache.

Vedi Esiste un modo per disabilitare la cache della CPU (L1 / L2) su un sistema Linux? per un collegamento su come disabilitare la cache su un sistema x86 / x64 (è necessario modificare il registro cr0). Per ARM, controllare il comportamento disabilitato della cache .

Non sono sicuro di aver capito perfettamente cosa fanno le cache della CPU. Puoi per favore spiegare perché vuoi paralizzare le prestazioni del tuo sistema?


L'applicazione è informatica integrata ad alte prestazioni per l'aerospaziale. Il tempo di attività è più importante per la mia applicazione rispetto alle prestazioni. So che sembra strano, ma il fenomeno è ben documentato.
AustinTronics,

Come si può avere un'applicazione "ad alte prestazioni" senza una cache della CPU? Che cosa hanno a che fare le cache con i tempi di attività?
Tehnicaorg,

2
Sono uno sviluppatore di software in ricerca e sviluppo, facciamo molte cose folli. Scusate se sembra che stia tralasciando le informazioni o che sia vago in tutte le mie risposte, ma non riesco a capire quanto mi piacerebbe poiché si tratta di informazioni di proprietà. Se sei interessato a ciò che la cache ha a che fare con il tempo di attività nelle applicazioni aerospaziali, ecco un documento JPL disponibile al pubblico . Anche qui c'è un giornale .
AustinTronics,

1
Ironia della sorte, disabilitare la cache L1 ha senso, oggi!
Anello Ø

4

Puoi farlo con un piccolo codice ASM, vedi il capitolo 11 della Guida alla programmazione del sistema Intel

11.5.3 Prevenzione della memorizzazione nella cache

Per disabilitare le cache L1, L2 e L3 dopo che sono state abilitate e hanno ricevuto i riempimenti della cache, procedere come segue: 1. Accedere alla modalità cache senza riempimento. (Impostare il flag CD nel registro di controllo CR0 su 1 e il flag NW su 0. 2. Svuotare tutte le cache utilizzando l'istruzione WBINVD. 3. Disabilitare gli MTRR e impostare il tipo di memoria predefinito su uncached o impostare tutti gli MTRR per il tipo di memoria non cache (vedere la discussione della discussione sul campo TYPE e il flag E nella Sezione 11.11.2.1, "IA32_MTRR_DEF_TYPE MSR").

Non sono a conoscenza di un modulo Python che implementa questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.