Skip to content

Commit ce983d7

Browse files
authored
Misc fixes to tick reporting (#13174)
1 parent ba2fb8c commit ce983d7

File tree

8 files changed

+38
-37
lines changed

8 files changed

+38
-37
lines changed

paper-server/patches/features/0001-Moonrise-optimisation-patches.patch

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23030,7 +23030,7 @@ index e7510be12644b2edd966c538c84379a3d5fe89b5..8d299a75c80fddc61a2aa4dc5b0dc594
2303023030
thread1 -> {
2303123031
DedicatedServer dedicatedServer1 = new DedicatedServer(
2303223032
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
23033-
index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67ab964e4e 100644
23033+
index af1cb905d55290e3d01b419f5b03246e019f3147..c8e0071e7f0e70756ddd0f8b1073e49980f7f4d4 100644
2303423034
--- a/net/minecraft/server/MinecraftServer.java
2303523035
+++ b/net/minecraft/server/MinecraftServer.java
2303623036
@@ -177,7 +177,7 @@ import net.minecraft.world.phys.Vec2;
@@ -23042,7 +23042,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2304223042
private static MinecraftServer SERVER; // Paper
2304323043
public static final Logger LOGGER = LogUtils.getLogger();
2304423044
public static final net.kyori.adventure.text.logger.slf4j.ComponentLogger COMPONENT_LOGGER = net.kyori.adventure.text.logger.slf4j.ComponentLogger.logger(LOGGER.getName()); // Paper
23045-
@@ -370,6 +370,93 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23045+
@@ -375,6 +375,93 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2304623046
return minecraftServer;
2304723047
}
2304823048

@@ -23136,7 +23136,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2313623136
public MinecraftServer(
2313723137
// CraftBukkit start
2313823138
joptsimple.OptionSet options,
23139-
@@ -800,7 +887,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23139+
@@ -805,7 +892,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2314023140
serverLevel.setSpawnSettings(serverLevel.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && serverLevel.getGameRules().getBoolean(GameRules.RULE_SPAWN_MONSTERS)); // Paper - per level difficulty (from setDifficulty(ServerLevel, Difficulty, boolean))
2314123141
this.updateEffectiveRespawnData();
2314223142
this.forceTicks = false; // CraftBukkit
@@ -23145,7 +23145,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2314523145
new org.bukkit.event.world.WorldLoadEvent(serverLevel.getWorld()).callEvent(); // Paper - call WorldLoadEvent
2314623146
}
2314723147

23148-
@@ -823,6 +910,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23148+
@@ -828,6 +915,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2314923149
public abstract boolean shouldRconBroadcast();
2315023150

2315123151
public boolean saveAllChunks(boolean suppressLogs, boolean flush, boolean force) {
@@ -23157,7 +23157,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2315723157
boolean flag = false;
2315823158

2315923159
for (ServerLevel serverLevel : this.getAllLevels()) {
23160-
@@ -830,7 +922,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23160+
@@ -835,7 +927,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2316123161
LOGGER.info("Saving chunks for level '{}'/{}", serverLevel, serverLevel.dimension().location());
2316223162
}
2316323163

@@ -23166,7 +23166,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2316623166
flag = true;
2316723167
}
2316823168

23169-
@@ -920,7 +1012,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23169+
@@ -925,7 +1017,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2317023170
}
2317123171
}
2317223172

@@ -23175,7 +23175,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2317523175
this.nextTickTimeNanos = Util.getNanos() + TimeUtil.NANOSECONDS_PER_MILLISECOND;
2317623176

2317723177
for (ServerLevel serverLevelx : this.getAllLevels()) {
23178-
@@ -930,18 +1022,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23178+
@@ -935,18 +1027,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2317923179

2318023180
this.waitUntilNextTick();
2318123181
}
@@ -23201,7 +23201,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2320123201

2320223202
this.isSaving = false;
2320323203
this.resources.close();
23204-
@@ -961,6 +1049,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23204+
@@ -966,6 +1054,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2320523205
this.services().nameToIdCache().save(false); // Paper - Perf: Async GameProfileCache saving
2320623206
}
2320723207
// Spigot end
@@ -23216,7 +23216,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2321623216
// Paper start - Improved watchdog support - move final shutdown items here
2321723217
Util.shutdownExecutors();
2321823218
try {
23219-
@@ -1053,16 +1149,31 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23219+
@@ -1058,16 +1154,31 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2322023220
// execute small amounts of other tasks just in case the number of tasks we are
2322123221
// draining is large - chunk system and packet processing may be latency sensitive
2322223222

@@ -23251,7 +23251,7 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2325123251
profiler.pop(); // moonrise:run_all_chunk
2325223252
profiler.pop(); // moonrise:run_all_tasks
2325323253

23254-
@@ -1203,11 +1314,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23254+
@@ -1208,11 +1319,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2325523255
ProfilerFiller profilerFiller = Profiler.get();
2325623256
profilerFiller.push("tick");
2325723257
this.tickFrame.start();
@@ -23270,15 +23270,15 @@ index c62892b4656366fbeb65847fbeec95965e49c767..4d074f6f3c123f6ee6c63dbc37732d67
2327023270
this.tickFrame.end();
2327123271
this.recordEndOfTick(); // Paper - improve tick loop
2327223272
profilerFiller.popPush("nextTickWait");
23273-
@@ -1380,6 +1495,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23273+
@@ -1385,6 +1500,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2327423274

2327523275
private boolean pollTaskInternal() {
2327623276
if (super.pollTask()) {
2327723277
+ this.moonrise$executeMidTickTasks(); // Paper - rewrite chunk system
2327823278
return true;
2327923279
} else {
2328023280
boolean ret = false; // Paper - force execution of all worlds, do not just bias the first
23281-
@@ -2555,6 +2671,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
23281+
@@ -2560,6 +2676,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2328223282
}
2328323283
}
2328423284

paper-server/patches/features/0002-Rewrite-dataconverter-system.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32910,10 +32910,10 @@ index 71b8bbeda2fecf930870a9b6e856e20639d31645..91650a92a21fcaac65a5dfcac0cc856b
3291032910
return structureTemplate.save(new CompoundTag());
3291132911
}
3291232912
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
32913-
index 4d074f6f3c123f6ee6c63dbc37732d67ab964e4e..ff9f7acdd99b57dde99ab132fb089c3aabb68436 100644
32913+
index c8e0071e7f0e70756ddd0f8b1073e49980f7f4d4..5e0dbc0393fd507608417bec95e6247673486993 100644
3291432914
--- a/net/minecraft/server/MinecraftServer.java
3291532915
+++ b/net/minecraft/server/MinecraftServer.java
32916-
@@ -356,6 +356,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
32916+
@@ -361,6 +361,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
3291732917
// Paper end - improve tick loop
3291832918

3291932919
public static <S extends MinecraftServer> S spin(Function<Thread, S> threadFunction) {

paper-server/patches/features/0021-Incremental-chunk-and-player-saving.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ Subject: [PATCH] Incremental chunk and player saving
55

66

77
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
8-
index ff9f7acdd99b57dde99ab132fb089c3aabb68436..cc9a4f00cd86a8c5208695aa730ce8e84ab0ed3f 100644
8+
index 5e0dbc0393fd507608417bec95e6247673486993..61feaa8ed0b80797286f69a2a9ad5af47b21c8b5 100644
99
--- a/net/minecraft/server/MinecraftServer.java
1010
+++ b/net/minecraft/server/MinecraftServer.java
11-
@@ -946,7 +946,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
11+
@@ -951,7 +951,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1212
boolean var4;
1313
try {
1414
this.isSaving = true;
@@ -17,7 +17,7 @@ index ff9f7acdd99b57dde99ab132fb089c3aabb68436..cc9a4f00cd86a8c5208695aa730ce8e8
1717
var4 = this.saveAllChunks(suppressLogs, flush, force);
1818
} finally {
1919
this.isSaving = false;
20-
@@ -1603,9 +1603,29 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
20+
@@ -1608,9 +1608,29 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2121
}
2222

2323
this.ticksUntilAutosave--;

paper-server/patches/features/0026-Optimise-EntityScheduler-ticking.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ index a2fbc13105673e926cbaed69221826ebd392140f..a42938e1abd371dba6806e65552fde71
2020

2121
@Override
2222
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
23-
index cc9a4f00cd86a8c5208695aa730ce8e84ab0ed3f..5d268ad1211fe936813f8195ae3e82265595f359 100644
23+
index 61feaa8ed0b80797286f69a2a9ad5af47b21c8b5..d0265d6fa88296911a2c22ab736e37a9e85abc76 100644
2424
--- a/net/minecraft/server/MinecraftServer.java
2525
+++ b/net/minecraft/server/MinecraftServer.java
26-
@@ -1717,33 +1717,22 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
26+
@@ -1722,33 +1722,22 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2727
}
2828
}
2929

paper-server/patches/features/0029-Optimize-Hoppers.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ index 0000000000000000000000000000000000000000..24a2090e068ad3c0d08705050944abdf
4848
+ }
4949
+}
5050
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
51-
index 5d268ad1211fe936813f8195ae3e82265595f359..806184fac2b7fcb5b8cb3adc9b212bdc475699e9 100644
51+
index d0265d6fa88296911a2c22ab736e37a9e85abc76..ae981e1e2b347d52b2ce684aac70f5382e2efcf1 100644
5252
--- a/net/minecraft/server/MinecraftServer.java
5353
+++ b/net/minecraft/server/MinecraftServer.java
54-
@@ -1772,6 +1772,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
54+
@@ -1777,6 +1777,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
5555
serverLevel.hasPhysicsEvent = org.bukkit.event.block.BlockPhysicsEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - BlockPhysicsEvent
5656
serverLevel.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent
5757
serverLevel.updateLagCompensationTick(); // Paper - lag compensation

paper-server/patches/sources/net/minecraft/server/MinecraftServer.java.patch

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
private int playerIdleTimeout;
4242
private final long[] tickTimesNanos = new long[100];
4343
private long aggregatedTickTimesNanos = 0L;
44-
@@ -278,10 +_,86 @@
44+
@@ -278,10 +_,91 @@
4545
private final DiscontinuousFrame tickFrame;
4646
private final PacketProcessor packetProcessor;
4747

@@ -70,7 +70,7 @@
7070
+ // Paper start - improve tick loop
7171
+ public final ca.spottedleaf.moonrise.common.time.TickData tickTimes1s = new ca.spottedleaf.moonrise.common.time.TickData(java.util.concurrent.TimeUnit.SECONDS.toNanos(1L));
7272
+ public final ca.spottedleaf.moonrise.common.time.TickData tickTimes5s = new ca.spottedleaf.moonrise.common.time.TickData(java.util.concurrent.TimeUnit.SECONDS.toNanos(5L));
73-
+ public @Nullable ca.spottedleaf.moonrise.common.time.TickData.TickReportData tickReport5s;
73+
+ private volatile @Nullable ca.spottedleaf.moonrise.common.time.TickData.TickReportData tickReport5s;
7474
+ public final ca.spottedleaf.moonrise.common.time.TickData tickTimes10s = new ca.spottedleaf.moonrise.common.time.TickData(java.util.concurrent.TimeUnit.SECONDS.toNanos(10L));
7575
+ public final ca.spottedleaf.moonrise.common.time.TickData tickTimes15s = new ca.spottedleaf.moonrise.common.time.TickData(java.util.concurrent.TimeUnit.SECONDS.toNanos(15L));
7676
+ public final ca.spottedleaf.moonrise.common.time.TickData tickTimes1m = new ca.spottedleaf.moonrise.common.time.TickData(java.util.concurrent.TimeUnit.MINUTES.toNanos(1L));
@@ -82,9 +82,10 @@
8282
+ private long lastTickStart;
8383
+ private long currentTickStart;
8484
+ private long scheduledTickStart;
85-
+ private double[] tps = new double[]{0.0, 0.0, 0.0};
85+
+ private volatile double[] tps = new double[]{0.0, 0.0, 0.0};
8686
+
8787
+ private void addTickTime(final ca.spottedleaf.moonrise.common.time.TickTime time) {
88+
+ org.spigotmc.AsyncCatcher.catchOp("addTickTime");
8889
+ this.tickTimes1s.addDataFrom(time);
8990
+ this.tickTimes5s.addDataFrom(time);
9091
+ this.tickReport5s = this.tickTimes5s.generateTickReport(null, System.nanoTime(), this.tickRateManager().nanosecondsPerTick());
@@ -106,7 +107,11 @@
106107
+ }
107108
+
108109
+ public double[] getTPS() {
109-
+ return this.tps;
110+
+ return this.tps.clone();
111+
+ }
112+
+
113+
+ public @Nullable ca.spottedleaf.moonrise.common.time.TickData.TickReportData getTickReport5s() {
114+
+ return this.tickReport5s;
110115
+ }
111116
+
112117
+ public double[] computeTPS() {

paper-server/src/main/java/ca/spottedleaf/moonrise/common/time/TickData.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,11 @@ private static record TickInformation(
104104
) {}
105105

106106
public TickReportData generateTickReport(final TickTime inProgress, final long endTime, final long tickInterval) {
107-
return this.generateTickReport(inProgress, endTime, tickInterval, true);
107+
return this.generateTickReport(inProgress, endTime, tickInterval, false);
108108
}
109109

110110
// rets null if there is no data
111-
public TickReportData generateTickReport(final TickTime inProgress, final long endTime, final long tickInterval, final boolean trimLast) {
111+
public TickReportData generateTickReport(final TickTime inProgress, final long endTime, final long tickInterval, final boolean createFakeTick) {
112112
if (this.timeData.isEmpty() && inProgress == null) {
113113
return null;
114114
}
@@ -187,7 +187,7 @@ public TickReportData generateTickReport(final TickTime inProgress, final long e
187187
(last.supportCPUTime() ? last.tickCpuTime() : 0L) + totalCpuTime
188188
)
189189
);
190-
} else {
190+
} else if (createFakeTick) {
191191
// we do not have a tick to collapse into, so we must make one up
192192
// we will assume that the tick is "starting now" and ongoing
193193

@@ -219,12 +219,8 @@ public TickReportData generateTickReport(final TickTime inProgress, final long e
219219
}
220220

221221

222-
if (trimLast) {
223-
// Avoid skewing data with task execution time of in-progress tick
224-
collapsedData.removeLast();
225-
if (collapsedData.isEmpty()) {
226-
return null;
227-
}
222+
if (collapsedData.isEmpty()) {
223+
return null;
228224
}
229225

230226
final int collectedTicks = collapsedData.size();

paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2695,13 +2695,13 @@ public UnsafeValues getUnsafe() {
26952695

26962696
@Override
26972697
public long[] getTickTimes() {
2698-
final TickData.TickReportData reportData = this.getServer().tickReport5s;
2699-
return reportData == null ? new long[0] : reportData.timePerTickData().rawData();
2698+
final TickData.TickReportData reportData = this.getServer().getTickReport5s();
2699+
return reportData == null ? new long[0] : reportData.timePerTickData().rawData().clone();
27002700
}
27012701

27022702
@Override
27032703
public double getAverageTickTime() {
2704-
final TickData.TickReportData reportData = this.getServer().tickReport5s;
2704+
final TickData.TickReportData reportData = this.getServer().getTickReport5s();
27052705
return reportData == null ? 0.0 : reportData.timePerTickData().segmentAll().average() * 1.0E-6D;
27062706
}
27072707

0 commit comments

Comments
 (0)