Kernel Linux menukar sebagian besar halaman dari memori ketika saya menjalankan aplikasi yang menggunakan sebagian besar memori fisik 16GB. Setelah aplikasi selesai, setiap tindakan (mengetik perintah, berpindah ruang kerja, membuka halaman web baru, dll.) Membutuhkan waktu sangat lama untuk diselesaikan karena halaman yang relevan terlebih dahulu harus dibaca kembali dari swap.
Apakah ada cara untuk memberitahu kernel Linux untuk menyalin halaman dari swap kembali ke memori fisik tanpa menyentuh secara manual (dan menunggu) setiap aplikasi? Saya menjalankan banyak aplikasi sehingga menunggu selalu menyakitkan.
Saya sering menggunakan swapoff -a && swapon -a
untuk membuat sistem responsif lagi, tetapi ini membersihkan halaman dari swap, jadi mereka perlu ditulis lagi saat berikutnya saya menjalankan skrip.
Apakah ada antarmuka kernel, mungkin menggunakan sysfs, untuk menginstruksikan kernel untuk membaca semua halaman dari swap?
Sunting: Saya memang mencari cara untuk membuat semua swap swapcached. (Terima kasih derobert!)
[PS serverfault.com/questions/153946/… dan serverfault.com/questions/100448/... adalah topik terkait tetapi tidak menjawab pertanyaan tentang bagaimana membuat kernel Linux untuk menyalin halaman dari menukar kembali ke dalam memori tanpa menghapus swap.]
Jawaban:
Berdasarkan program memdump awalnya ditemukan di sini saya telah membuat skrip untuk secara selektif membaca aplikasi yang ditentukan kembali ke memori.
remember
:Penggunaan: sesuatu seperti
Dengan cepat melompati memori non-swapped (gigabytes per detik) dan melambat saat diperlukan swap.
sumber
Mungkin membantu untuk meningkatkan
/proc/sys/vm/page-cluster
(default: 3).Dari dokumentasi kernel (
sysctl/vm.txt
):Dokumentasi tidak menyebutkan batas, jadi mungkin Anda bisa mengatur ini sangat tinggi untuk membuat semua swap dibaca kembali segera. Dan tentu saja mengubahnya kembali menjadi nilai waras setelahnya.
sumber
page-cluster
nilai secara permanen dapat meningkatkan kinerja.Anda dapat mencoba menambahkan program yang paling Anda pedulikan ke grup dan menyelaraskan swappiness sehingga saat berikutnya aplikasi menjalankan program yang Anda tambahkan cenderung menjadi kandidat untuk bertukar.
Beberapa halaman mereka kemungkinan masih akan ditukar tetapi mungkin mengatasi masalah kinerja Anda. Sebagian besar itu mungkin hanya perilaku "berhenti dan mulai" ketika banyak halaman program dalam swap dan program harus terus-menerus berhenti untuk menukar halaman-halamannya ke dalam RAM tetapi hanya dalam peningkatan 4k.
Sebagai alternatif, Anda dapat menambahkan aplikasi yang berjalan ke grup dan menyelaraskan swappiness sehingga aplikasi tersebut adalah yang cenderung menggunakan file swap paling banyak. Ini akan memperlambat aplikasi tetapi akan mengampuni sisa sistem.
sumber
Sepertinya saya bahwa Anda tidak bisa secara ajaib "membuat sistem responsif lagi". Anda bisa dikenakan penalti atau membaca kembali halaman dari ruang swap ke memori sekarang atau Anda dikenakan kemudian, tetapi satu atau lain cara Anda dikenakan. Memang, jika Anda melakukan sesuatu seperti
swapoff -a && swapon -a
itu, Anda mungkin merasa lebih sakit daripada kurang, karena Anda memaksa beberapa halaman untuk disalin kembali ke memori yang seharusnya tidak pernah diperlukan lagi dan akhirnya jatuh tanpa dibaca (pikirkan: Anda keluar dari aplikasi sementara banyak tumpukannya yang ditukar; halaman-halaman itu dapat dibuang sama sekali tanpa pernah dibaca kembali ke memori).Yah, hampir semua halaman yang disalin kembali dari swap ke memori utama akan segera dimodifikasi, jadi jika perlu dipindahkan kembali untuk bertukar lagi di masa depan, itu harus ditulis lagi di swap. Perlu diingat bahwa swap sebagian besar adalah tumpukan memori, bukan hanya-baca halaman (yang biasanya didukung file).
Saya pikir
swapoff -a && swapon -a
trik Anda sama bagusnya dengan apa pun yang bisa Anda dapatkan.sumber
swapoff -a && swapon -a
tidak akan baik untuk Anda. Saya kira dalam hal ini Anda akan memerlukan sesuatu yang memindai/proc/<each-process>/mem
dan membaca setiap halaman memori untuk memastikan itu ada di RAM. Tidak tahu apakah itu ada.Ada diskusi yang sangat bagus di sini http://rudd-o.com/en/linux-and-free-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that yang bermuara pada penurunan swappiness, dengan gagasan bahwa untuk meningkatkan respon yang dirasakan sistem seseorang harus mencegah pertukaran kode (dan inilah yang terjadi). Ini sebenarnya bukan jawaban untuk pertanyaan Anda, tetapi ini dapat mencegah masalah muncul (aplikasi Anda tidak ditukar, hanya data yang tidak digunakan dan cache halaman)
sumber