Minetest logo

IRC log for #minetest-dev, 2020-12-04

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

All times shown according to UTC.

Time Nick Message
00:00 lhofhansl but why do we need to store them. When the block is loaded time is ticking. When we load a block we set the time to now.
00:00 lhofhansl I guess we do not want to miss timers firing.
00:00 lhofhansl when a block got unloaded and then reloaded
00:02 sfan5 https://github.com/minetest/minetest/blob/3176daee79a8e91bd16fc275704f49fe1648db32/src/serverenvironment.cpp#L947-L961
00:02 sfan5 anyway, bedtime for me
00:04 hecks waaaait
00:04 hecks one question
00:04 hecks if I make a packet unreliable on the server side only, will the clients explode?
00:05 lhofhansl sfan5: heh, good night.
00:05 sfan5 the client doesn't care which channel a packet arrives on or if it's set reliable
00:05 hecks so I can apply this dirty fix server side?
00:06 sfan5 yes
00:06 hecks thanks =]
00:11 twoelk left #minetest-dev
00:23 lhofhansl hecks: what's the "dirty fix"?
00:24 hecks make animations unreliable, for my queue problems
00:25 hecks it's not the end of the world if an animation fails to play, it is if lost anim packets clog up the reliable queue
00:25 hecks lhofhansl, which continent are you on?
00:28 MTDiscord <o​neplustwo> probably europe
00:28 hecks hm, it seems that the dirty fix worked
00:29 hecks I'm starting to doubt if animation packets ever needed reliable delivery
00:30 hecks oh wait
00:32 hecks okay, now it's confirmed that it works
00:38 pgimeno would database compression changes have an effect on server bandwidth?
00:39 hecks you could always compress harder in transit if that were ever an issue
00:44 MTDiscord <e​xe_virus> So, if I were to make a PR that forces .x, .obj, and .b3d to go through zlib compression and decompression to help with bandwidth load for new clients, would that create a breaking change requiring version 6.x?
00:45 MTDiscord <e​xe_virus> Thinking is that compression for these using standard deflate is about 30% of original size or smaller.
00:51 hecks ah, crap, making animations unreliable did not entirely fix this
00:52 hecks something is still creating a black hole in the packet queue
01:08 hecks okay, so in many cases, only the last packet really matters
01:09 hecks maybe if the queue grows too large, the server could walk the whole thing and squash it to only what is actually important?
01:12 lhofhansl hecks: I'm US west coast.
01:27 turtleman joined #minetest-dev
01:53 hecks this is odd
01:53 hecks we tested the same game on the same connection months before, it worked and didn't chug this badly
02:00 hecks has anybody touched SAO messages, the packet queue or default settings related to bandwidth?
02:03 lhofhansl I increased the default packet queue sizes recently.
02:08 T4im joined #minetest-dev
02:13 hecks what were they before?
02:18 lhofhansl https://github.com/minetest/minetest/pull/10627
02:18 lhofhansl If that causes a lag we have a serious problem.
02:59 hecks it did get better when I nerfed that
03:00 hecks I might still have to fix the queue thing... it's not going to go away no matter how you budget the up bandwidth
03:01 hecks it would be very helpful if you were to connect again and tell me if there's any difference
04:55 lhofhansl joined #minetest-dev
05:00 MTDiscord joined #minetest-dev
07:22 m42uko joined #minetest-dev
08:00 ShadowNinja joined #minetest-dev
08:11 NetherEran joined #minetest-dev
09:45 calcul0n joined #minetest-dev
10:32 calcul0n_ joined #minetest-dev
10:38 proller joined #minetest-dev
12:25 Wuzzy joined #minetest-dev
12:40 Fixer joined #minetest-dev
12:41 zughy[m] uhm, a ton of PRs result being updated 3 hours ago, we're talking about 5 pages of PRs, when they actually didn't. What happened exactly?
12:42 zughy[m] the only thing happened at that time is this: https://github.com/minetest/minetest/commit/ecd4f45318e7e510ebe4ebe8420ea739122d2edf
12:43 zughy[m] exactly one minute before
12:43 sfan5 github bug, it does that when you force-push master
13:08 Fixer_ joined #minetest-dev
13:54 proller joined #minetest-dev
13:56 turtleman joined #minetest-dev
14:18 lisac joined #minetest-dev
15:09 Taoki joined #minetest-dev
17:49 absurb joined #minetest-dev
18:24 homthack joined #minetest-dev
18:28 homthack13 joined #minetest-dev
18:39 homthack joined #minetest-dev
18:42 mizux joined #minetest-dev
18:51 homthack joined #minetest-dev
19:00 Krock will merge #9247, #10633 and #10663 in 15 minutes
19:01 ShadowBot https://github.com/minetest/minetest/issues/9247 -- Fix MSAA stripes by HybridDog
19:01 ShadowBot https://github.com/minetest/minetest/issues/10633 -- Cross-reference the node level manipulation functions by Oblomov
19:01 ShadowBot https://github.com/minetest/minetest/issues/10663 -- Cleanup shader generation code by numberZero
19:15 Krock merging
19:16 fluxflux joined #minetest-dev
19:17 Krock last PR failed. new merge conflict \o/
19:23 lhofhansl joined #minetest-dev
19:24 lhofhansl After 10663 I
19:25 lhofhansl let's have a look at #10688
19:25 ShadowBot https://github.com/minetest/minetest/issues/10688 -- Remove hardcoded matrices from OpenGL shaders. by lhofhansl
19:34 Krock !tell lhofhansl None, though I'm not familiar with shaders to judge whether it's a good concept
19:34 ShadowBot Krock: O.K.
20:04 proller joined #minetest-dev
20:15 hecks joined #minetest-dev
20:24 hecks Tell me about packet channels, how hard would it be to allocate a new one and move some traffic to it?
20:32 Krock easy
20:32 Krock see networkprotocol.h or so
20:34 Krock hecks: clientopcodes.cpp, and server respectively
20:40 hecks so you just change the channel number and that makes a new queue?
20:40 Krock yes
20:40 hecks thanks
20:40 wsor joined #minetest-dev
20:40 hecks I'm gonna experiment with splitting the big queue because most of those messages do not need to wait for one another
20:41 Krock please keep in mind that some actions must be in order so that mods work properly, such as object properties and attachments
20:42 hecks I know, but those things do not need to wait, for example, on chat or forms
20:42 hecks or skybox operations, camera parameters
20:44 MTDiscord <J​onathon> hello: was wondering if i can get some input from the core devs on https://github.com/minetest/minetest/pull/10697 if you dont mind?
20:44 hecks the server sends out an order of magnitude more data per client than it receives, and this out stream must be managed wisely because it's too easy to clog it beyond repair
20:57 celeron55 i'm a bit freaked out about https://github.com/minetest/minetest/pull/10627 actually
20:58 Krock more traffic
20:58 celeron55 there's a reason for the original limit, and it's exactly to allow the server to work in most network environments
20:59 celeron55 really shouldn't just increase it based on some tests in a local or good network
20:59 celeron55 and based on tests that don't include trying to animate stuff at the same time or such
21:00 celeron55 and yes, the network stack is crap, something like enet would handle more stuff better, but not infinitely better
21:01 celeron55 it's 100% certain that if you optimize for the rate of sending mapblocks without looking any other statistics or trying to do anything else at the same time, everything else _will_ work badly with the configuration
21:03 celeron55 it's like pressing the gas until you can't steer
21:04 celeron55 it could be dynamic though
21:10 Krock the mapblock sending is dynamic to the connected players
21:11 Krock -> https://github.com/minetest/minetest/pull/6393
21:14 hecks https://pastebin.com/SbWtmqV8 What do you think of these categories for s->c traffic?
21:14 Krock looks like an ENUM is needed in the code
21:14 hecks for the channels?
21:15 hecks I can do that
21:15 Krock yeah
21:15 hecks but how's this for a draft of message categories, any logical conflicts here?
21:15 Krock I'm sure there will be some obscure edge-cases but overall it seems okay
21:18 Krock what happens if you spawn an entity and set its position right after?
21:19 Krock afaik it's contained in TOCLIENT_ACTIVE_OBJECT_MESSAGES, so that would be okay
21:22 Krock or sending a formspec after creating the node. item lists should re-generate themselves on refresh, though that might only happen after resizing the window or pressing a button
21:24 Krock to be fair, most of those packets are only used once, especially the auth stuff will never be called twice per session
21:30 lhofhansl joined #minetest-dev
21:35 lhofhansl Looks like I should just undo #10627...? Too much discussion about it.
21:35 ShadowBot https://github.com/minetest/minetest/issues/10627 -- Increase limit for simultaneous blocks sent per client and the meshgen cache. by lhofhansl
21:36 lhofhansl The intent was to allow the server CPU to be busy, and not just idly wait for queues to empty out.
21:37 lhofhansl That is especially an issue with larger client viewing_range (and matching server max_block_send_distance). The current limits seem to low for that.
21:40 Krock depends on the network structure. celeron55, what would you suggest there?
21:41 lhofhansl Very related to what hecks is looking at. A single queue for everything is bad.
21:41 hecks I'm already breaking it up
21:41 lhofhansl But there's a PR on client stutter already, hecks seen packet build-up, celeron's concern, etc. Perhaps better to revert and then regroup.
21:42 lhofhansl What I'm looking at is getting MT ready for larger viewing_distances.
21:42 hecks well, what I'm doing is only tangentially related to your default limit bump, it's a much more fundamental issue
21:43 hecks the limit bump makes it a little more visible by taking up upload bandwidth from the server, I've had it happen before that too
21:44 hecks lhofhansl: we could cooperate on the LOD and map renderer rewrite when everything else is ready for it
21:44 lhofhansl hecks: Yep!
21:45 hecks the last one was a false start because the block management just wasn't good enough to handle it
21:46 lhofhansl Perhaps have a separate CLIENT_BLOCKSIZE and then build client blocks from the server blocks (with MAP_BLOCKSIZE).
21:47 lhofhansl Can be done off the main thread. But then other things are tricky.
21:47 hecks let's just do the octree thing
21:48 hecks blocksize 16 is fine for generation and transfer, it's enough to merge LODs into superblocks
21:48 hecks and then do some atlasing tricks for the closest blocks
21:48 lhofhansl cool
21:48 hecks I know that atlasing has been tried and flopped before but I got an idea to make it viable
21:48 lhofhansl main goal would to reduce the number of draw calls on the client.
21:50 lhofhansl I can easily draw a scene at range 700 at 60 FPS if set the MAP_BLOCKSIZE to 64. Same number of vertices, etc, just fewer draw calls (it does keep my graphics card more busy)
21:50 lhofhansl celeron55: so revert #10627 for now?
21:50 ShadowBot https://github.com/minetest/minetest/issues/10627 -- Increase limit for simultaneous blocks sent per client and the meshgen cache. by lhofhansl
21:51 hecks we've basically done this whole drawcall and blocksize investigation like half a year ago, so everyone knows what's up
21:51 lhofhansl It's just a default anyway. Folks can increase it for fast networks.
21:52 lhofhansl hecks: that one was news to me, but I was gone for a bit too.
21:52 lhofhansl I realized that MT cannot keep graphics card busy due to all the drawcalls.
21:53 hecks yup, we're wasting gigaflops of perfectly good silicon
21:53 hecks as for that default limit thing, I'm not sure if the logic was right on that one
21:53 lhofhansl how so?
21:53 hecks I mean, there's nothing wrong if the server can generate blocks faster than they're being sent
21:54 lhofhansl well, it doesn't. It then waits for the queue to empty, so when I increased that value the map would be sent to the client faster.
21:54 hecks but as you can see, the upload bandwidth budget is serious business
21:55 lhofhansl yeah, but that's another issue. That increase brought load time for a scene from 35s to 18s (that on a local network).
21:56 lhofhansl Anyway, as I said, happy to revert that change.
21:56 hecks maybe it doesn't need reverting, hang on
21:56 lhofhansl * hangs on
21:57 hecks you'd be better off asking people who run actual servers and not 1 mbps poverty boxes
21:57 lhofhansl or dialup :)
21:58 hecks there's actually another issue here
21:59 hecks do network messages have any concept of priority at all?
21:59 hecks like gameplay before blocks, close blocks before far blocks
22:00 Krock block updates are already handled this way
22:00 hecks but do they wait for gameplay?
22:01 Krock I don't understand. why would block updates wait?
22:01 Krock they're already a separate channel
22:02 hecks they shouldn't wait in that sense, but if the server is short on bandwidth, it could prioritize certain channels
22:02 hecks throttle the block updates a bit to prevent other things from feeling laggy
22:02 Krock uhm.. I guess it just sends whatever's waiting
22:02 hecks yup, and that might need to change
22:03 hecks okay, let's build this monstrosity
22:04 hecks segfault =]
22:10 lhofhansl Also there's #10616, which increases (doubles) the default emerge queue sizes, and only allows 1/2 of the total queue size for emege requests on behalf of active objects.
22:10 ShadowBot https://github.com/minetest/minetest/issues/10616 -- Increase default emerge queue limits and limit enqueue requests for active blocks. by lhofhansl
22:10 hecks ah, so there *is* a CHANNEL_COUNT
22:16 hecks okay, localhost seems happy
22:56 hecks well I'll be damned, this might be working
22:57 hecks lhofhansl: you got time to try the server again?
23:01 lhofhansl not now, sorry. What did you change?
23:02 hecks https://github.com/hecktest/minetest/tree/queue-death
23:03 hecks there are now 16 channels instead of 3
23:04 hecks chat, audio, physics, entities, modchannels, camera, ambience, fx do not wait on one another
23:04 hecks it seems to prevent a hopeless choke, at least on my setup
23:05 sfan5 <hecks> https://pastebin.com/SbWtmqV8 What do you think of these categories for s->c traffic?
23:05 sfan5 seems sane from a quick look but just throwing more channels at the problem isn't done lightly
23:06 hecks well guess what, I just did it and it worked
23:06 sfan5 I didn't say it doesn't work
23:06 hecks =]
23:06 sfan5 Krock: do you think TOCLIENT_NODEMETA_CHANGED should be on channel 2? I can make a commit if you agree.
23:07 sfan5 current ones for reference: https://github.com/minetest/minetest/blob/master/src/network/serveropcodes.cpp#L215
23:16 hecks sfan5: but what's the problem exactly? Are channels expensive? Are you worried about things being too out of sync?
23:17 sfan5 someone needs to bother to write the compatibility code
23:17 hecks hm, wait, do clients need a rebuild?
23:18 sfan5 there's an assert for {channel count from the packet} < CHANNEL_COUNT in the networking code
23:18 sfan5 also I'd rather have the packet loss issue fixed (also https://github.com/minetest/minetest/issues/9107) than adding 16+ channels for lots of things that could ordinarily be just fine in one
23:19 hecks that's not what I'm trying to solve
23:19 hecks #10694
23:19 ShadowBot https://github.com/minetest/minetest/issues/10694 -- Reliable packet queue can't recover after getting jammed
23:19 sfan5 it's somewhat related
23:20 sfan5 or maybe not actually
23:20 hecks not really, even if you deal with packet loss, it won't help the "dropped for one second" case
23:20 sfan5 ignore that
23:20 hecks this is like when you get a "connection interrupted" in quake
23:20 sfan5 yeah perhaps the server knowing about which packets it can throw away would be better for that
23:20 hecks minetest currently just hammers the client with more packets during that time and that can't ever be caught up with
23:20 hecks that would be a step 2 to fixing this, compacting the queue after a soft disconnect
23:21 hecks but splitting the queues is also a logically sound idea, why the hell is chat waiting on entity attachment
23:21 hecks constraining the channel count with an assert may have been a very stupid idea
23:22 hecks but let's just eat the compat problem, and make it so that further channel count bumps do not cost as much
23:22 sfan5 it's not just an assert, the client code has exactly as many queues as CHANNEL_COUNT
23:22 sfan5 so channels[3] points into the wild west (and the compiler might yell at you)
23:22 hecks well then, it might need some reengineering to make it dynamic
23:23 hecks I don't expect more fundamental channel count changes, but
23:23 hecks certain "channels" like entities and modchannels are a whole new beast; ideally they should be dynamically allocated
23:23 sfan5 I can understand modchannels but how would you split up entities?
23:24 hecks well, logically, two entities that do not interact with one another should not wait on one another
23:25 sfan5 right, so one per entity
23:25 hecks but I also have a bad feeling about attachments
23:25 hecks that area might need extra sanity checks if entities are desynced from one another
23:25 hecks other than that, entities do not seem to interact with one another much
23:26 hecks one channel per entity is okay, I guess entity messages mostly make sense to arrive in order
23:26 hecks and instead, I'd prune the queue aggressively to reduce the bandwidth there
23:27 hecks so let's see... change all the channel arrays to vectors
23:28 hecks negotiate MAX_CHANNELS between the client and the server
23:28 hecks if the client uses an old protocol, emulate the old 3-channel setup
23:28 hecks it's trivial to make a legacy channel map
23:29 hecks does that satisfy compat? sfan5
23:29 sfan5 it does
23:30 sfan5 (there's nothing to negotiate though, the server says it wants 255 channels and the client can decide if it likes that or not)
23:31 hecks oh, honestly, it could just be a map<> and not a vector
23:32 hecks but, but
23:32 hecks the channel count is a u8 right?
23:32 sfan5 yes
23:32 hecks and this is a part of the packet format?
23:32 sfan5 yes
23:32 sfan5 are you suggesting more than 255 might make sense
23:33 hecks yes, for the entity and modchannel dynamic allocation
23:33 hecks let's utf8 this then: channel 255 is an escape for a bigger channel id
23:34 hecks ideally if the channel array is now a map<u32> or something like that, entities and modchannels can each get a whole range to allocate from
23:34 hecks or, actually, there's another way
23:35 hecks wait let me check if the id isn't a part of the packet in both cases
23:36 hecks okay so the active object messages have a u16 id right at the beginning
23:37 hecks and modchannels are keyed by string
23:37 hecks making modchannels dynamic can wait
23:38 hecks so, I guess it would be acceptable to just make another queue map keyed by object id and leave it at that
23:39 hecks I'm guessing that the u16 is an absolute limit for all active objects observed by players on the whole server, + the players themselves?
23:40 sfan5 yes but minus the "observed"
23:40 sfan5 or rather s|observed|loaded/considered active|
23:41 hecks that's a sad limitation but oh well, it can be dealt with later
23:41 hecks no server exists yet that could hit it but it's realistically reachable
23:43 hecks the biggest currently active server has 92 players; this translates to a budget of 712 entities per player, still a reasonable count
23:45 hecks but who knows what the future will bring =]

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