Сборка сервера

Калькулятор нагрузки на тик

Сколько миллисекунд из 50-миллисекундного бюджета тика (20 TPS) стоят корабли Sable, механизмы Create и форслоад-чанки. Коэффициенты получены из замеров сервера Runes & Rails (NeoForge 1.21.1, Create, Sable, Aeronautics); у каждого указан источник, интервал и степень уверенности.

Как читать результат. Это интервал «от–до» и центральная оценка, а не точное число: данных на сегодня мало, и мы показываем всё, что знаем, вместе с тем, чего не знаем. Красным помечены допущения без замеров. Размер корабля в блоках в модель не входит — зависимость от размера пока не измерена (методика замера — ниже); живой замер настоящим движком физики — в симуляторе нагрузки.

Что у вас построено

летят, или рядом (<150 блоков) с игроком
медленно/редко, режим sable-ship-lod
далеко от игроков, заморожены
валы, шестерни, деплоеры, конвейеры…
чанки, которые держатся прогруженными без игрока

Результат

—центральная оценка, мс/тик
—интервал «от–до», мс/тик
—доля бюджета тика (50 мс)
—вклад в пик автосейва кораблей, мс
СтатьяКол-воОт, мсЦентр, мсДо, мсОснова

Коэффициенты и откуда они

ПараметрОтЦентрДоТипИсточник и оговорки

измерено — получено регрессией по замерам стенда. выведено — вычислено из журналов сервера арифметикой интервалов. допущение — прямого замера нет, границы заданы из конфигов модов. Данные и скрипт: CSV стенда, fit.py, model.json.

Математика

Нагрузка складывается из независимых статей, все коэффициенты неотрицательны:

ΔM = n_a·c  +  n_c·φ_c·c  +  n_f·φ_f·c  +  n_m·β  +  n_h·κ

ΔM — добавка к времени тика (MSPT), мс
c  — стоимость активного корабля Sable          φ_c, φ_f — доля стоимости для «крейсера» и «заморозки»
β  — стоимость блока механизма Create в простое  κ — стоимость форслоад-чанка

Каждый коэффициент — интервал [lo; hi] со средним mid. Раз все слагаемые монотонны, интервал итога — сумма интервалов: lo = Σ n·lo, hi = Σ n·hi; mid — геометрическое среднее границ (оно же — оценка, если нет данных о форме распределения). Это огибающая, а не статистический доверительный интервал: она заведомо шире, чем при независимых ошибках, зато не обещает лишнего.

Бюджет и запас: тик должен укладываться в B = 50 мс. В дневные часы (14–25 игроков) средний тик на проде 30–38 мс, поэтому запас H = B − M_день ∈ [12; 20] мс; в пик (50+ игроков, TPS ≈ 18) запаса нет. Шкала выше — доля от H = 12 мс.

Как получены коэффициенты

Самопроверки модели (выполняются в fit.py):

Чего калькулятор не знает.

Как уточнить модель (следующие замеры на стенде, каждый — A/B с чередованием ABBA, как в bench_bots.sh):

  1. Корабли 500 / 5 000 / 30 000 / 64 000 блоков × состояния «лежит» / «летит» × число узлов Create на борту → c(B) = c₀ + c₁·B^γ, показатель γ — из регрессии в логарифмах.
  2. Припаркованный корабль: тик с N кораблями при игроке рядом и вдали → φ_f, φ_c вместо допущений.
  3. Работающие установки Create (дробилки, деплоеры, миксеры) по 10/100/500 штук, с игроком рядом и вдали → β для рабочего режима.