Perché il limite teorico di RAM per RHEL 6 128 TB e come viene determinato?


8

Sto studiando per RHCSA e sono confuso da una dichiarazione che mi sono imbattuto in alcuni materiali di formazione:

Non esiste una RAM massima pratica, poiché teoricamente è possibile eseguire 128 TB di RAM su RHEL 6. Ma questa è solo teoria. La RAM massima supportata da Red Hat su RHEL 6 è 16 GB su sistemi a 32 bit e 2 TB su sistemi a 64 bit.

Qualcuno può spiegare da dove proviene il limite teorico da 128 TB? Sono confuso su come l'autore sappia che esiste il limite teorico se RHEL 6 definisce chiaramente altri limiti massimi. Questo è solo il factoring nei limiti teorici dell'architettura a 64 bit? O c'è qualche altra ragione qui?


3
Ecco la risposta Puoi riscriverlo e inserirlo come risposta
dchirikov,

Risposte:


7

Dalla documentazione del kernel, in Documentation/x86/x86_64/mm.txt:

Virtual memory map with 4 level page tables:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm

2 47 byte = 128 TB


2 ^ 48 = 256 TiB ;-)
Huygens

Risposta molto concisa. Per maggiori informazioni vedi lwn.net/Articles/117783 35 bit per l'indice della tabella delle pagine e 4096 byte (2 ^ 12) è la dimensione di una pagina. Dare 2 ^ (35) * 2 ^ (12) = 2 ^ 47 = 128 TB
pveentjer il

4

Risposta breve

Ogni processo Linux può indirizzare al massimo 128 TB di memoria virtuale . Tuttavia, questo è più di quanto il kernel Linux possa gestire fisicamente . Quindi, questo limite è teorico.

Probabilmente è stato scelto arbitrariamente, sulla base di un presunto scenario di utilizzo "peggiore".

Risposta elaborata

In realtà non puoi usare più RAM di quanto il tuo hardware consenta (48 bit = 256 TB è comune in questi giorni), e quindi sarai limitato dalla quantità di memoria fisica che il kernel Linux può gestire.

Ad esempio, sull'architettura Intel x86 a 64 bit , Linux non può usare più di 64 TB di memoria fisica (dalla versione 2.6.30 , ma era 16 TB poco prima). Si noti che RHEL 6 utilizza un kernel 2.6.32 .

Sull'architettura s390 a 64 bit , si applica lo stesso limite (dal 2.6.28 ). Se si utilizza a 32 bit, tuttavia, il limite è di 4 GB , ma utilizzando uno strano trucco chiamato PAE , è possibile arrivare fino a 64 GB (spesso utilizzato su x86).

Penso che altre architetture a 64 bit abbiano limiti inferiori.

Vedi la tabella dei limiti di Red Hat per maggiori informazioni (grazie Huygens ).


1
Il limite di 48 bit su x86-64 è decisamente un limite hardware a questo punto. en.wikipedia.org/wiki/X86-64#Virtual_address_space_details
Mat

Certo, ma questo dipende dall'implementazione e può cambiare in futuro. La domanda riguarda un limite teorico . Ho aggiornato la mia risposta però.
Totor

2
Questo dipende dall'implementazione dell'hardware. L'architettura AMD e Intel x86_64 di oggi supporta solo 48 bit di spazio degli indirizzi. Questa architettura potrebbe evolversi in futuro.
Huygens,

1

Non si devono mescolare memoria virtuale e memoria volatile fisica. Il primo è specifico dell'architettura della CPU e verrà mappato su memoria volatile e non volatile. Quest'ultimo, noto anche come RAM, dovrebbe essere indipendente dall'architettura della CPU dal punto di vista del kernel.

L'implementazione AMD e Intel x86_64 di oggi supporta solo 48 bit di memoria virtuale indirizzabile. Ciò significa che il kernel può indirizzare 2 ^ 48 = 256 TiB per VM di processo.
Il kernel Linux su architettura x86_64 ha diviso lo spazio VM indirizzabile in 2, 128 TiB per lo spazio utente e 128 TiB per lo spazio del kernel. Quindi un processo può teoricamente affrontare un totale di 128 TiB di memoria virtuale.

Il massimo della memoria fisica volatile che il kernel può gestire è un aspetto diverso, ma non conosco queste informazioni.

Per quanto riguarda la dichiarazione dell'autore RHCSA

L'autore dell'affermazione "Non esiste una RAM massima pratica, poiché in teoria è possibile eseguire 128 TB di RAM su RHEL 6." sta usando una terminologia sbagliata o incompresa. Ecco la tabella dal sito web di Red Hat che riassume le capacità di RHEL 3, 4, 5 e 6 . E dichiarano chiaramente "Spazio di indirizzo virtuale per processo x86_64 massimo [...] 128TB [per RHEL 6]"

La stessa pagina afferma che RHEL 6 supporta un massimo di 2 TB / 64 TB di RAM (memoria fisica volatile). Immagino significhi che è certificato per una RAM massima di 2 TB e teoricamente potrebbe arrivare a 64 TB. SLES è molto più chiaro in questo senso .


Dici che un processo può indirizzare 128 TB, ma l'intero sistema (diversi processi) potrebbe avere e usarne di più, quindi la frase "potresti eseguire 128 TB di RAM su RHEL 6" mi sembra imbarazzante, soprattutto perché il funzionario Il kernel Linux non può ...
Totor

Potresti fornire il puntatore a dove hai trovato la frase "potresti eseguire 128 TB di RAM su RHEL 6"? Dubito che provenga da Red Hat! L'autore confonde la memoria fisica e la memoria virtuale.
Huygens,

@Totor Ho appena aggiornato la mia risposta con un link al sito Web di Red Hat che non conferma la dichiarazione RHCSA.
Huygens,

@Totor: sul kernel Linux, HIGHMEM non è stato portato su 64-bit. Senza HIGHMEM, tutta la RAM è mappata nello spazio degli indirizzi del kernel, che è di 128 TB, da cui il limite.
Yuhong Bao,

0

L'altra ragione teorica è la mancanza di esperienza nell'implementazione.

È comune per i programmatori dimensionare le variabili molto prima di ciò che l'hardware è in grado di fare, in modo che il kernel non abbia bisogno di una rischiosa programmazione rip-and-sostituisci poiché l'hardware di quella capacità appare un decennio o più dopo.

Tuttavia, la dimensione variabile non è l'unico limite. Le strutture dati e i loro algoritmi impongono i propri limiti. Immagina per un momento di fare una passeggiata lineare di una struttura di dati che descriva ogni pagina 4KB di quel 128 TB. Ci sono alcune risposte ovvie: non usare pagine 4KB, non usare una struttura di dati lineare, non accedere spesso a tali strutture di dati, scaricare il più possibile nell'hardware. Ma ci sono più sottili strutture dati + limiti dell'algoritmo che non conosceremo fino a quando non li incontreremo.

Sappiamo che se dovessimo scoprire magicamente un PC da 128 TB domani e provare ad avviare Linux su di esso che funzionerà terribilmente, e forse così terribilmente da non avviarsi. Ma riparare gli algoritmi è banale, riparare le strutture dei dati è un po 'di lavoro ma ancora molto meno lavoro che fissare le dimensioni di una variabile ampiamente compresa. Quindi vedremo cambiamenti di quella natura all'aumentare della dimensione della memoria.

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.