2021-11-25 07:31:14 +01:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
|
|
|
Date: Sat, 4 Apr 2020 17:00:20 -0700
|
|
|
|
Subject: [PATCH] Consolidate flush calls for entity tracker packets
|
|
|
|
|
|
|
|
Most server packets seem to be sent from here, so try to avoid
|
|
|
|
expensive flush calls from them.
|
|
|
|
|
|
|
|
This change was motivated due to local testing:
|
|
|
|
|
|
|
|
- My server spawn has 130 cows in it (for testing a prev. patch)
|
|
|
|
- Try to let 200 players join spawn
|
|
|
|
|
|
|
|
Without this change, I could only get 20 players on before they
|
|
|
|
all started timing out due to the load put on the Netty I/O threads.
|
|
|
|
|
|
|
|
With this change I could get all 200 on at 0ms ping.
|
|
|
|
|
|
|
|
(one of the primary issues is that my CPU is kinda trash, and having
|
|
|
|
4 extra threads at 100% is just too much for it).
|
|
|
|
|
|
|
|
So in general this patch should reduce Netty I/O thread load.
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
2022-03-01 04:25:13 +01:00
|
|
|
index 5271cc135e636961fc1248f6b98bb122ab3391e6..cd6eb305f4d36be923f6c5f0dd85e449d0f94c8f 100644
|
2021-11-25 07:31:14 +01:00
|
|
|
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
2022-03-01 06:43:03 +01:00
|
|
|
@@ -1077,7 +1077,24 @@ public class ServerChunkCache extends ChunkSource {
|
2022-02-18 18:44:46 +01:00
|
|
|
this.level.timings.broadcastChunkUpdates.stopTiming(); // Paper - timing
|
2021-11-25 07:31:14 +01:00
|
|
|
gameprofilerfiller.pop();
|
2022-02-18 18:44:46 +01:00
|
|
|
// Paper end - use set of chunks requiring updates, rather than iterating every single one loaded
|
2021-11-25 07:31:14 +01:00
|
|
|
+ // Paper start - controlled flush for entity tracker packets
|
|
|
|
+ List<net.minecraft.network.Connection> disabledFlushes = new java.util.ArrayList<>(this.level.players.size());
|
|
|
|
+ for (ServerPlayer player : this.level.players) {
|
|
|
|
+ net.minecraft.server.network.ServerGamePacketListenerImpl connection = player.connection;
|
|
|
|
+ if (connection != null) {
|
|
|
|
+ connection.connection.disableAutomaticFlush();
|
|
|
|
+ disabledFlushes.add(connection.connection);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ try { // Paper end - controlled flush for entity tracker packets
|
|
|
|
this.chunkMap.tick();
|
|
|
|
+ // Paper start - controlled flush for entity tracker packets
|
|
|
|
+ } finally {
|
|
|
|
+ for (net.minecraft.network.Connection networkManager : disabledFlushes) {
|
|
|
|
+ networkManager.enableAutomaticFlush();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // Paper end - controlled flush for entity tracker packets
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|