Saya baru saja baca di sini :
- hingga 128TiB ruang alamat virtual per proses (bukan 2GiB)
- Dukungan memori fisik 64TiB, bukan 4GiB (atau 64GiB dengan ekstensi PAE)
Mengapa demikian? Maksud saya, dukungan memori fisik dibatasi oleh kernel atau oleh perangkat keras saat ini?
Mengapa Anda membutuhkan ruang memori virtual dua kali lipat daripada memori fisik yang sebenarnya bisa Anda tangani?
debian
linux-kernel
virtual-memory
gsi-frank
sumber
sumber
Jawaban:
Batas-batas itu tidak datang dari Debian atau dari Linux, mereka datang dari perangkat keras. Arsitektur yang berbeda (prosesor dan bus memori) memiliki keterbatasan yang berbeda.
Pada prosesor PC x86-64 saat ini, MMU memungkinkan 48 bit ruang alamat virtual . Itu berarti bahwa ruang alamat dibatasi hingga 256TB. Dengan satu bit untuk membedakan alamat kernel dari alamat userland, yang meninggalkan 128TB untuk ruang alamat proses.
Pada prosesor x86-64 saat ini, alamat fisik dapat menggunakan hingga 48 bit , yang berarti Anda dapat memiliki hingga 256TB. Batas semakin meningkat sejak arsitektur amd64 diperkenalkan (dari 40 bit jika saya ingat dengan benar). Setiap bit ruang alamat membutuhkan logika pengkabelan dan penguraian ulang (yang membuat prosesor lebih mahal, lebih lambat dan lebih panas), sehingga produsen perangkat keras memiliki insentif untuk mempertahankan ukurannya.
Linux hanya memperbolehkan alamat fisik naik ke 2 ^ 46 (jadi Anda hanya bisa memiliki hingga 64TB) karena itu memungkinkan memori fisik untuk sepenuhnya dipetakan dalam ruang kernel. Ingat bahwa ada 48 bit ruang alamat; satu bit untuk kernel / pengguna meninggalkan 47 bit untuk ruang alamat kernel. Separuh dari itu paling banyak menangani memori fisik secara langsung, dan setengahnya lagi memungkinkan kernel untuk memetakan apa pun yang dibutuhkan. (Linux dapat mengatasi memori fisik yang tidak dapat dipetakan secara penuh pada saat yang sama, tetapi itu memperkenalkan kompleksitas tambahan, jadi itu hanya dilakukan pada platform yang membutuhkannya, seperti x86-32 dengan PAE dan armv7 dengan LPAE.)
Ini berguna untuk memori virtual menjadi lebih besar dari memori fisik karena beberapa alasan:
sumber
Saya tidak tahu mengapa, tetapi saya dapat memikirkan tujuh alasan mengapa akan bermanfaat untuk mendukung ruang alamat dua kali lebih banyak daripada memori fisik.
sumber
Itu adalah batasan perangkat keras. Perangkat keras x86_64 / amd64 saat ini memungkinkan alamat virtual 48-bit dan berbagai ukuran (tergantung pada implementasinya — mis. Workstation saya di sini hanya mendukung 36 bit) alamat fisik. Kernel Linux membagi ruang alamat virtual menjadi dua (menggunakan setengah untuk kernel, setengah untuk userspace — seperti halnya pada x86).
Jadi, Anda mendapatkan:
2⁴⁸ byte ÷ 2 = 2⁴⁷ byte = 128 TiB
Ukuran alamat fisik seringkali lebih kecil karena sebenarnya fisik. Ini membutuhkan pin / pembalut, transistor, koneksi, dll., Pada / di CPU dan melacak garis di papan tulis. Mungkin juga sama di chipset. Tidak masuk akal untuk mendukung jumlah ram yang tidak dapat dibayangkan selama masa pakai inti prosesor atau soket — semua hal itu membutuhkan biaya. (Bahkan dengan 32 slot DIMM dan 64MMB DIMM di masing-masing, Anda masih hanya pada 2TiB. Bahkan jika kapasitas DIMM berlipat ganda setiap tahun, kami berjarak 5 tahun dari 64TiB.
Seperti yang ditunjukkan oleh Peter Cordes , orang-orang sekarang melampirkan penyimpanan non-volatil seperti 3D XPoint ke bus memori, yang membuat kehabisan ruang alamat dapat dilakukan. Prosesor yang lebih baru telah memperluas ruang alamat fisik menjadi 48 bit; mungkin saja wiki Debian belum diperbarui.
sumber
clflush
danclflushopt
instruksinya.