Железо для игрового сервера: частота важнее ядер
Игровой сервер считает мир в одном потоке: весь тик — физика, ИИ, события — выполняется на одном ядре. Поэтому решает частота этого ядра и стабильность её удержания, а не общее число ядер. Ядра нужны там, где вы поднимаете несколько инстансов рядом: каждый получит своё. Память берут по числу инстансов, диск — NVMe под загрузку карт и сейвы.
- Один мир = одно ядро. Восемь ядер не ускорят один тик, но позволят держать восемь миров.
- Бюджет тика при 20 tps — 50 мс, при 64 tps — около 15 мс. Выход за бюджет игроки видят как рывки.
- Память: по 4–8 GB на мир в Minecraft Java, по 1–2 GB на инстанс Source, по 8–16 GB на крупный мир Rust.
- Игровой трафик — это много мелких UDP-пакетов, а не гигабиты. Канал упирается в pps, а не в ширину.
- Governor в режиме powersave даёт плавающую частоту и нестабильный тик; ставьте performance.
Почему частота, а не количество ядер
Цикл симуляции у большинства движков последовательный: сервер обсчитывает состояние мира, рассылает снапшоты и засыпает до следующего тика. Распараллелить этот цикл нельзя, потому что каждый шаг зависит от результата предыдущего. Ядро с более высокой частотой проходит тот же цикл за меньшее время — это прямой выигрыш, который виден в графике времени тика.
Многоядерность работает иначе: она даёт изоляцию. Три мира Minecraft на трёх ядрах не мешают друг другу, а один мир на двенадцати ядрах будет грузить одно ядро и простаивать на остальных. Общая логика выбора процессора под задачу разобрана в статье про выбор процессора для сервера.
Отсюда практический вывод: на одном тяжёлом мире с сотней игроков тариф с E3-1270v6 может отработать не хуже двухпроцессорной машины, а на десяти небольших мирах выиграет E5-2680v4 с большим числом потоков.
Сколько памяти и диска нужно
| Профиль | RAM на инстанс | Что ещё критично | Подходящий тариф |
|---|---|---|---|
| Minecraft Java, 20–40 игроков, модпак | 6–8 GB | Частота ядра, NVMe под генерацию чанков | Start DE / Start FR |
| Source-игры, 3–5 инстансов | 1–2 GB | Стабильный tickrate, низкий джиттер | Start DE / Start US |
| Rust, средний мир | 10–16 GB | Память и скорость загрузки мира | Pro DE / Pro FR |
| 10 и больше миров разом | 32–64 GB суммарно | Число потоков, RAID10 под сейвы | Enterprise US |
Старт мира читает с диска сотни мегабайт, а автосейв пишет их обратно под нагрузкой: на SATA SSD это заметная просадка тика, на NVMe она пропадает. Тарифы Pro и Enterprise идут с NVMe в RAID1 и RAID10, конфигурации перечислены на странице выделенных серверов.
Канал, задержка и локация
Игровой сервер отправляет каждому игроку снапшот каждый тик. Ширина канала при этом расходуется скромно, а вот пакетов в секунду получается много, и именно их обрабатывает сетевой стек. Unmetered-канал на 100 Мбит/с в Германии спокойно держит десятки игровых слотов, но лимит трафика стоит проверить, если вы ещё и раздаёте модпаки: про это в статье про канал сервера и лимиты трафика.
Задержка до игроков важнее всего остального железа. Выбирайте площадку по географии аудитории и проверяйте её замерами — методика описана в статье про выбор локации сервера.
Настройка Linux под стабильный тик
Три вещи дают больше, чем любые «оптимизации» конфига игры: фиксированная частота, увеличенные сетевые буферы и приоритет процесса.
# Debian/Ubuntu: фиксируем частоту на максимум
apt-get install -y linux-cpupower
cpupower frequency-set -g performance
# RHEL/AlmaLinux/Rocky
dnf install -y kernel-tools tuned
tuned-adm profile latency-performance
# проверяем, что частота действительно держится
grep MHz /proc/cpuinfo | head -4
cpupower frequency-info | grep -E 'governor|current'
# сетевые буферы под много мелких UDP-пакетов
cat << 'EOF' > /etc/sysctl.d/90-game.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 5000
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384
EOF
sysctl --system 2>&1 | grep -E 'rmem_max|backlog'
# приоритет процессу мира и его диску
systemctl set-property game@world1.service CPUWeight=900 IOWeight=900
После изменений смотрите не на среднее время тика, а на максимум за минуту: рывки живут именно в пиках. Если пики совпадают с автосейвом, разносите сейвы разных миров по времени.
Игровые порты живут на UDP, и фильтрация L7 их не закрывает: против флуда на игровой порт работает именно L3/L4-защита на уровне аплинка. На площадках в Германии и США она включена на всех тарифах, во Франции работает Anti-DDoS Arbor; подробности — в статье про DDoS-защиту выделенного сервера. Вторая типичная ошибка — оставить governor в powersave и потом искать причину рывков в конфиге игры. Проверяйте так: запустите нагрузку, снимите grep MHz /proc/cpuinfo несколько раз подряд и убедитесь, что частота не проваливается между замерами.
Коротко
- Один мир считается одним ядром: частота даёт прямой выигрыш во времени тика, число ядер — только в числе миров.
- Память планируют по инстансам: 6–8 GB на модпак Minecraft, 1–2 GB на инстанс Source, 10–16 GB на мир Rust.
- NVMe убирает просадки тика на автосейве и генерации карты, SATA SSD их оставляет.
- Канал расходуется на пакеты, а не на гигабиты; критичнее ширины — задержка до аудитории.
- Governor performance, увеличенные UDP-буферы и приоритет процесса дают больше, чем правки конфига игры.