Скачать Sepals — Minecraft Моды — MetaMods

Sepals

Активный

Установок

0

Последнее обновление

3 недели назад

Версии

1.21 — 1.21.8
Сервер
Fabric
Neoforge
Оптимизация игры

Sepals

Мод Sepals представляет собой революционный экспериментальный подход к оптимизации производительности серверов Minecraft. Это комплексное решение, которое кардинально перерабатывает внутренние механизмы игры для достижения максимальной эффективности.

Совместимость с другими модами

Sepals демонстрирует отличную совместимость с большинством популярных модов оптимизации. Для достижения наилучших результатов рекомендуется использовать его в сочетании с другими оптимизационными решениями.

Проверенные комбинации:

  • Sodium - все версии
  • Iris - все версии
  • FerriteCore - все версии
  • Krypton - все версии
  • Lithium - версии 0.18.0 и выше
  • C2ME Fabric - версии 0.3.4.0.0 и выше
  • Moonrise Opt - версии 0.6.0-beta.1+45edfd7 и выше
  • Async - версии 0.1.7+alpha.7-1.21.8 и выше

Особое замечание по совместимости

При одновременном использовании Sepals и мода Async результаты могут варьироваться в зависимости от платформы. Рекомендуется тестировать различные конфигурации, отключая отдельные функции каждого мода, чтобы определить оптимальную комбинацию для вашего сервера.

Настройки конфигурации

Мод предлагает гибкую систему настроек, позволяющую тонко настроить оптимизацию под конкретные нужды:

  • forceEnableSepalsPoi - принудительное включение оптимизации точек интереса
  • enableSepalsVillager - оптимизация поведения жителей
  • enableSepalsFrogLookAt - улучшение механизма наблюдения лягушек
  • enableSepalsFrogAttackableSensor - оптимизация сенсоров атаки лягушек
  • enableSepalsLivingTargetCache - кэширование живых целей
  • nearestLivingEntitiesSensorUseQuickSort - использование быстрой сортировки
  • enableSepalsBiasedLongJumpTask - оптимизация задач прыжков
  • enableSepalsEntitiesCramming - улучшение обработки скопления существ
  • enableSepalsItemMerge - оптимизация объединения предметов
  • enableSepalsQuickCanBePushByEntityPredicate - ускорение предикатов толкания

Производительность и тестирование

Тестирование проводилось на сервере Mars с процессором Intel i7-14700K, 4 ГБ оперативной памяти под управлением Ubuntu 24.04.1 LTS в Minecraft 1.21.

Оптимизация скопления существ

Использование кэша для предотвращения избыточных вызовов 'getOtherEntities'

-- Важное замечание --
Эта функция игнорирует предикаты табло/команд для отдельных существ
что может привести к неожиданному поведению

Эта проблема не влияет на ванильную игру (выживание и творческий режим)
и актуальна только для серверов, использующих командные блоки

-- Статус --
Включено по умолчанию

1390 жителей в пространстве 7x7:

Среда Время обработки Производительность
Ванильная версия 53.6 мс 100%
С Lithium 54.4 мс 101%
С Sepals 10.2 мс 19%
С Sepals + Lithium 8.5 мс 15%

Взвешенный случайный выбор

Использование бинарного поиска вместо ванильного взвешенного случайного выбора

-- Предупреждение --
Эта функция может не давать значительного прироста производительности
так как доказано, что построение таблицы диапазонов медленнее ванильной реализации
даже при почти нулевых затратах на бинарный поиск

-- Статус --
Отключено по умолчанию

-- Предупреждение --
Не прошло полного тестирования

Оптимизированная задача прыжков

Реализация Sepals для замены ванильной реализации задач прыжков

Как упоминалось выше, бинарный поиск практически не требует затрат
реализация Sepals строит таблицу диапазонов одновременно с генерацией целей
и использует Catheter вместо Java Stream

Также переработаны условия прыжков в мозге лягушки для улучшения производительности

-- Важное замечание --
Эта функция не может быть изменена во время работы игры
требуется перезапуск сервера для применения изменений

-- Статус --
Включено по умолчанию

800 лягушек в пространстве 7x7:

Среда Время выполнения Производительность
Ванильная (LongJumpTask) 43.1 мс 100%
С Lithium (LongJumpTask) 7.5 мс 17%
С Sepals (SepalsLongJumpTask) 0.2 мс 0.4%
С Sepals + Lithium (SepalsLongJumpTask) 0.05 мс 0.1%

Быстрая сортировка в сенсорах ближайших существ

Использование быстрой сортировки через fastutil вместо Java Tim Sort

-- Статус --
Включено по умолчанию

800 лягушек в пространстве 7x7:

Среда Время сортировки Производительность
Ванильная версия 3.8 мс 100%
С Lithium 3.6 мс 94%
С Sepals 2.2 мс 57%
С Sepals + Lithium 2.2 мс 57%

Фильтр атакующих целей лягушек

Перераспределение условий атаки
сначала выполняются менее затратные предикаты
уменьшая вероятность вычисления высокозатратных условий

-- Критика реализации Mojang --
Исходный предикат атаки Mojang:

!entity.getBrain().hasMemoryModule(MemoryModuleType.HAS_HUNTING_COOLDOWN)
 && Sensor.testAttackableTargetPredicate(entity, target)
 && FrogEntity.isValidFrogFood(target)
 && !this.isTargetUnreachable(entity, target)
 && target.isInRange(entity, 10.0)

В этом случае 'Sensor#testAttackableTargetPredicate' вызывает 'TargetPredicate#test'
что приводит к множеству вычислений трассировки лучей при большом количестве существ
а трассировка лучей в Minecraft крайне неэффективна

'TargetPredicate#test' в случае с 800 лягушками занимал 9.8 мс за один игровой тик
из которых 'BlockView.raycast' составлял 7.3 мс

Новая реализация Sepals:

FrogEntity.isValidFrogFood(target) &&
 entity.getBrain().hasMemoryModule(MemoryModuleType.HAS_HUNTING_COOLDOWN) && 
 target.isInRange(entity, 10.0) && 
 Sensor.testAttackableTargetPredicate(entity, target) && 
 isTargetUnreachable(entity, target);

'isValidFrogFood' - простые условия проверки тегов сущности
'isInRange' и 'hasMemoryModule' также просты - несколько математических вычислений

-- Статус --
Включено по умолчанию

800 лягушек в пространстве 7x7:

Среда Время выполнения Производительность
Ванильная (FrogAttackablesSensor#matches) 10 мс 100%
С Lithium (FrogAttackablesSensor#matches) 5.7 мс 57%
С Sepals (SepalsFrogBrain#attackable) 0.1 мс 1%
С Sepals + Lithium (SepalsFrogBrain#attackable) 0.1 мс 1%

Кэш живых целей для наблюдения

Использование 'SepalsLivingTargetCache' для улучшения производительности поиска целей
Требует включения SepalsLivingTargetCache для применения этой функции

-- Важное замечание --
Трассировка лучей находится в тесте TargetPredicate
в 'findFirst' в LivingTargetCache при успешном предикате

Но если последующие условия не выполняются, дальнейшие вычисления бесполезны
потому что даже если findFirst нашел результат (трассировка успешна)
мы не используем этот результат в последующих контекстах

-- Статус --
Включено по умолчанию

800 лягушек в пространстве 7x7:

Среда Время поиска Производительность
Ванильная 2.7 мс 100%
С Lithium 2.5 мс 92%
С Sepals 0.1 мс 3%
С Sepals + Lithium 0.1 мс 3%

Различные оптимизации жителей

Список улучшений, реализованных в Sepals:

1. Использование Catheter вместо Java Stream
2. Кэширование задач, активностей, выполняемых задач и воспоминаний
3. Замена ванильной составной задачи на реализацию Sepals
4. Пропуск избыточных трассировок лучей и бесполезных предикатов
5. Использование 'SepalsLivingTargetCache' вместо ванильного кэша
6. Перераспределение предикатов с приоритетом менее затратных
7. Адаптация оптимизаций 'SerializingRegionBasedStorage' из lithium
8. Специализированные задачи вместо универсальных решений
9. Замена поиска в hashset на бинарный поиск в списках

-- Рекомендация --
Для максимальной производительности используйте с lithium и c2me

-- Предупреждение --
Не прошло долгосрочного тестирования стабильности
месяц работы показал удовлетворительные результаты
не гарантирует 100% соответствие ванильному поведению

-- Статус --
Включено по умолчанию

800 жителей в пространстве 7x7 днем:

Среда Общее время Производительность Запуск задач Сенсоры Обновление задач Память
Ванильная 18 мс 100% 9.3 мс 5.2 мс 3 мс 0.5 мс
С lithium 12.4 мс 68% 4.8 мс 5.9 мс 1.2 мс 0.5 мс
С Sepals 9.7 мс 53% 3.6 мс 3.7 мс 2 мс 0.4 мс
С Sepals + lithium 10 мс 55% 3.4 мс 3.7 мс 2.5 мс 0.4 мс

800 жителей в пространстве 7x7 ночью:

Среда Общее время Производительность Запуск задач Сенсоры Обновление задач Память
Ванильная 16.7 мс 100% 8.2 мс 6 мс 2 мс 0.5 мс
С lithium 10.2 мс 61% 3.2 мс 6 мс 0.5 мс 0.5 мс
С Sepals 9 мс 53% 3.3 мс 4.7 мс 0.7 мс 0.3 мс
С Sepals + lithium 8.7 мс 52% 2.9 мс 4.6 мс 0.7 мс 0.5 мс

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

1172 лягушки в пространстве 3x3:

Среда Время выполнения Производительность
Ванильная 49.01 мс 100%
С Sepals 22.6 мс 46%
Участники проекта
cao-awa

cao-awa

Разработчик

Создан: 10 окт 2024

ID: 61952