Skip to content

Instantly share code, notes, and snippets.

@blackjack4494
Last active February 5, 2024 12:03
Show Gist options
  • Save blackjack4494/628748503c182f5cae04ddacd1e453fa to your computer and use it in GitHub Desktop.
Save blackjack4494/628748503c182f5cae04ddacd1e453fa to your computer and use it in GitHub Desktop.
Palworld Dedicated Server (FPS) Tickrate

Open Pal/Saved/Config/LinuxServer/Engine.ini (for Windows use Windows path) and change accordingly

[Core.System]
Paths=../../../Engine/Content
Paths=%GAMEDIR%Content
Paths=../../../Engine/Plugins/2D/Paper2D/Content
Paths=../../../Engine/Plugins/Animation/ControlRigSpline/Content
Paths=../../../Engine/Plugins/Animation/ControlRig/Content
Paths=../../../Engine/Plugins/Animation/IKRig/Content
Paths=../../../Engine/Plugins/Animation/MotionWarping/Content
Paths=../../../Engine/Plugins/Bridge/Content
Paths=../../../Engine/Plugins/Compositing/Composure/Content
Paths=../../../Engine/Plugins/Compositing/OpenColorIO/Content
Paths=../../../Engine/Plugins/Developer/AnimationSharing/Content
Paths=../../../Engine/Plugins/Developer/Concert/ConcertSync/ConcertSyncClient/Content
Paths=../../../Engine/Plugins/Editor/BlueprintHeaderView/Content
Paths=../../../Engine/Plugins/Editor/GeometryMode/Content
Paths=../../../Engine/Plugins/Editor/ModelingToolsEditorMode/Content
Paths=../../../Engine/Plugins/Editor/ObjectMixer/LightMixer/Content
Paths=../../../Engine/Plugins/Editor/ObjectMixer/ObjectMixer/Content
Paths=../../../Engine/Plugins/Editor/SpeedTreeImporter/Content
Paths=../../../Engine/Plugins/Enterprise/DatasmithContent/Content
Paths=../../../Engine/Plugins/Enterprise/GLTFExporter/Content
Paths=../../../Engine/Plugins/Experimental/ChaosCaching/Content
Paths=../../../Engine/Plugins/Experimental/ChaosClothEditor/Content
Paths=../../../Engine/Plugins/Experimental/ChaosNiagara/Content
Paths=../../../Engine/Plugins/Experimental/ChaosSolverPlugin/Content
Paths=../../../Engine/Plugins/Experimental/CommonUI/Content
Paths=../../../Engine/Plugins/Experimental/Dataflow/Content
Paths=../../../Engine/Plugins/Experimental/FullBodyIK/Content
Paths=../../../Engine/Plugins/Experimental/GeometryCollectionPlugin/Content
Paths=../../../Engine/Plugins/Experimental/GeometryFlow/Content
Paths=../../../Engine/Plugins/Experimental/ImpostorBaker/Content
Paths=../../../Engine/Plugins/Experimental/Landmass/Content
Paths=../../../Engine/Plugins/Experimental/MeshLODToolset/Content
Paths=../../../Engine/Plugins/Experimental/PythonScriptPlugin/Content
Paths=../../../Engine/Plugins/Experimental/StaticMeshEditorModeling/Content
Paths=../../../Engine/Plugins/Experimental/UVEditor/Content
Paths=../../../Engine/Plugins/Experimental/Volumetrics/Content
Paths=../../../Engine/Plugins/Experimental/Water/Content
Paths=../../../Engine/Plugins/FX/Niagara/Content
Paths=../../../Engine/Plugins/JsonBlueprintUtilities/Content
Paths=../../../Engine/Plugins/Media/MediaCompositing/Content
Paths=../../../Engine/Plugins/Media/MediaPlate/Content
Paths=../../../Engine/Plugins/MovieScene/SequencerScripting/Content
Paths=../../../Engine/Plugins/PivotTool/Content
Paths=../../../Engine/Plugins/PlacementTools/Content
Paths=../../../Engine/Plugins/Runtime/AudioSynesthesia/Content
Paths=../../../Engine/Plugins/Runtime/AudioWidgets/Content
Paths=../../../Engine/Plugins/Runtime/GeometryProcessing/Content
Paths=../../../Engine/Plugins/Runtime/Metasound/Content
Paths=../../../Engine/Plugins/Runtime/ResonanceAudio/Content
Paths=../../../Engine/Plugins/Runtime/SunPosition/Content
Paths=../../../Engine/Plugins/Runtime/Synthesis/Content
Paths=../../../Engine/Plugins/Runtime/WaveTable/Content
Paths=../../../Engine/Plugins/Runtime/WebBrowserWidget/Content
Paths=../../../Engine/Plugins/SkyCreatorPlugin/Content
Paths=../../../Engine/Plugins/VirtualProduction/CameraCalibrationCore/Content
Paths=../../../Engine/Plugins/VirtualProduction/LiveLinkCamera/Content
Paths=../../../Engine/Plugins/VirtualProduction/Takes/Content
Paths=../../../Engine/Plugins/Web/HttpBlueprint/Content
Paths=../../../Pal/Plugins/DLSS/Content
Paths=../../../Pal/Plugins/EffectsChecker/Content
Paths=../../../Pal/Plugins/HoudiniEngine/Content
Paths=../../../Pal/Plugins/PPSkyCreatorPlugin/Content
Paths=../../../Pal/Plugins/PocketpairUser/Content
Paths=../../../Pal/Plugins/SpreadSheetToCsv/Content
Paths=../../../Pal/Plugins/Wwise/Content

[/Script/OnlineSubsystemUtils.IpNetDriver]
NetServerMaxTickRate=90

I advise NOT to set it higher than 120.
You can take advantage and lower the tickrate as well if your server is not that beefy.
Do note that this change is only server side meaning that your client is still sending at a Tickrate of 60.
However the server is sending 90 Ticks per second to the clients.

Rule of thumb:
High Performance CPU virtualized Ryzen 7900X3D @ 4.4GHz x4
950 / playerCount = stable tickrate
e.g. 950 / 12 players = ~80fps
You can obviously set the maxTickRate higher as it is an upper limit but don't overdo it.
Do note that the further the game progresses and the more bases, pals and (active) buildings you have the performance will get worse since the server has to do more work.

I might add documentation on how to add more configuration flags (server and client side).
So far enjoy.
Cheers.

@MGJerry
Copy link

MGJerry commented Jan 25, 2024

Ryzen 7900X3D? And here I thought I'm getting fancy with my 3600X 😢

@kkqqo
Copy link

kkqqo commented Jan 25, 2024

What if I am running it on a Dell server with two E5-2680 v4 processors and 192GB of memory?
I still got 23FPS sometimes with NetServerMaxTickRate=120

@ValhallaCommunityOfficial

"I might add documentation on how to add more configuration flags (server and client side)."

Yes, please do!

@YinDragonSSR
Copy link

I dont understand 950 / playerCount = stable tickrate
950 what is?

@blackjack4494
Copy link
Author

What if I am running it on a Dell server with two E5-2680 v4 processors and 192GB of memory? I still got 23FPS sometimes with NetServerMaxTickRate=120

Not really a good cpu suited for gaming servers especially demanding ones like palworld. The baseline should be around 350-400 but hard to tell without having tested it myself. So instead of 950 you'd be using ~375 / playerCount = tickrate

@blackjack4494
Copy link
Author

I dont understand 950 / playerCount = stable tickrate 950 what is?

950 is the baseline for the cpu (virtualized tho).

@Lu5ck
Copy link

Lu5ck commented Jan 26, 2024

How you determine 950 for you CPU? o.O

@sirrkitt
Copy link

I'm getting a stable 59fps with three players and I'm running it on two E5-2650v2.

@ntanis-dev
Copy link

Any tips on improving the performance / FPS?
Running a 32-player community server and on the first day of wipe we're getting an average of 20 FPS with four cores running at 4.7GHz.

@jammsen
Copy link

jammsen commented Jan 28, 2024

From my experience you need more cores. 4 cores only bring you so far, should be enough for like 1-6 players maybe 8 depending on the CPU and the load in the background.

@ntanis-dev
Copy link

ntanis-dev commented Jan 28, 2024 via email

@Lu5ck
Copy link

Lu5ck commented Jan 28, 2024

Oh sorry, we do have 16 cores, just 4 of them are really what Palworld uses.

As you have noticed, Palworld doesn't use past 4 cores, in fact it use mainly 3 cores and most of the time is 2. Since the number of cores aka threads utilization is low, there is only one way to improve performance and that is to use a high performing single thread CPU. A CPU hertz does not reflect the performance of a CPU, if it does, we would all be using Pentium today. You can check https://www.cpubenchmark.net/singleThread.html for single thread performance rating.

@ntanis-dev
Copy link

As you have noticed, Palworld doesn't use past 4 cores, in fact it use mainly 3 cores and most of the time is 2. Since the number of cores aka threads utilization is low, there is only one way to improve performance and that is to use a high performing single thread CPU. A CPU hertz does not reflect the performance of a CPU, if it does, we would all be using Pentium today. You can check cpubenchmark.net/singleThread.html for single thread performance rating.

Thanks for the info and the link!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment