Chunk System Architecture
Moonrise Worker and I/O Pools
Paper uses two separate thread pools for chunk operations:- Worker Pool: Handles chunk generation, lighting calculations, and general processing
- I/O Pool: Manages disk read/write operations for chunk data
ca.spottedleaf.moonrise.common.util.MoonriseCommon:
The thread pools use a queue hold time of 20ms for workers and 25ms for I/O operations, balancing responsiveness with throughput.
Configuration Options
Global Chunk Loading Settings
File:config/paper-global.yml
player-max-chunk-send-rate
Maximum chunks per second sent to each player.- Default:
75.0 - Unit: chunks per second
- Recommendation: 50-100 for most servers
player-max-chunk-load-rate
Maximum chunks per second loaded for each player (includes checking if chunks are already generated).- Default:
100.0 - Unit: chunks per second
- Impact: Affects teleportation speed and world exploration
player-max-chunk-generate-rate
Maximum chunks per second generated for each player.- Default:
-1.0(unlimited) - Unit: chunks per second
- Use case: Prevent lag spikes during rapid world exploration
Advanced Chunk Loading Settings
auto-config-send-distance
Matches server send distance to client view distance settings (if smaller).- Default:
true - Benefit: Prevents unnecessary chunk sends to clients with low view distance
player-max-concurrent-chunk-loads
Maximum simultaneous chunk load operations per player.- Default:
0(auto-configured based on player count) - Manual values: Set to
-1for unlimited, or positive number for fixed limit
Auto-configuration adjusts concurrency based on server load and player count. Manual tuning is rarely necessary.
player-max-concurrent-chunk-generates
Maximum simultaneous chunk generation operations per player.- Default:
0(auto-configured) - Impact: Limits CPU usage during world generation
Thread Pool Configuration
File:config/paper-global.yml
io-threads
Number of threads dedicated to chunk I/O operations.- Default:
-1(auto-configured, minimum 1) - Recommendation: 1-2 threads for most servers
- Storage consideration: More threads benefit NVMe SSDs over HDDs
worker-threads
Number of threads for chunk generation and processing.- Default:
-1(auto-configured based on CPU cores) - Auto-calculation:
- 4 cores or less: 1-2 worker threads
- More than 4 cores:
(cores / 2) / 2 - Can be overridden with
-DPaper.WorkerThreadCount=NJVM flag
| CPU Cores | Worker Threads |
|---|---|
| 4 or less | 1-2 |
| 8 | 2 |
| 16 | 4 |
| 32 | 8 |
Per-World Chunk Settings
File:config/paper-world-defaults.yml
auto-save-interval
How often chunks are saved to disk.- Default: Inherits from
server.properties(6000 ticks / 5 minutes) - Format: Duration (e.g.,
5m,300s, or ticks as integer)
Autosave Performance Impact
Autosave Performance Impact
Frequent autosaves cause I/O spikes. Increasing the interval reduces stuttering but increases data loss risk on crashes.Recommended values:
- Small servers (< 20 players):
6000(5 min) - Large servers (50+ players):
12000(10 min)
max-auto-save-chunks-per-tick
Maximum chunks saved per server tick during autosave.- Default:
24 - Impact: Spreads autosave I/O across multiple ticks
delay-chunk-unloads-by
Delay before unloading chunks after all players leave the area.- Default:
10s - Benefit: Prevents chunk reload thrashing when players move in/out of areas
entity-per-chunk-save-limit
Limit specific entity types saved per chunk to prevent chunk save lag.Set to a positive number to limit entities of that type. Useful for preventing projectile buildup in chunks.
Optimization Strategies
1. Rate Limiting for Exploration
Prevent chunk generation lag during rapid exploration:2. View Distance Tuning
File:config/spigot.yml
View Distance Performance Impact
View Distance Performance Impact
Each view distance increase loads exponentially more chunks:
Recommendation: Use 6-10 for most servers.
| View Distance | Chunks Loaded | Performance Impact |
|---|---|---|
| 6 | 169 | Low |
| 8 | 289 | Medium |
| 10 | 441 | High |
| 12 | 625 | Very High |
3. Pregenerate Worlds
Pregenerate chunks to eliminate runtime generation lag:- No generation lag during gameplay
- Consistent TPS
- Better for PvP and minigame servers
4. Optimize Chunk I/O
Use NVMe storage: 5-10x faster than SATA SSDs for chunk operations Region file cache (config/paper-global.yml):
Monitoring Chunk Performance
Using Spark
Profile chunk system performance:Paper Workerthreads - chunk generation timePaper I/O Workerthreads - disk I/O bottlenecks
Timings
Troubleshooting
Slow Chunk Loading
Symptoms: Chunks load slowly during teleportation or flight Solutions:- Check
player-max-chunk-load-rate(increase to 150-200) - Verify storage performance (NVMe recommended)
- Increase
worker-threadsif CPU usage is low
Chunk Generation Lag
Symptoms: TPS drops when exploring new areas Solutions:- Set
player-max-chunk-generate-rateto 5-10 - Pregenerate the world
- Reduce view distance temporarily
Autosave Lag Spikes
Symptoms: Regular lag spikes every 5 minutes Solutions:- Increase
auto-save-intervalto 10+ minutes - Reduce
max-auto-save-chunks-per-tickto spread I/O - Upgrade to faster storage (NVMe)