Compare commits
1 Commits
1.21.5-784
...
1.21.5-c69
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c69087ba64 |
@@ -48,7 +48,7 @@
|
||||
}
|
||||
}
|
||||
val log4jPlugins = sourceSets.create("log4jPlugins") {
|
||||
@@ -153,7 +_,14 @@
|
||||
@@ -153,12 +_,20 @@
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -64,6 +64,12 @@
|
||||
implementation("ca.spottedleaf:concurrentutil:0.0.3")
|
||||
implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
|
||||
implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21
|
||||
implementation("net.minecrell:terminalconsoleappender:1.3.0")
|
||||
implementation("net.kyori:adventure-text-serializer-ansi:4.21.0") // Keep in sync with adventureVersion from Paper-API build file
|
||||
+ implementation("net.openhft:affinity:3.23.3") // Luminol
|
||||
runtimeConfiguration(sourceSets.main.map { it.runtimeClasspath })
|
||||
|
||||
/*
|
||||
@@ -217,26 +_,33 @@
|
||||
implementation("me.lucko:spark-paper:1.10.133-20250413.112336-1")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com>
|
||||
Date: Tue, 9 Nov 2077 00:00:00 +0800
|
||||
Subject: [PATCH] Cpu affinity
|
||||
|
||||
|
||||
diff --git a/io/papermc/paper/threadedregions/TickRegionScheduler.java b/io/papermc/paper/threadedregions/TickRegionScheduler.java
|
||||
index fa6b8d756195c1b430cc11214a901bd42eebc98d..0357792de0ed8ec9058d1847c8b45c33ff365af6 100644
|
||||
--- a/io/papermc/paper/threadedregions/TickRegionScheduler.java
|
||||
+++ b/io/papermc/paper/threadedregions/TickRegionScheduler.java
|
||||
@@ -49,6 +49,25 @@ public final class TickRegionScheduler {
|
||||
|
||||
@Override
|
||||
public Thread newThread(final Runnable run) {
|
||||
+ // Luminol start - cpu affinity
|
||||
+ if (me.earthme.luminol.config.modules.misc.CpuAffinityConfig.cpuAffinityEnabled) {
|
||||
+ Runnable affinityRunnable = new Runnable() {
|
||||
+ private boolean affinitySet = false;
|
||||
+
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ if (!this.affinitySet) {
|
||||
+ this.affinitySet = true;
|
||||
+ net.openhft.affinity.Affinity.setAffinity(me.earthme.luminol.config.modules.misc.CpuAffinityConfig.tickRegionAffinityBitSet);
|
||||
+ }
|
||||
+ run.run();
|
||||
+ }
|
||||
+ };
|
||||
+ final Thread ret = new TickThreadRunner(affinityRunnable, "Region Scheduler Thread #" + this.idGenerator.getAndIncrement());
|
||||
+ ret.setUncaughtExceptionHandler(TickRegionScheduler.this::uncaughtException);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ // Luminol end - cpu affinity
|
||||
final Thread ret = new TickThreadRunner(run, "Region Scheduler Thread #" + this.idGenerator.getAndIncrement());
|
||||
ret.setUncaughtExceptionHandler(TickRegionScheduler.this::uncaughtException);
|
||||
return ret;
|
||||
@@ -0,0 +1,72 @@
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/me/earthme/luminol/config/modules/misc/CpuAffinityConfig.java
|
||||
@@ -1,0 +_,69 @@
|
||||
+package me.earthme.luminol.config.modules.misc;
|
||||
+
|
||||
+import com.electronwill.nightconfig.core.file.CommentedFileConfig;
|
||||
+import com.mojang.logging.LogUtils;
|
||||
+import me.earthme.luminol.config.EnumConfigCategory;
|
||||
+import me.earthme.luminol.config.IConfigModule;
|
||||
+import me.earthme.luminol.config.flags.ConfigInfo;
|
||||
+import me.earthme.luminol.config.flags.DoNotLoad;
|
||||
+import net.openhft.affinity.Affinity;
|
||||
+import org.slf4j.Logger;
|
||||
+
|
||||
+import java.util.BitSet;
|
||||
+import java.util.List;
|
||||
+
|
||||
+public class CpuAffinityConfig implements IConfigModule {
|
||||
+ @ConfigInfo(baseName = "enabled")
|
||||
+ public static boolean cpuAffinityEnabled = false;
|
||||
+ @ConfigInfo(baseName = "tickregion_affinity")
|
||||
+ public static List<String> tickRegionAffinity = Affinity.getAffinity()
|
||||
+ .stream()
|
||||
+ .mapToObj(String::valueOf)
|
||||
+ .toList();
|
||||
+
|
||||
+ @DoNotLoad
|
||||
+ private static boolean inited = false;
|
||||
+ @DoNotLoad
|
||||
+ private static final Logger LOGGER = LogUtils.getLogger();
|
||||
+ @DoNotLoad
|
||||
+ public static BitSet tickRegionAffinityBitSet;
|
||||
+
|
||||
+ @Override
|
||||
+ public EnumConfigCategory getCategory() {
|
||||
+ return EnumConfigCategory.MISC;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getBaseName() {
|
||||
+ return "cpu_affinity";
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void onLoaded(CommentedFileConfig configInstance) {
|
||||
+ if (!cpuAffinityEnabled) return;
|
||||
+
|
||||
+ tickRegionAffinityBitSet = parseAffinity(tickRegionAffinity);
|
||||
+ LOGGER.info("Tick region thread now bound to: {}", tickRegionAffinityBitSet);
|
||||
+
|
||||
+ if (!inited) {
|
||||
+ inited = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private BitSet parseAffinity(List<String> affinity) {
|
||||
+ int maxAvailable = Runtime.getRuntime().availableProcessors();
|
||||
+ BitSet affinitySet = new BitSet(affinity.size());
|
||||
+ affinity.stream()
|
||||
+ .mapToInt(Integer::parseInt)
|
||||
+ .filter(cpuId -> {
|
||||
+ if (cpuId >= 0 && cpuId < maxAvailable) {
|
||||
+ return true;
|
||||
+ } else {
|
||||
+ LOGGER.warn("Invalid cpuId {}, ignoring.", cpuId);
|
||||
+ return false;
|
||||
+ }
|
||||
+ })
|
||||
+ .forEach(affinitySet::set);
|
||||
+ return affinitySet;
|
||||
+ }
|
||||
+}
|
||||
Reference in New Issue
Block a user