82 lines
4.3 KiB
Diff
82 lines
4.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Cryptite <cryptite@gmail.com>
|
|
Date: Mon, 5 Aug 2024 15:07:31 -0500
|
|
Subject: [PATCH] Affinity Locks
|
|
|
|
|
|
diff --git a/build.gradle.kts b/build.gradle.kts
|
|
index 46980b062980be8c564a215a2ae67e0d1fe5251e..2b1fd2cd7046f283510cd6e801abd8f49b0e8870 100644
|
|
--- a/build.gradle.kts
|
|
+++ b/build.gradle.kts
|
|
@@ -24,6 +24,9 @@ dependencies {
|
|
implementation("com.fasterxml.jackson.core:jackson-core:2.13.0")
|
|
implementation("com.fasterxml.jackson.core:jackson-databind:2.13.0")
|
|
implementation("com.fasterxml.jackson.core:jackson-annotations:2.13.0")
|
|
+
|
|
+ // https://mvnrepository.com/artifact/net.openhft/Java-Thread-Affinity
|
|
+ implementation("net.openhft:affinity:3.26ea5")
|
|
// Slice end
|
|
|
|
implementation("org.mongodb:bson:4.11.1") // Slice - MongoDB Bson Library for ObjectIds
|
|
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
|
|
index bc391d27399d8c22e78735ca39aa8ab45efb6413..fc1002b11f38ab31ff4148dbb8398f41389a3980 100644
|
|
--- a/src/main/java/net/minecraft/server/Main.java
|
|
+++ b/src/main/java/net/minecraft/server/Main.java
|
|
@@ -342,7 +342,7 @@ public class Main {
|
|
}
|
|
|
|
return dedicatedserver1;
|
|
- });
|
|
+ }, dedicatedserversettings.getProperties().pinnedCPU);
|
|
/* CraftBukkit start
|
|
Thread thread = new Thread("Server Shutdown Thread") {
|
|
public void run() {
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index b8a43a2833b9f014067681277edad3b96a6d63cd..5c874b36dc8fd2c31192888bead8bc685d391ea0 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -316,10 +316,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
|
|
@Nullable DimensionDataStorage sharedDataStorage; // Slice
|
|
|
|
- public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
|
|
+ public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory, int pinnedCPU) {
|
|
AtomicReference<S> atomicreference = new AtomicReference();
|
|
Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system
|
|
- ((MinecraftServer) atomicreference.get()).runServer();
|
|
+ ((MinecraftServer) atomicreference.get()).runServer(pinnedCPU);
|
|
}, "Server thread");
|
|
|
|
thread.setUncaughtExceptionHandler((thread1, throwable) -> {
|
|
@@ -1135,8 +1135,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
|
|
public static volatile RuntimeException chunkSystemCrash; // Paper - rewrite chunk system
|
|
|
|
- protected void runServer() {
|
|
- try {
|
|
+ protected void runServer(int pinnedCPU) {
|
|
+ try (net.openhft.affinity.AffinityLock al = net.openhft.affinity.AffinityLock.acquireLock(pinnedCPU)) {
|
|
long serverStartTime = Util.getNanos(); // Paper
|
|
if (!this.initServer()) {
|
|
throw new IllegalStateException("Failed to initialize server");
|
|
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java
|
|
index bab2471616404821671264ccefd729cab8d0bf58..ae69751c8ae5a288337b750f400e4af24506838d 100644
|
|
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java
|
|
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java
|
|
@@ -107,6 +107,7 @@ public class DedicatedServerProperties extends Settings<DedicatedServerPropertie
|
|
public final boolean logIPs;
|
|
private final DedicatedServerProperties.WorldDimensionData worldDimensionData;
|
|
public final WorldOptions worldOptions;
|
|
+ public final int pinnedCPU;
|
|
|
|
public final String rconIp; // Paper - Configurable rcon ip
|
|
|
|
@@ -172,6 +173,7 @@ public class DedicatedServerProperties extends Settings<DedicatedServerPropertie
|
|
final String rconIp = this.getStringRaw("rcon.ip");
|
|
this.rconIp = rconIp == null ? this.serverIp : rconIp;
|
|
// Paper end - Configurable rcon ip
|
|
+ this.pinnedCPU = this.get("pinned-cpu", -1);
|
|
}
|
|
|
|
// CraftBukkit start
|