2011-02-07 15 views
5

Máy chủ trò chơi mới vừa ra mắt mà công ty chúng tôi muốn cung cấp để cho thuê. Tuy nhiên, các nhà phát triển trò chơi đã không tạo ra bất kỳ loại chế độ ngủ đông nào để tắt vật lý khi không có người chơi nào được kết nối, vì vậy một máy chủ trống đang ăn 30% hoặc hơn CPU.Cách sử dụng CPU ga của ứng dụng

Tôi tìm thấy trò chơi này panel addon giới hạn mức sử dụng CPU của Ứng dụng.

Tôi đã viết một vài ứng dụng nhỏ trong C# .NET cho công ty của chúng tôi để giúp cải thiện dịch vụ của chúng tôi và tôi tự hỏi làm thế nào tôi sẽ đi về việc tạo ra một cái gì đó như thế này. Có thể không?

+0

Tùy thuộc vào những gì trò chơi đang thực hiện luôn có khả năng làm chậm nó xuống một cách giả tạo sẽ khiến nhiều sự kiện được sao lưu hoặc thứ gì đó như vậy về cơ bản sẽ không phản hồi khi bạn làm vậy xóa bỏ tồn đọng mà việc điều chỉnh đã gây ra. Bạn có thể được, nó chỉ tấn công tôi rằng sự hiểu biết những gì nó đang làm trong thời gian đó với 30% của CPU có thể có giá trị. Có thể là nó là không cần thiết tốt đẹp để có những thứ của khóa học. :) – Chris

+0

Chà, nghe có vẻ khó chịu. Nếu bất cứ điều gì, nó sẽ ăn nhiều sức mạnh thêm. – Bengie

Trả lời

3

Bạn có thể xem xét việc giảm mức ưu tiên của quy trình xuống. Điều này sẽ không giới hạn CPU trực tiếp, nhưng sẽ khiến cho các tiến trình xử lý được lên kế hoạch ít thường xuyên hơn so với các tiến trình có mức ưu tiên bình thường và cao hơn.

Kiểm tra System.Diagnostics.Process.PriorityClass (doc)

+0

Điều đó có vẻ là những gì chương trình được liên kết thực hiện, vì vậy +1 cho câu trả lời này. Tôi không thể tưởng tượng bất kỳ cách nào để hạn chế các hành động của một chương trình nội bộ mà không có kỹ thuật đảo ngược và vá mã hiện có, có khả năng vi phạm bản quyền/EULA tùy thuộc vào quốc gia của bạn và chương trình được đề cập. – Jason

+0

Bảng điều khiển trò chơi mà chúng tôi sử dụng có tùy chọn chạy dịch vụ ở mức độ ưu tiên thấp hơn, tuy nhiên trò chơi này dường như sử dụng bất kỳ CPU nào khả dụng. Đó là lý do tại sao tôi muốn điều tiết nó như trái ngược với việc chỉ đơn giản là giảm ưu tiên. –

+0

@Michael, nếu bạn giảm mức ưu tiên, thì đó không phải là vấn đề. Nó sẽ có hiệu quả thoát ra khỏi con đường khi một quá trình khác muốn sử dụng CPU. Đừng để CPU của bạn đánh giá đánh lừa bạn. Ngoài ra, hãy kiểm tra để đảm bảo không có quy trình đang chạy nào khác. Một số máy chủ trò chơi này sinh ra các quy trình khác. – Brad

0

này answer thể là thú vị cho bạn và đó là cách tôi sẽ làm điều đó.

Cách hạn chế sử dụng CPU mà chương trình C# có?

Tôi không biết nếu bạn có thể làm điều đó, nhưng bạn có thể thay đổi ưu tiên luồng của chuỗi thực hiện qua thuộc tính Priority. Bạn sẽ thiết lập rằng bằng cách:

Thread.CurrentThread.Priority = ThreadPriority.Lowest; 

Ngoài ra, tôi không nghĩ rằng bạn thực sự muốn cap nó. Nếu máy khác nhàn rỗi, bạn muốn nó bận rộn với nhiệm vụ, phải không? ThreadPriority giúp truyền đạt thông tin này tới bộ lập lịch biểu.

0

Tôi giả sử máy chủ trò chơi đã được tạo luồng. Nếu đây là trường hợp, bạn có thể thực dụng lực lượng CPU thực tế trên ứng dụng. Nếu bạn có cách để biết liệu trò chơi có người dùng hay không, tức là nếu các gói UDP đang đến trên cổng được gán, bạn có thể nói "này, không ai được kết nối". Sau đó bạn có thể có lực lượng chương trình của bạn tất cả các chủ đề làm việc vào cùng một lõi.

Vì vậy, nếu bạn có một cpu lõi 8 và tất cả các luồng trên một lõi, thì tối đa nó sẽ sử dụng CPU 12,5%.

Khi bạn thấy các gói đến trên cổng được chỉ định, bạn có thể gán mối quan hệ trở lại tất cả các lõi.

Bạn có thể tiến thêm một bước nữa và nói "Có trò chơi" rảnh rỗi không. Nếu có bất kỳ trò chơi nhàn rỗi nào, tất cả đều trên .. cho phép nói .. core 7, sau đó chạy vòng lặp vô hạn của HLT hướng dẫn ở mức ưu tiên cao hơn so với trò chơi, nhưng buộc buộc phải ngủ vì vậy nó không hoàn toàn bị bỏ đói trong trò chơi

Điều này sẽ khiến CPU sử dụng ít năng lượng hơn, nhưng sẽ có nhiều công việc hơn

Tôi chỉ muốn bắt buộc chỉ có mối quan hệ và chỉ để tất cả các trò chơi nhàn rỗi chia sẻ một số lõi nhất định.

2

Tôi đoán là ứng dụng máy chủ đang thực hiện bỏ phiếu thay vì được điều khiển sự kiện. Việc bỏ phiếu sẽ sử dụng CPU trừ khi đoạn mã này được chuyển đổi thành sự kiện được điều khiển. Ứng dụng sẽ ngủ cho đến khi nó nhận được một sự kiện từ hệ điều hành mà nó cần để xử lý.Việc bỏ phiếu sẽ chỉ quay vòng tìm kiếm một sự kiện và lãng phí CPU. Giảm ưu tiên của quá trình sẽ không thực sự hữu ích trừ khi sử dụng CPU giảm theo bất kỳ cách nào. Ứng dụng này cần phải được viết lại để có nhiều CPU hiệu quả hơn.