ディスクのスループットを測定する場合、メモリバッファの効果を考慮する必要がある。 そのため色々なベンチマークプログラムが開発されている。例えば、Bonnie, Bonnie++, iozone, Iometer 等々。
最初は何も考えずBonnie++やIOZoneで測定したが、測定結果がいまいち合点が行かない。 なので、ここ2週間ばかり追って見たところ、結論らしきものが出せた。
Bonnie++ について
Debian etch/sarge 共に 1.03a が含まれており、これが安定版である。 但し、Bonnie++ 2.0 を目指して開発はされているが2003年頃から更新が無く停滞している。
単体HDD、RAID0、RAID10、RAID5で測定したが、結果が毎回大きく異なる場合があり、怪しい。Unix 系ではwrite は遅延書き込みなので、fsyncを発行しないと書き込み完了までの時間が小さく測定されて、実際よりレートが高く算出されてしまう。1.03aのソースを見る限り、デフォルトではfsyncは発行されない、ただし、1.93c では既にデフォルトで最後にfsyncが発行されており、修正されている。但し、1.03aではfsyncを発行させるオプション'-b'
をすれば良いらしい。(というか指定しなければ正しい結果は得られない、、、と思う。)
per-char IOテストではCPU利用率が50%以上になっており、イマイチDISK IO のベンチになっていない気がする。
起動したときの測定条件が全くでないのは、不親切だ。シーケンスIOのデフォルトのsizeが実メモリの2倍で、chunk size が 8M とかは、出してくれや、、、と思う。
参考例:4台のHDDでRAID0を組んだ場合
deep:~# bonnie -d /mnt/0 -n 0 -u root -b
Using uid:0, gid:0.
Writing with putc()...done
Writing intelligently...done
Rewriting...done
Reading with getc()...done
Reading intelligently...done
start 'em...done...done...done...
Version 1.03 ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
deep 1G 47805 96 63399 16 25138 5 40027 76 49522 4 289.1 0
deep,1G,47805,96,63399,16,25138,5,40027,76,49522,4,289.1,0,,,,,,,,,,,,,
結論
Bonnie++を使うならば、オプション'-b'
を付けて測定する。per char IOテストは、CPU利用率が高い場合は信用しない。
IOZone
Bonnieと同じ測定条件を実行した場合、何故か読み込みレートが小さく測定される。 非常に困ったことに、単体HDDよりRAID0の読み込みレートが小さい値が出てくる。 感覚にそぐわない結果である。
vmstat,top
等で鳥瞰して気づいたのだが、read_testの時に、iozoneのユーザCPU利用率が50%強で、かつ全体のCPU利用率が100%近い状態になっていた。つまり、RAID0で回すCPUも圧迫されていたので、読み込みレートが低くなる結果となったらしい。
IOZone のソースをザッと眺めると、毎回読み込んだデータのパターンが正しいかどうかをチェックするコード(verify_buffer)があった。ここが読み込み測定時にbusy-loopになってるので、読み込みリクエストの負荷がかけられないため、読み込みレートが低く検出されてしまうようである。これを無効になりする方法はなさそうである。
参考例:4台のHDDでRAID0を組んだ場合(上と同じ条件)
deep:~# iozone -s 1G -r 8M -i 0 -i 1 -U /mnt/0 -f /mnt/0/test -cez
Iozone: Performance Test of File I/O
Version $Revision: 3.263 $
Compiled for 32 bit mode.
Build: linux
Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
Al Slater, Scott Rhine, Mike Wisner, Ken Goss
Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
Randy Dunlap, Mark Montague, Dan Million,
Jean-Marc Zucconi, Jeff Blomberg,
Erik Habbinga, Kris Strecker, Walter Wong.
Run began: Wed Aug 30 15:47:24 2006
File size set to 1048576 KB
Record Size 8192 KB
Include close in write timing
Include fsync in write timing
Cross over of record size disabled.
Command line used: iozone -s 1G -r 8M -i 0 -i 1 -U /mnt/0 -f /mnt/0/test -cez
Output is in Kbytes/sec
Time Resolution = 0.000005 seconds.
Processor cache size set to 1024 Kbytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
1048576 8192 66621 60917 30895 31054
iozone test complete.
結論
IOZoneを使うならば、read系はテストは死ぬほど早いCPUを使わない限り、当てにならない。
総論
取り敢えず、bonnie++ 1.03c をオプション'-b'
付きで測定に使い、シーケンシャルIOの結果のみを信用しよう。
課題
他のパラメータはどう読めば良いのだろう?
0 件のコメント:
コメントを投稿