A fortune quote: Walk softly and carry a BFG-9000.

SLoad

Calculating server CPU loads

Haskell In order to learn functional programming and to calculate server loads at work I programmed in my spare time this small tool using the purely functional programming language Haskell! SLoad is an abbreviation for serverload. SLoad uses basic parameters (current CPU peak, current requests per second) for approximating the need of additional servers.

In order to get started check it out from the Subversion repository. You also need to install GHC (the Haskell compiler).

	
pbuetow@earth:~/svn/sload/trunk$ make
ghc SLoad.hs -o sload
 

Lets imagine you own an apache server cluster which consists of 12 physical servers. The current maximum CPU usage (CPU peak) is 70%. A single server of the cluster handles at the moment 323 requests per seconds (request peak). And you want to know "does my farm handle 5000000 more requests per day?":

	
pbuetow@earth:~/svn/sload/trunk$ ./sload --name=serverfarm.example.net --servers=12 \
	--cpuPeak=70 --peak=323 --requests=5000000
Requests : 5000000.0
Percentage of req. to use: 100.0
Approximated peak: 277.77777 requests per second (Peak = 2 * (5000000.0/(60 * 60 * 10)))
serverfarm.example.net (12.0 Servers):
currentPeakPerServer: 323.0
currentCpuPeakPerServer: 70.0
currentPeakPerFarm: 3876.0
possiblePeakPerFarm: 5038.8
possibleAddPeak (possiblePeakPerFarm - currentPeakPerFarm): 1162.7998
addPeakPerServer: 23.148148
addPeakPerFarm: 277.77777
leftPeak (possibleAddPeak - addPeakPerFarm): 885.02203
currentCpuPerPeak (currentCpuPeakPerServer / currentPeakPerServer): 0.21671827
neededCpuPeakPerServer (currentCpuPeakPerServer + addPeakPerServer * currentCpuPerPeak): \
	75.016624

The approximated peak is being calculated using 2 * (requestsPerDay/10h). This formular has been well-tried and tested. It is not proven that this formular is always right, but it is more a 'worst case' approach. Which is ok for calculating server loads as long as you don't do a 'best case' calculation which may lead to a server overload. The value of neededCpuPeakPerServer shows if the cluster will handle the additional amount of requests. If neededCpuPeakPerSerer is less than 85 it should be ok. A value between 85 and 100 may be critical. A value more than 100 shows that there is definitive not enough power behind your cluster.