// Minecraft

Folia: Minecraft multithreaded und warum Paper meist besser ist

Folia: Minecraft multithreaded und warum Paper meist besser ist

Folia ist ein experimenteller Fork von Paper, der die geladene Welt in Regionen aufteilt und jede Region auf einem eigenen Thread tickt. Vanilla Minecraft und Paper verarbeiten den kompletten Welt-Tick auf einem einzigen Thread, zwanzig Mal pro Sekunde, und deshalb wiegt die Taktrate eines Kerns schwerer als die Anzahl der Kerne. Folia bricht die meisten vorhandenen Plugins und bringt nur dann etwas, wenn deine Spieler weit auseinander sitzen: Für praktisch jeden Server unter mehreren Hundert gleichzeitigen Spielern ist Paper die bessere Wahl.

Warum tickt Minecraft nur auf einem Thread?

Ein Minecraft-Server läuft in einer Schleife, die zwanzig Mal pro Sekunde die komplette Welt aktualisiert: Mobs bewegen sich, Redstone schaltet, Wasser fließt, Hopper schieben Items weiter, Chunks werden geladen und wieder weggeschrieben. Pro Tick, also pro Durchlauf dieser Schleife, bleiben damit rund fünfzig Millisekunden. Passt die Arbeit da nicht hinein, sinkt die TPS, die Zahl der Ticks pro Sekunde, und alles fühlt sich zäh an: Uhren laufen nach, Farmen werfen weniger ab, Hopper kriechen.

Dass das auf einem einzigen Thread passiert, ergibt sich aus dem Aufbau der Spielwelt: Alles hängt mit allem zusammen und die Reihenfolge zählt. Eine Lore befüllt einen Hopper, dieser Hopper füllt eine Kiste, die ein Komparator ausliest, und der Komparator schaltet wiederum Redstone. Verteilst du das auf zwei Threads gleichzeitig, bekommst du Wettlaufsituationen: zwei Threads, die nach demselben Item greifen, oder ein Chunk, der halb gespeichert wird, während er sich noch verändert. Genau daran sind Server früher zerbrochen.

Paper hat deshalb nicht den Tick selbst parallelisiert, sondern die Arbeit drumherum: Chunk-Generierung, Chunk-I/O und Netzwerkverkehr laufen größtenteils neben dem Haupt-Thread. Zusammen mit Hunderten Optimierungen gegenüber Spigot ergibt das eine stabilere TPS, ohne dass du ein einziges Plugin verlierst.

Warum ist die Taktrate wichtiger als die Kernanzahl?

Weil die schwerste Aufgabe, der Welt-Tick, ohnehin auf einem einzigen Kern landet und dort innerhalb von fünfzig Millisekunden fertig sein muss. Ein Prozessor mit mehr Kernen macht diesen einen Tick keine Millisekunde schneller, ein Prozessor mit mehr Leistung pro Kern schon. Nutzlos sind zusätzliche Kerne nicht, denn Chunk-I/O, Netzwerk und der Garbage Collector greifen darauf zu, aber deine TPS retten sie nicht.

Deshalb steht bei uns neben der Budget-Linie auf AMD EPYC 7443P auch eine Premium-Linie auf dem AMD Ryzen 9 9950X. Viele Kerne sind prima, wenn mehrere Server nebeneinander laufen; eine höhere Taktrate gewinnt, sobald eine einzelne Welt ins Schwitzen kommt. Mehr RAM löst das nicht: RAM bestimmt, wie viel in den Speicher passt, nicht wie schnell ein Tick durch ist. Was wirklich hilft, steht in unserem Artikel zum Thema Minecraft-Server optimieren und Lag loswerden.

Was macht Folia anders?

Folia teilt die geladene Welt in Regionen auf: Gruppen von Chunks, also von Weltabschnitten, die nah genug beieinanderliegen, um sich gegenseitig beeinflussen zu können. Jede Region bekommt eine eigene Tick-Schleife und läuft auf einem eigenen Thread aus einem Thread-Pool. Zwei Spieler, die Tausende Blöcke voneinander entfernt bauen, sitzen in zwei getrennten Regionen, und die ticken tatsächlich gleichzeitig auf zwei Kernen.

Regionen liegen dabei nicht fest: Laufen zwei Spieler aufeinander zu, verschmelzen ihre Regionen zu einer Region auf einem Thread, und trennen sie sich wieder, teilt sich das Ganze erneut auf. Stell dir Folia als eine Handvoll Mini-Server in einem einzigen Prozess vor. Solange die getrennt bleiben, skaliert es mit der Kernanzahl; sobald sie verschmelzen, bist du zurück bei einem einzigen Thread.

Warum bricht Folia die meisten Plugins?

Die komplette Bukkit-, Spigot- und Paper-API geht davon aus, dass es genau einen Haupt-Thread gibt. Plugins planen ihre Arbeit mit Bukkit.getScheduler().runTask(...) und dürfen danach gefahrlos jeden Block, jeden Spieler und jede Entity anfassen. In Folia gibt es diesen einen Haupt-Thread nicht mehr: Es existieren Scheduler pro Region, pro Entity und ein globaler, und ein Plugin darf nur anfassen, was zu seiner eigenen Region gehört.

Das ist keine Zeile in der Konfiguration, die du umstellst, sondern Umbauarbeit im Plugin selbst. Bleibt die aus, ist eine Fehlermeldung beim Start noch das angenehme Ergebnis. Unangenehm wird es, wenn ein Plugin scheinbar funktioniert und dabei still und leise Daten durcheinanderwirft: Claims, die verschwinden, doppelte Items, Logbücher, die nicht stimmen. Geh davon aus, dass ein Plugin nicht läuft, bis du eine Version siehst, die Folia ausdrücklich unterstützt. Feste Größen wie EssentialsX, LuckPerms und CoreProtect sind gegen das klassische Paper-Modell geschrieben.

Fährst du ein Modpack statt Plugins, spielt Folia ohnehin keine Rolle: All the Mods 10 läuft auf NeoForge, einer ganz anderen Schiene als ein Paper-Fork.

Warum hilft Folia nur bei verteilten Spielern?

Parallel laufen kann nur, was sich überhaupt aufteilen lässt. Stehen alle deine Spieler am Spawn, in einer Lobby oder beim selben Bosskampf, ist das eine Region, also ein Thread. Folia macht dann genau das, was Paper auch macht, nur mit der Regionsverwaltung als zusätzlichem Aufwand obendrauf, und du kannst langsamer herauskommen, als du gestartet bist. Grob gesagt:

  • Passt gut: große Survival- oder Anarchy-Server mit riesiger Map, auf denen Spieler in ihrer eigenen Ecke bauen und sich selten begegnen.
  • Passt schlecht: Minigames, KitPvP, Lobbys, spawnlastige SMPs, Event-Server und alles, wo Spieler gerade zueinander ziehen.
  • Passt schlecht: eine einzelne schwere Lag-Quelle wie eine riesige Mobfarm. Die sitzt in einer Region und damit auf einem Thread, genau wie unter Paper.

Paper, Purpur, Pufferfish oder Folia: was nimmst du?

SoftwareBasisPluginsWofür geeignet
PaperFork von SpigotVoll kompatibel zu Bukkit und SpigotDie Standardwahl für praktisch jeden Server
PurpurFork von PaperVoll kompatibel zu PaperZusätzliche Konfigurationsoptionen und optionale Zusatzfunktionen, etwa reitbare Mobs und einstellbare Mob-KI
PufferfishFork von PaperVoll kompatibel zu PaperLiegt vom Ziel her zwischen Paper und Purpur
FoliaFork von Paper, regionsbasiert auf mehreren ThreadsBricht die meisten vorhandenen PluginsExperimentell, für sehr hohe Spielerzahlen, die verteilt sitzen

Die oberen drei sind untereinander austauschbar: Du tauschst Paper gegen Purpur und morgen wieder zurück, ohne deinen Plugin-Ordner anzufassen. Folia steht für sich allein.

Was machst du besser zuerst?

In den allermeisten Fällen liegt die Ursache für den Lag ganz woanders. Arbeite diese Liste ab, bevor du dich an experimentelle Software wagst.

  1. Miss mit spark. Lass zur Stoßzeit ein Profil mitlaufen und schau, wohin der Tick geht. Meistens ist es ein Plugin, eine Ansammlung von Entities oder ein Chunk-Problem, nicht der Mangel an Threads.
  2. Setz view-distance und simulation-distance realistisch. Diese beiden Werte in der server.properties legen fest, wie weit ein Spieler sieht und wie weit die Welt wirklich berechnet wird. Das ist der billigste Gewinn überhaupt, gerade wenn viele Spieler gleichzeitig online sind.
  3. Räum Entities und Items auf. ClearLagg oder die Limits in der Paper-Konfiguration bringen oft mehr als stärkere Hardware.
  4. Miste bei deinen Plugins aus. Jedes Plugin, das in jedem Tick etwas tut, kostet Tick-Budget, auch wenn es niemand benutzt.
  5. Teile hinter einem Proxy auf. Lobby, Survival und Minigames als getrennte Prozesse, jeder mit eigenem Haupt-Thread auf einem eigenen Kern, mit BungeeCord oder Velocity davor.

Genau dieser letzte Schritt liefert in der Praxis das, was Folia verspricht, und zwar mit Plugins, die einfach laufen; wie so ein Aufbau funktioniert, zeigt unser Vergleich von Velocity und BungeeCord. Bei uns startet ein BungeeCord-Proxy mit 512 MB bei 0,50 Euro pro Monat, und die Server dahinter bezahlst du pro GB RAM: auf der Budget-Linie 1,10 Euro pro GB, bei den größeren Paketen etwas weniger, zum Beispiel beim Minecraft-Hosting von MC-Node.

Wann lohnt sich Folia doch?

Es gibt ein klares Profil, für das Folia gebaut wurde. Interessant wird es, sobald all diese Punkte zutreffen.

  • Du bewegst dich auf mehrere Hundert gleichzeitige Spieler in einer einzigen Welt zu, und Aufteilen passt nicht zum Konzept.
  • Diese Spieler verteilen sich von Natur aus über eine große Map, statt sich um Spawn oder eine Arena zu ballen.
  • Deine Plugin-Liste ist kurz oder selbst geschrieben, sodass du den Code an die Scheduler von Folia anpassen kannst.
  • In deinem Team sitzt jemand, der Java schreiben kann, denn du stößt auf Probleme, die vor dir noch niemand gelöst hat.
  • Du nimmst brechende Änderungen, wenig Dokumentation und gelegentliches Warten auf eine neue Minecraft-Version in Kauf.

Wagst du den Schritt, dann neben deinem bestehenden Server und nicht darauf: Kopier deine Welt auf einen Testserver und halte die Backups griffbereit. Ist die TPS mit denselben Spielern nicht besser als unter Paper, saßen sie zu dicht beieinander und du hast vor allem Komplexität eingekauft. Für die meisten Server bleibt die Antwort Paper, mit einem schnellen Kern und einer aufgeräumten Konfiguration.

Häufig gestellte Fragen

Laufen EssentialsX, WorldGuard und CoreProtect unter Folia? Nur, wenn es eine Version gibt, die Folia ausdrücklich unterstützt. Die Bukkit-API setzt einen einzigen Haupt-Thread voraus, so ein Plugin muss also umgeschrieben und nicht bloß neu kompiliert werden. Geh davon aus, dass es nicht läuft: Ein Plugin, das stillschweigend weiterarbeitet, kann Daten beschädigen.

Wird mein Server mit dreißig Spielern durch Folia schneller? Nein. Mit dreißig Spielern liegst du weit unter der Größenordnung, für die Folia gedacht ist, und der Lag steckt fast immer in einem Plugin, in Entities oder in deiner view-distance. Miss mit spark und bleib bei Paper oder Purpur.

Wie viele Kerne brauchst du für Folia? Zusätzliche Kerne zählen bei Folia mit, aber nur bis zur Anzahl der gleichzeitig aktiven Regionen. Sitzen all deine Spieler beieinander, gibt es eine Region und Folia nutzt effektiv einen Kern, genau wie Paper. Viele Kerne wie beim AMD EPYC 7443P helfen erst, wenn die Aktivität verteilt ist.

Was ist der Unterschied zwischen Purpur und Folia? Purpur ist ein Fork von Paper mit zusätzlichen Konfigurationsoptionen und optionalen Zusatzfunktionen wie reitbaren Mobs und einstellbarer Mob-KI und bleibt voll plugin-kompatibel. Folia ist experimentell, tickt die Welt in Regionen über mehrere Threads und bricht dabei die meisten Plugins.

Hilft Folia gegen Lag durch eine große Mobfarm oder Redstone-Maschine? Nein, denn so ein Bauwerk steht an einer Stelle und fällt damit in eine Region, die auf einem einzigen Thread tickt. Da bringt dir eine höhere Taktrate wie beim AMD Ryzen 9 9950X mehr, dazu ein Umbau der Farm selbst.

Weiterlesen

// SELBST AUSPROBIEREN
Dein Server in 60 Sekunden online
MC-Node →