Hello I run a game server company and we have been messing with the following kernel:
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.1.tar.gz
We have achieved fairly good results but wanted to see about improving them further.
Firstly do you guys think this is a good kernel to start with for achieving the highest possible performance for game servers.
Secondly, besides these changes, do you know of other changes we could make to improve performance:
1) Enable high resolution support.
2) For sub architecture type select PC-Compatible.
3) Processor Family (Select CPU architecture)
4) Enable HPET timer support (if your mobo supports, check bios)
5) Preemption model select “No Forced Preemption (Server)
6) Enable multi-core scheduler support and symmetric multi-processing spport.
7) Disable Toshiba & Dell laptop support
8) Under firmware drivers disable Dell base drive and bios support.
9) Under timer frequency, set this to 1000 HZ.
I was told we will obtain best results with improved kernel time keeping performance, how would I go about achieving this?
Lastly we have realized that x86_64 servers seem to have no improved results after a kernel rebuild, almost like they aren't taking on settings, yet i686 servers are performing much better after the rebuild, any clue why?
Also we use the following hardware if needed:
2 x INTEL XEON E5420 2.5GHZ 1333MHZ FSB 12MB CACHE QUAD CORE L771 CPU
SUPERMICRO X7DCL-I (VIDEO, 2 X GIGE LAN, USB, DDR-2, SATAII)
2 x 2048MB DDR-2 667MHZ ECC REGISTERED MEMORY (LIFETIME WARRANTY)
2 x WESTERN DIGITAL 160GB 16MB SATAII HARD DRIVE (WD1600YS) RAID EDITION
1U SUPERMICRO SC811TQ-520(B) (520W, 2 SATA HOTSWAP, RAIL KIT INCLD.)
Any other info I can provide please let me know. Anyways I appreciate any insight anyone can offer, I assure you it will not be made in vein, as I would greatly appreciate any help.
Thanks
picture
do you have a clear picture which parameters you have to optimize? which games do you serve, do you need throughput, (power) efficiency, low latency? are you loads cpu bound or memory, disk, network bandwidth limited or latency limited? do you have measurements of these parameters? you set config options that optimize for some parameter A instead of B and some that optimize for B instead of A, do you know what you want? many of these 'optimize for'-options are clearly documented, even with articles about the why and how of their development from the time they were added, some on this website, just find that.
PS: why do you 'run a game server company' if you don't know to run a game server? isn't that part of the job description that you or some of the people you hired know that? is this posting effectively a job offer?
We are looking to strictly
We are looking to strictly optimize performance, power is not a concern at all. We run several different games and some are reliant on CPU, while others Memory. For example Counter Strike 1.6 is very CPU intensive, and Call of Duty 4 is very memory intensive. All games are fairly disk intensive since they have to load new maps.
I very much so know how to run game servers. Like I said, I have already rebuilt most my server kernels and I'm getting good performance, I just want to maximize my performance. Am I a kernel expert? No not by any means, but I have been able to tweak several settings to get improved performance already. I have also been running game servers for 7+ years and as far as game server tweaking I definitely consider myself an expert. Also I already did hire someone initially to teach me the logistics of kernels. So yea I think I'm fairly well covered, already our kernel is much better then most GSP's, but I want to further optimize it. There are so many different settings a tweaks, and from what I have read most seem to have different goals rather then raw performance.
I'm just trying to get the best possible results I can.
Games only require that much
Games only require that much CPU power because they want to draw as many frames per second as possible, thereby maxing out the CPU. If you were to limit it to say, 60fps, it would not use up the 100%.
Don't misuse the word "performance", since there are two types: computing-based and interactive-based.
For computing-based (i.e. HPC, seti@home, and things like that), you usually want 100 Hz not 1000 Hz, and No Forced Preemption.
For interactive-based however you probably want 1000 Hz with Full Preemption (requires -rt patch).
Using 1000 Hz with no preemption is quite a weird combination.
The kernel expert (that's me) says: use a distribution kernel if it works. Tuning the kernel does not get you that much more. Iff you want more performance, then I seriously suggest you enable SSE floating point calculations in Counter Strike (and anything else that spends lots of cycles on FP math). How you do that for CS I dunno, maybe you should trace it or demand the source to recompile.
I thought dynticks moves
I thought dynticks moves away from this so having a 1000hz timer won't tick 1000 times a second instead it will happen when it needs to.
(I posted the other
(I posted the other question) Why would you want rt on interactive (meaning GUI) loads? rt is made for things that *need* to handle time critical loads such as fly-by-wire. What would be wrong with having 1000hz with no preempt? Dynticks already takes care of excess ticks.
Though we do make further
Though we do make further optimizations beyond Processing optimizations, here is our current settings:
1) Enable high resolution support.
2) For sub architecture type select PC-Compatible.
3) Processor Family (Select CPU architecture)
4) Enable HPET timer support (if your mobo supports, check bios)
5) Preemption model select “No Forced Preemption (Server)
6) Enable multi-core scheduler support and symmetric multi-processing spport.
7) Disable Toshiba & Dell laptop support
8) Under firmware drivers disable Dell base drive and bios support.
9) Under timer frequency, set this to 1000 HZ.
We do not use any custom kernel patch, but I would possibly like to look into this. Basically right now our CPU loads are very low, so I figure why not try to boost the time keeping abilities, and try to obtain higher fps in games. Anyways I'm just looking for any suggestions, maybe my current setup is as good as it is going to get, I don't really know. I understand the basics, but I do not undertand the details of what directly affects each aspect of performance, etc.
Why not use voluntary
Why not use voluntary preempt? Your not after pure throughput but your also not after extremely low latency.
latency
if the cpu utilization is low, the load may be latency bound, this would answer the question in my first comment as 'need low latency, not throughput or power efficiency'. in this case just ignore the word 'server' as normally (file-, application-, database-, web-(with a long range network in between))servers have to be optimized for throughput while workstations are optimized for interactivity = low latency, but in your case your servers seem to be part of the interactive experience of your users which means you have to optimize for low latency and thus enable preempt together with the high hz. if the users access the server via network maybe you have to invest more into network configuration, network congestion can create far more latency than kernel settings.