Mengapa batas teoritis RAM untuk RHEL 6 128 TB dan bagaimana ini ditentukan?

8

Saya belajar untuk RHCSA dan saya bingung dengan pernyataan yang saya temui dalam beberapa materi pelatihan:

Tidak ada RAM maksimum yang praktis, karena secara teoritis, Anda bisa menjalankan 128 TB RAM pada RHEL 6. Tapi itu hanya teori. RAM maksimum yang didukung oleh Red Hat pada RHEL 6 adalah 16 GB pada sistem 32-bit dan 2 TB pada sistem 64-bit.

Bisakah seseorang tolong jelaskan dari mana batas teoretis 128 TB itu berasal? Saya bingung tentang bagaimana penulis tahu batas teoritis ada jika RHEL 6 dengan jelas mendefinisikan batas maksimum lainnya. Apakah ini hanya faktor dalam batas teoritis arsitektur 64-bit? Atau ada alasan lain di sini?

Mike B
sumber
3
Inilah jawabannya. Anda dapat menulis ulang dan menyisipkan sebagai jawaban
dchirikov

Jawaban:

7

Dari dokumentasi kernel, di 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 = 128TiB

Ignacio Vazquez-Abrams
sumber
2 ^ 48 = 256 TiB ;-)
Huygens
Jawaban yang sangat singkat. Untuk info lebih lanjut lihat lwn.net/Articles/117783 35 bit untuk indeks tabel halaman dan 4096 byte (2 ^ 12) adalah ukuran halaman. Memberi 2 ^ (35) * 2 ^ (12) = 2 ^ 47 = 128 TB
pveentjer
4

Jawaban singkat

Setiap proses Linux dapat mengatasi paling banyak 128 TB memori virtual . Namun, ini lebih dari yang bisa ditangani oleh kernel Linux secara fisik . Oleh karena itu, batas ini bersifat teoritis.

Itu mungkin telah dipilih secara sewenang-wenang, berdasarkan pada skenario penggunaan "kasus terburuk" yang dapat diduga.

Jawaban terinci

Anda sebenarnya tidak dapat menggunakan lebih banyak RAM daripada yang diperbolehkan oleh perangkat keras Anda (48 bit = 256 TB sudah umum akhir-akhir ini), dan kemudian Anda akan dibatasi oleh jumlah memori fisik yang dapat ditangani oleh kernel Linux.

Misalnya, pada arsitektur Intel x86 64-bit , Linux tidak dapat menggunakan lebih dari 64 TB memori fisik (sejak versi 2.6.30 , tetapi sebelumnya 16 TB ). Perhatikan bahwa RHEL 6 menggunakan kernel 2.6.32 .

Pada arsitektur 64-bit s390 , batas yang sama berlaku (sejak 2.6.28 ). Namun, jika Anda menggunakan 32-bit, batasnya adalah 4 GB , tetapi menggunakan trik aneh yang disebut PAE , Anda bisa mencapai 64 GB (sering digunakan pada x86).

Saya pikir arsitektur 64-bit lainnya memiliki batas yang lebih rendah.

Lihat tabel batas Red Hat untuk informasi lebih lanjut (terima kasih Huygens ).

Totor
sumber
1
Batas 48-bit pada x86-64 sangat banyak batas perangkat keras pada saat ini. en.wikipedia.org/wiki/X86-64#Virtual_address_space_details
Mat
Tentu, tetapi ini tergantung implementasi dan dapat berubah di masa depan. Pertanyaannya adalah tentang batasan teoretis . Saya memperbarui jawaban saya.
Totor
2
Ini tergantung pada implementasi perangkat keras. Arsitektur AMD dan Intel x86_64 saat ini hanya mendukung ruang alamat 48 bit. Arsitektur ini bisa berkembang di masa depan.
Huygens
1

Seseorang seharusnya tidak mencampur memori virtual dan memori volatile fisik. Yang pertama adalah arsitektur CPU spesifik dan akan dipetakan ke memori volatile dan non-volatile. Yang terakhir, alias RAM, harus independen dari arsitektur CPU dari sudut pandang kernel.

Implementasi AMD dan Intel x86_64 saat ini hanya mendukung 48 bit memori virtual yang dapat dialamatkan. Yang berarti bahwa kernel dapat mengatasi 2 ^ 48 = 256 TiB per proses VM.
Kernel Linux pada arsitektur x86_64 membagi ruang VM yang dapat dialamatkan menjadi 2, 128 TiB untuk ruang pengguna dan 128 TiB untuk ruang kernel. Jadi suatu proses secara teoritis dapat mengatasi total 128 TiB memori virtual.

Maksimum volatile memory fisik yang dapat ditangani oleh kernel adalah aspek yang berbeda, tetapi saya tidak tahu informasi ini.

Mengenai pernyataan penulis RHCSA

Penulis pernyataan "Tidak ada RAM maksimum yang praktis, karena secara teoritis, Anda dapat menjalankan 128 TB RAM pada RHEL 6." menggunakan terminologi yang salah atau disalahpahami. Berikut adalah tabel dari situs web Red Hat yang merangkum kemampuan RHEL 3, 4, 5 dan 6 . Dan mereka dengan jelas menyatakan "Maksimal x86_64 per-proses ruang alamat virtual [...] 128TB [untuk RHEL 6]"

Halaman yang sama menyatakan bahwa RHEL 6 mendukung maksimum 2TB / 64TB RAM (memori volatile fisik). Saya kira itu berarti sudah disertifikasi untuk RAM maks 2TB, dan secara teori bisa naik hingga 64TB. SLES jauh lebih jelas dalam hal ini .

Huygens
sumber
Anda mengatakan suatu proses dapat mengatasi 128 TB, tetapi seluruh sistem (beberapa proses) mungkin memiliki dan menggunakan lebih banyak, sehingga kalimat "Anda dapat menjalankan 128 TB RAM pada RHEL 6" tampaknya canggung bagi saya, terutama mengingat fakta bahwa pejabat Kernel Linux tidak bisa ...
Totor
Bisakah Anda memberikan pointer ke tempat Anda menemukan pernyataan "Anda bisa menjalankan 128 TB RAM pada RHEL 6"? Saya ragu itu dari Red Hat diri mereka! Penulis membingungkan memori fisik dan memori virtual.
Huygens
@ Motor Saya baru saja memperbarui jawaban saya dengan tautan ke situs web Red Hat yang tidak mengkonfirmasi pernyataan RHCSA.
Huygens
@ Motor: Di kernel Linux, HIGHMEM belum porting ke 64-bit. Tanpa HIGHMEM, semua RAM dipetakan ke dalam ruang alamat kernel, yaitu 128 TB, karenanya batasnya.
Yuhong Bao
0

Alasan lain secara teoritis adalah kurangnya pengalaman implementasi.

Merupakan hal yang umum bagi pemrogram untuk mengukur ukuran jauh di muka dari apa yang mampu dilakukan oleh perangkat keras, sehingga kernel tidak memerlukan pemrograman rip-and-replace yang berisiko karena perangkat keras dengan kemampuan itu muncul satu dekade atau lebih kemudian.

Namun ukuran variabel bukan satu-satunya batas. Struktur data dan algoritmanya menentukan batasnya sendiri. Bayangkan sesaat melakukan langkah linear dari struktur data yang menggambarkan setiap halaman 4KB dari 128TB itu. Ada beberapa respons yang jelas: jangan gunakan halaman 4KB, jangan gunakan struktur data linier, jangan sering-sering mengakses struktur data itu, turunkan sebanyak mungkin ke perangkat keras. Tetapi ada struktur data + batasan algoritma yang lebih halus yang kita tidak akan tahu sampai kita menemukan mereka.

Kita tahu bahwa jika kita secara ajaib menemukan PC 128TB besok dan mencoba mem-boot Linux di atasnya, itu akan berkinerja sangat buruk, dan mungkin sangat tidak bisa dimulai. Tetapi memperbaiki algoritme itu sepele, memperbaiki struktur data adalah pekerjaan, tetapi masih kurang berhasil daripada memperbaiki ukuran variabel yang dipahami secara luas. Jadi kita akan melihat perubahan sifat itu saat ukuran memori bertambah.

vk5tu
sumber