Bagaimana mengubah prioritas I / O dari suatu proses atau utas di Win7?

32

Process Explorer dapat menunjukkan prioritas IO efektif dari utas yang diberikan, tetapi tidak mengubahnya. Melihat dukungan prioritas IO adalah fitur yang relatif baru, sebagian besar program tidak menetapkan prioritas IO mereka sendiri. Tampaknya secara default prioritas IO berasal dari prioritas utas (daripada prioritas proses), yang tidak dapat dimodifikasi oleh Process Explorer.

Apakah ada alat lain di luar sana yang dapat membantu saya mengubah prioritas IO dari utas yang diberikan / semua utas dari proses yang diberikan?

RomanSt
sumber
Hampir ada pertanyaan yang sama tentang Stack Overflow: stackoverflow.com/questions/301290/…
Mehper C. Palavuzlar
3
@ [Mehper C. Palavuzlar] benar, tetapi ini bukan untuk perangkat lunak yang saya kembangkan - Saya mencari alat yang sudah jadi untuk melakukan ini pada perangkat lunak pihak ketiga.
RomanSt

Jawaban:

11

Alat Siap Pakai

Alat pihak ketiga untuk mengatur prioritas proses I / O, baik dengan tindakan pengguna manual atau otomatisasi dan ketekunan, akan menjadi Proses Lasso . Itu dapat mengatur hampir semua pengaturan proses, dan melakukannya terus-menerus, atau dengan aturan (misalnya ketika ini terjadi, ubah prioritas I / O dari itu).

Jawaban terprogram

Jawabannya adalah panggilan API sederhana ke NT Native API, NTSetInformationProcess . Ini didefinisikan sebagai kelas 'IoPriority' di DDK 2008. Di NT6 hanya dua level yang didukung: Sangat Rendah (latar belakang) dan Normal . Secara teknis ada 5 level yang ditentukan - Kritis, Tinggi, Normal, Rendah, dan Sangat Rendah. Level kritis dicadangkan untuk operasi paging. Tidak ada data tentang yang lain.

Namun, cara yang tepat untuk menggunakan prioritas I / O hanya untuk memulai 'mode latar belakang' melalui panggilan ke Windows API SetProcessPriorityClass , memasok PROCESSS_MODE_BACKGROUND_BEGIN. Ini akan menyebabkannya menggunakan prioritas I / O yang sangat Rendah (latar belakang), bersama dengan kelas prioritas CPU IDLE. Setelah selesai, kembalikan melalui PROCESS_MODE_BACKGROUND_END.

The SetThreadPriority API juga akan memungkinkan modus latar belakang ini sama untuk benang tertentu. Di sini Anda akan memasok THREAD_MODE_BACKGROUND_BEGIN / END.

dyasta
sumber
Saya tidak tertarik pada pemrograman windows dan hal-hal tingkat OS, tetapi saya pernah mendengar tentang menabrak prioritas utas, sampai THREAD_PRIORITY_TIME_CRITICAL apakah mungkin dengan program Anda atau program apa pun? atau apakah masih hanya IO PRIORITY yang dapat disesuaikan, dan bukan utas cpu? Saya kira mengubah prioritas IO tidak akan membuat banyak perbedaan untuk Penggunaan CPU, kan?
barlop
Iya nih. Keduanya bisa diatur, dan bertahan. Banyak hal lain juga dapat diatur, atau diubah secara dinamis berdasarkan aturan (misalnya afinitas CPU). Prioritas I / O berbeda dari prioritas CPU, benar.
dyasta
Itu bukan "alat yang siap pakai untuk melakukan ini pada perangkat lunak pihak ketiga."
Cees Timmerman
Maaf, saya pikir pertanyaannya mungkin telah diedit, karena jelas saya menjawab dari sisi program (tidak diedit). Process Lasso adalah 'alat siap pakai untuk melakukan ini pada perangkat lunak pihak ketiga'. Lihat bitsum.com
dyasta
23

Saya mengembangkan ini setelah melihat tidak ada yang peduli dengan itu: https://sourceforge.net/projects/iopriority/ (open source)

Program ini dapat mengatur prioritas I / O suatu proses, dan semua utas sedang terpengaruh olehnya segera. Cukup mudah untuk memodifikasinya agar berfungsi dengan utas alih-alih proses.

Wye
sumber
1
Saya hanya memperhatikan Anda tidak mengizinkannya mengubah proses ke prioritas tinggi pada Server 2012R2.
jftuga
14

ProcessHacker adalah alat GUI yang dapat mengubah prioritas IO dari proses arbitrer.

RomanSt
sumber
Mengapa itu terlihat seperti sesuatu yang dilakukan oleh Russinovich?
Daniel Mošmondor
1
@ DanielMošmondor Mungkin itu terinspirasi oleh ProcExp dan batasannya? Saya pribadi beralih karena ProcExp menunjukkan penggunaan CPU yang benar-benar salah pada laptop saya setelah versi 14.
RomanSt
1
Tidak hanya itu, ProcExp juga dapat BSOD comp saya, dll. Apakah gratis?
Daniel Mošmondor
@ DanielMošmondor Ya, apalagi itu tampaknya melakukan lebih dari ProcExp dalam segala hal. UI sedikit berbeda tetapi memang sangat mampu.
RomanSt
1

Saya mendukung aplikasi gratis bernama PRIO, yang merupakan penghemat prioritas proses (antara lain) dengan tapak yang sangat kecil (kurang dari 1 MB). Setelah instalasi berjalan diam-diam di latar belakang sampai Anda membutuhkannya, dan antarmuka yang dibangun langsung ke Windows Task Manager, memperluas fungsionalitasnya dan membuatnya seolah-olah fitur yang ditambahkan selalu menjadi bagian dari Task Manager. Ketika Anda mengklik kanan suatu proses di Task Manager dengan maksud untuk mengubah prioritasnya, beberapa fitur PRIO yang ditambahkan menjadi jelas, karena Anda dapat mengubah tidak hanya prioritas proses CPU tetapi juga prioritas I / O (menyesuaikan pertanyaan Anda) , dan Anda dapat memilih SIMPAN pengaturan baru jika diinginkan. Yang terakhir ini membuatnya agar setiap kali proses (yaitu program itu) dijalankan, prioritas proses CPU dan I / O yang ditetapkan dan disimpan oleh Anda akan mulai berlaku.

Aplikasi ini memiliki fitur lain yang juga memperluas fungsionalitas berbagai tab di Windows Task Manager. Versi ada untuk sistem 32- dan 64-bit, dan aplikasi ini gratis untuk penggunaan pribadi.

Mike Mounier
sumber
Kedengarannya seperti aplikasi hebat. Punya tautan?
Stijn de Witt
1
Jika yang Anda maksud PRIO, itu tersedia dari sejumlah agregator konten yang berbeda (seperti cnet), tetapi langsung dari situs web pengembangnya adalah prnwatch.com/prio
Mike Mounier