ZFS Benchmark - 環境構成編

OpenIndiana 151a/FreeBSD 9.0-RC1でfioを用いたZFS性能測定。ここでは環境構成と準備スクリプトを記載。

サマリー

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, 4G ECC Mem x3(計12G))
  • 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のみ)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/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の結果については取得してるけど、単なる参考でほとんど見てませんごめんなさい。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
#!/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
Hugo で構築されています。
テーマ StackJimmy によって設計されています。