2009-03-09 27 views
9

Tôi có một hệ thống lõi tứ với ứng dụng của bên thứ ba, một lần trong một thời gian quay một số quy trình (luôn luôn thực thi tương tự nhưng một số trường hợp của nó) và mất 100% thời gian CPU. Tôi cũng có một vài dịch vụ web chạy trên cùng một hộp (IIS và bên thứ ba).Làm thế nào để thiết lập ái lực bộ vi xử lý trên một thực thi trong Windows XP?

Vấn đề với tất cả các lõi đang bận là nó làm cho máy chủ web bên thứ ba này hết thời gian chờ (IIS hoạt động tốt mặc dù, chỉ chậm hơn bình thường). Tôi không có quyền kiểm soát máy chủ web của bên thứ ba, nó là một phần của sản phẩm lớn hơn và phải hoạt động. Vì vậy, tôi đã cố gắng chơi với ái lực bộ vi xử lý (thông qua SysInternals Process Explorer) và giới hạn các quy trình pesky thành 3 lõi trong số 4 và dành lõi thứ 4 cho máy chủ web của bên thứ ba và dường như hoạt động khá tốt.

Vấn đề là nó chỉ đặt ái lực vào tiến trình đang chạy chứ không phải ở mức thực thi, vì vậy sau khi các quá trình đó kết thúc và sau đó là một quá trình mới thì nó lại giống nhau - chúng lấy tất cả 4 lõi. Vì vậy, tôi đã googled về tiện ích này ImageCfg.exe từ Microsoft nhưng tôi không thể tìm thấy nó trên Microsoft webside để tải về và tôi thấy rằng một số người đã thử nó và bây giờ phàn nàn rằng nó không thực sự làm việc.

Có cách nào để gắn ái lực với tệp thực thi không?

+1

Cuộc gọi đầu tiên của bạn phải dành cho nhà xuất bản phần mềm được đề cập. Yêu cầu họ làm thế nào để hạn chế việc sử dụng thread. – NotMe

+0

Tuy nhiên, vấn đề vẫn còn thú vị bởi vì phần mềm có thể không có tính năng đó. Và chắc chắn có phần mềm khác ngoài kia ... không có gì phải phiền toái khi phải gọi cho nhà cung cấp mỗi lần. – ine

Trả lời

5

Một tính năng của Process Lasso là đặt mối quan hệ của một quy trình bất kỳ khi nào quá trình đó được khởi chạy.

3

Sử dụng SetProcessAffinityMask(). Và hãy cẩn thận, Processor Affinity is inherited!

Bạn sẽ cần phải sử dụng ImageFileExecutionOptions, cụ thể the "Debugger" option, và viết thực thi nhỏ của riêng bạn mà gọi SetProcessAffinityMask() trên chính nó, và sau đó sinh ra một quy trình mới, đó là một trong những bạn muốn thiết lập mối quan hệ cho . Đặt làm trình gỡ lỗi và bạn đã hoàn tất.

+1

Thực sự đọc tài liệu về tài liệu này. Bạn có thể dễ dàng tự bắn mình bằng chân với cái này; rất nhiều gotchas. –

5

Bạn có thể muốn xem thông số /AFFINITY thành start.

Từ sự giúp đỡ:

AFFINITY The new application will have the specified processor 
      affinity mask, expressed as a hexadecimal number. 

Như ái lực xử lý trên Windows là một bitmask bạn có thể cần một số thử nghiệm nhưng tôi muốn giả 1 là cốt lõi đầu tiên, do đó 7 là ba lõi đầu tiên và F là tất cả bốn. Hoặc 8 chỉ dành cho thứ tư.

Sau đó, bạn có thể thay thế các tác vụ hoặc lối tắt đã lên lịch bằng một cuộc gọi đến start với các thông số thích hợp.

+1

Windows XP không có tùy chọn '/ affinity'. –

3

Bạn có thể sử dụng đơn đăng ký ứng dụng ái lực đơn proc để buộc một bộ xử lý ở cấp thực thi, điều này sẽ buộc quá trình này lên một lõi.

Bài viết này, http://msdn.microsoft.com/en-us/library/bb173458.aspx, có một đoạn để bật shim về phía dưới cùng.

+0

Bài viết đã chuyển đến http://msdn.microsoft.com/en-us/library/ee417693.aspx –

0

Bạn có thể thử đặt mức độ ưu tiên của quy trình sao cho ngay cả khi quyết định sử dụng 100% CPU, thứ ưu tiên cao hơn có thể thay thế khi cần.

Doing this automatically (thay vì phải chơi trong trình quản lý tác vụ) là điều tôi đã hỏi về cách đây một thời gian.

+0

Câu hỏi đặt ra là về mối quan hệ của bộ xử lý chứ không phải ưu tiên xử lý. –

3

Tiện ích ImageCfg.exe không hoạt động. Tôi chỉ sử dụng nó để giải quyết một vấn đề của công ty ngày hôm nay.Nó có sẵn từ http://www.robpol86.com/pages/imagecfg.php

Imagecfg -a 0x3 xxx.exe

giới hạn .exe để CPU0 và CPU1, ví dụ.

+0

Không biết tại sao, nhưng nó không hoạt động trong trường hợp của tôi. – bychkov

6

http://waynes-world-it.blogspot.com/2009/06/processor-affinity-on-windows-server.html

PowerShell

Sử dụng PowerShell để thiết lập các mối quan hệ bộ vi xử lý cho một hoặc nhiều tiến trình đang chạy. Có một kịch bản ví dụ dưới đây, thiết lập mặt nạ xử lý của calc.exe cho 4 bộ vi xử lý đầu tiên. Tôi thích phương pháp này vì kịch bản đơn giản, dễ dàng lên lịch, hoạt động trên x86 và x64, hỗ trợ nhiều quy trình cùng tên và ít nhất một phần vì nó làm nổi bật việc quản trị PowerShell dễ dàng như thế nào.

Lưu ý rằng nếu bạn sử dụng giai thừa của một số lớn với calc.exe (n!), Bạn sẽ tạo ra100% CPU có thể hữu ích để thử nghiệm. Mặt nạ dưới đây là 0xF = 1111 - một mặt nạ cho phép sử dụng các chỉ bốn bộ vi xử lý đầu tiên:

$calcSet = Get-Process -ProcessName "calc" 
foreach ($calc in $calcSet) {$calc.ProcessorAffinity=0xF} 
1

Rõ ràng chủ đề này là lỗi thời nhưng im thêm một lời nhận xét nào chỉ trong trường hợp bất cứ ai Googles về chủ đề này (như tôi đã làm)

Bạn có thể thử thiết lập các ưu tiên của quá trình này để ngay cả khi nó quyết định sử dụng 100% của CPU, một cái gì đó là ưu tiên cao hơn có thể tiếp quản khi nó cần phải làm như vậy.

Làm điều này tự động (thay vì phải chơi trong công việc người quản lý) là điều tôi đã hỏi về cách đây một thời gian.

Lệnh bắt đầu có thể được sử dụng để đặt ưu tiên khởi động của quy trình.

Ví dụ: start "my path\my process" /LOW cho mức độ ưu tiên thấp.

tắc ưu tiên phép LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL

thể được gọi từ một batchfile ví dụ.

+0

Câu hỏi đặt ra là về mối quan hệ của bộ vi xử lý, không phải ưu tiên xử lý. –

Các vấn đề liên quan