From 8df52d958db9f72bec01b133b12b351568d1da0e Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Mon, 2 May 2022 20:01:00 +0800 Subject: [PATCH] Optimize netty epoll packet sending TeaCon now uses Arclight, so we have a chance to experience heavy loads. Per TeaCon profiling results packet sending uses a native call to wakeup threads which can take up to 20% tick time. This should work fine as server will do a flush per tick. --- .../general/ConnectionMixin_Optimize.java | 18 ++++++++++++++++++ ...ixins.arclight.impl.forge.optimization.json | 1 + 2 files changed, 19 insertions(+) create mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/ConnectionMixin_Optimize.java diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/ConnectionMixin_Optimize.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/ConnectionMixin_Optimize.java new file mode 100644 index 00000000..6438543d --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/ConnectionMixin_Optimize.java @@ -0,0 +1,18 @@ +package io.izzel.arclight.common.mixin.optimization.general; + +import io.netty.util.concurrent.AbstractEventExecutor; +import net.minecraft.network.Connection; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.Slice; + +@Mixin(Connection.class) +public class ConnectionMixin_Optimize { + + @ModifyArg(method = "sendPacket", at = @At(value = "INVOKE", remap = false, target = "Lio/netty/channel/EventLoop;execute(Ljava/lang/Runnable;)V"), + slice = @Slice(from = @At(value = "INVOKE", remap = false, target = "Lio/netty/channel/EventLoop;inEventLoop()Z"))) + private Runnable arclight$useLazyRunnable(Runnable runnable) { + return (AbstractEventExecutor.LazyRunnable) runnable::run; + } +} diff --git a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json index 9bc01c77..36560763 100644 --- a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json +++ b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json @@ -6,6 +6,7 @@ "compatibilityLevel": "JAVA_11", "mixins": [ "ClassInheritanceMultiMapMixin", + "ConnectionMixin_Optimize", "EntityDataManagerMixin_Optimize", "GoalMixin", "MobMixin_Optimization",