Files
OldSliceMC/patches/server/0047-Affinity-Locks.patch
2024-08-05 19:43:15 -05:00

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