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?
rhel
memory
linux-kernel
ram
virtual-memory
Mike B
sumber
sumber
Jawaban:
Dari dokumentasi kernel, di
Documentation/x86/x86_64/mm.txt
:2 47 byte = 128TiB
sumber
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 ).
sumber
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 .
sumber
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.
sumber