Làm cách nào để thay đổi mức ưu tiên I / O của một tiến trình hoặc luồng trong Win7?


32

Process Explorer có thể hiển thị mức ưu tiên IO hiệu quả của một luồng đã cho, nhưng không thay đổi nó. Xem như hỗ trợ ưu tiên IO là một tính năng tương đối mới, hầu hết các chương trình không đặt ưu tiên IO của riêng họ. Theo mặc định, ưu tiên IO được lấy từ mức ưu tiên của luồng (thay vì mức ưu tiên của tiến trình), mà Process Explorer không thể sửa đổi.

Có công cụ nào khác ngoài đó có thể giúp tôi thay đổi mức ưu tiên IO của một luồng đã cho / tất cả các luồng của một quy trình nhất định không?


Gần như có một câu hỏi tương tự về Stack Overflow: stackoverflow.com/questions/301290/
Kẻ

3
@ [Mehper C. Palavuzlar] đúng, nhưng đây không phải là phần mềm tôi phát triển - Tôi đang tìm một công cụ làm sẵn để làm điều này trên phần mềm của bên thứ ba.
RomanSt

Câu trả lời:


11

Công cụ làm sẵn

Một công cụ của bên thứ ba để thiết lập các ưu tiên I / O của quá trình, bằng hành động thủ công của người dùng hoặc tự động hóa và kiên trì, sẽ là Process Lasso . Nó có thể thiết lập hầu hết mọi cài đặt quy trình và thực hiện liên tục hoặc theo quy tắc (ví dụ: khi điều này xảy ra, thay đổi mức ưu tiên I / O của điều đó).

Trả lời theo chương trình

Câu trả lời là một lệnh gọi API đơn giản tới API gốc NT, NTSetIn informationProcess . Nó được định nghĩa là lớp 'IoP Warriority' trong DDK 2008. Trong NT6 chỉ có hai mức được hỗ trợ: Rất thấp (nền) và Bình thường . Có 5 cấp độ kỹ thuật được xác định - Quan trọng, Cao, Bình thường, Thấp và Rất thấp. Cấp độ quan trọng được dành riêng cho các hoạt động phân trang. Không có dữ liệu về những người khác.

Tuy nhiên, cách thích hợp để sử dụng mức ưu tiên I / O chỉ là bắt đầu mode chế độ nền 'thông qua một cuộc gọi đến Windows API SetProcessP WarriorityClass, cung cấp PROCESSS_MODE_BACKGROUND_BEGIN. Điều này sẽ khiến nó sử dụng mức ưu tiên I / O rất thấp (nền), cùng với lớp ưu tiên CPU IDLE. Khi hoàn tất, hoàn nguyên qua PROCESS_MODE_BACKGROUND_END.

Các SetThreadPriority API cũng sẽ cho phép chế độ này nền tương tự cho chủ đề cụ thể. Tại đây, bạn cung cấp THREAD_MODE_BACKGROUND_BEGIN / END.


Tôi không tham gia vào lập trình windows và các công cụ ở cấp độ hệ điều hành, nhưng tôi đã nghe nói về việc giảm mức độ ưu tiên của một luồng, tất cả các cách lên đến THREAD_PRIORITY_TIME_CRITICS có khả thi với chương trình của bạn hoặc bất kỳ chương trình nào không? hoặc nó vẫn chỉ là ƯU TIÊN IO có thể được điều chỉnh, và không ưu tiên cpu luồng? Tôi đoán việc thay đổi mức độ ưu tiên IO sẽ không tạo ra nhiều khác biệt đối với việc sử dụng CPU, phải không?
barlop

Vâng. Cả hai có thể được thiết lập, và tồn tại. Nhiều thứ khác cũng có thể được đặt hoặc thay đổi động dựa trên các quy tắc (ví dụ: ái lực CPU). Ưu tiên I / O khác với ưu tiên CPU, phải.
dyasta

Đó không phải là "công cụ làm sẵn để làm điều này trên phần mềm của bên thứ ba."
Cees Timmerman

Xin lỗi, tôi nghĩ rằng câu hỏi có thể đã được chỉnh sửa, vì rõ ràng tôi đã trả lời từ một phía lập trình (không được chỉnh sửa). Process Lasso là một 'công cụ làm sẵn để thực hiện việc này trên phần mềm của bên thứ ba'. Xem bitsum.com
dyasta

23

Tôi đã phát triển điều này sau khi thấy không có ai bận tâm với nó: https://sourceforge.net/projects/iop Warriority / (mã nguồn mở)

Chương trình này có thể đặt mức độ ưu tiên I / O của một tiến trình và tất cả các luồng đang bị ảnh hưởng bởi nó ngay lập tức. Thật dễ dàng để sửa đổi nó để làm việc với các luồng thay vì các quy trình.


1
Tôi chỉ lưu ý rằng bạn không cho phép nó thay đổi quy trình thành Ưu tiên cao trên Máy chủ 2012R2.
jftuga

14

ProcessHacker là một công cụ GUI có thể thay đổi mức độ ưu tiên IO của một quy trình tùy ý.


Tại sao nó trông giống như một cái gì đó mà Russinovich đã làm?
Daniel Mošmondor

1
@ DanielMošmondor Có lẽ nó được lấy cảm hứng từ ProcExp và những hạn chế của nó? Cá nhân tôi đã chuyển đổi vì ProcExp cho thấy việc sử dụng CPU hoàn toàn sai trên máy tính xách tay của tôi sau phiên bản 14.
RomanSt

1
Không chỉ vậy, ProcExp còn có thể BSOD comp của tôi, v.v ... Nó có miễn phí không?
Daniel Mošmondor

@ DanielMošmondor Vâng, hơn nữa, nó thực sự dường như làm được nhiều hơn ProcExp về mọi mặt. UI hơi khác nhau nhưng thực sự rất có khả năng.
RomanSt

1

Tôi là một phần của một ứng dụng miễn phí có tên PRIO, đây là một trình tiết kiệm ưu tiên quá trình (trong số những thứ khác) với dung lượng rất nhỏ (dưới 1 MB). Sau khi cài đặt, nó chạy âm thầm trong nền cho đến khi bạn cần và giao diện của nó sẽ tích hợp trực tiếp vào Trình quản lý tác vụ Windows, mở rộng chức năng của nó và làm cho nó như thể các tính năng được thêm vào luôn là một phần của Trình quản lý tác vụ. Khi bạn nhấp chuột phải vào một quy trình trong Trình quản lý tác vụ với mục đích thay đổi mức độ ưu tiên của nó, một số tính năng được thêm vào của PRIO trở nên rõ ràng, vì bạn có thể thay đổi không chỉ mức độ ưu tiên CPU mà cả mức độ ưu tiên I / O của nó (cũng như câu hỏi của bạn) và bạn có thể chọn TIẾT KIỆM cài đặt mới nếu muốn. Điều cuối cùng này làm cho nó mỗi khi quá trình đó (tức là chương trình đó) được chạy, cả các ưu tiên của quá trình CPU và I / O được bạn đặt và lưu lại sẽ có hiệu lực.

Ứng dụng này có các tính năng khác cũng mở rộng chức năng của các tab khác nhau trong Trình quản lý tác vụ Windows. Các phiên bản tồn tại cho cả hệ thống 32 và 64 bit và ứng dụng này miễn phí cho sử dụng cá nhân.


Âm thanh như một ứng dụng tuyệt vời. Có một liên kết?
Stijn de Witt

1
Nếu bạn có nghĩa là PRIO, nó có sẵn từ một số trình tổng hợp nội dung khác nhau (như cnet), nhưng trực tiếp từ trang web của nhà phát triển sẽ là prnwatch.com/prio
Mike Mounier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.