[cod] Semi off topic: COD rentals

Jase shoefly at sover.net
Sat Sep 25 17:05:49 EDT 2004


I think your missunderstanding me or maybe im missunderstanding you. I 
only have 1 copy of coduo_lnxded on my server. period. there arent 
multiple copies nor should there be. Why? when cod/uo support multiple 
users with fs_basepath and fs_homepath they use the same startup command.
ie cd /us/loca/games/cod/
./coduo_lnxded +set fs_basepath /usr/local/games/cod +set fs_homepath 
/home/blah/.callofduty +set dedicated 2 +exec coduoserver.cfg
So i guess im wondering what your point is? Im kinda lost. why symlink 
if every instance of a coduo server is using the same exact binary file?
sorry dont mean to sound like i disbelieve you Im jsut confused about 
why symlinking
Jase
lMark J. DeFilippis wrote:

>
> You are thinking application level.  This is Kernel level.
> I spent lots of time in my career developing real time embedded coding
> in Unix/Linux kernels.
>
> Look at two linuxded files that are not sym linked. But use this:
>
> ls -li
>
> Note the left side has a value called an inode.  An inode is a unique
> identifier for that file.  Notice that your two files have different 
> inodes?
>
> When the loader goes to load code for your two servers using those
> files, each is copied in to swap (so your swap space is n servers * 
> sizeof executable)
> The same is true of code segments.
>
> If you sym link the two executables (Note they must be on the same
> filesystem to do so. If you symlink two files on different file systems,
> obviously Linux will have to copy the file to the new file system, and it
> will have a new inode number.  (This is because each filesystem has
> it's own superblock, which maps Inodes to file blocks, and file names.
>
> The filename if only for human consumption.  All Linux cares about is that
> inode number.
>
> anyway... If you symlink the two server files, and now do a "ls -li",
> notice the inode numbers are the same!
>
> When you execute the server (with sticky bit on) it is copied to swap,
> then pages copied in to ram and executed.  When the second server
> is executed, even though the file has a different path, it has the same
> Inode.  The linux kernel looks up the inode, and notes this inode has
> the sticky bit set, and in fact that it already exists in Swap. It copies
> the pointers to the code segments as I previously mentioned, and
> begins execution.
>
> You ask why?
>
> Because 10 servers your way will load 10 copies in to swap, 10
> copies in to memory, etc.  Using the method of symlinks, which
> is really nothing more than a link in the super block.  The super block
> maintains all information about which disk blocks belong tio which
> files.  For your simlink the new file entry simply gets the same
> inode id copied to the table.  Same inode, same code... With
> shared libraries in memory,  for the 10 servers only 1 copy
> exists in swap. Only 1 copy exists in memory.
>
> I hope this is more clear.
>
> Dr. D
>
>
>
> At 02:18 AM 9/25/2004, you wrote:
>
>> Guess im a little confuused here, why would you symlink when cod (all 
>> quake3 base games) support multiple users. using fs_basepath and 
>> fs_homepath accomplishes the same thing as symlinking doesnt it?
>> Jase
>> NateDog wrote:
>>
>>> Woah......now there's a guy who knows his stuff!  Awesome tips man!  You
>>> really explain things well.  Much appreciated.
>>>
>>> --
>>> NateDog
>>>
>>> ----- Original Message ----- From: Mark J. DeFilippis
>>> To: cod at icculus.org
>>> Sent: Friday, September 24, 2004 9:59 PM
>>> Subject: RE: [cod] Semi off topic: COD rentals
>>>
>>>
>>>
>>> I had written much about this a while back. I will repeat a bit of
>>> it here for the sake of those who wish to do this. Want to know why
>>> you should do this, why it works and a bit on how it works...
>>>
>>> Linking the binaries allows the CPU to share the same Code segment 
>>> pages.
>>> Servers
>>> will be allocated their own data segments for both Heap and Stack
>>> (Which grow towards one another)... One of the reasons Ryan was able
>>> to so quickly find that original prob back in 1.1.)
>>>
>>> If there is a write attempt to the code segment, that server/user is 
>>> given
>>> their own copy. In the case of most of the shared libs in Linux, the 
>>> code
>>> is reentrant, and hence these writes don't happen.
>>>
>>> One other recommendation, I am not certain if I made...
>>>
>>> You can reduce the spikes you get when a server is restarted by
>>> setting the "Sticky" bit on the executable.  (Do a man on "mode" 
>>> command)
>>> What this does is the first time the executable is loaded, the entire
>>> executable is copies to SWAP space. Once copied to swap, executable
>>> pages are copied in to ram to be executed.
>>>
>>> The best way to keep a server at optimum is to never have to page.
>>> However, under certain conditions, this does happen.  It the executable
>>> is sticky, it remains in swap, and the page segment need only be
>>> brought back in to memory from swap.
>>>
>>> Also note, when a second and subsequent  user of the Sym Linked 
>>> executable
>>> starts his/her server, the executable IS NOT copied in to swap again, it
>>> uses
>>> the one already in swap (hence the concept "sticky")... it sticks there.
>>>
>>> Thus on new startup, A call is made to load the executable, however the
>>> Kernel immediately updates the CS and ES code pointers to the shared
>>> memory mbufs where the executable code exists, allocates a DS data
>>> segment, and moves your process back to the scheduler for CPU as
>>> your I/O is complete.
>>>
>>> You skip the copy of the executable to SWAP.
>>> You skip the copy of pages to Real RAM.
>>> You execute off shared pages in memory already with your own set of
>>> executable
>>>   registers CS, ES.  Get your data segment, and your server starts up.
>>>
>>> Not only do you save ram, but start impact on the other servers due 
>>> to I/O
>>> DMA transfer setup, and context switching between system and user space,
>>> but you spare the CPU spike as well.
>>>
>>> Regards
>>>
>>> Dr. D
>>>
>>>
>>> At 05:08 PM 9/24/2004, you wrote:
>>>
>>> I just had that question recently also.  I did some research on the 
>>> internet
>>> and a lot of peeps are doing symlinks.  I tried it with MOH:AA and 
>>> it works
>>> beautifully, not sure if that's the "right" way to do it but it's pretty
>>> cool cause' you have one base install and symlinks in the other client
>>> folders.
>>>
>>> --
>>> NateDog
>>>
>>>
>>>  
>>>
>>>> -----Original Message-----
>>>> From: John Kennington [mailto:john.kennington at buzzcard.gatech.edu]
>>>> Sent: Friday, September 24, 2004 3:04 PM
>>>> To: cod at icculus.org
>>>> Subject: RE: [cod] Semi off topic: COD rentals
>>>>
>>>> Depending on the number of cpus in the box, you can run 10 to 15 CoD
>>>> servers per
>>>> box.  So it is quite cost effective.
>>>>
>>>> John Kennington
>>>>
>>>> -----Original Message-----
>>>> From: Jafo [mailto:jafo at nowhere.ca]
>>>> Sent: Friday, September 24, 2004 3:58 PM
>>>> To: cod at icculus.org
>>>> Subject: [cod] Semi off topic: COD rentals
>>>>
>>>> Hello,
>>>>
>>>> If this isn't the forum for this question, please forgive me for asking
>>>> here.
>>>>
>>>> There seems like a lot of people on this list that run "server rental"
>>>> operations. Just curious how people are doing that cost effectively?
>>>> Obviously one can't run each customer's game server on seperate 
>>>> hardware.
>>>> Are people using some sort of "virtual linux" installs to run multiple
>>>> servers on one box with seperate IP addresses? If that is the case how
>>>> many servers would one dual 2.4 Xeon w/2gig RAM run?
>>>>
>>>> Thanks,
>>>> Jafo
>>>>
>>>>   
>>>
>>> ----------------------------------------------------------------------------
>>
> S2-------------------------------------------------------------------------------
> Mark J. DeFilippis, Ph. D EE          defilm at acm.org
>                                       defilm at ieee.org
>
>




More information about the Cod mailing list