Minetest logo

IRC log for #minetest-dev, 2023-12-11

| Channels | #minetest-dev index | Today | | Google Search | Plaintext

All times shown according to UTC.

Time Nick Message
00:30 MTDiscord1 joined #minetest-dev
04:26 calcul0n_ joined #minetest-dev
04:44 fluxionary_ joined #minetest-dev
05:00 MTDiscord joined #minetest-dev
05:28 ivanbu joined #minetest-dev
10:40 beanzilla joined #minetest-dev
10:44 bigfoot547 joined #minetest-dev
12:18 proller joined #minetest-dev
12:32 vampirefrog joined #minetest-dev
13:00 proller joined #minetest-dev
14:17 json joined #minetest-dev
14:29 Niklp43 joined #minetest-dev
14:30 Niklp43 joined #minetest-dev
14:34 Niklp sfan5: I ported the caverealms mapgen (https://github.com/Archtec-io/caverealms_lite/tree/mglua) to your new async api, really impressive! But the max lag goes up to ~1.5s (even more than w/ "normal" on_generated), is this a problem in my implementation or a mglua issue?
16:50 sfan5 implementation looks ok, would have to profile to see why it still causes lag
16:50 sfan5 if it works correctly any lua mapgen should not be causing more lag than the engine mapgen
16:53 appguru joined #minetest-dev
17:26 Niklp joined #minetest-dev
17:30 Niklp joined #minetest-dev
17:31 MTDiscord <.niklp> I'll profile it with jitprofiler later
17:41 rubenwardy you'll probably want a C++ profiler. The performance of the Lua shouldn't matter as it's on a different thread
17:48 TheCoffeMaker joined #minetest-dev
17:50 Niklp I ran /emergeblocks, every 20-30 seconds theres a ~1-2 seconds long server freeze. Which C++ profiler should I use?
18:00 Niklp the freeze comes from map saving, I'll try the default save interval
18:34 appguru joined #minetest-dev
18:40 sfan5 perf record -z --call-graph dwarf -- ./bin/minetestserver ...
18:40 sfan5 (debug symbols needed)
18:41 sfan5 after that I put the results into https://github.com/KDAB/hotspot
18:53 Niklp Are debug symbols included in RelWithDebInfo?
18:57 MTDiscord <warr1024> Yes
18:58 MTDiscord <warr1024> I can confirm that doing a Release build does not include debug symbols but doing a RelWithDebInfo does.
19:16 appguru joined #minetest-dev
19:20 Niklp oke how must I "read" the results in hotspot?
19:22 sfan5 find the main thread at the bottom, figure out when it froze and filter for that
19:22 sfan5 then the top graph gives you a good idea what it was busy with
19:23 MTDiscord <warr1024> "every 20-30 seconds theres a ~1-2 seconds long server freeze" ... You wouldn't happen to have a mechanical HDD, would you?
19:24 MTDiscord <warr1024> That is suspiciously close to the issues I had with database activity on HDD.  Enabling pragma journal_mode=wal on sqlite mitigated it a bit (spread out the interval).  Moving to postgresql got rid of write spikes, but I still had a lot of delay loading mapblocks from disk.  The only thing that fully resolved it was upgrading to an SSD.
19:25 MTDiscord <warr1024> HDD wasn't always bad but it got bad pretty consistently any time the disk was busy with anything other than MT.
19:25 Niklp No, I have a fast(TM) nvme SSD. I did some tests, with the default interval (5.3 seconds), there's just a ~400ms freeze
19:26 MTDiscord <warr1024> Hmm, you wouldn't happen to have a machine that's slow in other ways, like CPU, would you?  Could be compression or something maybe...  Or maybe you just have some really big mapblocks (like lots of meta or ents)
19:27 Niklp I've never experienced a similar issue in the last two years with my pc...
19:30 Niklp The mapblocks are new generated since I test mapgen. There shouldn't be any nodemeta or ents
19:31 celeron55 Niklp: you are using sqlite, right?
19:31 celeron55 (wasn't mentioned yet)
19:32 Niklp yes, it's just a debug server, otherwise I would use postgres
19:33 Niklp (context: I'm using sfan's async lua mapgen PR)
19:33 sfan5 consider using the dummy backend to rule out any disk activity
19:33 Niklp +1 I'll test this
19:33 celeron55 what filesystem?
19:34 celeron55 you could try setting sqlite_synchronous to 1 (possibly permanently) or 0 (for testing) to see if the filesystem is somehow very slow to sync
19:35 celeron55 (it sets PRAGMA synchronous, see https://www.sqlite.org/pragma.html)
19:35 celeron55 on android it defaults to 1 and 1 should be safe enough
19:35 celeron55 on desktop it defaults to 2
19:36 Niklp I'm using btrfs, w/o any weird config
19:36 celeron55 (warr1024's suggestion about wal is also relevant, but i haven't personally played with that)
19:37 celeron55 btrfs is a bit weird but i don't know anything about its sync characteristics
19:39 Niklp max_lag w/ dummy map is 0.53 seconds definitely better than ~1.5 seconds
19:40 MTDiscord <warr1024> Re: WAL, it's basically the "modern" way to run a sqlite database and I would recommend it for ALL non-pathological setups (i.e. unless you NEED a single file only, or are running stuff over nfs or something).  I think the only reason it's not the default is because sqlite is really super strict about compatibility or something.
19:41 sfan5 wasn't WAL enabled by default?
19:41 celeron55 i wonder if changing map_compression_level_disk would have an effect
19:41 MTDiscord <warr1024> WAL is not enabled by default that I know of in sqlite in general, and it's definitely not in Minetst.
19:41 sfan5 hmm no
19:41 sfan5 celeron55: better yet move compression out of the main thread
19:42 celeron55 well that's not a simple config change that can be tested right now
19:42 MTDiscord <warr1024> I would actually really like if there were an option in MT to turn it on immediately upon creating ANY sqlite db, so I wouldn't have to go in with scripts and do it post hoc.
19:42 celeron55 unless you're about to write a patch 8)
19:42 MTDiscord <warr1024> Re: compression, I'd try both lowering the compression (in case it's CPU pressure) and possibly raising it (in case it's I/O somehow)
19:43 celeron55 maybe map_compression_level_disk = 2 or something like that for test
19:43 celeron55 but also sqlite_synchronous
19:45 MTDiscord <warr1024> heh, test each combination of config in nested for loops and graph the data ... in principle if you can measure the spikes somehow, like looking at globalstep dtime for 1 minute after the first minute (to ensure the game warms up first) and then calling request_shutdown, you can actually automate testing stuff like this.  Really helpful when you have to bisect.
19:50 Niklp map_compression_level_disk = -1 and sqlite_synchronous = 1 keep the maxlag at ~0.7. I'll test this w/o sfan's PR tomorrow
19:50 [MTMatrix] <localhost> btw, can recreate database with synchronous=0 and other danger options, from raw sql dump (just adding some SQL lines to head of file), and it will be fast as possible, but... can be easy breakable
20:03 celeron55 Niklp: -1 is the default value, it won't change anything
20:04 celeron55 i don't know what the default level actually is but it's 0 to 9, 0 is least compression, so try 0 or 1
20:07 Niklp oops, you're right
20:16 sfan5 zstd actually has levels beyond 9 but it seems we don't map those
21:14 proller joined #minetest-dev
22:32 Niklp joined #minetest-dev
23:04 celeron55 joined #minetest-dev
23:32 panwolfram joined #minetest-dev
23:32 appguru joined #minetest-dev

| Channels | #minetest-dev index | Today | | Google Search | Plaintext