我們公司想出租的新遊戲服務器剛剛問世。然而,當沒有玩家連接時,遊戲開發者沒有創建任何類型的休眠模式來關閉物理,所以空的服務器正在吃掉CPU的30%左右。節流CPU應用程序的使用情況
我發現這個遊戲panel addon它限制了應用程序的CPU使用率。
我已經在C#.NET中爲我們的公司編寫了一些小應用程序,以幫助改進我們的服務,我想知道如何去創建類似這樣的東西。可能嗎?
我們公司想出租的新遊戲服務器剛剛問世。然而,當沒有玩家連接時,遊戲開發者沒有創建任何類型的休眠模式來關閉物理,所以空的服務器正在吃掉CPU的30%左右。節流CPU應用程序的使用情況
我發現這個遊戲panel addon它限制了應用程序的CPU使用率。
我已經在C#.NET中爲我們的公司編寫了一些小應用程序,以幫助改進我們的服務,我想知道如何去創建類似這樣的東西。可能嗎?
您可能會考慮簡單地降低過程的優先級。這不會直接限制CPU,但會導致進程線程的調度次數少於具有普通和更高優先級的進程。
檢查System.Diagnostics.Process.PriorityClass
(doc)
我假設遊戲服務器是線程化的。如果是這種情況,您可能會實際強制應用程序上的CPU關聯。如果您有辦法確定遊戲是否有用戶,即UDP數據包是否進入指定的端口,您可以說「嘿,沒有人連接」。然後你可以讓你的程序強制所有工作線程進入同一個核心。因此,如果你有一個8核心的CPU,並且所有的線程都在一個核心上,那麼它最多會使用12.5%的CPU。
一旦您看到分組進入分配的端口,您可以將關聯分配給所有核心。
你可以更進一步說「有沒有」空閒「遊戲,如果有任何空閒遊戲,這些遊戲都在......核心7,然後運行HLT的無限循環指令的優先級高於遊戲,但強制線程進入睡眠狀態,因此它不會完全停止遊戲。
這會導致CPU使用更少的功率,但會有更多的工作並且具有更高的優先級機會的問題。
我會堅持只有迫使親和力,並讓所有的空閒遊戲分享一些特定的核。
我的猜測是,服務器應用程序正在進行輪詢而不是事件驅動。輪詢將使用CPU,除非這段代碼被轉換爲事件驅動。應用程序將一直處於睡眠狀態,直到從操作系統收到需要處理的事件。輪詢只是尋找事件並浪費CPU。除非以任何方式減少CPU使用量,否則降低進程的優先級將不會有幫助。這個應用程序需要重寫以提高CPU效率。
根據遊戲的具體情況,人爲地放慢速度會導致很多事件被備份,或者當你想要再次使用時,它會基本上沒有響應,清除限制導致的積壓。你可能沒問題,這讓我明白,當時30%的cpu可能是有價值的。可能是因爲當然有東西是不必要的。 :) – Chris 2011-02-07 17:20:30
哇,這聽起來很煩人。如果有的話,它會吃掉很多額外的權力。 – Bengie 2011-02-07 18:39:14