Filesystem性能比較 4

各種ファイルシステムにおけるfilebenchの値を比較

概要

BtrFS, Ext2, Ext4, JFS, XFSにおけるfilebech web serverの性能を測定しました.
BtfFSが遅いです.

filebench

ファイルアクセス性能のベンチマークです.詳細はこちら

実験

各ファイルシステムで web server.f を 600秒で2回実行.
/dev/sdb と /dev/sdc で実行
実験設定詳細は本記事の末尾

環境

CPU: Intel Core i7-3770 CPU @ 3.40GHz, clock rate 3.4 GHz (fixed)
HDD (sdb): Seagate Barracuda 7200.9, ST3808110AS (80.0GB), 
 (sdc): Hitachi HDS721025CLA382 (250GB)
OS: Ubuntu 20.04.3 LTS, desktop, Linux 5.15.25
Memory: 16 GB
/dev/sdb全体, /dev/sdc全体 をformat (ex. mkfe.ext2 /dev/sdb)
われています.

実験結果

filebench (webserver.f), IO Summary の ops/s
filebench (webserver.f), IO Summary の mb/s

btrfsのみ遅いです.
データサイズは非常に小さく,ほぼ全てメモリで処理されているはずです.

実験詳細

webserver.f

#
(略)
#

set $dir=/tmp
set $nfiles=1000
set $meandirwidth=20
set $meanfilesize=16k
set $nthreads=100
set $iosize=1m
set $meanappendsize=16k

define fileset name=bigfileset,path=$dir,size=$meanfilesize,entries=$nfiles,dirwidth=$meandirwidth,prealloc=100,reuse
define fileset name=logfiles,path=$dir,size=$meanfilesize,entries=1,dirwidth=$meandirwidth,prealloc,reuse

define process name=filereader,instances=1
{
  thread name=filereaderthread,memsize=10m,instances=$nthreads
  {
    flowop openfile name=openfile1,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile1,fd=1,iosize=$iosize
    flowop closefile name=closefile1,fd=1
    flowop openfile name=openfile2,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile2,fd=1,iosize=$iosize
    flowop closefile name=closefile2,fd=1
    flowop openfile name=openfile3,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile3,fd=1,iosize=$iosize
    flowop closefile name=closefile3,fd=1
    flowop openfile name=openfile4,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile4,fd=1,iosize=$iosize
    flowop closefile name=closefile4,fd=1
    flowop openfile name=openfile5,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile5,fd=1,iosize=$iosize
    flowop closefile name=closefile5,fd=1
    flowop openfile name=openfile6,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile6,fd=1,iosize=$iosize
    flowop closefile name=closefile6,fd=1
    flowop openfile name=openfile7,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile7,fd=1,iosize=$iosize
    flowop closefile name=closefile7,fd=1
    flowop openfile name=openfile8,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile8,fd=1,iosize=$iosize
    flowop closefile name=closefile8,fd=1
    flowop openfile name=openfile9,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile9,fd=1,iosize=$iosize
    flowop closefile name=closefile9,fd=1
    flowop openfile name=openfile10,filesetname=bigfileset,fd=1
    flowop readwholefile name=readfile10,fd=1,iosize=$iosize
    flowop closefile name=closefile10,fd=1
    flowop appendfilerand name=appendlog,filesetname=logfiles,iosize=$meanappendsize,fd=2
  }
}

echo  "Web-server Version 3.0 personality successfully loaded"
(略)
usage "       run runtime (e.g. run 60)"
set $dir=/mnt
run 600


おまけ (連続実験 shell script)

for fs in btrfs ext2 ext4 jfs xfs
do
	echo ${fs}
	for dev in sdb sdc
	do
		if [ ${fs} = "xfs" -o ${fs} = "btrfs" ]
		then
			mkfs.${fs} -f /dev/${dev}
		else
			echo y | mkfs.${fs} /dev/${dev}
		fi
		mount /dev/${dev} /mnt
		mount | grep ${dev} > result.${fs}.${dev}.txt
		for i in `seq 0 1`
		do
			echo ${fs}.${dev}.${i}
			/opt/filebench-1.4.9.1/bin/filebench -f webserver.f > result.${fs}.${dev}.${i}.txt
		done
		umount /mnt/
	done
done

おまけ (集計 shell script)

grep Summary result.* | sed 's/result\./result. /' | sed 's/\.sd/ .sd/' | sed -r 's/.sd(.)/. sd\1 /' > all.txt

いいなと思ったら応援しよう!