diff options
author | Jake Potrebic <[email protected]> | 2021-12-22 10:02:31 -0800 |
---|---|---|
committer | GitHub <[email protected]> | 2021-12-22 10:02:31 -0800 |
commit | 82eaf4ee15d77303cdd352cce9b33c2f3e5d14d7 (patch) | |
tree | 53e4a42978675fc17acc76b85dcb0c3569ab3e3b /patches/server/0507-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch | |
parent | 6e5ceb34eb2ef4d6c0a35c46d0eded9099bb2fee (diff) | |
download | Paper-82eaf4ee15d77303cdd352cce9b33c2f3e5d14d7.tar.gz Paper-82eaf4ee15d77303cdd352cce9b33c2f3e5d14d7.zip |
Fix duplicated BlockPistonRetractEvent call (#7111)
Diffstat (limited to 'patches/server/0507-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch')
-rw-r--r-- | patches/server/0507-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/patches/server/0507-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch b/patches/server/0507-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch new file mode 100644 index 0000000000..a02addc375 --- /dev/null +++ b/patches/server/0507-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 edb77982d273e9492ab1a669ca1ad89da2ec3c3e..abc265b00044b14abb55c2628d454ee01fef467b 100644 +--- a/src/main/java/com/mojang/datafixers/DataFixerBuilder.java ++++ b/src/main/java/com/mojang/datafixers/DataFixerBuilder.java +@@ -26,8 +26,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; + } + +@@ -65,6 +67,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()) { + CompletableFuture.runAsync(() -> { |