▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Моды/KAllFix - Мультипоточность и оптимизация сервера
KAllFix - Мультипоточность и оптимизация сервера

KAllFix - Мультипоточность и оптимизация сервера

KAllFix - технический мод для Minecraft, который раскидывает тики блоков, сущностей и измерений по потокам процессора и чинит ошибки популярных модов. Реальный способ поднять TPS сервера на тяжёлой сборке.

Оцените первым
16.7K
28

KAllFix - мод для Майнкрафт от разработчика n1luik, и это один из самых необычных оптимизаторов, что мне попадались. Если Canary или Lithium просто ускоряют ванильный код в рамках одного потока, то KAllFix идёт радикально дальше: он принудительно выносит тики блоков, тиковых блоков-сущностей (block entities), обычных сущностей и даже целых измерений в отдельные потоки процессора. А поскольку Minecraft изначально спроектирован как однопоточная игра и на сервере с 200+ модами грузит в лучшем случае пару ядер, профит на многоядерном железе получается очень ощутимым.

По духу проект напоминает ModernFix - такой же швейцарский нож, который чинит чужой код. Только здесь упор именно на серверную производительность. Вторая половина мода - огромный набор точечных фиксов под конкретные моды, от AE2 до Alex's Caves. Если собираете сервер на Forge 1.20.1 с тяжёлой сборкой модов (GregTech, Create, Cataclysm) - этот проект стоит изучить в первую очередь. Скачать KAllFix можно бесплатно, но приготовьтесь читать мануал: обычного конфиг-файла тут нет вообще, всё настраивается через JVM-параметры при запуске.

Что именно оптимизирует мод

Список впечатляет, и по нему видно, что автор реально профилирует сервера, а не гадает:

  • Upgraded Additional Trims - общая оптимизация производительности.
  • Atmospheric - убирает оверхед от проверки первоапрельской даты. Да, мод каждый тик проверял, не 1 апреля ли сегодня.
  • Upgraded Core - оптимизация ядра библиотеки.
  • [Let's Do] Farm & Charm - ускорение ИИ курятников, которые на больших фермах начинали жрать заметную часть тика.
  • Event Wrapper.
  • Create: FluidLogistics - параметр -DKAF-fluidlogistics.DisabledDynamicUp=true отключает обновление старых id, без этого возможны просадки.
  • AE2 - оптимизация игровых вычислений, на больших МЭ-сетях разница заметна.
  • ItemStack.isSameItemSameTags - ускорение ванильного сравнения предметов, которое вызывается тысячи раз за тик.
  • PPMO2 (Project MMO).
  • Вырезает мёртвый код из Apotheosis и Create: Connected.

Исправленные баги и конфликты

Тут KAllFix вообще уникален. Автор латает конкретные проблемы конкретных модов:

  • L_Ender's Cataclysm + MineColonies - фикс просадок производительности из-за подсчёта сущностей на сервере, где стоят оба мода.
  • [Let's Do] Farm & Charm - останавливает спам невалидными пакетами.
  • Biolith + ворлдген-моды на MCreator (например, Terramity) - решает конфликты генерации мира.
  • Gregicality Rocketry + Canary - фикс совместимости, правда проблемы с хитбоксами на границах космических станций могут остаться.
  • Petrolpark's Library 1.4.2 не запускалась на некоторых Java-средах - теперь запускается (фикс отключается через -DKAF-DisablePetrolpark=false).
  • Alex's Caves - оптимизация и фикс просадок, связанных с магнитными полями.
  • Create: Diesel Generators - чинит тормоза от миксинов.
  • Старые версии Destroy - убирает краши сервера из-за ошибок подключения к базе данных.

Мультипоточность - главная фишка KAllFix

Теперь к самому интересному. Модуль k_multi_threading умеет распараллеливать:

  • тики блоков (block ticks);
  • тики block entities - это механизмы, печки, трубы, всё то, что обычно душит сервер в технических сборках;
  • тики сущностей;
  • тики измерений целиком;
  • приём пакетов игрока (включается вручную, только клиент);
  • логин игроков (включается вручную).

На сервере мультипоточность включена по умолчанию. На клиенте до версии 1.0.4.0 она не работала вовсе, а начиная с 1.0.4.0 включается параметром -DKMT_Client=true.

Важный нюанс, без которого лучше не запускать. Обязательно задайте -DKMT-threadMax=[количество потоков вашего CPU]. Если этого не сделать, генерация мира может просто зависнуть намертво. Если зависания продолжаются и после установки - повышайте значение выше числа физических потоков.

Ещё несколько практических моментов из опыта автора:

  • Ошибки вида "thread-pool interception" или превышение лимитов в логах - норма, обычно сервер от них не падает. Не паникуйте, увидев красные строки.
  • После версии 1.0.3.3 код ParaServerChunkProvider, TaskRun и часть генерации чанков сильно завязаны на C2-компиляцию JVM. Проще говоря: не судите производительность по первым минутам после старта, машине нужно время прогреться.
  • На Windows Server 2022 Datacenter (среда самого автора) редко встречаются аномалии планировщика потоков с аномально высокой загрузкой CPU. Лечится банальным рестартом сервера.

Полный список JVM-параметров

Конфига в привычном понимании нет, так что этот раздел - фактически ваш config file. Сохраняю все параметры с пояснениями.

Базовые

  • -DKAllFix_D=[любые символы] - полностью отключает KAllFix.
  • -DKMT_Client=true - включает мультипоточность на клиенте (с версии 1.0.4.0).
  • -DKAF-DisablePetrolpark=false - отключает фикс для Petrolpark's Library 1.4.2.

Потоки и пул

  • -DKMT-threadMax=[число] - размер пула потоков. Ставить обязательно.
  • -DKMT-callMax=[число] - максимум потоков, которые может задействовать одна мультипоточная задача.
  • -DKMT-ThreadpoolKeepAliveTime=[миллисекунды] - время жизни простаивающих потоков до их очистки.
  • -DKMT_D=[любые символы] - отключает мультипоточность.
  • -DKMT-OpenVanillaServerChunkCache=true - принудительно включает ванильный путь фикса ServerChunkCache (добавлено в 1.0.5.3).

Соединение и таймауты

  • -DKAF-ClientboundKeepAlivePacket_Max=[миллисекунды] - меняет требования по времени для keep-alive пакетов (по умолчанию 15 секунд; в ванилле должно быть меньше 30, иначе игрока кикнет за таймаут).
  • -DKAF-ServerTimeout=[секунды] - таймаут подключения к серверу. Может не сработать в отдельных случаях.
  • -Dforge.readTimeout=[секунды] - таймаут чтения пакетов Forge. Используйте вместе с предыдущим: forge.readTimeout покрывает только чтение пакетов, а не сетевые потоки клиента и сервера.

Миксины, NBT, автокоманды

  • -DKAF-RemoveMixin:[имя класса] - отключает указанный миксин (работает и для миксинов из k_multi_threading). Полезно при диагностике конфликтов.
  • -DKAF-NbtIoMixin_NotGZip=true - добавляет try-catch в NBT IO для файлов без gzip (небезопасно, требует commons-compress).
  • -DKMT-ChunkGeneratorMode2Start=[true,false] - автоматически выполняет /SetterWorldConfig world setM2 %%KMT-ChunkGeneratorMode2Start%%.

Контроль размножения мобов

  • -DKAF-ChunkBreedingControlSize=[число] - запрещает размножение животных, если сущностей в чанке больше указанного. Без параметра (или если значение пустое/не число) функция выключена. Отличная защита от ферм на 500 коров в одном чанке.
  • -DKAF-ChunkBreedingControlSizeEnable=[true,false] - кэш результатов проверки; ручная установка может быть перезаписана самим модом.

Опциональные функции

  • -DKMT-SafeUnloadChunk=true - выгрузка чанков в потоках генерации (рекомендуется только для версий ниже 1.0.4.2 при соответствующих зависаниях).
  • -DIndependencePlayer=true - асинхронная обработка игроков (по словам автора, прироста почти не даёт).
  • -DFixBiolithBugMode2=true - пытается пофиксить большинство проблем совместимости Biolith, но может привнести серьёзные баги.
  • -DKAF-gtceu.MedicalConditionTrackerMixin=true - отключает радиацию в GTM.
  • -DKAF-RemoveClientboundKeepAlivePacket=true - отключает ванильный keep-alive (пинг перестанет считаться).
  • -DKAF-RemoveFlyingTest=true - убирает проверки полёта, чтобы античит ваниллы не кикал игроков.
  • -DKAF-moonrise_fast_palette=true - отключает функцию fast_palette из Moonrise.
  • -DKAF-FixTFMGDestroy=true - чинит совместимость Destroy и Create (помпа Creative Pump не подключалась к трубам Create).
  • -DKAF-Fix_fabric-object-builder-api.jar=true - решает конфликт fabric-object-builder-api из Sinytra Connector с forge-47.3.27.
  • -DKAF-FixAllPacket=true - фикс сетевых пакетов (включать и на клиенте, и на сервере); затрагивает Mekanism Explosives, Create, The Abyss II.
  • -DKAF-ChunkAwareBlockCollisionSweeperFast=true - заменяет ChunkAwareBlockCollisionSweeper из Lithium аппроксимирующим алгоритмом.

Мультипоточный логин

  • -DKMT-LoginMultiThreading=true - включает многопоточный вход игроков. На серверах, где на старте заходит толпа, вещь полезная.
  • -DKMT-LoginMultiThreading.ConnectionLock=true - ждёт завершения асинхронных задач в конце тика. Отключение чуть поднимет производительность, но снизит стабильность логина вплоть до крашей.
  • -DKMT-LoginMultiThreading.TaskSizeMax=[число] - лимит одновременных задач логина (по умолчанию 8).
  • Учтите: из-за многопоточного логина сервер может получить ServerboundMovePlayerPacket раньше времени, что вызовет одну ошибку в логе. Не страшно.

Оптимизация пакетов

  • -DKAF-packetOptimize=true - оптимизирует часть ванильных пакетов (включать строго на клиенте и сервере одновременно).
  • -DKAF-packetOptimize.AttributesReOutputTime=[миллисекунды] - интервал принудительной повторной отправки атрибутов (по умолчанию 2 минуты).
  • -DKAF-packetOptimize.CompatibilityMode.ClientboundBlockEntityDataPacket=true - более консервативное сжатие пакета, бьёт по производительности, но повышает совместимость.
  • -DKAF-packetOptimize.CompatibilityMode.ClientboundSectionBlocksUpdatePacket=true - то же самое для пакета обновления блоков секции.

Прочее

  • -DKAF-UnsafeCinderscapesFix1=true - ограничивает прожорливую функцию enableAshFall в Cinderscapes.
  • -DKAF-fix.asynchronous.ClientboundCustomQueryPacket=true - делает рукопожатие асинхронным, снижая шанс, что игрок не сможет зайти на сервер с гигантским списком модов.
  • -DKAF-FixConfigAuto=true - автоматически меняет часть опций в конфигах других модов ради совместимости. Подробнее ниже, там есть подводные камни.

Установка

  • Начиная с версии 1.0.3.18 мод работает сразу после помещения в папку mods (функция установки при этом сохранена).
  • Для версий ниже сначала нужно запустить установщик командой: java -jar k_multi_threading-xxx.jar -i [пусто или папка установки].
  • Установка создаёт два файла: k_multi_threading-base.jar и k_multi_threading-asm.jar.
  • Некоторые функции докачивают зависимости (Zstd-jni 1.5.7-2). Если скачивание не удалось, положите их вручную в папка_игры/lib.

Совместимость: что нужно знать до запуска

Это самый важный раздел для живого сервера, не пропускайте.

Параметр -DKAF-FixConfigAuto=true автоматически отключает:

  • logOffthreadEntityAdd в Cupboard;
  • world.tick_scheduler и entity_by_type в Canary / Lithium - но вы обязаны вручную добавить mixin.world.tick_scheduler=false в config/canary.properties или config/lithium.properties, иначе эти моды перезапишут мультипоточный фикс для ClassInstanceMultiMap.

Случаи, когда -DKAF-FixConfigAuto=true лучше НЕ трогать:

  • Возможен конфликт с mixin.perf.cache_upgraded_structures из ModernFix - отключайте через mixin.perf.cache_upgraded_structures=false в config/modernfix-mixins.properties.
  • С включённым мультипоточным логином ParCool может начать нормально работать только после первой смерти игрока на сервере. Странно, но факт.
  • Ars Creo изредка пишет в лог Modifier is already applied on this attribute! - без краша, просто шум.
  • Ядерные реакторы деления из NuclearCraft: Neoteric в редких случаях неверно считают охлаждение после рестарта сервера.

И общая честная оговорка автора: Minecraft и большинство модов изначально спроектированы под один поток, поэтому стопроцентной гарантии, что не будет ни одной проблемы, дать нельзя. Мой совет - перед выкаткой на прод погоняйте сборку на тестовом сервере пару дней и сделайте бэкап мира. И да, с некоторыми комбинациями модов KAllFix придётся поставить и игрокам на клиент, даже если видимого эффекта там нет.

Команды

  • /debug_GetterClassFile [имя класса] - выгружает итоговые runtime-данные класса в папку игры с именем вида время_save.class. Инструмент для разработчиков и тех, кто разбирается с конфликтом миксинов.

  • /SetterWorldConfig [world, ClearErrorSize, RemoveRemoveErrorSize] - настройки этой команды не сохраняются между перезапусками.

    • ClearErrorSize - очищает счётчик зафиксированных "ошибок с риском краша сервера".
    • RemoveRemoveErrorSize - прекращает вести счётчик, но продолжает перехватывать ошибки.
    • Внутри world [id измерения из реестра] доступны:
      • setM2 [true,false] - переключает измерение на альтернативный режим реализации; приоритет выше, чем у setMultiThreading, но может заморозить игру.
      • setMultiThreading [число] (по умолчанию 0) - количество параллельных задач для конкретного измерения; независимый от setM2 режим, тоже способен заморозить игру.

Исходный код

Автор честно указывает заимствования: функция moonrise_fast_palette использует код Moonrise, а фиксы совместимости Gregicality Rocketry и Canary построены на исходниках Canary.

Стоит ли ставить

Если у вас клиент с парой модов ради косметики - проходите мимо, тут нечего ловить. Но если вы держите сервер на Forge 1.20.1 с тяжёлой сборкой, где GregTech соседствует с Create и Alex's Caves, а TPS проседает каждый вечер в прайм-тайм - KAllFix может дать то, чего не даст ни один другой оптимизатор: реальную утилизацию всех ядер процессора. Из коробки он не для новичков, без JVM-параметров и чтения мануала не взлетит, зато настроенный правильно вытягивает сервера, которым профилировщики вроде spark показывали красный MSPT по всем фронтам. Скачайте мод KAllFix, задайте -DKMT-threadMax под своё железо, прогрейте JVM - и смотрите, как растёт TPS.

Партнёрский материал

Как поиграть с друзьями с модом KAllFix - Мультипоточность и оптимизация сервера?

Мод KAllFix - Мультипоточность и оптимизация сервера куда интереснее в компании: поднимите сервер Майнкрафт с уже установленным модом, позовите друзей и играйте по своим правилам. Хостинг Майнкрафт для мода KAllFix - Мультипоточность и оптимизация сервера будет готов за пару минут - BungeeHost сделает всё за вас.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

1.21.x1.20.x1.19.x

Платформы

Поддерживаемые окружения

Клиент и сервер

Ссылки

Детали

Лицензия:
Опубликован:1 год назад
Обновлён:1 месяц назад
Главная