Greetings everyone.
I am working on deepening my understanding of the networking limitations and how to profile them. I modified a first person template to record a net profile and then fire 3 times 50 replicated bullets. I also created an actor that is moved by the server and that displays how many times it moved (so that clients can measure how often it gets updated). When I record all of that and check the .nprof file. I get confused by some of what I see and would like to start a conversation about it, hopefully shedding light on this in the process.
How to reproduce
-
Download the following project : NetworkProfiling_423 - Google Drive
-
Set the amount of players to 3 or 4
-
Press Play
-
A netprofile command will start in the background, then the 3rd player will fire for 5 seconds, wait 5 seconds, fire for 5 seconds, wait for 5 seconds, fire for 5 seconds, wait for 5 seconds, the netprofile command will end and the game will close.
-
Open the networkprofiler.exe
-
It should the executable should be located at : [Unreal Engine Install Directory]\Engine\Binaries\DotNET
-
I recommend the version from 4.26, as I had bugs in the 4.23 and 4.25 versions
-
Open the “.nprof” file that was generated located in the project folder under “Saved\Profiling”
-
Alternatively, you can open the 2 files that are already there that I generated on my machine.
You should see graphs in the application.
Questions
1 - The client that fires gets permanently slower then the others. Even though the spawning occurs on the server.
- Ownership shenanigans?
2 - The update rate of is half of what it should be
- When I test it, the update on the client is half of the framerate of the server (Before the firing happen). And with a Net Update Frequency of 100 I would expect the update rate on the clients to be at least the framerate of the server.
3 - Even though the number of bytes exchanged is small (550kb over 35 seconds), the update rate in game falls slow (3 update per sec)
- I would expect either the number of kb to be really high or to not have network saturation but the numbers I see (about 16 kb/s) seems really reasonable to me. So I’m not sure what is going on.
- Part of me think firing 150 bullets is somewhat high but the impact is much higher than I would expect. Also, part of me think about strategy games and MOBAs and MMOs and 150 replicating actors doesn’t seem that high. So I’m not sure what is going on.
4 - 127.0.0.1:17777 which I assume is the server give me nothing in a lot of categories :
- Actor Count
- Property Bytes
- Property Bytes/s
- Events
- Actor Count
- Property Count
- Property Count/s
- Export Bunch Count
- Export Bunch Count/s
Is it normal?
5 - There seems to be a limit/plateau on data per seconds ON CLIENTS
-
Can be observed on :
-
Outgoing Bandwidth Bytes/s (10 000)
-
Property Bytes/s (5000)
-
Actor Count/s (1250)
-
Property Count/s (500)
-
Send Bunch Count/s (1000)
-
Send Bunch Bytes/s (800)
-
Game Socket Send Bytes/s (900)
-
Is that an
-
Engine limitation?
-
Cvar limitation?
-
Lan limitation?
-
Is there a way to break it?
6 - What is Ack Count?
7 - In a lot of categories ON SERVER, the number of something is increasing but the per seconds is decreasing
-
Can be observed on :
-
Outgoing Bandwidth Bytes VS Outgoing Bandwidth Bytes/s
-
RPC Count VS RPC Count/s
-
This is not happening on clients
Outro
Any help on those questions would be greatly appreciated. Hope you have a great day and thanks for making it this far.