Apakah mungkin untuk mengisyaratkan Windows untuk membawa proses sepenuhnya dari swap

13

Apakah mungkin untuk mengisyaratkan Windows virtual-memory-manager untuk membawa proses tertentu dari swap?

Situasi yang sering saya alami biasanya menggunakan sekitar 50% dari RAM saya untuk semua program normal, satu khususnya menjadi IDE untuk target tertanam, bersama dengan debugger yang terkait.

Lalu saya membiarkan proses yang haus akan memori berjalan - misalnya wireshark atau sesuatu yang mengumpulkan data selama akhir pekan, semuanya terhapus - sebagaimana mestinya. Setelah proses besar selesai, sebagian besar proses dibiarkan dalam swap.

Kemudian sporadis berhenti untuk menukar proses kembali menyebabkan masalah dengan debugger, mungkin karena masalah waktu dalam komunikasi antara IDE dan hardware-debugger. Jadi kontrol perangkat target bisa sporadis sampai upaya yang cukup telah membawa data debug di IDE keluar dari swap.

Greg
sumber
Ini akan sangat berguna! Dari sudut pandang pengguna, sangat menjengkelkan untuk menunggu proses pertukaran setelah setiap klik atau tindakan pengguna. Akan jauh lebih baik untuk mengatakan: "lepaskan proses ini!" , pergi untuk minum kopi dan kembali ke sistem responsif!
Tomas
Saya tidak terbiasa dengan spesifik dari proses swapping Windows tetapi apakah ini sesuatu yang Anda cari? Seharusnya ada contoh biner yang berfungsi di komentar.
Rik
1
Saya pernah memiliki pertanyaan serupa , dan menulis sebuah program berdasarkan jawaban yang saya dapatkan di Stack Overflow.
Kerrek SB
@ Gerrek, saya mencoba mengkompilasi kode Anda di bawah MinGW dan mendapat kesalahan pada setiap pembacaan "Gagal membaca satu byte dari 0x161000, kesalahan 299 (0 byte dibaca)." Karena saya hanya memiliki Windows di tempat kerja saya tidak cukup berani untuk menjalankan biner acak yang Anda lampirkan sehingga masalahnya bisa di kompilasi saya.
Greg
1
@ GerrekSB, sepertinya masalah kecil. Mungkin Anda menyentuh area memori yang tidak dipetakan? Pokoknya saya pikir jawaban Anda layak mendapatkan hadiah :) PS: unswap tampaknya jauh lebih lambat dari yang seharusnya, dibandingkan dengan kecepatan HDD. Tampaknya hambatannya ada di tempat lain, tapi di mana?
Tomas

Jawaban:

1

KerrekSB mengembangkan alat khusus untuk tujuan ini:

/programming//a/2940209/684229

Ini tersedia di GiTHUB dengan binari: https://github.com/louisdx/unpage

Selama menjalankan, Anda mendapatkan banyak kesalahan "Gagal membaca satu byte dari 0x .... 000, error 299 (0 byte baca)", tetapi itu bukan masalah, alat ini bekerja dengan baik.

Tomas
sumber
"Tapi itu masalah"? Saya tidak berpikir itu masalah.
Kerrek SB
Kutipan: "alat yang mencoba untuk mendapatkan semua aplikasi kembali ke memori fisik". Dengan "proses lapar memori" poster ini mungkin tidak berhasil.
harrymc
@harrymc Kutip dari pertanyaan: After the big process is finished, most processes are left in swap.. Jadi agaknya dia sudah mengakhiri "proses ingatan yang lapar".
Rik
@ GerrekSB tentu saja, itu salah ketik. Terima kasih :-)
Tomas
@ Thomas saya menemukan ini . Dengan pengetahuan saya yang sangat terbatas tentang c ++ saya memverifikasi bahwa untuk setiap kegagalan akses halaman memang dilindungi oleh bit-PAGE_GUARD. Saya menggunakan if (meminfo.Protect > 50) { std::cerr << meminfo.Protect << " - " << PAGE_GUARD << std::endl; }tepat sebelum- ReadProcessMemoryline. PAGE_GUARD 256 dan saya mendapat 260 dengan halaman gagal. Jadi dimungkinkan untuk menyingkirkan kesalahan. Seseorang dengan pengetahuan c ++ dan Paging perlu membaca di bit PAGE_GUARD.
Rik
1

Anda dapat menggunakan Process Lasso untuk memberikan proses prioritas halaman Memori :

Dimulai dengan Windows Vista, setiap halaman memori memiliki prioritas mulai dari 0 hingga 7. Daftar Siaga dibagi menjadi delapan daftar yang masing-masing menangani halaman dengan prioritas yang berbeda. Ketika Manajer Memori ingin mengambil halaman dari Daftar Siaga, ia mengambil halaman dari daftar prioritas rendah terlebih dahulu. "

Process Lasso dapat membantu mengelola prioritas memori dengan memungkinkan prioritas memori persisten ditetapkan untuk proses, sehingga halaman memori virtual mereka diatur ke prioritas spesifik setiap kali dijalankan.

Process Lasso memiliki dua versi: gratis dan komersial ($ 18,95 dengan uji coba).

harrymc
sumber
Saya khawatir Anda menjawab pertanyaan yang sama sekali berbeda. Memberikan proses proses prioritas memori adalah tugas yang berbeda, mungkin tidak berguna dalam konteks OP dan saya membuat sketsa: ketika Anda sudah memiliki proses yang dalam swap dan ingin melepaskannya. Anda tidak ingin mencegahnya beralih.
Tomas
@ Thomas: Itu bukan pemahaman saya. Permintaan adalah untuk mencegah proses yang diberikan dari bertukar. Jika proses itu sendiri tidak diprogram untuk mengunci halamannya ke dalam memori, solusi terbaik berikutnya adalah memberikan prioritas memori tertinggi untuk membuatnya lebih kecil kemungkinannya untuk ditukar.
harrymc
3
@harrymc, OP mengatakan ketika memori hog berjalan, "semuanya ditukar - sebagaimana mestinya" sehingga itulah yang diinginkan OP. Hanya saja pada hari Senin pagi dia ingin set kerja proses penting untuk dibawa sekaligus, tidak dalam dribs dan drab oleh kesalahan halaman dari waktu ke waktu.
mgkrebbs
@ mgkrebbs: Itu solusi yang berbeda untuk masalah ini, yang saya percaya tidak mungkin dilakukan. Solusi saya adalah bahwa jika IDE tidak pernah diganti, maka tidak perlu untuk menukar kembali. "Proses lapar memori" hanya akan memiliki beberapa MB lebih sedikit RAM, yang tidak akan terlalu banyak berdampak pada kinerjanya.
harrymc