После вайпа главными статьями тика остаются два больших мода: 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 %.


На живом сервере через 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.
Мы нашли два места, где работа тратилась впустую:
sable-ship-lod2.10.0. Пересчёт плавучести и сил, который раньше выполнялся на каждом тике, теперь выполняется раз в три тика. Корабли ведут себя так же: высота летающих кораблей за минуты наблюдения почти не меняется. Параметр настраивается на ходу.sable-spatial-index1.0.0. Когда сервер спрашивает «какие корабли находятся рядом с этой точкой», он раньше перебирал все корабли подряд. Теперь есть карта-индекс, которая отдаёт только ближайшие. Ответы такие же: на проверке из сотен миллионов запросов не было ни одного расхождения.
Включали и выключали на живом сервере #
Лаборатория не заменяет сервер с игроками, поэтому 22 октября вечером мы 20 минут переключали обе правки по схеме «вкл / выкл / выкл / вкл» (по 5 минут, онлайн 25–26 игроков). Режим «выкл» — это прежнее поведение сервера.

| вкл | выкл | разница | |
|---|---|---|---|
| Время тика (в среднем по фазам) | 57,5 мс | 60,8 мс | −3,2 мс (−5 %) |
| Время физики Sable | 10,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 октября. Зарегистрированное и заклеймленное не пострадало, жалоб от игроков нет.

В мире было 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–19 | 47,2 | 45,3 |
| 20–24 | 51,0 | 47,3 |
| 25–29 | 62,0 | 56,9 |
| 30–34 | 70,5 | 62,4 |
| 35–39 | 90,8 | 64,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 (ленты, воронки, синхронизация труб).
- Разберёмся, почему отдельные крупные корабли с контрапциями добавляют к тику непропорционально много.
- Если вы заметите странное поведение кораблей, труб или жидкостей, пишите нам.