having a hard time optimizing mod for my hardware
Forgive my lack of knowledge (and yapping), some of these may be stupid questions. I thinkk that I am cpu bottlenecked on my system. By far the greatest performance benefit comes from reducing the LOD drop off distance. But, in the explanation for this setting, it says that increasing this setting should only increase gpu and memory usage, not cpu usage. My best guess is that updating LOD chunks is more cpu intensive when they’re of a higher quality. But this doesn’t really make sense as FPS still drops off proportionally even when rendering a static scene. What even is the difference between the LOD updater and LOD builder threads? How are file handler threads used? The explanations given are quite vague. I would think the builder threads do just that, build LODs, but the odd part is I work with a fully generated world where I render all the LOD chunks at once. So the chunks are built once when joining the world, and from that point on, only the quality is updated as the player moves throughout the world. So you’d think, the only threads that would be active would be the LOD updater threads. But, are file handler threads still used after the world is fully loaded in? Additionally, when moving around the world and when performance drops, I often get the message saying DH is overloaded and that there are “too many chunks queued for updating”. So, logically, you’d think I would need to increase the number of LOD updater threads. But, you’d be mistaken. Actually, increasing the number of builder threads improves performance, and makes this message less frequent. It even shows in the message that increasing the builder threads increases the “max queue count”. So, needless to say, I’m lost
15 Replies
Tl.Dr. What is the difference between LOD updater threads, LOD builder threads, and file handler threads? With respect to the question above, how can I lower CPU usage if I play in a fully pregenerated world with all the chunks rendered at once (I.e the world is smaller than my LOD distance).
referenced messages
Wait, does “queued for updating” reference updating the LOD quality? Or updating the LOD itself (I.e. the blocks in the LOD have changed)
chunks queued for updating are the chunks your player has just loaded in the vanilla render distance. DH runs a check on them to update the LODs in case they have changed while they weren't loaded. So if you move too fast and your LOD builder threads/runtime% are too low, then DH will get overloaded.
increase the number of LOD updater threads or their runtime %
You reference builder threads here
But updater threads here
Should I increase both?
I could also increase the time between update checks right? (It actually seems like the 2 settings are increase the time between updates themselves, or disable the check all together)
I haven't played with DH 2.2 for a long time now so I dont remember exactly what it does. But i do not recommend disabling them or LODs wont load at all
I think there's a slight misunderstanding here. The # of threads or the runtime % don't determine the time between checks. They determine how much and how fast the CPU should be used to DO the check
There’s a separate setting in the LOD building section
What I meant with that is that the queue will fill up with chunks regardless of your DH settings for these threads.
What you can change is how much of your cpu DH is allowed to use to update the chunks in the queue.
Okay okay, so here’s my question
Why is distant horizons attempting to update so many chunks, if I haven’t changed a single block in the entirety of the worlds existence
There should be no chunks that need an update (I.e. the unchanged chunk check should return every chunk as unchanged)
It's a fair question, and while I don't know the exact internals of how DH works I'll do my best to answer
DH runs a check on all chunks you load with your vanilla render distance for two reasons:
1- to generate the LODs if the new chunks haven't been generated before
2- if LODs already exist, DH will ensure that LODs are exactly the same as the chunks you just loaded in vanilla
I think reason 2 exists because of multiplayer or singleplayer lan worlds where some player could have changed chunks while they were unloaded for you
or just to avoid a de-sync between vanilla and DH Lods
So increasing the number of builder threads let's DH use more of your CPU to complete the updates in the queue faster. It will help reduce the problem, not worsen it.
You can also try increasing the other threads, just keep in mind that if they make your CPU usage too high, you might experience fps drops.
Every time I move, even walk, fps drops from stable 40-50 (no matter how fast I look around) to a very unstable 10-20 with frequent freezes. I really appreciate the explanations, but this just doesn’t feel like normal behavior
I’ve got all my threads at 1 besides updater threads which are at 2
Runtime percent default values (0.25)
Freezes as in MC freezes for whole second and then resumes normally?
Correct. Are you thinking it could be a memory thing?
Yeah, probably
Hmm
Okay so to summarize, distant generation is disabled so no generation threads are active, file handler threads are active only when first loading in LODS, but both builder and updater threads are active while the player is moving