Jump to content

[1.7.10] RegionFileCache createOrLoadRegionFile() behavior question...


Recommended Posts

Posted

This isn't a specific modding question, rather, I am trying to understand the foundation of what Minecraft is doing.

 

During my travels I came across RegionFileCache.  I see that createOrLoadRegionFile() will "purge" the internal cache once it hits a total of 256 entries.  This is kinda strange to me for several reasons:

 

* I would have expected some sort of LRU mechanism, not a dump of the entire cache.

* On a modded server with players travelling around and loading up regions in separate worlds I would imagine that this cache can reach full pretty quick.

 

Given these two it seems the cache would thrash which in turn could cause ripples in performance.  I was wondering from those in the know if my concerns are valid, and if not how should I be looking at this.

 

Thanks!

 

 

EDIT: For clarity, I am looking at the decompiled forgebin JAR file. :)

Posted

OK - I been poking a stick at the underlying mechanics of RegionFile and RegionFileCache.  In my local sandbox I have a set of replacement classes which were a bear trying to get into the Minecraft runtime using class transformers. :\

 

Anyways, based on what I have seen I think that chunk write performance can be enhanced by changing the init parameters to the Deflator.  The measurements I took weren't 100% scientific (i.e. get the nano time between when the ChunkBuffer is given to the upper level write routine until after the write completes within ChunkBuffer), and the ChunkBuffer I used was a replacement I came up with in order to get some additional streamlining.

 

With the Vanilla Minecraft defaults for the Deflater (Deflater.DEFAULT_COMPRESSION, Deflater.DEFAULT_STRATEGY, buffer of 512 bytes) a write of a chunk stream to the region file took about 2.5 seconds, and wrote on average 2.3K of information.  Keep in mind that the amount of time taken is inclusive of the compression of chunk NBT as well as the write to disk.

 

With new parameters I have been working on (compression level of 3, Deflater.FILTERED, 4K buffer size) a write of a chunk stream to the region file took about 1.5 seconds and wrote on average 3K of information.

 

My observations:

 

  • My tweaked compression settings resulted in a 66% increase write performance.
  • My tweaked compression settings resulted in a 30% increase in data size.
  • Though the amount of information written is larger, the minimum allocation size within the region file is a single 4K sector.  If the region had a bunch of modded items in a chunk I would expect the chunk stream to be larger with the tweaked compression settings than what Vanilla would do.

 

Disclaimers:

  • I have not looked in detail at the upper level Minecraft routines to see what they are actually doing.  My tweaks and changes are based on my observations of behavior at the lower levels and how they manifest.  As such the upper level routines could be taking 5 minutes to do something which makes the gain of 66% at the low level where I am looking kinda pointless.
  • The development system I am using is high end Windows 10 i7 system.  Not sure how these changes will play on other OS platforms or other less capable systems.
  • The code I used has been heavily modified from the originals.  My intent is to streamline operations and reduce impacts of buffer allocation, information caching, etc.

 

If you want to take a look at the code I am working with you can find it here.  This code is highly experimental and should be more of a proof of concept than anything production ready.

Posted

I'm doing it for several reasons:

 

  • Currently unemployed and going stir crazy. :)
  • I have played on servers that have had bouts of lag for inexplicable reasons, and I decided to take a look at how Minecraft works from the ground up to understand what may be happening.  As I dig up from the bottom I am making tweaks that I believe reduce contention with threading and memory management and improve on file access.

 

If I can come up with justifiable set of improvements I am looking at folding the logic into some of my mods.  The method I am using of replacing the Minecraft classes has me a bit nervous because I am intercepting the class load and replacing the entire class with my own implementation.  I have never done this before and I am just waiting to run afoul of the law of unintended consequences.

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Yep I did upgrade just because it showed me a new version available.  I'll redownload the mod list and make sure anything works.  Thanks!
    • The latest log was taken down by pastebin for some reason. Did you try removing the mods you added? The mods you updated, was there a specific reason you updated, or just because? It's possible the updates introduced incompatibilitie, or even need a newer build of forge. If you didn't need the updates for a specific reason, you could also try downgrading those mods.
    • Please read the FAQ, and post logs as described there. https://forums.minecraftforge.net/topic/125488-rules-and-frequently-asked-questions-faq/
    • I am using forge 1.20.1 (version 47.3.0). My pc has an RTX 4080 super and an i9 14900 KF, I am on the latest Nvidia graphics driver, latest windows 10 software, I have java 23, forge 1.12.2 works and so does all vanilla versions but for some reason no version of forge 1.20.1 works and instead the game just crashes with the error code "-1." I have no mods in my mods fodler, I have deleted my options.txt and forge.cfg files in case my settings were causing a crash and have tried removing my forge version from the installations folder and reinstalling but no matter what I still crash with the same code and my log doesn't tell me anything: 18:34:53.924 game 2025-02-06 18:34:53,914 main WARN Advanced terminal features are not available in this environment 18:34:54.023 game [18:34:54] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--username, mrmirchi, --version, 1.20.1-forge-47.3.0, --gameDir, C:\Users\aryam\AppData\Roaming\.minecraft, --assetsDir, C:\Users\aryam\AppData\Roaming\.minecraft\assets, --assetIndex, 5, --uuid, 2db00ea8d678420a8956109a85d90e9d, --accessToken, ????????, --clientId, ZWI3NThkNzMtNmNlZS00MGI5LTgyZTgtYmZkNzcwMTM5MGMx, --xuid, 2535436222989555, --userType, msa, --versionType, release, --quickPlayPath, C:\Users\aryam\AppData\Roaming\.minecraft\quickPlay\java\1738838092785.json, --launchTarget, forgeclient, --fml.forgeVersion, 47.3.0, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] 18:34:54.027 game [18:34:54] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.8 by Microsoft; OS Windows 10 arch amd64 version 10.0 18:34:54.132 game [18:34:54] [main/INFO] [ne.mi.fm.lo.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow 18:34:54.191 game [18:34:54] [main/INFO] [EARLYDISPLAY/]: Trying GL version 4.6 18:34:54.303 game [18:34:54] [main/INFO] [EARLYDISPLAY/]: Requested GL version 4.6 got version 4.6 18:34:54.367 monitor Process Monitor Process crashed with exit code -1     screenshot of log: https://drive.google.com/file/d/1WdkH88H865XErvmIqAKjlg7yrmj8EYy7/view?usp=sharing
    • I am currently working on a big mod, but I'm having trouble with my tabs, I want to find a way to add tabs inside tabs, like how in mrcrayfishes furniture mod, his furniture tab has multiple other sub tabs to them, so i know it is possible but i just don't know how it is possible, any help would be appreciated, thanks
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.