Apakah mungkin untuk mencegah program tertentu (mis. Kotak ritme dan dependensinya) dari pernah bertukar ke disk?
Saya bertanya karena saya memiliki masalah ketika pemutar musik cegukan setiap kali Chromium menyimpan terlalu banyak memori. Apakah ada cara untuk mengatasi ini? Ini bukan masalah di Windows lagi jadi mungkin ada caranya.
ps
atautop
untuk melihat apakah rhytmbox benar-benar ditukar dengan memeriksa bidangRSS
/RES
? Saya pikir masalah Anda sebagian besar disebabkan oleh penjadwalan yang tidak tepat. Anda harus mencobarenice
proses rhytmbox atau mengubah beberapa pengaturannya, misalnya ukuran buffer audio.Jawaban:
Saya pikir masalah cegukan belum tentu disebabkan oleh swapping. Jika suatu program memainkan sesuatu, Linux harus memperhatikan ini dan tidak menukarnya. Program yang tidak melakukan banyak hal adalah yang pertama kali ditukar. Anda dapat memeriksa apakah program tersebut benar-benar ditukar dengan melihat bidang
RSS
/RES
dari ps atau atas .RSS
adalah ukuran yang ditetapkan residen, memori fisik non-swapping yang digunakan tugas (dalam kiloBytes).Saya pikir masalah Anda kemungkinan besar disebabkan oleh penjadwalan CPU dan I / O yang tidak tepat dan sedikit ketidakefisienan Rhythmbox yang membuatnya sensitif terhadap beban sistem yang tinggi. Prioritas CPU dapat diubah dengan perintah nice dan renice . Prioritas I / O dapat diubah dengan perintah ionice . Hanya pengguna super yang dapat menggunakan prioritas tinggi. Anda juga harus tahu bahwa orang-orang kernel Linux sedang mencoba untuk meningkatkan respon sistem desktop dengan berbagai tambalan latensi rendah, jadi Anda dapat mempertimbangkan untuk menggunakannya. Salah satunya adalah ~ 200 baris tambalan yang ditulis oleh Mike Galbraith yang bahkan mengesankan Linus. Alternatif untuk tambalan ini adalah trik cgroup Lennart Poettering yang saya pikir akan menjadi default di Fedora 15.
Lagi pula, tanpa tambalan itu ada dua opsi: mulai program dengan prioritas tinggi atau ubah setelah itu. Untuk opsi pertama Anda bisa menggunakan skrip pembungkus di sekitar Rhythmbox:
Anda harus menjalankannya sebagai root. Jika Anda tidak ingin login sebagai root hanya untuk memulai ini, Anda dapat menggunakan salah satu
su
atausudo
.Adapun mengubah prioritas setelah itu, jika Anda terlalu malas untuk login sebagai root untuk mengubahnya, Anda bisa mencoba menggunakan pekerjaan cron yang berjalan setiap 5 menit dan menetapkan prioritas
rhythmbox
proses, tetapi saya tidak akan merekomendasikan melakukan ini:sumber
Jawaban singkat: Anda tidak bisa, dan tidak seharusnya.
Beberapa waktu lalu file yang dapat dieksekusi menghargai bit sticky
+t
yang akan memberi tahu kernel untuk tidak bertukar, tetapi hari ini diabaikan.Jika kernel memutuskan untuk menukar, itu pasti memiliki alasan yang valid. Linux sangat agresif dalam penggunaan memori, karena RAM yang tidak digunakan, adalah sumber daya yang terbuang.
Jika Anda benar-benar tidak ingin menukar, mendapatkan lebih banyak RAM, atau hanya
# swapoff -a
(tidak direkomendasikan, dapat mengubah sistem Anda tidak dapat digunakan jika Anda sudah memiliki masalah).Shouldn't
pergi ketika Anda sedang mengembangkan beberapa aplikasi dan tidak ingin itu bertukar sama sekali. Lihatlah posting ini di stackoverflow .sumber
Ini sepertinya sudah dijawab di sini:
/programming/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory
Meskipun konsensusnya adalah bahwa Anda seharusnya tidak boleh: /
sumber
Ada beberapa cara untuk melakukannya. Yang bisa Anda coba adalah "bilang" agar Linux bekerja lebih sedikit dengan swap (umumnya):
Dari: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Opsi lain adalah menggunakan cgroups kernel manager, ini adalah spesifik per proses tetapi Anda akan memiliki beberapa "pekerjaan" untuk dilakukan: Dijawab di sini: /unix/10214/per-process-swapiness-for -linux # 10227
sumber
Anda dapat menggunakan
mlockall()
syscall. mlockall () memaksa proses memori menjadi resident (= no swap, no overcommit, dll ...). AFAIK, tidak ada perintah shell untuk melakukannya, tetapi mudah untuk membuatnya. Itu akan terlihat seperti:Catatan, Anda harus root untuk menelepon
mlockall()
.Namun, seperti yang dikatakan dalam jawaban lain, saya tidak berpikir itu yang Anda inginkan.
sumber