In order to optimally size the amount of RAM to allocate to a set of new machines for running MTR, I ran a few tests to check the memory usage of an MTR run for mysql-trunk and cluster-7.1. As using a RAM disk considerably speeds things up, I set the vardir to be on
The tests were performed on an 8-core E5450 @ 3.00GHz with 24GB RAM, with 8GB allocated to
I used something like the script below, which saved the per-second usage of

I then performed a valgrind run on mysql-trunk using similar scripts. As valgrind takes considerably longer (and uses more RAM) I kept it separate as the combined graph isn’t very clear:

So, based on these results, the host machine (16GB RAM + 8GB RAM disk) is probably a sensible guide for now, and allows for some future growth.
/ramdisk and logged the usage of that too.The tests were performed on an 8-core E5450 @ 3.00GHz with 24GB RAM, with 8GB allocated to
/ramdisk. Each branch ran the default.daily collection, which generally contains the most testing we do per-run. Between each run I rebooted the machine to clear the buffer cache and /ramdiskI used something like the script below, which saved the per-second usage of
/ramdisk, the total RAM used, and the RAM used minus buffers.#!/bin/bash
BRANCH="mysql-trunk"
BUILDDIR="mysql-5.6.3-m5-linux2.6-x86_64"
TESTDIR="${HOME}/mtr-test/${BRANCH}
stats()
{
i=1
rm -f ${TESTDIR}/stats-${BRANCH}
while [ -f ${TESTDIR}/running ]; do
rd=$(df -k /ramdisk | awk '/^\// {print $3}')
mem=$(free | awk '/^Mem/ {print $3}')
mem1=$(free | awk '/cache:/ {print $3}')
echo "${i} ${rd} ${mem} ${mem1}" >>${TESTDIR}/stats-${BRANCH}
i=$((i+1))
sleep 1
done
}
export TMPDIR="${TESTDIR}/tmp"
rm -rf ${TMPDIR}
mkdir -p ${TMPDIR}
>${TESTDIR}/running
stats &
(
cd ${TESTDIR}/${BUILDDIR}/mysql-test
perl mysql-test-run.pl ... --parallel=8 --vardir=/ramdisk/mtr-${BRANCH}/...
mv /ramdisk/mtr-${BRANCH}/* ${TMPDIR}/
...
)
sync
rm -f ${TESTDIR}/running
waitFirst I graphed a straight run of the two branches, using the following gnuplot script:set terminal png enhanced font "Times,11" size 640,768
set output "mtr-ram.png"
set title "MTR memory usage (8-core Xeon, 24GB, 8GB RAM disk)"
set xlabel "Time (minutes)"
set ylabel "Memory usage (GB)"
set yrange [0:16]
set xtics 10
set key top box
set grid
plot "stats-mysql-trunk" every 60 using (($1)/60):(($2)/1024/1024) \
title 'mysql-trunk /ramdisk usage' with lines, \
"stats-mysql-trunk" every 60 using (($1)/60):(($3)/1024/1024) \
title 'mysql-trunk RAM (inc buf)' with lines, \
"stats-mysql-trunk" every 60 using (($1)/60):(($4)/1024/1024) \
title 'mysql-trunk RAM (exc buf)' with lines, \
"stats-mysql-cluster-7.1" every 60 using (($1)/60):(($2)/1024/1024) \
title 'cluster-7.1 /ramdisk usage' with lines, \
"stats-mysql-cluster-7.1" every 60 using (($1)/60):(($3)/1024/1024) \
title 'cluster-7.1 RAM (inc buf)' with lines, \
"stats-mysql-cluster-7.1" every 60 using (($1)/60):(($4)/1024/1024) \
title 'cluster-7.1 RAM (exc buf)' with linesI then performed a valgrind run on mysql-trunk using similar scripts. As valgrind takes considerably longer (and uses more RAM) I kept it separate as the combined graph isn’t very clear:
So, based on these results, the host machine (16GB RAM + 8GB RAM disk) is probably a sensible guide for now, and allows for some future growth.
No comments:
Post a Comment