Possiamo eseguire Linux in qualcosa di più veloce della RAM?


21

Questa è forse una domanda sciocca e può essere il risultato di un malinteso. Sto studiando la CPU in questo momento, e la memoria in particolare. Stavo solo leggendo quanto è più veloce SRAM rispetto a DRAM ma più costoso. SRAM è molto costoso: ho fatto acquisti per un po 'e ho trovato una scheda SRAM alimentata a batteria con 16 MB per circa $ 400.

Recentemente un amico ha detto che ha eseguito Linux su cucciolo in RAM, e che è veloce. Ho notato, tuttavia, che Linux piccolo core può essere ancora più piccolo ... piccolo quanto 8 MB! Questo mi ha fatto pensare: possiamo eseguire Linux in SRAM? Questa domanda è ben formata?

Cercare su Google questa domanda si è rivelato inefficace, ma ha sollevato ancora più domande. È possibile eseguire linux nella cache L3? Intel Core i7 può avere una cache L3 abbastanza grande da contenere gli 8 MB ... ma sto facendo un errore categorico? Qual è la differenza tra questo e Linux "incorporato"?

Questa è la domanda: possiamo eseguire Linux in SRAM o L3 Cache? C'è qualcosa di più veloce? Quanto velocemente possiamo Linux !?

z.


3
I linux incorporati sono spesso eseguiti su RAM, o memoria non volatile. I linux incorporati sono spesso semplicemente eliminati per essere eseguiti solo su hardware specifico o utilizzano alcune opzioni del kernel meno comuni come la bassa latenza
Journeyman Geek

2
Mi chiedo se ci sia qualche utilità pratica per questa domanda?
Robert Niestroj,

4
+1 per l'utilizzo di "linux" come verbo (nell'ultima frase)!
Vorac,

Risposte:


20

Linux o qualsiasi altro sistema operativo non sa come funziona la RAM. Finché il controller di memoria è configurato correttamente (ad es. Frequenze di aggiornamento impostate per non SRAM), il sistema operativo non si preoccupa se funziona su memoria dinamica semplice (RAM normale), RAM veloce in modalità pagina (RAM FP, dal C64-ish volte), RAM estesa (EDO) di uscita dati estesa, RAM sincrona (SDRAM), qualsiasi SDRAMS doppia velocità dati (DDR 1/2/3) qualunque.

Tutti supportano la lettura e la scrittura da luoghi casuali. Tutto funzionerà.

Ora la cache è un po 'diversa. Non è necessario scrivergli perché il contenuto cambi. Ciò si metterà in mezzo. Tuttavia, è in qualche modo utilizzabile. So che coreboot utilizza la cache come una sorta di memoria durante l'avvio, prima che il controller di memoria sia configurato correttamente. (Per i dettagli, guarda i video delle discussioni di coreboot durante FOSDEM 2011).

Quindi in teoria sì, potresti usarlo.

MA : per attività pratiche, un sistema con 1 GB di memoria "normale" a media velocità funzionerà molto meglio rispetto a pochi MB di memoria superveloce. Ciò significa che hai tre opzioni:

  1. Costruisci le cose nel modo "economico" normale. Se hai bisogno di maggiore velocità, aggiungi qualche dozzina di computer extra (tutti con memoria "lenta")
  2. Oppure costruisci un singolo computer con una dozzina di volte il prezzo e significativamente meno di una dozzina di volte le prestazioni.

Tranne in casi molto rari, l'ultimo non è sensato.


6
Molte CPU supportano una modalità "cache-as-RAM" attraverso i registri specifici del modello (MSR) della CPU. Si noti inoltre che SRAM consuma più energia della DRAM e anche questo è un fattore di progettazione. Se la cache della CPU era abbastanza grande o il kernel abbastanza piccolo potevi abilitare questa modalità cache-as-RAM e mantenerla interamente in SRAM sulla CPU. Avresti comunque una quantità limitata di RAM per eseguire programmi, ecc. perché AFAIK cache-as-RAM e modalità normale non funzioneranno contemporaneamente. Potrei sbagliarmi però. Anche se lo ha fatto, la maggior parte della velocità di una CPU in questi giorni è dovuta all'uso della cache L2, L3.
LawrenceC,

@Hennes è che Linux si preoccupa solo degli indirizzi di memoria (mappati)?
Alvin Wong,

SDRAM è RAM D (ynamic) sincrona, mentre SRAM è RAM statica. Non so a quale intendevi fare riferimento nel primo paragrafo e non ho il rappresentante per fare modifiche "banali", ma forse potresti sistemarlo? A parte questo, buona risposta.
un CVn il

Non mi dispiace chiarire, ma non sono sicuro di cosa tu abbia voluto chiarire. Puoi aggiungerlo in un commento e lo modificherò.
Hennes,

Quando ho letto per la prima volta questo commento ho visto "Linux o qualsiasi altro sistema operativo muore non sapendo come funziona la RAM". La tua rottura è buona: penso di non aver avuto l'illusione che questo sarebbe "migliore". Mi chiedevo solo se si potesse fare.
Ziggy,

8

Sì, puoi, e in effetti è già così, automaticamente. Le parti più utilizzate della RAM vengono copiate nella cache. Se l'utilizzo totale della RAM è inferiore alla dimensione della cache (come si suppone), il meccanismo di memorizzazione nella cache esistente avrà copiato tutto nella RAM.

L'unica volta in cui la cache verrà quindi copiata nuovamente nella RAM normale è quando il PC passa in modalità sospensione S3. Ciò è necessario perché le cache sono spente in modalità S3.


1
Non tutti possono / saranno copiati. Per la struttura della cache Intel / x86: Se ho una cache da 256 KiB e una cache da 1024 KiB, posso leggere l'indirizzo 0. Verrà archiviato nella cache nella posizione 0. Posso quindi leggere l'indirizzo 1 e verrà archiviato nella cache nella posizione 1 Tuttavia, se leggo l'indirizzo da (256Kib + 1), questo verrà anche memorizzato all'indirizzo 1 nella cache. La cache utilizza una SRAM aggiuntiva (tag) per indicare quale delle due è memorizzata. Ciò significa che la lettura da multipli della dimensione della cache non funzionerà bene. (Nota che questa sarebbe una cosa rara e di solito può essere ignorata).
Hennes,

Questo è perspicace! Perché dovrei goffamente aggiungere ciò che penso sia importante nella cache L3 quando potrei lasciare che un esercito di geni determini la cosa ottimale da fare e programmare una CPU per fare quella cosa ottimale. Giusto?
Ziggy,

3

Molte CPU consentono alla cache di essere utilizzata come RAM. Ad esempio, la maggior parte delle CPU x86 più recenti possono configurare determinate aree come writeback con letture senza riempimento tramite MTRR. Questo può essere usato per designare un'area dello spazio degli indirizzi come - efficacemente - cache-as-ram.

Se questo sarebbe utile è un'altra domanda: bloccherebbe il kernel nella RAM, ma allo stesso tempo ridurrebbe la dimensione effettiva della cache. Potrebbero esserci anche effetti collaterali (come disabilitare la memorizzazione nella cache per il resto del sistema) che renderebbero questo molto più lento.


2

"possiamo eseguire linux nella cache L3?"

No , questo non è possibile perché la memoria cache non è indirizzata direttamente / linearmente.
A causa del modo in cui è progettata la memoria cache, il registro Contatore programma CPU (IP) non può puntare a una posizione nella memoria cache.

Una cache della CPU ha la sua "associatività" e questa associatività definisce il modo in cui la "normale" memoria viene "mappata" sulla memoria della cache. Questa funzione della memoria cache è uno dei motivi per cui le memorie cache sono così veloci.


1

"possiamo eseguire linux nella cache L3?"

No, la cache è lì per un lavoro specifico di conservazione dei dati del programma e delle istruzioni pronte per quando il processore ne avrà bisogno. Troverai comunque il sistema operativo nella cache perché viene costantemente utilizzato. Il caricamento di tutti i sistemi operativi nella cache non è efficiente poiché non si utilizzano tutti i percorsi di codice nel kernel contemporaneamente.

"possiamo eseguire Linux in SRAM?"

Certamente potresti usare SRAM con batteria di backup come partizione di avvio, quindi puoi usare il flag incorporato di eseguire sul posto. Ciò potrebbe portare a tempi di avvio più rapidi e operazioni leggermente più veloci. Tuttavia, un fattore importante è la larghezza di banda tra la cache L3 e la posizione del kernel (un'unità di avvio o RAM).

"C'è qualcosa di più veloce? Quanto velocemente possiamo Linux !?"

Generalmente produttori di hardware e sviluppatori di sistemi operativi stanno lavorando per rendere l'elaborazione il più veloce possibile. Comunque la tua domanda è molto generale, vuoi velocizzare i tempi di avvio, ottimizzare l'accesso al file system, velocizzare i calcoli o qualcos'altro. Una volta che hai una domanda più specifica, puoi certamente iniziare a trovare il collo di bottiglia e rimuoverlo. L'unità SRAM accelererebbe sicuramente il processo di avvio. Arrivare a una GUI in 3 secondi sarebbe molto bello da vedere.


1

Ai tempi dei 486 c'erano delle macchine in cui tutta la RAM era SRAM. Questo è quando 8 MB erano molto, ma sembra corrispondere ai tuoi vincoli. Sono sicuro che 8 MB di SRAM sono molto più economici adesso che allora.

Pertanto, è possibile eseguire Linux in SRAM se la macchina è stata creata in questo modo. Non è un teorico; è stato fatto.

Ma non nella cache. La cache è cablata in modo diverso e, cosa più importante, indirizzata in modo diverso. Non puoi affrontarlo allo stesso modo. I blocchi vengono mappati in modo diverso, non come un blocco continuo. E i contenuti non sono necessariamente quelli che vedi sul disco: i nuovi chip Intel eseguono una sorta di "compilazione" Just in time (più di una ricodifica CISC => RISC-micro-op) in cui le micro-op sono le cose che finisce nella cache. In breve, ciò che è nella cache non è il tuo programma, ma una sua visione modificata, quindi non puoi più utilizzarlo come rappresentazione in memoria del tuo programma.

La domanda è perché. A parte "perché posso" non c'è molta ragione per questo. Il sistema Cache offre la maggior parte dei vantaggi in termini di velocità con un costo molto inferiore. E ricorda che il costo non è solo dollari ... SRAM impiega più transistor, il che significa più elettricità.

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.