Affinity Locks
This commit is contained in:
81
patches/server/0047-Affinity-Locks.patch
Normal file
81
patches/server/0047-Affinity-Locks.patch
Normal file
@@ -0,0 +1,81 @@
|
||||
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
|
||||
Reference in New Issue
Block a user