Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка SlimeWorldManager #7

Closed
Dymeth opened this issue Feb 20, 2024 · 5 comments
Closed

Поддержка SlimeWorldManager #7

Dymeth opened this issue Feb 20, 2024 · 5 comments

Comments

@Dymeth
Copy link
Collaborator

Dymeth commented Feb 20, 2024

Нам необходимо перейти на SlimeWorldManager для достижения решения следующих задач:

  1. Загрузка миров в ОЗУ без влияния на производительность (не в основном серверном потоке)
  2. Сокращение потребления места на диске на хранение пользовательских миров

Подробности о SWM:
https://www.spigotmc.org/resources/69974
https://github.com/cijaaimee/Slime-World-Manager

Доказательство проблем с производительностью при использовании Bukkit.createWorld():
image

@DrupalDoesNotExists
Copy link
Contributor

I guess It's better to use some specific implementation that supports async from the box, maybe something like AsyncSlimeWorldManager.

@Dymeth Dymeth changed the title Support for SlimeWorldManager Поддержка SlimeWorldManager Feb 21, 2024
@Dymeth
Copy link
Collaborator Author

Dymeth commented Mar 1, 2024

Есть очень большие сомнения о необходимости использовать SWM, с ним есть сложности.

Оригинальный плагин SlimeWorldManager заброшен 4 года назад, его разработчики рекомендуют использовать Advanced SlimeWorldManager (он же AdvancedSlimePaper):
https://spigotmc.org/resources/87209
https://github.com/InfernalSuite/AdvancedSlimePaper

AdvancedSlimePaper - это не просто плагин, это полноценный форк Paper. В итоге мы имеем несколько проблем:

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

  2. Данный форк содержит сомнительные патчи. Если бы патчи были действительно качественными - их бы приняли в сам Paper в качестве альтернативного способа прогрузки миров. Но, скорее всего, в Paper даже не предлагали PR, поскольку в патчах имеются, например, вот такие странные участки:
    https://github.com/InfernalSuite/AdvancedSlimePaper/blob/dc112775adc988eac54444a215ab055a41a538f9/patches/api/0002-Dont-close-Slime-Plugin-Classloader.patch#L15

  3. Последний релиз AdvancedSlimePaper работает только на версии Minecraft 1.20.4. Более старые релизы находятся ещё в одном репозитории, который тоже был заброшен в районе двух лет назад: https://github.com/Paul19988/Advanced-Slime-World-Manager/releases
    Поначалу кажется, что это не критично. Но в случае изменения апи в актуальной версии AdvancedSlimePaper мы получим ряд проблем

@Dymeth
Copy link
Collaborator Author

Dymeth commented Mar 1, 2024

Ускорить создание (загрузку) миров через баккит удалось ускорить в 5.5 раз при помощи world.setKeepSpawnInMemory(false) в WorldInitEvent с (77 мс до 14 мс).
Помимо этого, сейчас при создании миров в основном потоке выполняется копирование файлов и папок через NIO. Если вынести этот процесс в отдельный поток - это ещё больше ускорит процесс создания (загрузки) миров.

Поэтому на данном этапе считаю использование SlimeWorldManager нецелесообраным.

Issue оставляю до тех пор, пока не будет понятно итоговое время прогрузки миров

@Dymeth
Copy link
Collaborator Author

Dymeth commented Mar 2, 2024

С прогрузкой нет проблем и без SlimeWorldManager. Теперь грузится по 500 миров в секунду при необходимости.
Если и будем переходить, то явно не в ближайшем будущем

@Dymeth
Copy link
Collaborator Author

Dymeth commented Apr 10, 2024

Немного больше информации по вопросу:
PaperMC/Paper#8761
https://github.com/xymb-endcrystalme/LinearPaper
PaperMC/Paper#10231

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants