Di mana sisa memori vm.overcommit_ratio pergi?

10

Jika saya menonaktifkan overcommit memori dengan mengatur vm.overcommit_memoryke 2, secara default sistem akan memungkinkan untuk mengalokasikan memori ke dimensi swap + 50% dari memori fisik, seperti yang dijelaskan di sini .

Saya dapat mengubah rasio dengan memodifikasi vm.overcommit_ratioparameter. Katakanlah saya mengaturnya ke 80%, jadi 80% dari memori fisik dapat digunakan.

Pertanyaan saya adalah:

  • apa yang akan dilakukan sistem dengan 20% sisanya?
  • mengapa parameter ini diperlukan di tempat pertama?
  • mengapa saya tidak selalu mengaturnya ke 100%?
Dan Tumaykin
sumber

Jawaban:

6

Apa yang akan dilakukan sistem dengan 20% sisanya?

Kernel akan menggunakan memori fisik yang tersisa untuk keperluannya sendiri (struktur internal, tabel, buffer, cache, apa pun). Pengaturan overcommitment memori menangani reservasi memori virtual aplikasi userland, kernel tidak menggunakan memori virtual tetapi fisik.

Mengapa parameter ini diperlukan di tempat pertama?

The overcommit_ratioparameter adalah pilihan implementasi yang dirancang untuk mencegah aplikasi untuk cadangan memori lebih virtual dari apa yang cukup akan tersedia bagi mereka di masa depan, yaitu ketika mereka benar-benar mengakses memori (atau setidaknya mencoba untuk).

Pengaturan overcommit_ratioke 50% telah dianggap sebagai nilai default yang wajar oleh pengembang kernel Linux. Ini mengasumsikan kernel tidak perlu menggunakan lebih dari 50% RAM fisik. Jarak tempuh Anda mungkin beragam, alasannya adalah merdu.

Mengapa saya tidak selalu mengaturnya ke 100%?

Menyetelnya menjadi 100% (atau nilai "terlalu tinggi") tidak dapat diandalkan menonaktifkan komitmen berlebihan karena Anda tidak dapat mengasumsikan kernel akan menggunakan 0% (atau terlalu sedikit) RAM.

Ini tidak akan mencegah aplikasi crash karena kernel mungkin akan melakukan preempt pula semua memori fisik yang diminta.

Jlliagre
sumber
Jika kernel dapat mengambil semua memori yang dibutuhkan, apa gunanya mengekspos parameter ini (atau bahkan membuatnya)?
Dan Tumaykin
Apakah ada dokumen resmi di mana parameter tersebut dijelaskan secara rinci? Selain kernel.org/doc/Documentation/vm/overcommit-accounting - referensi ke memori kernel tidak ada di sana.
Dan Tumaykin
1
Saya belum menemukan dokumentasi yang menjelaskan dengan cukup detail apa yang tepatnya diperhitungkan ketika merujuk ke "total address space commit". Kenyataannya dokumen yang Anda berikan tautannya menyatakan "dalam sebagian besar situasi ini berarti suatu proses tidak akan terbunuh ..." adalah cukup untuk mengonfirmasi bahwa sebagian memori dapat digunakan di tempat lain, dan konsumen yang jelas untuk memori ini adalah kernel.
jlliagre
2

Mengatur rasio hingga 100% tidak akan menyediakan ruang untuk halaman yang didukung file, atau alokasi dalam-kernel seperti kode kernel, buffer jaringan, dll.

Struktur dalam-kernel akan dialokasikan tanpa mempedulikan, menyebabkan overcommit. Biasanya terbatas secara individual (misalnya ada pengaturan untuk buffer jaringan). Saya tidak berpikir ada batas keseluruhan 50%, meskipun batas keseluruhan adalah sesuatu yang telah dikerjakan untuk tujuan hosting wadah.

Halaman yang didukung file adalah tempat Anda biasanya menjalankan kode userspace, jadi Anda perlu ruang untuk itu juga.

sourcejedi
sumber