Persembahan

Apa itu vm.min_free_kbytes dan bagaimana untuk menyesuaikannya?

Apa itu vm.min_free_kbytes dan bagaimana untuk menyesuaikannya?
Apa itu vm.min_free_kbytes sysctl yang dapat disesuaikan untuk kernel linux dan nilai apa yang harus ditetapkan?  Kami akan mengkaji parameter ini dan bagaimana ia mempengaruhi sistem linux yang sedang berjalan dalam artikel ini.  Kami akan menguji kesannya pada cache halaman OS dan mallocs dan apa yang ditunjukkan oleh perintah bebas sistem ketika parameter ini ditetapkan.  Kami akan membuat beberapa tekaan terpuji mengenai nilai-nilai ideal untuk lagu ini dan kami akan menunjukkan cara menetapkan vm.min_free_kbytes secara kekal untuk hidup semula.  Jadi mari kita pergi.

Bagaimana vm.min_free_kbytes berfungsi

Peruntukan memori mungkin diperlukan oleh sistem untuk memastikan fungsi sistem itu sendiri berfungsi dengan baik.  Sekiranya kernel membolehkan semua memori dialokasikan, ia mungkin sukar ketika memerlukan memori untuk operasi biasa agar OS berjalan dengan lancar.  Itulah sebabnya kernel menyediakan vm yang dapat ditala.min_free_kbytes.  Tunable akan memaksa pengurus memori kernel menyimpan sekurang-kurangnya X jumlah memori percuma.   Berikut adalah definisi rasmi dari dokumentasi kernel linux: "Ini digunakan untuk memaksa VM Linux agar jumlah minimum kilobyte bebas.  VM menggunakan nombor ini untuk menghitung nilai tanda air [WMARK_MIN] untuk setiap zon lowmem dalam sistem. Setiap zon lowmem mendapat sejumlah halaman percuma yang disediakan berdasarkan kadarnya. Sebilangan minimum memori diperlukan untuk memenuhi peruntukan PF_MEMALLOC; jika anda menetapkannya ke bawah dari 1024KB, sistem anda akan menjadi rapuh dan terdedah kepada kebuntuan di bawah beban tinggi. Menetapkan ini terlalu tinggi akan OOM mesin anda serta-merta."

Mengesahkan vm.min_free_kbytes Berfungsi

Untuk menguji bahawa tetapan min_free_kbytes berfungsi seperti yang dirancang, saya telah membuat contoh maya linux dengan hanya 3.RAM 75 GB.  Gunakan arahan percuma di bawah ini untuk menganalisis sistem:

# percuma -m

Melihat utiliti memori percuma di atas menggunakan bendera -m untuk mencetak nilai dalam MB.  Jumlah memori adalah 3.5 hingga 3.Memori 75 GB.  Memori 121 MB digunakan, 3.Memori 3 GB percuma, 251 MB digunakan oleh buffer cache.  Dan 3.Memori 3 GB ada.

Sekarang kita akan mengubah nilai vm.min_free_kbytes dan lihat apa kesannya pada memori sistem.  Kami akan menggunakan nilai baru ke sistem fail maya proc untuk mengubah nilai parameter kernel seperti di bawah:

# echo 1500000> / proc / sys / vm / min_free_kbytes
# sysctl vm.min_free_kbytes

Anda dapat melihat bahawa parameter tersebut diubah menjadi 1.Kira-kira 5 GB dan telah berkuat kuasa.  Sekarang mari kita gunakan percuma perintah lagi untuk melihat perubahan yang diiktiraf oleh sistem.

# percuma -m

Memori bebas dan cache penyangga tidak berubah oleh perintah, tetapi jumlah memori yang ditunjukkan sebagai ada telah dikurangkan dari 3327 menjadi 1222 MB.  Yang merupakan perkiraan pengurangan perubahan parameter menjadi 1.Memori percuma 5 GB min.

Sekarang mari kita buat fail data 2GB dan kemudian lihat apa yang membaca fail itu ke dalam buffer cache terhadap nilai.  Berikut adalah cara membuat fail data 2GB dalam 2 baris skrip bash di bawah.  Skrip akan menghasilkan fail rawak 35MB menggunakan perintah dd dan kemudian menyalinnya 70 kali menjadi yang baru fail data pengeluaran:

# dd if = / dev / rawak = / root / d1.kiraan txt = 1000000
# untuk i di 'seq 1 70'; gema $ i; kucing / akar / d1.txt >> / root / data_file; selesai

Mari baca fail dan abaikan kandungannya dengan membaca dan mengalihkan fail ke / dev / null seperti di bawah:

# cat data_file> / dev / null

Ok, apa yang berlaku pada memori sistem kami dengan set manuver ini, mari kita periksa sekarang:

# percuma -m

Menganalisis keputusan di atas.  Kami masih mempunyai 1.Memori percuma 8 GB sehingga kernel telah melindungi sebahagian besar memori seperti yang dikhaskan kerana tetapan min_free_kbytes kami.  Cache penyangga telah menggunakan 1691 MB, yang lebih kecil daripada jumlah keseluruhan fail data kami iaitu 2.3 GB.  Rupanya keseluruhannya fail data tidak dapat disimpan dalam cache kerana kekurangan memori yang tersedia untuk digunakan untuk buffer cache.  Kami dapat mengesahkan bahawa keseluruhan fail tidak disimpan dalam cache tetapi menetapkan percubaan berulang kali untuk membaca fail tersebut. Sekiranya ia disimpan dalam cache, memerlukan sedikit masa untuk membaca fail.  Mari mencubanya.

# time cat data_file> / dev / null
# time cat data_file> / dev / null

Fail yang dibaca mengambil masa hampir 20 saat yang menunjukkan bahawa hampir tidak semuanya disimpan dalam cache.

Sebagai salah satu pengesahan terakhir mari mengurangkan vm.min_free_kbytes untuk membolehkan cache halaman mempunyai lebih banyak ruang untuk beroperasi dan kami dapat menjangka cache berfungsi dan pembacaan fail menjadi lebih pantas.

# echo 67584> / proc / sys / vm / min_free_kbytes
# data cat data_file> / dev / null
# time cat data_file> / dev / null

Dengan memori tambahan yang ada untuk cache fail, masa membaca menurun dari 20 saat sebelum .364 saat dengan semuanya dalam cache.

Saya ingin membuat percubaan lain.  Apa yang berlaku dengan panggilan malloc untuk mengalokasikan memori dari program C dalam menghadapi vm yang sangat tinggi ini.tetapan min_free_kbytes.  Adakah ia akan gagal?  Adakah sistem akan mati?  Tetapkan semula vm pertama.min_free_kbytes menetapkan nilai yang sangat tinggi untuk meneruskan eksperimen kami:

# echo 1500000> / proc / sys / vm / min_free_kbytes

Mari lihat kembali memori percuma kami:

Secara teorinya kita mempunyai 1.9 GB percuma dan 515 MB tersedia.  Mari gunakan program ujian tekanan yang disebut stress-ng untuk menggunakan memori dan melihat di mana kita gagal.  Kami akan menggunakan penguji vm dan cuba memperuntukkan 1 GB memori.  Oleh kerana kami hanya menempah 1.5 GB pada 3.Sistem 75 GB, saya rasa ini mesti berfungsi.

# stress-ng --vm 1 --vm-bytes 1G - waktu keluar 60an
stress-ng: info: [17537] menghantar babi: 1 vm
stress-ng: info: [17537] peruntukkan cache: saiz cache lalai: 46080K
stress-ng: info: [17537] kejayaan yang berjaya diselesaikan pada tahun 60.09s (1 min, 0).09 saat)
# stress-ng --vm 2 --vm-bytes 1G - waktu keluar 60an
# stress-ng --vm 3 --vm-bytes 1G - waktu keluar 60an

Mari cuba lagi dengan lebih ramai pekerja, kita boleh mencuba 1, 2, 3, 4 pekerja dan pada satu ketika ia mesti gagal.  Dalam ujian saya berjaya dengan 1 dan 2 pekerja tetapi gagal dengan 3 pekerja.

Mari tetapkan semula vm.min_free_kbytes untuk bilangan yang rendah dan lihat apakah itu membantu kita menjalankan 3 tekanan memori dengan 1GB masing-masing pada 3.Sistem 75GB.

# echo 67584> / proc / sys / vm / min_free_kbytes
# stress-ng --vm 3 --vm-bytes 1G - waktu keluar 60an

Kali ini berjaya tanpa kesilapan, saya mencubanya dua kali tanpa masalah.  Oleh itu, saya dapat menyimpulkan bahawa terdapat perbezaan tingkah laku kerana mempunyai lebih banyak memori yang tersedia untuk malloc, ketika vm.nilai min_free_kbytes ditetapkan ke nilai yang lebih rendah.

Tetapan lalai untuk vm.min_free_kbytes

Nilai lalai untuk tetapan pada sistem saya ialah 67584 iaitu sekitar 1.8% RAM pada sistem atau 64 MB. Atas sebab keselamatan pada sistem yang terlalu keras, saya cenderung menaikkannya sedikit mungkin hingga 128MB untuk membolehkan memori bebas yang lebih tersimpan, namun untuk penggunaan rata-rata nilai lalai nampaknya cukup masuk akal.  Dokumentasi rasmi memberi amaran tentang menjadikan nilai terlalu tinggi.  Menetapkannya ke 5 atau 10% RAM sistem mungkin bukan penggunaan pengaturan yang dimaksudkan, dan terlalu tinggi.

Menetapkan vm.min_free_kbytes untuk bertahan semula

Untuk memastikan tetapan dapat bertahan reboot dan tidak dipulihkan ke nilai lalai ketika reboot pastikan untuk membuat pengaturan sysctl berterusan dengan meletakkan nilai baru yang diinginkan di / etc / sysctl.fail conf.

Kesimpulannya

Kami telah melihat bahawa vm.kernel linux min_free_kbytes dapat diubah suai dan dapat menyimpan memori pada sistem untuk memastikan sistem lebih stabil terutama semasa penggunaan berat dan peruntukan memori berat.  Tetapan lalai mungkin sedikit terlalu rendah, terutama pada sistem memori tinggi dan harus dipertimbangkan untuk ditingkatkan dengan berhati-hati.  Kami telah melihat bahawa memori yang disimpan oleh lagu ini dapat menghalang cache OS menggunakan semua memori dan juga menghalang beberapa operasi malloc menggunakan semua memori juga.

Tiru klik Tetikus dengan melayang menggunakan Mouse Tanpa Klik di Windows 10
Menggunakan tetikus atau papan kekunci dalam keadaan salah penggunaan berlebihan boleh menyebabkan banyak masalah kesihatan, termasuk ketegangan, sind...
Tambahkan isyarat Tetikus ke Windows 10 menggunakan alat percuma ini
Dalam beberapa tahun kebelakangan ini komputer dan sistem operasi telah banyak berkembang. Ada saat ketika pengguna harus menggunakan perintah untuk m...
Mengawal & menguruskan pergerakan tetikus antara beberapa monitor di Windows 10
Pengurus Tetikus Paparan Dwi membolehkan anda mengawal & mengkonfigurasi pergerakan tetikus antara beberapa monitor, dengan memperlahankan pergerakann...