diff options
author | Spottedleaf <[email protected]> | 2022-09-01 09:51:59 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2022-09-01 09:51:59 -0700 |
commit | 046466f3ba72d6bdaa0213cde64676dd0024ace0 (patch) | |
tree | 717d69c8521cac0e4881c009e636891e116c2378 /patches/server/0498-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch | |
parent | eff22eb0541559f05cf9a8c370d70c3b346f80f6 (diff) | |
download | Paper-046466f3ba72d6bdaa0213cde64676dd0024ace0.tar.gz Paper-046466f3ba72d6bdaa0213cde64676dd0024ace0.zip |
Re-arrange most chunk system patches to front (#8338)
* Re-arrange most chunk system patches to front
Co-authored-by: Spottedleaf <[email protected]>
Diffstat (limited to 'patches/server/0498-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch')
-rw-r--r-- | patches/server/0498-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/patches/server/0498-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch b/patches/server/0498-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch new file mode 100644 index 0000000000..602cc3a878 --- /dev/null +++ b/patches/server/0498-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch @@ -0,0 +1,54 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Sat, 12 Sep 2020 17:21:38 -0400 +Subject: [PATCH] Cache DataFixerUpper Rewrite Rules on demand + +Mojang precaches every single potential rewrite rule that could ever +exist on server startup. This includes rules from all the way back to versions from 6+ years ago. + +This is the source of why the server hogs every CPU core at 100% every start. + +For anyone who hard resets for updates or has force upgraded their entire world, this +results in completely wasted cpu cycles. + +This massive CPU usage also delays server startup time. + +We improve this by making "min version to precache" that defaults to a future version +so that no rewrite rules are precached. + +someone who expects to be converting a lot chunks could theoretically set +-DPaper.minPrecachedDatafixVersion=<dataVersionConvertingFrom> as a startup +parameter and only build from that point on. + +However this will likely never be needed as the server will still run +the same cache logic on demand when it's actually needed. The only +cost would be some delay on the FIRST chunk conversion, but paper already +runs chunk conversions on another thread so this will likely never be +a concern for TPS. + +This patch will significantly reduce CPU use on startup, reduce memory usage, +and improve server startup time. + +diff --git a/src/main/java/com/mojang/datafixers/DataFixerBuilder.java b/src/main/java/com/mojang/datafixers/DataFixerBuilder.java +index d25f106ab64c90438f521a2c6fa944bdedc1969a..3d5e52d997a8e7d7f3b000e3737d30762aae2ca1 100644 +--- a/src/main/java/com/mojang/datafixers/DataFixerBuilder.java ++++ b/src/main/java/com/mojang/datafixers/DataFixerBuilder.java +@@ -28,8 +28,10 @@ public class DataFixerBuilder { + private final Int2ObjectSortedMap<Schema> schemas = new Int2ObjectAVLTreeMap<>(); + private final List<DataFix> globalList = Lists.newArrayList(); + private final IntSortedSet fixerVersions = new IntAVLTreeSet(); ++ private final int minDataFixPrecacheVersion; // Paper + + public DataFixerBuilder(final int dataVersion) { ++ minDataFixPrecacheVersion = Integer.getInteger("Paper.minPrecachedDatafixVersion", dataVersion+1) * 10; // Paper - default to precache nothing - mojang stores versions * 10 to allow for 'sub versions' + this.dataVersion = dataVersion; + } + +@@ -74,6 +76,7 @@ public class DataFixerBuilder { + final IntBidirectionalIterator iterator = fixerUpper.fixerVersions().iterator(); + while (iterator.hasNext()) { + final int versionKey = iterator.nextInt(); ++ if (versionKey < minDataFixPrecacheVersion) continue; // Paper + final Schema schema = schemas.get(versionKey); + for (final String typeName : schema.types()) { + final CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { |