Сборка сервера
runes-and-rails / devblog / create-sable-optimization
DevBlog · 23 октября 2026

Create быстрее, Sable подтянулся

23 октября 2026. Что мы сделали с Create и Sable, как прошла очистка физических объектов и что показали замеры на живом сервере.

8 мин чтения 157 0 0
#Create#Sable#Оптимизация#Очистка
−18,5 %время тика (стенд, Create)
71 %лишних тиков труб пропущено
−3 мстик от правок Sable (A/B на живом)
464 → 294физ. объектов после очистки

После вайпа главными статьями тика остаются два больших мода: Create (трубы, ленты, насосы, механизмы) и Sable (физика кораблей и механизмов). Мы занялись обоими. Обе группы правок уже работают на сервере, очистка брошенных физических объектов прошла. Ниже: что получилось, насколько это заметно и чего мы пока не можем утверждать.


1Коротко #

ЧтоСтатус
Ускорение Create (трубы, жидкости, рецепты наполнения)работает на сервере с перезапуска 22 октября
Ускорение физики Sable (две правки)работает с 22 октября; на живом сервере тик короче примерно на 3 мс
Очистка незарегистрированных физических объектовпроведена 22 октября: 464 → 294 объекта, зарегистрированное не тронуто
Автоочисткавключена: раз в неделю по четвергам, правила те же
Общий итог при том же онлайнетик короче на 2–8 мс при 15–34 игроках, но вклад каждой правки отдельно разделить нельзя

2Create: меньше работы там, где ничего не происходит #

Create занимает заметную часть тика: в вечерний пик с 20–28 игроками механизмы Create составляли около трети времени главного потока. Больше всего времени уходило на трубы: каждая труба каждый тик проверяла, не изменилось ли что-нибудь, хотя в большинстве труб не менялось ничего.

Мы добавили мод create-hot-paths. Идея простая: не делать лишнюю работу, когда результат заранее известен. Геймплей при этом остаётся прежним.

  • Спящие трубы. Труба, у которой поток и давление устоялись, перестаёт пересчитываться каждый тик. Её будит любое событие: насос, новый поток, соседняя труба, загрузка мира. Для надёжности раз в секунду труба всё равно проверяется полностью.
  • Меньше рассылок клиентам. Одинаковые обновления труб склеиваются и уходят игрокам реже.
  • Рецепты наполнения. Кэш для Spout и наполнения предметов: результат один раз вычисляется и дальше берётся из памяти.
  • Умная перекачка жидкости. Сети труб перекачиваются реже, но большими порциями: пропускная способность та же.
  • Меньше накладных расходов на механизмы, у которых нет ничего, что нужно считать каждый тик.

Что показали проверки #

На тестовом стенде (полная копия модов сервера, 7 самых застроенных регионов мира, несколько кругов по схеме «выключено / включено»): время тика снизилось в среднем на 18,5 % (во всех четырёх кругах между −18,4 и −19,7 %), а доля труб в главном потоке упала с 11,8 % до 5,2 %.

Время тика на стенде без оптимизации и с ней, четыре круга: везде ниже примерно на 18–20 %
Время тика на стенде без оптимизации и с ней, четыре круга: везде ниже примерно на 18–20 %
Доля Create в тике и доля труб на стенде до и после
Доля Create в тике и доля труб на стенде до и после

На живом сервере через 27 минут после перезапуска при 33 игроках:

ПоказательЗначение
Пропущено лишних тиков труб71 % (56,2 млн из 78,8 млн)
Склеено рассылок обновлений труб60 % (2,1 млн из 3,6 млн)
Ошибок и автоотключений модулей0
Живой сервер: доля пропущенных тиков труб и склеенных рассылок
Живой сервер: доля пропущенных тиков труб и склеенных рассылок

Самое важное мы проверяли отдельно: не пострадали ли сами механизмы. Тест с бассейном, насосом, трубами и баком показал, что вода доходит до бака за те же 7 секунд, остановка насоса останавливает поток, а за 40 секунд налито практически столько же (разница 0–3 %).

Проверка жидкости: время до первой воды и налитый объём без оптимизации и с ней
Проверка жидкости: время до первой воды и налитый объём без оптимизации и с ней

Первая версия «сна труб» замедляла фронт потока вдвое, мы это поймали именно на таком тесте и исправили до выкладки.

Если вы заметите на своей базе что-то странное с жидкостями (труба «залипла», бак наполняется непривычно), напишите нам в Discord с координатами. Модули переключаются без перезапуска, так что любую проблему можно быстро проверить.


3Sable: две правки #

Физика Sable обсчитывает каждый корабль и каждую летающую конструкцию, и цена растёт с числом загруженных объектов, а не только движущихся: по данным 20–21 октября около 3 мс на тик при 10 объектах, 9 мс при 35 и 13–14 мс при 70–80.

Мы нашли два места, где работа тратилась впустую:

  1. sable-ship-lod 2.10.0. Пересчёт плавучести и сил, который раньше выполнялся на каждом тике, теперь выполняется раз в три тика. Корабли ведут себя так же: высота летающих кораблей за минуты наблюдения почти не меняется. Параметр настраивается на ходу.
  2. sable-spatial-index 1.0.0. Когда сервер спрашивает «какие корабли находятся рядом с этой точкой», он раньше перебирал все корабли подряд. Теперь есть карта-индекс, которая отдаёт только ближайшие. Ответы такие же: на проверке из сотен миллионов запросов не было ни одного расхождения.

Включали и выключали на живом сервере #

Лаборатория не заменяет сервер с игроками, поэтому 22 октября вечером мы 20 минут переключали обе правки по схеме «вкл / выкл / выкл / вкл» (по 5 минут, онлайн 25–26 игроков). Режим «выкл» — это прежнее поведение сервера.

Живой сервер: время тика и время физики вне нативного шага в четырёх фазах «вкл / выкл / выкл / вкл»
Живой сервер: время тика и время физики вне нативного шага в четырёх фазах «вкл / выкл / выкл / вкл»
вклвыклразница
Время тика (в среднем по фазам)57,5 мс60,8 мс−3,2 мс (−5 %)
Время физики Sable10,4 мс12,3 мс−1,9 мс
Физика вне нативного шага (то, на что нацелены правки)1,9 мс3,1 мс−39 %

В каждой паре соседних фаз «вкл» оказывается лучше «выкл». Нативный шаг физики, который мы не трогали, от переключения не менялся, как и должно быть.

Чего мы здесь не утверждаем. Всего четыре фазы, число загруженных кораблей между ними менялось (24–46), а вклад каждой правки отдельно мы пока не разделяли. Эффект на сервере получился скромнее лабораторного: около 3 мс на тик при 25 игроках, что грубо означает +0,9 TPS (с 16,5 до 17,4).


4Очистка незарегистрированных физических объектов #

Одна из причин нагрузки Sable совсем не техническая: в мире накопились брошенные физические объекты: старые корабли и механизмы, которые давно никто не двигает. Они делят с вашими живыми кораблями один и тот же бюджет тика.

Что удалялось (объект должен был подходить под все пункты сразу):

  • не зарегистрирован командой /shipreg register (лимит: 5 объектов на игрока);
  • не находится под клеймом AeroClaims (клейм = зарегистрирован);
  • ему больше 3 дней;
  • он не двигался не менее 24 часов.

Как прошла #

Перед очисткой мы проверили, что ни один из 30 заклеймленных объектов не попал в список, и сделали снимок кандидатов (203 объекта, структура каждого сохранена). Очистка прошла 22 октября. Зарегистрированное и заклеймленное не пострадало, жалоб от игроков нет.

Физических объектов в мире до и после очистки и число загруженных кораблей в Overworld
Физических объектов в мире до и после очистки и число загруженных кораблей в Overworld

В мире было 464 физических объекта, стало 294. Загруженных кораблей в Overworld при том же онлайне (22–23 игрока) стало 21 вместо 33. Если среди ваших объектов что-то пропало, снимок позволяет восстановить корабль: напишите нам.

Дальше очистка автоматическая. Она включена раз в неделю, по четвергам в 11:50 UTC (14:50 МСК), по тем же правилам, с предупреждениями в чат за 10 и за 2 минуты. Чтобы сохранить свой корабль: /shipreg register (стоя рядом), а список всех зарегистрированных кораблей публичный: страница **/ships** на сайте (поиск по нику, без координат).


5Общая картина: тик до и после #

Сравниваем время тика при том же числе игроков онлайн: 20–21 октября (до всех правок) и 22–23 октября (правки Create, правки Sable и чистка кораблей действуют вместе).

Время тика при том же онлайне до и после всех правок: 15–39 игроков
Время тика при том же онлайне до и после всех правок: 15–39 игроков
ИгроковДо, мсПосле, мс
15–1947,245,3
20–2451,047,3
25–2962,056,9
30–3470,562,4
35–3990,864,1 (всего 43 замера)

Доля 10-секундных окон с тиком дольше 50 мс при 20–24 игроках упала с 55 % до 31 %. Время физики Sable при 20–24 игроках уменьшилось с 10,5 до 5,8 мс.

Что здесь нельзя читать как заслугу одной правки. Сравнение смешивает три вещи: ускорение Create, правки Sable и очистку (при 30–34 игроках загруженных кораблей стало 38 вместо 57). Чистый вклад Sable-правок мы знаем только из прямого теста выше: около 3 мс. Остальное делят между собой Create и чистка, и разделить их по этим данным мы не можем. Нам есть куда стремиться: при большом онлайне тик всё ещё длиннее 50 мс, и мы продолжаем сокращать его.


6Что дальше #

  • Разделим вклад двух Sable-правок отдельным тестом и повторим его при 30+ игроках.
  • Продолжим сокращать долю Create (ленты, воронки, синхронизация труб).
  • Разберёмся, почему отдельные крупные корабли с контрапциями добавляют к тику непропорционально много.
  • Если вы заметите странное поведение кораблей, труб или жидкостей, пишите нам.
Оцените материал
Поделиться Telegram ВКонтакте Все посты
Комментарии
Загрузка комментариев…

Встретимся в Сезоне 1

Скачайте лаунчер, он сам подтянет моды сборки Steel Sky. Вопросы и находки — в Discord и поддержке.

Скачать лаунчер О сборке
Войдите, чтобы убрать рекламу