スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
拍手する
↑ポチして頂けると、とても励みになります

ハードディスクの転送速度(2) ~ファイルシステム編~

ゴールデンウィークまっただ中ですね。
とある人にとっては14連休?ある人にとっては5連休?
普段の少ない休みからいきなりこれだけ沢山もらうとどうして良いやら悩んでしまうほどです。
私はちょうどその間の8連休です。今日は中間地点で小休止の一日。
昨日飲み過ぎでちょっと休肝・・と思ったら今日の晩もガッツリ飲んで、やや疲れました・・

さて、データは前から有りつつ、
書くのが大変で(笑)なかなか筆、いやキーボードを取らなかったネタを投下φ( ゜゜)ノ ^o ポィ
そう、休みエディションです。もはや読む人を意識していない超長文。さすがブログ。
.
.
.
新しいハードディスクを買ってきたり、
今まで使っていたシステムをクリーンインストールしたり。
この際何気なく通過していたフォーマット、実はオプションがあるんですよね。
formatoption.jpg

ファイルシステムはNTFSを選択するとして、
アロケーションユニットサイズ(Allocation Unit Size 以下AUS)は既定値という選択肢。
(AUSの説明は用語参照。ここではOSから見て読み書きの最小サイズという解釈でOK)
このAUS、選択肢として512,1024,2048,4096,8192byte,16KB,32KB,64KBから選択可能です。
小サイズ、大サイズのどちらが良いというわけではなく、共にメリットとデメリットがあります。

○小サイズのAUS
メリット)  ディスク容量を無駄を少なく効率的に利用することができます。
デメリット) 1つのファイルを読み書きする際に必要なAUSが増え、処理速度が低下します。
       また断片化を起こしやすいので注意が必要です。
その他)  一般的にMFT破損時のファイルサルベージでは小さいファイルに有利です。

○大サイズのAUS
メリット)  1つのファイルを読み書きする際に必要なAUSが少なく、処理速度が向上します。
       また小さいファイルなら1つのAUSで収まるので断片化は起こりにくくなります。
デメリット) ファイルサイズによってはディスク容量を無駄遣いします。
その他)  一般的にMFT破損時のファイルサルベージでは大きいファイルに有利です。

昨今の大容量ハードディスクでは
小さいサイズのAUSを選択する意義があまり無くなってきていると思います。
.
.
.
ところで、私のシステムでは、ハードディスクは基本的にRaid0で常用しています。
Raid0は書き込みの最小単位としてストライプサイズ(以下SS)を決める必要があります。
理論的にはデータをSSで分割し、複数台で同時に並列処理することで
書き込みは1/台数の時間で終了し、読み込みは×台数の速度が出ることになります。
(実際は1台の時には必要なかったI/O処理やデータ配置によるシークタイム差など
オーバーヘッドの原因となる点も多いため、数字通りの性能はまず出ません)
例えば2台のハードディスクでRaid0を構築している場合、
SSより大きなファイルは2台で複数のブロックに分散されて書き込まれます。
逆に小さなファイルは1ブロックで書き込め、分散されず1台のハードディスクに収まります。
読み込みの時はこの状態のデータを読み出すことになります。

つまり、大きなデータを読み込むときは分散されている方が速度が出ますし、
小さなデータでも複数個のデータの場合、別々のディスクに収まっていれば、
同時に読み出すことが可能となり速度が出ると思われます。
このことから、SSはデータサイズによって大きい方が良いときと小さい方が良いときと、
状況に応じて向き不向きがあるのでしょう。

ここまでの流れでふと思ったのですが、
例えばAUS64KBでSS32KBのとき、16KBのデータを書き込むとします。
ところがOSから見た読み書きの最小単位は64KBなので、
このサイズでの書き込みを指示します(48KBは無駄になります)。
するとデータは16KBしかないのに64KBのデータとして書き込みが行われ、
この時SSは32KBなので2台のハードディスクに分散されることになります。
必要なデータは1ブロックに収まるのに2ブロック読み出して正しいデータと扱われるなら、
これこそオーバーヘッドの原因になってしまいますね。
それでは最適なSSは何KBでしょうか?そしてその時のAUSは??

今回、このような疑問からSSとAUSの関係を検証してみることにしました。

○検証条件
OS        Windows Vista Business (X86)
CPU        Intel Core i7 920
Memory     6GB DDR3-SDRAM Triple Channel
MotherBoard   GIGABYTE EX58-UD4 rev1.0(X58 Express Chipset & ICH10R)
HDD       Seagate製 ST31000523AS 1TB 32MB Cache ×2
          (Raid0はGIGABYTEのものではなくICH10Rを使用)
--
SS        4KB,16KB,64KB,128KB
AUS       1KB,4KB,16KB,64KB

転送速度は今回もCrystalDiskMarkを用いて計測しました。
はっきり言って結果を見たところ、解釈に困ってしまいました。

<結果>
(左:グラフ 右:生データ)
SSによる分類  SSによる分類(生データ)

○リード性能
シーケンシャルは各設定では、本当にごく僅かですが、
全体的にAUSが大きいほど速度向上の傾向にありました。
一方ランダムは影響か誤差か微妙な結果ですが、
傾向として見られないので誤差と判断しました。

つまり、リード性能はシーケンシャルにおいてSSとAUSを大きくすることで
「非体感」程度の速度向上が見込めます。まぁ・・ほとんど意味ないですね。

○ライト性能
シーケンシャルもランダムもSS16KBと64KBの間に何か壁があります(笑)
SS4KBではAUSと同サイズのとき最も速度が低下し、
最もパフォーマンスが良いのはAUSが1KBの時でした。
SS16KBでもその傾向はあり、AUSが小さいほどパフォーマンスは良いのです。
ところが、SS64KB、128KBではこの傾向が逆転します。
AUSが大きいほどシーケンシャルもランダムもパフォーマンスが良くなる傾向が見られました。
つまり、今回の条件では、
最小×最小、最大×最大の組み合わせが最も速度向上に役立つことがわかりました。

先の例を元に考えてみると、
・SSより大きなAUSでデータサイズが1AUSで収まる場合、無駄が生じるため速度低下を招く
(by SS4KB,16KB(4KBはやや違う?))

・SSより小さなAUSではデータに対してAUSが小さすぎるとI/O処理が増えて速度低下を招く
・SSが大きいとき、AUSも大きいほどライト性能は向上する
(by SS64KB,128KB)

そして全体より
・シーケンシャル、ランダム共にリーディング性能にはあまり影響がない
(やや結果がぶれるのは先に述べたデータの分散によるシークタイムの影響か?)

と当てはめることができるかと思います。
また、今回偶然だと思いますが、
SS64KBAUS64KBの組み合わせがSS128KBAUS64KBより速度が出るようです。

<結論>
色々考えていじるほど性能向上が見られるとは言い難く、
使用状況によって向き不向きもありますが、
敢えて設定を変えるなら、
SSは64KB~128KB以上でAUSを最大64KBにすると自己満足的に良いかもしれません。
労力の割に見合わない成果でした・・( ̄Д ̄; )

--連続記事--
ハードディスクの転送速度(1) ~パーティション編~
拍手する
↑ポチして頂けると、とても励みになります

コメントの投稿

非公開コメント

Blog Search Form
Access Counter
since 2009/03/22
thank you for coming to my blog...
World Community Grid
参加中。ランク1万台を脱するのはいつの日か・・
カテゴリ
最新記事
・・新着順に5件表示中・・
コメント
月別アーカイブ
RSSリンクの表示
リンク
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。