good things can't be posted often enough - its like having sex... ;) -----Ursprüngliche Nachricht----- Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von Kevin J. Anderson Gesendet: Montag, 16. Juni 2003 17:48 An: [EMAIL PROTECTED] Betreff: RE: [hlds_linux] Tuneup your hl server...
good info, but old news. ; ) ->-----Original Message----- ->From: [EMAIL PROTECTED] ->[mailto:[EMAIL PROTECTED] Behalf Of ->[EMAIL PROTECTED] ->Sent: Monday, June 16, 2003 11:41 AM ->To: [EMAIL PROTECTED] ->Subject: [hlds_linux] Tuneup your hl server... -> -> ->Hi, ->i just found this document and i think EVERY admin should know about ->it. i followed this tutorial - and my servers ping decreased about ->10ms - gameplay is the best i ever played on any server - no lags and ->very very smooth gameplay... i also tested the kernel patch thing - ->but with the patched kernel the hltv proxy (3.1.1.1c1) did no more ->start ;) anyway i switched back to hl 3.1.1.0... -> ->here is the article: -> ->Zibbo explains HL server and latencies ->Date: Söndag, maj 25 @ 14:29:30 ->Topic Gaming -> -> -> -> ->There seems to be a lot of confusion about latency issues in a HL ->server. What exactly those pingboost options do, and when and why to ->use them. I'm the author of the original UDP Soft pingbooster, so I ->know a thing or two about this issue. I'm sure I will be repeating a ->lot of info for many of you, but I decided to write it all down once ->and for all. All of the recommendations I give here are of course just ->my opinions, but I like to think myself as being well informed about ->these things. First, what is wrong with a normal way a Half-Life ->server does things. -> ->HL server normally tries to work like this: -> ->sleep for 1ms ->while (it's not yet time for the next frame) ->sleep for 1ms ->receive and handle all incoming packets ->send updates to clients if updaterate and rate settings allow it ->repeat forever -> ->So basically a HL server always sleeps at least 1ms between every ->frame, and more if enough time has not passed (determined by ->sys_ticrate) since starting of the previous frame. This is supposed to ->keep a server frame rate exactly at sys_ticrate. The problem with this ->approach is the fact that you can't sleep for a 1ms in a normal Linux ->system. Trying to sleep for any amount of time takes at least 10ms or ->more. This is due to a scheduling frequency of the Linux kernel, which ->is normally 100Hz (for a slightly longer explanation check out the ->manual page of the nanosleep). -> ->So the way a HL server actually works, looks something like this: -> ->sleep for 10-20ms ->while (it's not yet time for the next frame) ->sleep for 10-20ms ->receive and handle all incoming packets ->send updates to clients if updaterate and rate settings allow it ->repeat forever -> ->This causes some serious latency, because a hl server is sleeping, ->while incoming packets from clients are stacking up and waiting to be ->handled. With this system, it's basically impossible to get more than ->50fps out of a HL server, no matter how fast hardware you have running ->it. -> ->Now, what my pingbooster software, and all those -pingboost options ->do, is try to change the way the server behaves between frames, when ->it normally tries to do that "1ms sleep loop". -> ->I thought that if the server has some work to be done (incoming ->packets from clients), it should immediately start doing that work, ->and not sleep. So in my pingbooster I replaced the sleep call the HL ->server was using with a select call, which listens the network ->connection, and waits until there is incoming packets. I also set ->sys_ticrate to some crazy number like 10000, so a HL server would ->always think that it's time for the next frame. I also set ->sv_maxupdaterate to 100 from 60, because I like getting fresh updates ->for every frame in my client :) -> ->So a HL server loop was changed to: -> ->wait until there is incoming packets from clients ->receive and handle all incoming packets ->send updates to clients if updaterate and rate settings allow it ->repeat forever -> ->This turned out to be very effective in reducing internal latencies in ->a HL server. And replacing the sleep call with waiting for client ->packets is also exactly what -pingboost 3 option does. So if anyone is ->still using my pingbooster, you can get the same performance by using ->-pingboost 3, and setting sys_ticrate to some extremely high number ->(like 10000), and sv_maxupdaterate to 100. With that kind of settings, ->your server never waits when it has some work to do. So if you get a ->99% cpu usage, it just means there is something to do all the time, ->and the server is as responsive as it can be with your hardware. -> ->I haven't checked lately what pingboost 1 and 2 options do, but at ->least a few months ago they just used different system calls to try to ->sleep that 1ms (and failing IIRC), and I wouldn't recommend using ->those options. Correct me if I'm wrong. -> ->There is also a way to "fix" Linux to work better with a default HL ->server configuration. You can increase the scheduling frequency of the ->Linux kernel by editing a file in the Linux kernel source, and ->recompiling it. The file is include/asm-i386/param.h, and you have to ->change the line "#define HZ 100" to "#define HZ 1000". I've been told ->that this is actually a default in 2.5 series of kernels. This should ->cause a HL server to behave more or less exactly as it was originally ->designed. However, I personally happen to disagree with that design, ->and recommend using -pingboost 3 option regardless :) At least with ->"one server/cpu" systems. -> ->When you want to run a quality server (and when I say a quality ->server, I don't mean a kind of crap that 99% of the hl servers out ->there are), number one priority for you should be getting it running ->at over 100fps consistently. No one cares if it runs 400fps, when ->there is no activity, and everyone is camping. It has to stay over ->100fps when all shit hits the fan. When it really matters. Client ->input should be handled as quickly as possible, and the only way to do ->that is having a high frame rate on the server. -> ->Almost all of the cpu time HL server uses is caused by handling of ->incoming packets, and generating updates for clients. So a lot depends ->on what kind of settings your clients are using. -> ->If all your players are just average newbies with default ->cl_updaterate 20 and cl_cmdrate 30, you can get away with a fairly ->large number of maxclients on a relatively slow hardware. And they are ->not likely to recognize a good server if it bit them in the ass anyway ->:) On the other hand, if you have mostly more experienced players with ->fat pipes, and using settings like cl_updaterate 101 and cl_cmdrate ->101, you have to have a significantly more powerful server to have it ->running at 100fps. -> ->Tips for increasing your server performance: ->1. Use -pingboost 3 +sys_ticrate 10000 +sv_maxupdaterate 100 2. If you ->have more than 1 server/cpu, drop all except 1. 3. Decrease maxclients ->4. Decrease amount of metamod mods, or remove metamod completely. They ->truly use up incredible amounts of cpu if you consider how little ->processing power all the features in those mods should require. Someone ->should really look into this.. ->5. Decrease sv_maxupdaterate. -> ->For reference on what kind of a hardware you might need, I've been ->testing with a 1ghz amd processor, and without metamod I can run a 14 ->player server (with clients with fast connections) without any ->significant slowdown. With a metamod+some small mods that number goes ->down to about 10. -> -> ->Almost all of the information I have about the internal workings of a ->HL server, I got from using a very simple debugging utility called ->strace, and I recommend anyone with any interest in learning more ->about what makes these programs tick, to check it out. -> ->For example, performance differences between 3.1.1.0 and 3.1.1.1 ->versions are clearly visible by comparing strace outputs of different ->versions. It seems that in 3.1.1.1 version, generating an update for a ->client can take up to 3 times longer than it does in 3.1.1.0 version, ->and that's what causing it to perform so badly. -> ->Also, I would recommend Valve to test using sched_yield() call instead ->of usleep(), for purposes of releasing a cpu for other applications. -> ->- Zibbo -> -> -> ->This article comes from clanding.org | Home of clan [DING] ->http://www.clanding.org/ -> ->The URL for this story is: ->http://www.clanding.org/modules.php?op=modload&name=News&file=article& ->si ->d=6 -> ->_______________________________________________ ->To unsubscribe, edit your list preferences, or view the list archives, ->please visit: ->http://list.valvesoftware.com/mailman/listinfo/hlds_linux -> _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlds_linux _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlds_linux