a Totally Normal Optimization Modpack
aTNO (or a Totally Normal Optimization modpack for long) is an overly complicated optimization modpack specifically made for 26.1.2 that try to push further the optimization made without sacrificing much of the base quality
Disclaimer: This is made for mid-range/high-end PC and may be worse than vanilla on low-end PC (not tested yet)
Second Disclaimer: This run worse on a Phone (tested on the Oneplus 9 Pro)
Da Number
| Duck | Vanilla | aTNO¹ | Fabulously Optimized² | Remarkably Optimized² | Adrenaline² | Winner |
|---|---|---|---|---|---|---|
| Avg FPS³ ⁸ | 232 | 344 | 281 | 283 | 280 | aTNO |
| 1% Low Avg FPS³ ⁸ | Not Modded | 120-138 | 180-200 | 130-168 | 180-200 | FO / Adrenaline |
| Avg Tick Time (ms)³ | 14.8-16.2 | 7-7.7 | 11-12 | 12.5-13 | 11-12.5 | aTNO |
| Avg CPS (chunky)⁴ | Not Modded | 644,31 | 113.92 | 384.59 | 468.04 | aTNO |
| Loading Time (s)⁵ | 6 | 15 | 11 | 10 | 9 | Vanilla |
| World Creation Time (s)⁶ | 18 | 10 | 20 | 10 | 10 | aTNO / RO / Adrenaline |
| Memory Usage (MB)⁷ | 580 | 650 | 670 | 520 | 450 | Adrenaline |
- The Vulkan Version was used
- The latest 26.1.2 version of these modpack was used
- The test was on 32 chunk of render distance and simulation with uncapped FPS, looking at the sea
- This command was used: /chunky start minecraft:overworld circle 0 0 2500 2500
- From clicking launch to the menu (didn't count the fade in time)
- From clicking create world till it's fully loaded (used the F3 + 2 graph)
- When creating a new world and waiting until its fully loaded (after GC)
- Depending on the mods/modpack (idk if it apply here), the 1% lows can be fake
This was tested with a Ryzen 5 5500, a GTX 1060 6GB, 6GB Allocated RAM and a SSD SATA on CachyOS with a 1440p monitor
Da Version
The modpack come in 3 version, with each some difference, so its always good to choose the one who fit best
Vulkan Version:
The Vulkan Version make use of multiple advanced technologies like Vulkan, OpenCL and Rust to give the best result on modern hardware. Use this Version if your PC is recent enough and the GPU have enough headroom for the OpenCL utilization (see the advanced section for the OpenCL hardware recommendation).
Sodium Version:
The Sodium Version stay in the OpenGL side with Sodium and does not go into Vulkan, OpenCL or Rust. Use this version if your PC is not recent enough, your PC is not powerful enough or if you prefer the OpenGL side.
Server Version:
The Server Version is made and only for the Server (eg. via Self Hosting or a Server Host), it get ride of the client optimization, which is irrelevant. Use this version ONLY for (and not on) a Server.
Q&A
Is it compatible with Vanilla Client/Server ?
Yes, it's fully compatible with Vanilla Clien/Server.
How can I use your Modpack (not for only playing, if you get what I mean) ?
You can use my modpack as a base for your own Modpack (not obligated, but it would be nice to says that you used it), fork it, use it to compare (saying the version used) and basically everything else (execpt stealing tho, its not nice to steal).
What should I check when using the modpack as a base ?
Firstly you need to choose between Vulkan or Sodium (or Server) due to compatibility reason, then you need to test the incompatibility between mods.
Where can I make a suggestion or report a bug ?
You can make a suggestion or report a bug on the discord server (or in the curseforge comment section I guess, even tho I'm gonna be even less active than Discord) (also you can just come in the server discord without any suggestion or bug, so atleast I'm not alone in the serv)
JVM Argument and GC choice (Java 25)
The choice of the JVM argument and the GC can be important, choosing between them can change the experience while playing
Garbage-First (G1) Garbage Collector (GC)
The Garbage-First Garbage Collector (or simply G1 GC) is the Java default garbage collector since Java 9, it's balanced between throughput and latency
Here is the JVM Argument I Recommend:
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:G1HeapRegionSize=16M -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+UseStringDeduplication -XX:InitialCodeCacheSize=16M -XX:ReservedCodeCacheSize=384M -Xss2M --enable-preview --enable-native-access=ALL-UNNAMED
Z Garbage Collector (ZGC)
The Z Garbage Collector (or simply ZGC) is a scalable low-latency focused GC with a goal of having near 0 latency and supporting multi-TB heap size
Here is the JVM Argument I Recommend:
-XX:+UseZGC -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+UseStringDeduplication -XX:InitialCodeCacheSize=16M -XX:ReservedCodeCacheSize=384M -Xss2M --enable-preview --enable-native-access=ALL-UNNAMED
Shenandoah GC
The Shenandoah GC is also a low-latency focused GC, it's like ZGC but focused on less bigger heap size
Here is the JVM Argument I Recommend:
-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -XX:ShenandoahGarbageThreshold=25 -XX:ShenandoahMinFreeThreshold=20 -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+UseStringDeduplication -XX:InitialCodeCacheSize=16M -XX:ReservedCodeCacheSize=384M -Xss2M --enable-preview --enable-native-access=ALL-UNNAMED
Da board
| Feature | G1 GC | ZGC | Shenandoah |
|---|---|---|---|
| Pause behavior | 20–200ms typical | 0.1–0.5ms typical | 1–5ms typical |
| Throughput | High | Medium | Medium |
| Latency Target | moderate | Strong | Strong |
| Startup Time | Fast | Moderate | Moderate |
| Heap Size Support | Large (up to ~4 TB) | Very Large (multi-TB) | Moderate (~2 TB) |
| Concurrent Compaction | Partial | Full | Full |
| Memory overhead | Baseline (~10% headroom) | 15–30% higher than G1 GC | 10–20% higher than G1 GC |
| Throughput cost | Baseline | 5–15% lower than G1 GC | 5–10% lower than G1 GC |
| CPU overhead | Baseline | +5–10% | +5–15% |
(#thanks javacodegeeks)
Advanced
This section is supposed to come in <details> but curseforge doesn't support it, so instead its just gonna be a huge unhidden pile of text
This section come in 6 parts:
- Hardware recommendation for OpenCL (from C2ME OpenCL): This part is just the C2ME OpenCL compatibility matrix (basically)
- Tested Hardware: This part says more details about the system used to test
- Mod parameter: This part says the change made in the config file of mods and why
- Modified Mod: This part says how and why I modified StateStream
- GPU Workloads and P-State (NVIDIA and Vulkan Version Only): This part just says the specific interaction between the Vulkan Version and NVIDIA GPU
- Mod List: This part just says all the mod used (in any version) with their link and author
Hardware recommendation for OpenCL (from C2ME OpenCL)
Minimum hardware requirements
- a working OpenCL 1.2+ driver
- cl_khr_fp64 support (fp64 support)
Recommended hardware (based on C2ME OpenCL suggestion for 1200CPS+, so take it with a huge pinch of salt)
GPU:
- Nvidia GTX 1060 or greater
- AMD Radeon RX 6500 XT or greater
- Intel Arc B570 or greater
IGPU:
- Idk, sorry guys
Nice things to have
- a working OpenCL 3.0 driver
- cl_khr_device_uuid for stable device matching
- CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE for optimal performance. Not present on AMD GPUs
- cl_khr_priority_hints and cl_khr_throttle_hints for queue priority. Only known to be present on Intel GPUs
- Non-uniform workgroups, not present on Nvidia GPUs and some AMD ones
Platform compatibility matrix
- Supported: known to be fully working in general
- Partial: known to be working with some big caveats
- Unsupported: known to be not working at all
- N/A: Not applicable because the combination doesn't exist.
| Vendor | Generation | Driver | Windows | Linux | MacOS |
|---|---|---|---|---|---|
| NVIDIA | Maxwell and beyond | Proprietary and Open | Supported | Partial¹ | Unknown |
| NVIDIA | Kepler | Proprietary | Unknown | Supported | Unknown |
| NVIDIA | Older cards | Any | Unknown | Unknown | Unknown |
| NVIDIA | nouveau supported GPUs | Rusticl on nouveau | N/A | Unknown | N/A |
| Intel | Gen9, Gen9.5⁵ | Official² | Partial³ | Partial⁴ | Unknown |
| Intel | Gen11, Gen12, Gen12.5⁶ | Official² | Unsupported¹² | Unsupported¹² | Unknown |
| Intel | Gen12.7, Xe2, Xe3 and beyond⁷ | Official² | Partial³ | Partial⁴ | Unknown |
| Intel | Older graphics | Official² | Unknown | Unknown | Unknown |
| Intel | iris supported GPUs | Rusticl on iris | N/A | Unknown | N/A |
| AMD | RDNA1 and beyond¹⁴ | Official⁸ | Supported⁹ | Supported | Unknown |
| AMD | GCN | Official¹⁰ | Unsupported¹³ | Unsupported¹³ | Unknown |
| AMD | radeonsi supported GPUs | Rusticl on radeonsi | N/A | Partial¹¹ | N/A |
| Qualcomm | Any | Official | Unsupported¹² | Unsupported¹² | N/A |
| Apple | Any | MacOS drivers | N/A | N/A | Unsupported¹² |
| Apple | Any | Rusticl on asahi | N/A | Unknown | N/A |
- ¹ The driver is known to hang after a while. Driver branch 535 LTS seem to work fine.
- ² The official driver package on Windows. Gen9 and Gen9.5 needs up-to-date drivers:
- Gen9: https://www.intel.com/content/www/us/en/download/762755/intel-6th-gen-processor-graphics-windows.html
- Gen9.5: https://www.intel.com/content/www/us/en/download/776137/intel-7th-10th-gen-processor-graphics-windows.html
- For Linux: https://github.com/intel/compute-runtime
- ³ GPU is known to crash on pretty much all non-vanilla worldgen. Your millage may vary.
- ⁴ GPU is known to crash with some complex worldgen datapacks, such as Terralith. Your millage may vary.
- ⁵ Gen9 and Gen9.5 are integrated graphics on 6th-9th gen core processors, and 10th gen non-G series core processors
- ⁶ Gen11 and Gen12, Gen12.5 here are integrated graphics in 10th G-series core processors, 11th-14th gen core processors, plus Arc DG1, Arc A-series
- ⁷ Gen12.7 refers to Meteor Lake and Arrow Lake integrated graphics.
- At this point it is integrated graphics in Core Ultra 100 series and above, plus Battlemage dedicated graphic and above.
- ⁸ The official driver package on Windows. The ROCm runtime on Linux.
- ⁹ Driver versions 26.5.1 is known to always crash. Existing installations upgraded to 26.6.1+ may also crash as well.
- If you are experiencing crashes on 26.6.1+, it is recommended to DDU then do a fresh installation.
- ¹⁰ The official driver package on Windows. The AMDGPU-Pro runtime on Linux.
- ¹¹ Mesa 26.1.x branch is known to work on RDNA3/4. Anything can happen with any hardware combination, including corrupted worldgen. Your millage may vary.
- ¹² Missing FP64 support
- ¹³ Driver crashes
- ¹⁴ Integrated graphics for Ryzen 7000 series and 9000 series not included. They are too slow for this task.
(#thanks ishland)
Tested Hardware
Simplified:
- OS: CachyOS
- Motherboard: B550M Phantom Gaming 4
- CPU: AMD Ryzen 5 5500
- GPU: GTX 1060 6GB
- Allocated RAM: 6GiB
- Disk: SSD
- Launcher: PrismLauncher
- Java: Azul Zulu JRE 25
Advanced:
- OS: CachyOS x86_64
- Motherboard: B550M Phantom Gaming 4
- Kernel: linux-cachyos-bore-lto
- Sched-ext Scheduler: Lavd (Gaming mode)
- Display: 2560x1440, 120 Hz
- DE: KDE Plasma
- WM: KWin (X11)
- CPU: AMD Ryzen 5 5500 (12) @ 4.46 GHz
- PBO: +200MHz
- Core Undervolt: -6mV
- GPU: NVIDIA GeForce GTX 1060 6GB
- GPU Driver: nvidia-580xx-dkms nvidia-580xx-settings nvidia-580xx-utils opencl-nvidia-580xx
- Memory: 31.21 GiB
- Swap: 33.21 GiB
- Minimum Allocated RAM: 1GiB
- Maximum Allocated RAM: 6GiB
- Disk (/): 110.00 GiB - btrfs
- Compression: ZSTD level 3
- Launcher: PrismLauncher
- Java: azul_zulu_jre25.0.3
Mod parameter
Some mod config has been modified, so here i'm gonna say what has been changed and why it has been changed (globally).
Async
- enableAsyncSpawn set from false to true
Why? For less laggy entity spawning
Async Particle
- "gpuAcceleration" set from true false
- "appendNewParticlesToRenderer" set from true false
Why? To fix a bug between Vulkan and Async Particle which cause huge lag with a high number of particle
Beryl
- "shadersOn" set from true to false
Why? Not forcing shader for everyone
C2ME
- threadPoolPriority set from "default" (4) to 3
- maxConcurrentChunkLoads set from "default" (24) to 8
- chunkSendingSpeedMultiplierPercentage set from "default" (200) to 0
- gcFreeChunkSerializer set from "default" (false) to true
[openclAccel]
- allowIncompatibilityFallback set from "default" (false) to true
Why? Faster yet less laggy chunk creation/loading, also an activated Fallback
Fast Noise
- tree set from false to true
Why? avoid multiple calls to the thread when generating
Ixeris
- aggressiveCaching set from false to true
- keyboard set from false to true
Why? improve the event polling performance
Modernica
- perfChunkMeshing set from true to false
- perfDeduplicateClimateParameters set from false to true
- perfDeduplicateLocation set from false to true
- perfNetworkEnhancements set from true to false
- perfNetworkOptimizations set from true to false
- perfRemoveBiomeTemperatureCache set from true to false
- perfResourcepacks set from true to false
- perfWorldgenAllocation set from true to false
Why? For mod/datapack compatibility and less resource utilization
ServerCore
features:
- prevent-moving-into-unloaded-chunks set from false to true
- xp-merge-radius set from 0.5 to 1
- item-merge-radius set from 0.5 to 1
lobotomize-villagers:
- enabled set from false to true
Optimizations.yml
- fast-biome-lookups: true
Why? For reducing the time to calculate the Tick
Structure Layout Optimizer
- "deduplicateShuffledTemplatePoolElementList" set from false to true
Why? make structure layouts generate slightly faster
StateStream
- update_culling_enabled set from true to false
Why? Because the json file doesn't work (or I'm dumb, the two is possible)
TwinSession
- autoOp set from true to false
- spawnNearPlayer set from true to false
Why? If you already played with friends you know, you know…
Modified Mod
For the Vulkan and Sodium version of the Modpack, I had to modify StateStream for it to work in SinglePlayer too, here is the modification made:
- Suppressed quilt.mod.json (idk why)
- Modified the file fabric.mod.json at "environment": from "server" to "*"
GPU Workloads and P-State (NVIDIA and Vulkan Version Only)
This part concern more the NVIDIA GPU side.
Normally in Minecraft, the GPU automatically switch from P8-P5 to the P0 (Maximum Performance), but on the Vulkan Version, instead of switching to the P0 as it should, it switch to the P2 (Workload mode).
This is due to the OpenCL implementation that the NVIDIA Driver detect and automatically switch to the P2 as intended.
This is normally not affecting the performance by a ton (you wont see any difference for Minecraft), but the VRAM clock is gonna be lower than in P0.
Mod List
- Almanac by frikinjay
- Alternate Current by Space Walker
- Async by AxalotL, Alchemy, Bliss, FurryMileon, Grider, jediminer543
- Async Logger by decce
- AsyncParticles by Harvey_Husky
- Better Biome Blend by FionaTheMortal
- BetterRenderDistance by Warma
- Chunky by pop4959
- Cloth Config v26.1 by shedaniel
- Command Optimiser by Barnaby
- Concurrent Chunk Management Engine by RelativityMC, ishland
- Configured Defaults by Fuzs
- Debugify by isXander
- e4all by JustPixel
- EntityCulling by tr7zw
- Entity Tick Authority by cintlex
- Fabric API by FabricMC
- Fabric Language Kotlin by FabricMC
- Fast Noise by ZenXArch
- FerriteCore by malte0811
- Fzzy Config by fzzyhmstrs
- Gnetum by decce
- Immersive Optimization by Luke100000
- IncrementalPlayerSave by ExtraJuiceMan
- Iris by coderbot, IMS212, Justsnoopy30, FoundationGames
- Ixeris by decce
- Jasione by decce
- Ksyxis by VidTu
- LetMeDespawn by frikinjay
- lite FPS by Patrolin
- Lithium by JellySquid, 2No2Name
- Marlow's Crystal Optimizer by Bram, Marlow
- Mod Menu by Prospector, haykam821, gniftygnome, TerraformersMC
- More Culling by FX - PR0CESS, 1Foxy2
- Multicore Magic by the-real-ltcg
- Not Enough Vulkan by FlashyReese, amiralimollaei
- Optimized block entities by maDU59_
- Placeholder API by Patbox
- RailOptimization by Andrew Elizabeth / EasterGhost
- Reese's Sodium Options by FlashyReese
- Resourcefulconfig by ThatGravyBoat
- ScalableLux by Spottedleaf, ishland
- ServerCore by Wesley1808
- SignFaster by LoLip_p
- Sodium by JellySquid (jellysquid3)
- Sodium Extra by FlashyReese
- Sodium Relief by Erotoro
- StateStream by SQRT256_
- Structure Layout Optimizer by TelepathicGrunt
- TNT Optimiser by jayjoke
- TwinSession by (The)MisterFish
- VulkanMod by Collateral
- YetAnotherConfigLib by isXander

