Почти каждый игровой сервер выполняет симуляцию в одном потоке, поэтому требование к CPU звучит не как «сколько ядер», а как «насколько быстро одно ядро и принадлежит ли оно мне, когда нужно». Типичному серверу нужно одно быстрое ядро под главный цикл плюс от половины до целого ядра сверху на сохранения, сеть и сборку мусора - поэтому 1,5-2 vCPU хватает большинству игр, и поэтому 8 медленных ядер всегда проигрывают 2 быстрым. Исключения есть, но их немного: огромные фабрики в Factorio, сильно заскриптованные серверы Arma и FiveM и модифицированные игры на выживание, которые параллельно генерируют мир. В этой статье разберём, почему всё решает главный поток, приведём реалистичное число ядер для каждой игры и покажем, как доказать, что упор именно в процессор, прежде чем платить за дополнительный.
Всю работу делает главный поток#
Игровой сервер - это цикл. Каждый тик он читает ввод игроков, перемещает все сущности, обсчитывает попадания, выполняет скрипты и плагины и отправляет каждому клиенту снимок того, что изменилось. Затем он ждёт следующего тика. Цикл работает с фиксированной частотой, и каждая частота даёт серверу фиксированный бюджет времени на тик:
| Игра или движок | Частота тиков или обновлений | Бюджет на тик |
|---|---|---|
| Minecraft | 20 TPS | 50 мс |
| Factorio | 60 UPS | 16,7 мс |
| Counter-Strike 2, игры на Source | 64 tick | 15,6 мс |
| Игры на Source при 128 tick | 128 tick | 7,8 мс |
| Terraria | 60 обновлений в секунду | 16,7 мс |
Главное свойство этого цикла - он последовательный. Движение сущности B зависит от того, где оказалась сущность A, обработчик события в плагине выполняется после самого события, а снимок собирается, когда всё остальное уже закончено. Движки могут выносить и выносят побочные задачи в другие потоки - загрузку чанков, запросы поиска пути, сжатие, запись на диск, - но сама симуляция должна идти по порядку, в одном потоке и в пределах бюджета. Когда она не укладывается, тик опаздывает, а опоздавший тик игроки ощущают как откаты, задержку попаданий и двери, которые открываются через секунду после нажатия клавиши. В статье что на самом деле означает тикрейт разобрано, как его показывает каждый движок.
Именно поэтому частота важнее количества ядер. Ядро, которое на 30% быстрее, заканчивает каждый тик на 30% раньше. Второе ядро помогает только с той работой, которая и так уже была вынесена из главного потока, а как только этой работе есть где выполняться, третье и четвёртое ядра простаивают.
Что на самом деле дают vCPU и процент CPU#
Хостинги продают CPU двумя способами, и означают они разное.
vCPU на виртуальной машине - обычно один аппаратный поток. На процессоре с hyper-threading или SMT каждое физическое ядро выглядит как два потока, и два загруженных потока на одном ядре делят его исполнительные блоки, так что каждый получает заметно меньше полного ядра. Одни хостинги продают vCPU как одно физическое ядро, другие - как один поток; по названию этого не понять.
Процент CPU - так выражают лимит Pterodactyl и большинство контейнерных панелей. 100 означает время одного ядра, 150 - полтора, 250 - два с половиной. Его обеспечивает учёт CPU в ядре системы, поэтому сервер, упёршийся в лимит, притормаживается до следующего периода учёта. На RE:NODE этот лимит - жёсткое ограничение до купленной доли: сервер может использовать ровно столько и не больше, а сервер на 100% своей доли работает медленно, но не сломан, и за это его никогда не приостанавливают.
Практическое следствие для игры: лимит 1,5 vCPU - это одно полное ядро для главного потока плюс половина ядра на всё остальное. Лимит 2,5 vCPU - одно полное ядро плюс полтора на всё остальное. Ни один из них не делает главный поток быстрее, чем может одно ядро. Если главный поток вашего сервера уже получает полное ядро, тариф выше поможет только в том случае, если зажималось «всё остальное», - а такое бывает, в основном во время сохранений, генерации мира и работы сборщика мусора.
Статья общий CPU и шумные соседи раскрывает вторую половину вопроса: является ли ваша доля резервированием или остатком и как измерить steal time изнутри сервера.
Сколько ядер реально использует каждая игра#
Это реалистичные цифры для обычной компании на ванильном или слегка модифицированном сервере. «Главный поток» - работа, которую нельзя разделить; «побочная работа» - то, чему помогает второе ядро.
| Игра | Разумное число vCPU | На что идёт дополнительная доля |
|---|---|---|
| Minecraft (Paper) | 1.5-2 | Асинхронная загрузка чанков, GC, сеть |
| Minecraft (большая сборка модов) | 2-3 | Генерация мира, потоки модов, GC |
| Valheim | 1.5-2 | Сохранения и сеть |
| Terraria | 0.75-1 | Почти ни на что; цикл лёгкий |
| Counter-Strike 2, TF2 | 1.5-2 | Плагины, GOTV, смена карт |
| Factorio | 1.5-2.5 | Некоторые многопоточные части обновления |
| Rust | 2-4 | Сохранения, GC, сетевая передача сущностей |
| 7 Days to Die | 2-3 | Построение мешей чанков, AI, сохранения |
| Project Zomboid | 2-3 | Java GC, подгрузка мира |
| DayZ | 2-3 | FPS сервера под нагрузкой |
| Arma 3 | 2 плюс headless-клиенты | AI вынесен в другие процессы |
| FiveM | 1.5-3 | Количество ресурсов, раздача ассетов |
| Palworld, The Front, Satisfactory | 2-3 | Побочные потоки Unreal Engine |
Бросаются в глаза три вещи.
Во-первых, низ таблицы - это не «слабые» игры. Terraria и Counter-Strike 1.6 действительно используют малую часть современного ядра. Покупать им больше - значит покупать простой.
Во-вторых, игры в верхней части таблицы оказались там из-за большой побочной работы, а не потому, что симуляция масштабируется. Сервер Rust с заданным интервалом пишет сохранение размером в десятки или сотни мегабайт и запускает сборщик мусора по большой управляемой куче; и то и другое требует ядра, которое не занято главным потоком. 7 Days to Die строит меши чанков и обсчитывает массу путей для зомби. Ни одна из этих игр не получит более быстрый тик от пятого ядра.
В-третьих, две игры решают проблему CPU, запуская больше процессов, а не больше потоков. Arma 3 переносит AI на headless-клиенты - отдельные игровые процессы, которые подключаются к серверу как игроки и забирают себе группы AI, - поэтому миссия с сотнями AI-юнитов использует три-четыре ядра как три-четыре главных потока. Настройка описана в статье headless-клиенты Arma 3. Don't Starve Together запускает поверхность и пещеры как два серверных процесса, так что кластер с пещерами - это два главных потока, делящих один выделенный объём.
Одноядерная скорость: что сравнивать#
Если вы выбираете железо для VDS или сравниваете хостинги, сравнивайте однопоточную производительность, а не количество ядер или общий балл бенчмарка.
- Однопоточные результаты бенчмарков (Geekbench single-core, PassMark single-thread, Cinebench single-core) ближе всего отражают время тика. Многоядерный балл умножает не то число.
- Частота в бусте важнее базовой, но только если буст держится постоянно. Десктопный процессор, который весь день держит одно ядро на полном бусте, ведёт себя совсем иначе, чем плотный серверный чип, у которого частота всех ядер под нагрузкой на гигагерц ниже.
- Для симуляций важен кэш. Игры каждый тик проходят по большим спискам сущностей и чанков; процессор с большим кэшем на ядро держит больше этого списка поблизости, поэтому некоторые десктопные процессоры с большим кэшем на игровых нагрузках обгоняют серверные чипы с большим числом ядер.
- Важно поколение. Свежее десктопное ядро на той же частоте делает за тик заметно больше, чем ядро пятью поколениями старше. Одну лишь частоту между архитектурами сравнивать нельзя.
Честный ответ для большинства тех, кто арендует игровой сервер: точную модель процессора вам не скажут и выбрать её вы не сможете, поэтому доверять можно только одному бенчмарку - времени тика вашего сервера под вашей нагрузкой. На RE:NODE модель процессора указана только для линейки VDS - Intel i9-9900K; для общих игровых нод модель не указывается, а способы измерения времени тика ниже работают одинаково на любой из них.
Как доказать, что упор в CPU#
Прежде чем что-то покупать, убедитесь, что заканчивается действительно процессор. Путаница между памятью и CPU - самая частая ошибка при выборе ресурсов, и подробнее о ней - в статье CPU или RAM: что тормозит ваш сервер.
Смотрите собственные цифры тиков игры
Каждый серьёзный игровой сервер сообщает, сколько длятся его тики. Узнайте, где это делает ваш:
- Minecraft:
/msptна Paper или/spark tps. MSPT выше примерно 40-45 - сервер близок к пределу; TPS ниже 20 - предел уже пройден. - Factorio: здесь показатель - UPS, его может вывести подключённый клиент через отладочные настройки F4. Фабрика, которая не держит 60 UPS, по определению упирается в CPU, и вместе с ней замедляются все игроки.
- Rust:
server.fpsпоказывает текущую частоту кадров сервера. Здоровый сервер работает заметно выше 30; если во время рейдов показатель сползает к однозначным числам, главному потоку не хватает времени. - Arma 3:
#monitor 1с клиента администратора каждую секунду выводит FPS сервера и память. FPS сервера ниже примерно 20 - порог, за которым заметно страдают AI и техника. - Игры на Source:
statsв консоли сервера показывает CPU, входящий и исходящий трафик, аптайм и FPS. - FiveM: сервер сам предупреждает в консоли, когда тик длится слишком долго, а
profiler recordзаписывает, куда ушло время.
Сравнивайте график с лимитом
График CPU в панели строится относительно выделенного объёма. Три формы - три смысла:
- Ровно на лимите, пока игроки жалуются. Потолок - выделенный объём. Тариф выше поможет, если есть реальная побочная работа, которую можно на него переложить.
- Заметно ниже лимита, пока игроки жалуются. Главный поток упёрся примерно в одно ядро, либо проблема в чём-то другом. Больший объём не поможет; поможет меньший объём работы на тик.
- Пики через равные промежутки. Сохранения, запланированные задачи или backup. Прежде чем что-то менять, проверьте, совпадают ли пики с жалобами на лаги.
Смотрите на потоки, а не на процесс
На VDS или собственной машине можно увидеть каждый поток отдельно:
$ top -H -p "$(pgrep -f RustDedicated)"$ pidstat -t -p "$(pgrep -f RustDedicated)" 1top -H выводит потоки вместо процессов. Если один поток держится на 98-100%, а остальные почти простаивают, это главный поток, и это потолок. pidstat -t (из пакета sysstat) даёт ту же картину в виде непрерывного лога, который можно оставить работать на весь загруженный вечер. Замените имя процесса на бинарный файл своей игры. В статье как читать загрузку CPU игрового сервера однопоточная картина разобрана подробнее, а как читать график нагрузки сервера посвящена стороне панели.
Что повышает нагрузку на CPU без роста числа игроков#
Большинство проблем с CPU создают те, кто управляет сервером, а не те, кто на нём играет. В порядке того, как часто они встречаются:
- Плагины и скрипты. Каждый обработчик событий плагина Minecraft, каждый плагин SourceMod, каждый ресурс FiveM с циклом
while trueи коротким ожиданием выполняется в главном потоке. Один плохо написанный может стоить дороже тридцати игроков. Для этого есть профилировщики - spark, профилировщик FiveM, встроенный профилировщик SourceMod, - и они называют виновника. - Сущности. Фермы мобов, кучи предметов, постройки-деплояблы в Rust, популяция зомби в Zomboid, приручённые существа в ARK, орда в 7 Days to Die. Нагрузка на CPU растёт вместе с тем, что нужно обновлять каждый тик, а число сущностей тихо растёт между перезапусками.
- Генерация мира. Исследование новой местности - самое дорогое, что делает большинство серверов выживания и песочниц. Предварительная генерация карты (Chunky для Minecraft, однократно сгенерированные карты с фиксированным сидом в Rust) переносит эту нагрузку на спокойный час.
- Дальность симуляции.
simulation-distanceв Minecraft,ServerMaxAllowedViewDistanceв 7 Days to Die, network bubble в DayZ - каждая настройка, расширяющая активную область, умножает работу на тик. - Сам тикрейт. Игра на Source с 128 tick получает вдвое меньший бюджет на тик, чем с 64. Для соревновательного сервера CS2 в этом весь смысл; для казуального это процессорное время, потраченное впустую.
Что полезно знать о конкретных играх#
Minecraft. Paper выносит загрузку чанков и часть расчёта освещения из главного потока, поэтому сервер на Paper использует больше одного ядра без каких-либо специальных настроек. Folia идёт дальше и делит мир на регионы, которые тикают в отдельных потоках, но ломает большинство плагинов; это вариант для больших серверов, которые переросли всё остальное. Для всех остальных CPU выигрывается через оптимизацию Paper.
Factorio. Обновление в Factorio детерминированное и выполняется в lockstep: каждый клиент считает ту же симуляцию, поэтому сервер работает не быстрее самой медленной машины, которая должна успевать. В последних версиях часть обновления распараллелили, но большие фабрики всё равно упираются в одно ядро. Вернуть UPS помогают меньшее число сущностей, меньше конвейеров с предметами и меньше манипуляторов, проверяющих пустые сундуки. Подробности - в статье моды Factorio и производительность UPS.
Rust. Нагрузку в Rust определяет число сущностей. Сервер в день вайпа и тот же сервер через шесть дней - это разные машины, потому что каждый строительный блок и каждая установленная постройка - сущность, которую сервер должен передавать всем, кто находится рядом. Нагрузка на CPU растёт в течение вайпа вместе с памятью.
Шутеры. Counter-Strike 2, TF2 и Insurgency: Sandstorm загружают фиксированную карту и держат её в памяти; их нагрузка - работа на тик для каждого игрока, небольшая и постоянная. Ванильный сервер CS2 на десять игроков её почти не замечает. Меняют картину плагины, боты и GOTV.
Игры на выживание на Unreal Engine. Palworld, ARK, The Front, Satisfactory и Soulmask используют выделенный сервер Unreal, который действительно задействует несколько потоков для сети, загрузки и физики. Но когда базы разрастаются, пределом всё равно остаётся главный игровой поток, а аппетит к памяти обычно и так вынуждает брать тариф с достаточным CPU.
Как выбрать долю CPU#
Короткий порядок действий, который подходит большинству игр:
- Начните с доли, рекомендованной для игры: 1-1,5 vCPU для лёгких игр, 2 для игр на выживание и песочниц, 2,5-3 для больших модифицированных или заскриптованных серверов.
- Погоняйте сервер неделю с реальными игроками и смотрите собственные цифры тиков игры в самый загруженный час, а не средние значения.
- Если время тика в норме, остановитесь. Дополнительную долю CPU никто не почувствует.
- Если время тика плохое, а график в панели ровно стоит на выделенном объёме, перейдите на тариф выше. На RE:NODE доля CPU растёт с каждым тарифом, а смена тарифа меняет лимит на уже существующем сервере, а не пересоздаёт его.
- Если время тика плохое, а график ниже выделенного объёма, потолок - главный поток. Профилируйте и убирайте нагрузку; никакой тариф этого не исправит.
Большинство игровых тарифов RE:NODE начинается с 0,5 vCPU на самых маленьких тарифах Terraria и Counter-Strike 1.6 и доходит до 3,5 на самых больших тарифах для игр на выживание, а RAM и диск растут вместе с ними. В статье требования игровых серверов по играм отправная точка для каждой игры собрана в одной таблице.
FAQ#
Используют ли игровые серверы несколько ядер?
Часть работы - да: сохранения, загрузку, сеть, сборку мусора, а в некоторых движках генерацию чанков или физику. Сама симуляция почти всегда выполняется в одном потоке. Поэтому два ядра намного лучше одного, а восемь почти ничего не дают по сравнению с двумя.
Вреден ли hyper-threading для игровых серверов?
Не вреден, но hyper-thread - это не ядро. Два загруженных потока на одном физическом ядре делят его, поэтому главный поток рядом с загруженным соседом работает медленнее, чем в одиночку. На VDS это стоит учитывать при распределении ядер; на общем хостинге это часть того, что вы арендуете, и увидеть это нельзя.
Почему сервер лагает, когда загрузка CPU всего 40%?
Потому что процент усредняется по выделенному объёму и по интервалу замера. Сервер с 2,5 vCPU, у которого насыщен главный поток, показывает примерно 40% использования выделенного объёма, при этом времени на тики у него совсем не остаётся. Смотрите вместо этого на показатель тиков или FPS самой игры.
Исправит ли более быстрый CPU откаты?
Только если откаты вызваны опаздывающими тиками. Если показатели тиков игры в норме, причина - сетевая задержка, потеря пакетов или, в играх вроде Valheim, игрок с плохим соединением, который симулирует часть мира. Сначала проверьте время тиков, потом сеть.
Сколько CPU нужно серверу с модами?
Обычно на один тариф больше, чем ванильной игре, и зависит это от того, что делают моды, а не от их количества. Контентные моды, которые лишь добавляют предметы, почти ничего не стоят на тик. Моды, добавляющие механизмы, AI, автоматизацию или скрипты на каждый тик, стоят много. Профилируйте встроенными инструментами игры до и после добавления крупного мода.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.