[Beowulf] recommendations for cluster upgrades

Håkon Bugge hbugge at platform.com
Thu May 14 00:44:14 PDT 2009

On May 14, 2009, at 1:20 , Rahul Nabar wrote:

> What's the best way to test the "memory bandwidth sensitivity" of my
> code? Given the fact that I have only the AMD Opterons available
> currently. Any active / passive tests that  can throw some metrics out
> at me?

A _very_ brute-force method, probably not recommended - but simple, is  
the following. Run your applications with CPU caches disabled on your  
system(s) and calculate the ratio of the elapsed time between the no- 
cache timing and the default timing (with caches enabled).

If that ratio is low (close to one), that application is almost 100%  
memory bound. If that ratio is high (100-1000), you're running mostly  
out of the CPU caches. If you have two applications which you know in  
advance know possesses (close to) 100% cache-hit and 0% cache hit, you  
can use the ratio of these as you lower-upper bound of ratios.

How to disable CPU caches?

echo disable=<N> > /proc/mtrr

where <N> is the Memory Type Range Register which covers your memory  
area (listed with type=write-back) when you do a 'cat /proc/mtrr' .

In practice, you enable the CPU caches again by rebooting.

Needless to say, if you are not able to reduce the running time of you  
apps down to a low number of 10s of seconds, the run with CPU caches  
disabled could take a while...

Another simple method for you could be to use numactl when running  
your apps on your Opteron cluster. If you have sufficient memory on  
the nodes, you can use numactl to dictate the use of memory from a  
single memory controller (a "node" in numactl parlance). This way, you  
cut your total available memory bandwidth on a node by a factor of ~2.  
If you see a significant degradation in performance, you memory  
bandwidth bound.

Thanks, Håkon

More information about the Beowulf mailing list