Bagaimana saya bisa menambah ruang swap maksimum yang diizinkan?

8

Ketika saya mencoba melakukan perhitungan yang perlu mengalokasikan dan menggunakan memori 128 GB (ini adalah program baris perintah yang ditulis dalam C), kernel membunuh proses saya dengan prasangka ekstrem. Entri log konsol ini adalah contoh dari satu contoh:

9/25/15 7: 08: 40.000 PM kernel [0]: swap rendah: membunuh pid 6202 (huffgrp)

Perhitungan berfungsi dengan baik dan dalam jumlah waktu yang wajar ketika mengalokasikan dan menggunakan memori 64 GB. Mesin saya memiliki 32 GB RAM dan ruang beaucoup pada hard drive. Saya juga mencoba ini di komputer lain dengan 8 GB RAM, di mana perhitungan 64 GB berjalan dengan baik juga, mengambil lebih lama tentu saja, tetapi perhitungan 128 GB terbunuh oleh kernel dengan cara yang sama. Pada keduanya saya menjalankan Yosemite 10.10.5.

Omong-omong, malloc()jangan pernah mengembalikan kesalahan, tidak peduli berapa banyak ruang yang saya minta. Kernel hanya akan mematikan proses setelah terlalu banyak memori yang benar-benar digunakan oleh proses, menghasilkan banyak pertukaran ke hard drive.

Jadi tampaknya ada batas ruang swap rahasia di suatu tempat antara 64 GB dan 128 GB.

Pertanyaan saya adalah: bagaimana cara mengkonfigurasi ulang kernel untuk mengizinkan lebih banyak ruang swap? Saya menemukan file yang tampak menjanjikan /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist, tetapi saya tidak melihat nomor rahasia di sana. Halaman manual untuk dynamic_pagermengatakan bahwa semua yang dilakukannya adalah mengatur nama dan lokasi file swap. Ada versi yang lebih lama dari halaman manual yang sama yang mendokumentasikan -Sopsi untuk mengatur ukuran file swap yang dibuat. Saya mencobanya, meminta 160 GB swapfiles, tetapi tidak berpengaruh. File swap masing-masing masih 1 GB, dan prosesnya masih dimatikan oleh kernel.

Mark Adler
sumber
1
Tolong jangan lintas pos ( unix.stackexchange.com/questions/232362/… ). Jika menurut Anda situs SE lain lebih cocok untuk mendapatkan jawaban, kami dapat dengan mudah membantu Anda untuk memigrasikannya.
nohillside
4
Situs yang paling cocok untuk mendapatkan jawaban adalah yang saya dapatkan jawabannya. Namun tidak ada cara untuk mengetahui situs mana yang tanpa mencoba. Jika saya ingin jawaban segera, mengapa saya harus dibatasi hanya ikan di satu kolam, dan kemudian menunggu waktu yang tidak pasti untuk menyimpulkan bahwa tidak akan ada gigitan sebelum mencoba kolam lain? Pertanyaan ini cocok untuk kedua situs. Kalau dipikir-pikir, jawabannya akan berguna di kedua situs juga. Jadi mengapa jawaban akhirnya tidak boleh digandakan di kedua situs? Diagram Venn tumpang tindih antara situs-situs ini cukup besar.
Mark Adler

Jawaban:

3

Meskipun saya tidak dapat menemukan dokumentasi yang lebih baru, "Internal Mac OS X Singh: Pendekatan Sistem A" Singh menyebutkan dua batas tidak jelas di / sbin / dynamic_pager (p. 919 f.):

  • Ukuran file swap minimum dan maksimum absolut adalah 64MB dan 1GB.

  • Ukuran file swap maksimum tidak boleh lebih dari 12,5% dari ruang kosong yang tersedia pada volume yang berisi file swap. Selain itu, ukuran file swap maksimum tidak boleh lebih besar dari jumlah memori fisik pada sistem.

  • Paling banyak, delapan file swap dapat dibuat.

[...]

Walaupun buku ini sedikit bertanggal dan jumlahnya mungkin telah berubah, aturan 12,5% terdengar sangat mencurigakan bagi saya.

Singh menyiratkan bahwa itu adalah batasan kode keras dalam biner dan dengan demikian file properti yang Anda temukan kemungkinan tidak akan digunakan. Perhatikan juga bahwa sistem swap membuat beberapa file swap yang berbeda, tetapi hanya hingga delapan.

/ sbin / dynamic_pager didokumentasikan, seperti yang Anda catat, sebagai halaman manual yang sangat sederhana , dan ada pernyataan yang bertentangan dalam dokumentasi pengembang saat ini pada Memori Virtual , yang menyatakan bahwa

Untuk memberikan proses akses ke seluruh ruang alamat 4 gigabyte atau 18 exabyte, OS X menggunakan hard disk untuk menyimpan data yang saat ini tidak digunakan. Ketika memori penuh, bagian-bagian memori yang tidak digunakan ditulis ke disk untuk memberikan ruang bagi data yang diperlukan sekarang. Bagian dari disk yang menyimpan data yang tidak digunakan dikenal sebagai backing store karena menyediakan penyimpanan cadangan untuk memori utama.

[...]

Catatan: Tidak seperti kebanyakan sistem operasi berbasis UNIX, OS X tidak menggunakan partisi disk yang telah dialokasikan sebelumnya untuk backing store. Sebagai gantinya, ia menggunakan semua ruang yang tersedia pada partisi boot mesin .

(penekanan milikku)

Oleh karena itu, pada sekitar titik ini, saya akan mencari solusi pragmatis. Mungkin coba tambah ruang disk Anda lebih jauh untuk memeriksa korelasi dalam ukuran swap yang dapat diperoleh, dengan demikian memeriksa batasan 12,5% yang disebutkan di atas.

jstarek
sumber
Terima kasih atas penelitiannya. +1 untuk itu. Tidak melakukan apa-apa, saya bisa mendapatkan setidaknya 64 GB ruang swap, sehingga batas 1 GB per kali swapfile delapan file swap harus kedaluwarsa. Saya mencoba ini pada mesin dengan 2,2 TB gratis di boot drive dengan hasil yang sama, jadi ruang kosong bukan faktor pembatas. Saya memang mencoba solusi di mana saya membuat file memori virtual saya sendiri menggunakan mmap(). Sayangnya saya menemukan bahwa itu tunduk pada batasan yang sama. Yang dalam retrospeksi seharusnya tidak mengejutkan, karena malloc()diimplementasikan menggunakan mmap().
Mark Adler