我们公司想出租的新游戏服务器刚刚问世。然而,当没有玩家连接时,游戏开发者没有创建任何类型的休眠模式来关闭物理,所以空的服务器正在吃掉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