Использование приложения Throttle CPU - PullRequest
5 голосов
/ 07 февраля 2011

Только что вышел новый игровой сервер, который наша компания хотела бы предложить в аренду.Однако разработчики игр не создали никакого режима гибернации, чтобы отключить физику, когда ни один игрок не подключен, поэтому пустой сервер потребляет около 30% процессора.

Я нашел эту игру * панель 1003 *аддон , который ограничивает использование CPU приложениями.

Я написал несколько небольших приложений на C # .NET для нашей компании, чтобы помочь улучшить наши услуги, и мне интересно, как бы я создал что-то подобное,Возможно ли это?

Ответы [ 4 ]

3 голосов
/ 07 февраля 2011

Вы можете подумать о простом снижении приоритета процесса.Это не будет ограничивать ЦП напрямую, но приведет к тому, что потоки процессов будут планироваться реже, чем процессы с обычным и более высоким приоритетом.

2 голосов
/ 07 февраля 2011

Я предполагаю, что серверное приложение выполняет опрос, а не на основе событий. При опросе будет использоваться процессор, если этот фрагмент кода не будет преобразован в управляемый событиями. Приложение будет находиться в спящем режиме до тех пор, пока не получит событие от ОС, которое необходимо обработать. Опрос просто вращается в поисках события и тратит впустую процессор. Уменьшение приоритета процесса на самом деле не поможет, если только не будет уменьшено использование процессора. Это приложение должно быть переписано, чтобы повысить эффективность использования процессора.

0 голосов
/ 07 февраля 2011

Я предполагаю, что игровой сервер является многопоточным.Если это так, вы можете прагматично навязать привязку ЦП к приложению.Если бы у вас был способ узнать, есть ли в игре пользователи или нет, то есть, если на назначенный порт приходят UDP-пакеты, вы можете сказать «эй, никто не подключен».После этого ваша программа может принудительно заставить все рабочие потоки работать на одном и том же ядре.

Итак, если у вас 8-ядерный процессор и все потоки находятся на одном ядре, то самое большее она будет использовать 12,5% ЦП.

Как только вы видите пакеты, поступающие на назначенный порт, вы можете назначить сходство всем ядрам.

Вы можете сделать еще один шаг и сказать «Есть ли какие-нибудь« бездействующие »игры».Если есть какие-либо пустые игры, которые все включены ... скажем, .. core 7, то запустите бесконечный цикл инструкции HLT с более высоким приоритетом, чем игра, но заставьте поток спать, чтобы он не голодал полностьюигра.

Это приведет к тому, что ЦП будет потреблять меньше энергии, но будет гораздо больше работы и с большей вероятностью возникновения проблем.

Я бы придерживался только принудительного сродства, и простопусть все бездействующие игры разделяют некоторое данное ядро.

0 голосов
/ 07 февраля 2011

Этот ответ может быть интересен для вас, и вот как я бы это сделал.

Как ограничить использование ЦП программой C #?

Я не знаю, можете ли вы это сделать, но вы можете изменить приоритет выполняющегося потока через свойство Priority .Вы установили бы это:

Thread.CurrentThread.Priority = ThreadPriority.Lowest;

Кроме того, я не думаю, что вы действительно хотите ограничить это.Если машина в противном случае простаивает, вы хотите, чтобы она занялась этой задачей, верно?ThreadPriority помогает сообщить об этом планировщику.

...