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よ罵って悪かった。

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

2006年8月13日

空のCD-R/DVD-Rの総容量0バイトって!?

何故か Power Mac G5 Quad の付属のSuperDrive で、CD-R/DVD-Rが焼けなくなってしまった。ドライブが壊れたようでは無く、焼く前の空メディアの総容量が 0 バイトと認識されて、容量不足で焼けないのである。

内蔵のSuperDriveの問題かと思い、外付けのCD-R焼きのドライブを付けてみてもヤッパリ総容量が正しく認識されずに、0バイトである。

多分に、なんかソフトの問題かと思うが、未だに原因不明。まぁ、パッチとか出るだろうと、ふて寝中。

追記

勘違いだったみたい。

2006年8月12日

BIOSのアップデートに失敗かぁ!?

先日購入したM2NPV-VMとDDR2-667の組み合わせでDual-Channelに設定すると起動できない問題が新しいBIOSで修正されていたらいいなぁ、という淡い願望を抱いた。

で、BIOSを0109->0303にアップデートして見たところ、、、なんと下記のメッセージが出てBIOS画面まで起動すらしなくなってしまった。

Award BootBlock BIOS v1.0
Copyright (C) 2000, Award Software, Inc.
 
BIOS ROM checksum error,
 
Detecting IDE ATAPI device...

マニュアルを見るところ ASUS CrashFree BIOS 2 が動いてる画面だそうで、つまりはBIOSの更新に失敗しているようである。

自作PCを何度が作っているが、初めての経験である。かなり凹んだが、CD Drvie を繋いでSupport CD を入れると集荷時のBIOSまで書き直しが出来るのがCrashFree BIOSの売りなので、手順に従ってみた。

しかし、Detecting ... の行がでて固まったり、BIOSイメージが見つかるが書き込み完了の「Pass」の文字が出力されずに固まったり、何故かBIOS画面まで出るが固まったり。 要は、一度も経験が無いほど動作が安定しない。手持ちのメモリモジュールの相性を考えてSingle-Channelで動作するように一個のみを刺していたのにである。

壊れたと思いましたよ。で、一晩ふて寝。

熟考の結果、メモリとの相性がより一層ひどくなったのかぁ。。。手持ちのメモリモジュールはDDR667のSingle-Channelでも起動できんようになったのかぁ。

なので、別のPCのDDR533で動作するメモリを差して見ました。。。あっさりBIOS画面まで起動。ついでに、DDR533で動作するようにBIOSで制限して先ほどのメモリモジュールを刺すと、これもあっさりBIOS画面まで起動。。。BIOSアップデートして相性が一層悪くなるとは。とほほである。

まぁ、BIOSの焼き損じでは無かったので良いのだが、メモリ相性かぁ。。。

取り敢えず、ダメダメな組み合わせは下の通り。

  1. Athlon64X2 3800+ Box (Socket AM2)
  2. M2NPV-VM
  3. CD1G-D2U667/ELP <= 現在 DDR533 Dual-channelで動作中
ガックシ。

2006年8月6日

NSImageでWindowsアイコンデータを扱う

通称 Favicon をCocoaで扱いたかった。 元データはWindows アイコンファイル仕様(.ico)がBase64化されてテキスト文字列になっていた。 なので Base64デコードして、何か仕様のpixelデータ列に変換してNSImageに喰わせる必要があるかと思っていた。

が、 Base64デコードした後のWindowsアイコンデータのバイト列を元にNSDataを作成して、initWithData:で初期化すればお望みにNSImageが得られて、表示放題のようだ。またアイコンデータに限らず、MacOSXで扱える全ての画像形式(JPEG,PNG,等々)をNSDataに入れられれば、形式を自動認識してNSImageを生成出来るようである。

これも、Quartzの恩恵らしい。何ともすばらしい。

あとは、キャッシュの方法をマスタすればNSImageは恐れるに足らない。

TeraStation TS-0.6TGL/R5 の改良(4) -- samba の調節

Samba を 2.2 から 3.0 に置き換えようかと思ったが、Debian sarge の samba は機能詰まりすぎて、簡単には行かない。なので、samba 2.2 を温存させることを方向で考える。

問題になっているのは、元のファームの仕様ではローカルディスクのファイル名のエンコードが Shift-JIS になっており、これをUTF8として見るようにすれば、samba/netatalk の相互に日本語のファイル名が使える用になる。

MacOSXの Tips で Samba 3.0 からでないと日本語のファイル名はまともに使えなかったはず。Samba 2.2系で実装ではファイル名の受け渡しにUTF8を使っていないので、 UTF8を前提にしてるMacOSXのSMBクライアントは文字化けしてしまう。

なので、検証はWindowsクライアントから行う必要がある。

どうするかと言うと smb.conf の coding system に utf8 になるようにすれば良いだけ。teractrlも同様な修正すれば、管理画面との連動も問題ない。

まぁ、windows からはsamba で macosx からはnetatalk でアクセスすればいいので問題ない。 結果として、ファイル名長も変な制限もなく日本語のファイル名も Windows/MacOSXの相互に受け渡しが出来るようになった。。。というか、出荷時にこの程度まで品質を上げて欲しかったなぁ>BUFFALO

2006年8月3日

TeraStation TS-0.6TGL/R5 の改良(3) -- netatalk 2 の調節

無事 TeraStation に netatalk 2.0.2 を動く用にしたが、2〜3点不満な点がある。

  1. パスワードがクリアーテキストで送信するようになった。
  2. まだ.DS_Store は :2eDS_Storeとなってしまい Samba と共存すると悲惨になりそう
解消しておきますかぁ。

パスワードがクリアーテキストで送信するのは、Debian の netatalk のパッケージの問題らしい。 OpenSSL のライセンスが GPL と組み合わせられないらしい。詳細は README.Debian に書かれており、「DEB_BUILD_OPTIONS=ssl debuild」で対応バイナリが作れる。cracklibを使わない用に修正してパッケージ作って、uams_dhx_pam.so /uams_dhx_passwd.so /uams_randnum.so をコピーしてクリアーテキストの問題は対応完了。

:2eDS_Store が作られる問題は、AppleVolumes.default の個々のエントリに options:usedots を追加すれば良い。しかし、管理画面の「共有フォルダ設定」で「共有フォルダの追加」を行うと消えてしまう。

どうも/sbin/teractrl で設定ファイルを作成しているらしい。こいつはスクリプトではないので、イマイチ手が出せないなぁ。

どうしたもんだろうか?

取り敢えず teractrl に一皮被せて、AppleVolumes.default を再生成した直後の オプションを加えるように変更。。。でよさげ。

久しぶりの投稿

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