Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Dear CS:GO developers, I would like to address an issue with dedicated servers. Currently, any servers running Linux suffers from a limitation. I've tried addressing this issue multiple times in the past but it still hasn't been fixed. From what I believe, CS:GO servers are suppose to use a separate thread for networking. However, I don't believe this is the case for CS:GO Linux servers at the moment.
- I set up two servers (one Linux, one Windows) with the following settings:
- - 63 bots (bot_quota 63).
- - Bot_flipout 1 (if nonzero, bots use no CPU for AI. Instead, they run around randomly).
- - Sv_stressbots 1 (if set to 1, the server calculates data and fills packets to bots. Used for perf testing).
- - Running a map made for testing.
- The Windows server had better performance than the Linux server. I've linked images of the CPU usage graphs below.
- Windows:
- http://g.gflclan.com/c750da34520d7b0f.png
- Linux:
- http://g.gflclan.com/060564b1a69a5058.png
- Both of these servers ran the same exact settings and as you can see, the Windows server could go above 100% CPU while the Linux server could not. With that said, I've hosted several live servers a couple years ago that filled up to 64 players each day. The same issue occurred on our CS:GO Linux server at 64 players and performance was terrible. As soon as we moved over to Windows, we saw a big improvement in performance and the server was using more than 100% CPU (basically another thread). This Linux limitation does not exist in any other Source Engine game as far as I am aware. I used to host a CS:S Linux server that reached 64 players each day and we easily went over 100% CPU while at high player counts.
- After doing some testing, I've noticed a few things.
- Occlusion_test_async Command
- "Enable asynchronous occlusion test in another thread; may save some server tick."
- On Windows, this command has no effect and doesn't print any output.
- On Linux, if set to 0, the server will stop using the (occlusion?) thread and performance is affected negatively.
- As far as I am aware, the occlusion thread is used to help prevent wall hacks (please correct me if I'm wrong). I find it strange that this command has no effect on Windows servers but decreases performance on Linux servers when set to 0. The following is printed when the command is changed on Linux:
- Stopping 0 worker threads
- Starting 1 worker threads
- 1 threads. 1,014,658 ticks
- Threadpool_cycle_reserve Command
- This command reserves any extra threads on the server. CS:GO Windows and Linux servers have different results with this command while running the same settings.
- Windows:
- threadpool_cycle_reserve
- 2 threads being reserved
- threadpool_cycle_reserve
- 0 threads being reserved
- While "occlusion_test_async" is set to 0.
- --------------------------------------------
- threadpool_cycle_reserve
- 2 threads being reserved
- threadpool_cycle_reserve
- 0 threads being reserved
- While "occlusion_test_async" is set to 1.
- Linux:
- threadpool_cycle_reserve
- 0 threads being reserved
- threadpool_cycle_reserve
- 0 threads being reserved
- While "occlusion_test_async" is set to 0.
- --------------------------------------------
- threadpool_cycle_reserve
- 1 threads being reserved
- threadpool_cycle_reserve
- 0 threads being reserved
- While "occlusion_test_async" is set to 1.
- As you can see, there are extra threads running on Windows but not on Linux. The "occlusion_test_async" command has no effect on Windows while running "threadpool_cycle_reserve" but on Linux, it does have an effect.
- I've also ran "threadpool_run_tests" on both servers and here are the results:
- Windows:
- https://pastebin.com/QiriPVTH
- Linux:
- https://pastebin.com/DPWhHE7r
- With that being said, I've tried the following to attempt to unlock the limitation on Linux:
- - Setting the "threads" command line option to 8.
- - Setting "host_thread_mode" to 0, 1, and 2.
- - Setting "threadpool_affinity" to 0 and 1.
- - Setting "net_queued_packet_thread" to 0 and 1.
- - Setting "sv_occlude_players" to 0 and 1.
- None of these worked.
- Overall, I've given all the information I can think of at the moment. If you need specific details, please let me know! I hope this issue is addressed in the near future!
- Thank you for reading!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement