Memori virtual dan biaya komit

1

Saya telah membaca banyak tentang biaya komit dan masih ada sesuatu yang menggangguku. Di mac saya (dan mungkin juga di linux), apa hubungan antara ukuran VM dan dan memori Commit (windows). Saya pikir saya benar-benar mengerti komit setelah beberapa pengujian, tetapi di windows sepertinya tidak ada jumlah memori virtual yang pernah melebihi ruang swap + ram. DI OSX (dan linux) ukuran VM tampaknya hampir melebihi ukuran harddisk saya! Saya menduga itu termasuk memori bersama lebih dari sekali, atau itu termasuk dialokasikan tetapi tidak tersentuh atau ditulis ke memori. Katakanlah saya membuat malloc (2gb) (jelas tidak seperti ini), berbeda dari benar-benar menulis ke seluruh 2gb.

Jadi ini membawa saya ke pertanyaan saya, apa sebenarnya ukuran ukuran VM di OSX dan linux. Apakah ini total dari semua panggilan malloc misalnya (atau total VM yang mungkin misalnya, termasuk praktis 4gb untuk setiap proses pada mesin 64 bit), dan bagaimana hal ini dibandingkan dengan Commit (batas, puncak, penggunaan) pada windows? Apakah windows tidak membiarkan Anda mengalokasikan lebih dari batas swap + ram Anda, seperti yang dilakukan OSX dan linux dan mengapa?

Pada gambar di bawah ini Anda dapat melihat bahwa di windows swap + ram sama dengan commit (2gb). Di OSX ukuran VM saya lebih dari 200GB pada harddrive sekitar 200GB.

Windows task manager menunjukkan max 2gb commit (saya pikir)

panel kontrol windows menampilkan 1024mb 1 (gb) swap ditambah ram 1 (gb)

manajer proses osx menampilkan ukuran VM lebih dari 200 GB

rubixibuc
sumber

Jawaban:

2

Ukuran VM adalah jumlah total ruang alamat yang digunakan oleh proses. Tidak ada sistem operasi yang memungkinkan Anda untuk melebihi RAM + swap yang tersedia dengan VM yang didukung , tetapi Anda bisa dengan VM yang tidak dicadangkan. Pada dasarnya, ukuran VM (terutama pada sistem operasi 64-bit) adalah pengukuran yang tidak berarti. Memori virtual yang tidak dapat dikembalikan (memori virtual yang tidak, dan tidak bisa, memerlukan RAM atau swap) pada dasarnya gratis, jadi tidak ada alasan untuk peduli berapa banyak yang digunakan.

Pada sistem operasi 64-bit, Anda dapat membuka file read-only 2GB dan memetakan seluruh file ke dalam ruang alamat proses Anda. Itu "mengkonsumsi" 2GB VM, tetapi sebenarnya tidak membutuhkan sumber daya yang signifikan sama sekali. Dan karena ini adalah pemetaan read-only, itu tidak pernah membutuhkan swap.

Commit charge mengukur memori virtual yang didukung, yaitu memori virtual yang pada akhirnya dapat mengakibatkan konsumsi memori fisik atau ruang paging / swap. Sistem operasi tidak tahu berapa banyak memori ini pada akhirnya akan membutuhkan dukungan, sehingga umumnya tidak akan memungkinkan lebih dari RAM + swap dialokasikan. (Sejauh yang saya tahu, baik Windows maupun OSX tidak mengizinkan terlalu banyak komitmen dari memori virtual yang didukung. Linux melakukannya.)

David Schwartz
sumber
Adapun ukuran VM di OSX, apakah ini hanya jumlah memori virtual yang dicadangkan (seperti memori yang dicadangkan di windows) atau apakah total dari semua ruang memori logis dialokasikan untuk semua proses? Suka proses * sejauh mana vm dipetakan per proses? Saya menerima perbedaan halus antara memori yang disediakan (virtual) dan memori yang didukung file halaman. Apa perbedaan pastinya?
rubixibuc
Ada perbedaan antara memori virtual dan memori halaman-file yang didukung. Perbedaannya adalah bahwa ketika ini hadir sebagai memori fisik, memori yang didukung file halaman mungkin perlu ditulis ke file halaman sebelum halaman dapat dibuang. Sebagai contoh, pemetaan read-only dari file adalah memori virtual, tetapi tidak pernah perlu ditulis ke file halaman (karena sudah ada di disk sebagai file biasa). Di sisi lain, mallocmemori ed reguler , jika dimodifikasi, perlu ditulis ke file halaman sebelum halaman dapat diusir dari memori fisik.
David Schwartz
Jadi otak kecil saya yang mengerti linux mendapatkannya, "melakukan charge" == "swap digunakan"?
Stu
@Stu Tidak. Biaya komit lebih seperti RAM plus swap yang akan dipesan jika overcommit dinonaktifkan. Atau, dengan kata lain, jumlah maksimum RAM + swap yang dapat diperlukan tanpa OS memiliki kesempatan untuk mengatakan "tidak, Anda tidak dapat memiliki lebih banyak". Ini seperti saldo dalam akun, minus semua cek tertulis tetapi belum disetor.
David Schwartz