Google Code Prettify

2006年8月31日

ディスクIO性能(2) - BonnieとIOZoneの比較

ディスクのスループットを測定する場合、メモリバッファの効果を考慮する必要がある。 そのため色々なベンチマークプログラムが開発されている。例えば、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の結果のみを信用しよう。

課題

他のパラメータはどう読めば良いのだろう?

2006年8月15日

ディスクIO性能(1) - 序

Windows95が出たての頃、Socket 7 がまだ現役で、Pentium 133MHz と Triton Chipsetを使っていた。いまはどこに使われているか分からない最新性能のメモリ EDO-RAMを乗せて、少しでも性能を良くしたいとBusmaster 有効なドライバを必死に入れて、Windows95が即死して、何度も入れ直し、結局3〜4回OSをインストールした。でも高速にチューンしても、あの頃のマシンはgcc 2.7 の構築に2時間くらいかかっていた。

でもあの頃は満足だったなぁ。

今は100倍くらい早いマシンを手に入れたハズなのに、やはりまだ足りない気がする。

PCの構成要素は大まかに CPU,Memory,I/O とか言うが、足を引っ張るのはI/Oである。 データベースなんかは物理ディスクI/Oを吐かせた時点で敗北とか忌み嫌われる。 ゲームの3DグラフィックとかCPUをブンブン回す科学計算は別の要素も足かせになるらしいが、一般的な用途として CPU, Memory よりはディスクI/O性能が全体の性能を左右する。

ディスクI/O性能はどのようにすればあげられるのかなぁ。
というか、ディスクI/O性能はどう測ればいいのかなぁ。
また、性能制限の要因になっているのはなんなのかなぁ。

もろもろ事が以前から気になっていた。でも忙しさにかまけて、他人の意見を鵜呑みしたホラ吹いてような気がする。 まとまった時間が手に入ったので、実際に調べてみますかなぁ。

では物品の調達っと。

平凡な PATA UDMA100を4台と SATA300 を 4台を揃えてみました。

  • Seagate ST340015A, 40GB, PATA UDMA100, 2MBキャッシュ, 5400 rpm
  • Seagate ST3320620AS, 320GB, SATA300, 16MBキャッシュ, 7200 rpm
ってか、Seagate を選んだのは単なる好みの問題。

PATAインタフェースカードは4channelの製品など入手出来なかったので、今はこれだけ。

  • FastTrack100 TX2 (PDC20270)
  • IO-DATA UIDE-133R(ITE8212)
  • 3ware Escalade 7500-2
あとマザーボードに付属のPATAインタフェースがある。

全部RAIDカードだがほとんど安い製品(3ware以外)なので、そこそこの性能しかないのかも知りたいところ。ただ、PATAはそろそろ廃れそうなのでこれ以上対象は増やす気はない。

SATA に関してはおいおい手を広げよう。

2006年8月14日

Firefox で任意の履歴へジャンプする機能!?

日頃 Firefox で使っていてまどろっこしく感じるのは、 右クリックとホイールを組み合わせで前後の履歴メニューがポップアップしてくる機能である。 とにかく、履歴の中のデタラメな位置のページに飛ぶので使い物にならない(多分使い方がおかしいと思うが)。

今日まで、Firefox本体内蔵の機能かと思っていたが、All-In-One Gesturesの一機能であるマウスホイールジェスチャであることが分かった。。。なんと、Firefoxよ罵って悪かった。

有無を言わさず、無効にしたのは言うまでもない。

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...