ZFS Benchmark - 環境構成編

Posted on 2011/11/04(Fri) 21:26 in technical

OpenIndiana 151a/FreeBSD 9.0-RC1で動かすZFSストレージの性能変動をfioを用いて測定する。

まずは、環境構成の整理と設定について簡単にまとめる。

この構成は基本的に両OSで同じものを使用する。

OS

  • OpenIndiana 151a
  • FreeBSD 9.0-RC1

設定

  • OpenIndiana : インストール後IPとSSH設定をした程度
  • FreeBSD 9.0-RC1 : インストール後IPとSSH設定をした程度(/boot/loader.confにはノータッチ)

機器構成

  • GT110b(G1101, 12G(4G*3) ECC Mem)
  • IBM ServeRAID-BR10i
  • HTS545050B9A300(OpenIndiana 151a)
  • HTS547550A9E384(FreeBSD 9.0-RC1)

測定HDD

  • Hitachi HTS72505 * 8

fio測定スクリプト(両OSで完全に同一のものを使用。ただし非同期I/O、32スレッドI/OはFreeBSDではhungした)

  • 512KiBのSequential Write/Read
  • 512KiBのRandom Write/Read
  • 4KiBのRandom Write/Read
  • 4KiBのRandom Async Write/Read(OpenIndianaのみ)
  • 4KiBの32 multiple Random Write/Read(OpenIndianaのみ)
#!/bin/sh
# ------ General parameter define. ------
FIO=/root/fio-1.58/fio
NAME=zfs-bench
OUTPUT=$1
SIZE=18G
BS=512k
JOBS=1
RW=randwrite

# ------ single I/O ------
$FIO -filename=$OUTPUT -rw=write -bs=$BS -size=$SIZE -numjobs=$JOBS -startdelay=5 -name=$NAME
$FIO -filename=$OUTPUT -rw=read  -bs=$BS -size=$SIZE -numjobs=$JOBS -startdelay=5 -name=$NAME

# ------ Random 512K Read,Write. ------
$FIO -filename=$OUTPUT -rw=randwrite -bs=$BS -size=$SIZE -numjobs=$JOBS -startdelay=5 -name=$NAME
$FIO -filename=$OUTPUT -rw=randread  -bs=$BS -size=$SIZE -numjobs=$JOBS -startdelay=5 -name=$NAME

# ------ Random 4KiB Read,Write. ------
BS=4096
RUNTIME=600
$FIO -filename=$OUTPUT -rw=randwrite -bs=$BS -size=$SIZE -numjobs=$JOBS -runtime=$RUNTIME -startdelay=5 -name=$NAME
$FIO -filename=$OUTPUT -rw=randread  -bs=$BS -size=$SIZE -numjobs=$JOBS -runtime=$RUNTIME -startdelay=5 -name=$NAME

# ------ Random 4KiB Read,Write. ------
IO=posixaio
QUEUE=32
$FIO -filename=$OUTPUT -rw=randwrite -ioengine=$IO -iodepth=$QUEUE -bs=$BS -size=$SIZE -numjobs=$JOBS -runtime=$RUNTIME -startdelay=5 -name=$NAME
$FIO -filename=$OUTPUT -rw=randread  -ioengine=$IO -iodepth=$QUEUE -bs=$BS -size=$SIZE -numjobs=$JOBS -runtime=$RUNTIME -startdelay=5 -unlink=1 -name=$NAME

# ------ 32 multiple I/O ------
$FIO -filename=$OUTPUT -rw=write -bs=$BS -size=589824k -numjobs=32 -runtime=$RUNTIME -startdelay=5 -name=$NAME
$FIO -filename=$OUTPUT -rw=read  -bs=$BS -size=589824k -numjobs=32 -runtime=$RUNTIME -startdelay=5 -name=$NAME

zpool生成とfio測定スクリプトの実行スクリプト

※多少ディスク名やシステム情報取得の差分はあるが、基本的にはこれ。iostatとvmstatの結果については取得してるけど、単なる参考でほとんど見てませんごめんなさい。

#!/bin/sh
init_log() {
  date >> zfs-bench_$1.txt
  uname -a >> zfs-bench_$1.txt
  dmesg >> zfs-bench_$1.txt
  camcontrol devlist >> zfs-bench_$1.txt
  sysctl -a grep zfs >> zfs-bench_$1.txt
  zfs upgrade -v >> zfs-bench_$1.txt
  zpool upgrade -v >> zfs-bench_$1.txt
}

zpool_log() {
  df -h >> zfs-bench_$1.txt
  zpool status $1 >> zfs-bench_$1.txt
  zpool list >> zfs-bench_$1.txt
  zpool get all $1 >> zfs-bench_$1.txt
  zfs list -o space >> zfs-bench_$1.txt
  zfs get all $1 >> zfs-bench_$1.txt
}

bench() {
  init_log $1
  #-----------------------------------------
  #    1.Create zpool
  #-----------------------------------------
  zpool create $@
  zpool_log $1
  iostat -x 5 > zfs-bench_$1_iostat.txt &
  vmstat 5 > zfs-bench_$1_vmstat.txt &

  #-----------------------------------------
  #    2.fio start
  #-----------------------------------------
  echo "goto bench"
  /root/benchmark/fio/zfs-bench.sh /$1/fio >> zfs-bench_$1.txt

  #-----------------------------------------
  #    3.End
  #-----------------------------------------
  sleep 10
  zpool_log $1
  sleep 10
  zpool destroy $1
  pkill iostat
  pkill vmstat
  init_log $1
}

bench fio-single-1 da0
bench fio-single-2 da1
bench fio-single-3 da2
bench fio-single-4 da3
bench fio-single-5 da4
bench fio-single-6 da5
bench fio-single-7 da6
bench fio-single-8 da7

bench fio-raid0-2 da0 da1
bench fio-raid0-3 da0 da1 da2
bench fio-raid0-4 da0 da1 da2 da3
bench fio-raid0-5 da0 da1 da2 da3 da4
bench fio-raid0-6 da0 da1 da2 da3 da4 da5
bench fio-raid0-7 da0 da1 da2 da3 da4 da5 da6
bench fio-raid0-8 da0 da1 da2 da3 da4 da5 da6 da7

bench fio-raid1-2 mirror da0 da1
bench fio-raid1-3 mirror da0 da1 da2
bench fio-raid1-4 mirror da0 da1 da2 da3
bench fio-raid1-5 mirror da0 da1 da2 da3 da4
bench fio-raid1-6 mirror da0 da1 da2 da3 da4 da5
bench fio-raid1-7 mirror da0 da1 da2 da3 da4 da5 da6
bench fio-raid1-8 mirror da0 da1 da2 da3 da4 da5 da6 da7

bench fio-raidz-2 raidz da0 da1
bench fio-raidz-3 raidz da0 da1 da2
bench fio-raidz-4 raidz da0 da1 da2 da3
bench fio-raidz-5 raidz da0 da1 da2 da3 da4
bench fio-raidz-6 raidz da0 da1 da2 da3 da4 da5
bench fio-raidz-7 raidz da0 da1 da2 da3 da4 da5 da6
bench fio-raidz-8 raidz da0 da1 da2 da3 da4 da5 da6 da7

bench fio-raidz2-3 raidz2 da0 da1 da2
bench fio-raidz2-4 raidz2 da0 da1 da2 da3
bench fio-raidz2-5 raidz2 da0 da1 da2 da3 da4
bench fio-raidz2-6 raidz2 da0 da1 da2 da3 da4 da5
bench fio-raidz2-7 raidz2 da0 da1 da2 da3 da4 da5 da6
bench fio-raidz2-8 raidz2 da0 da1 da2 da3 da4 da5 da6 da7

bench fio-raidz3-4 raidz3 da0 da1 da2 da3
bench fio-raidz3-5 raidz3 da0 da1 da2 da3 da4
bench fio-raidz3-6 raidz3 da0 da1 da2 da3 da4 da5
bench fio-raidz3-7 raidz3 da0 da1 da2 da3 da4 da5 da6
bench fio-raidz3-8 raidz3 da0 da1 da2 da3 da4 da5 da6 da7

bench fio-raid10-2-2 mirror da0 da1 mirror da2 da3
bench fio-raid10-2-3 mirror da0 da1 mirror da2 da3 mirror da4 da5
bench fio-raid10-2-4 mirror da0 da1 mirror da2 da3 mirror da4 da5 mirror da6 da7

bench fio-raidz0-2-2 raidz da0 da1 raidz da2 da3
bench fio-raidz0-2-3 raidz da0 da1 raidz da2 da3 raidz da4 da5
bench fio-raidz0-2-4 raidz da0 da1 raidz da2 da3 raidz da4 da5 raidz da6 da7
bench fio-raidz0-3-2 raidz da0 da1 da2 raidz da3 da4 da5
bench fio-raidz0-4-2 raidz da0 da1 da2 da3 raidz da4 da5 da6 da7

bench fio-raidz20-3-2 raidz2 da0 da1 da2 raidz2 da3 da4 da5
bench fio-raidz20-4-2 raidz2 da0 da1 da2 da3 raidz2 da4 da5 da6 da7

bench fio-raidz30-4-2 raidz3 da0 da1 da2 da3 raidz3 da4 da5 da6 da7