Hatena::ブログ(Diary)

Lansenの現実逃避日記 このページをアンテナに追加 RSSフィード

2010-07-24

[]NAND/AFTにおけるパーティションアラインメント問題のまとめ 21:14 NAND/AFTにおけるパーティションアラインメント問題のまとめを含むブックマーク NAND/AFTにおけるパーティションアラインメント問題のまとめのブックマークコメント

最近のHDDの大容量化・低価格化はとどまるところを知らず、2TBのWD20EARSは何と9,000円を下回る価格で販売されています。従来のHDDは512バイトを1物理セクタとして扱い、PC側も同様に512バイトを1論理セクタとしていたのですが、WD20EARSを始めとしたWestern Digital社の最近のHDDは、4096バイトを1物理セクタとするAdvanced Format Technology(AFT)を採用しています。AFTは、HDDの見かけの容量を増やし、読み書きの速度を向上させ、おまけにECCの効率まで向上するといいことずくめなのですが、一方で後述する論理物理セクタのずれによる性能低下が発生します。この性能低下は、SSDUSBメモリといったNANDフラッシュ製品でも起こります。今回の記事では、これらの性能低下問題について、性能が下がる原理と、実際のパフォーマンスの変化についてまとめます。

Advanced Format Technology + Windows XP におけるパフォーマンス低下問題の整理

Advanced Format Technologyについての詳細は、@ITの記事に詳しく解説されています。XP以前のWindows OSでのパフォーマンスの低下問題は、これらのOSHDDフォーマットすると、パーティション開始オフセットを63論理セクタ(31.5KiB)に設定してしまうことに起因します。この状態を図示すると、以下のようになります。

f:id:Lansen:20100724185021p:image

Physicalは実際のHDD上の物理アドレス、LogicalはOSが操作する論理アドレスを表し、正方形のブロック1つが512バイト(1論理セクタ)を表します。太枠の長方形は、上段は物理セクタ、下段はパーティションクラスタを表します。

物理セクタ・パーティションクラスタの双方が4KiBなのに、論理アドレスが始まるのが63セクタめなので、1論理セクタずつ位置がずれてしまっています。このずれを修正するためには、パーティション開始オフセットの大きさを8論理セクタの倍数にすればよいわけです。Vistaや7ではパーティション開始オフセットが2048になるため、この条件をクリアしています。

要するに、この問題の原因はOSXPであることではなく、パーティション開始オフセットの大きさが8の倍数になっていないことにあります。従って、XPでAFT採用HDDフォーマットする場合であっても、Diskparなどのツールを使ってオフセットを調整しておけば問題ありません。同様に、Vista以降のOSでも、意図的にオフセットを63に変更すると、XP同様のパフォーマンスの低下が発生します。

実際に、Windows7(64bit)においてWD20EARSのパーティション開始オフセットをdiskparを用いて変更したベンチマーク結果は以下のようになりました。(P55チップセット、AHCIモード、IRST使用)

f:id:Lansen:20100724154411p:image

オフセットを63にすると特にランダムリードライトパフォーマンスが低下しているのが分かります。この辺は体感速度に影響しやすいところなので、しっかりパーティションアラインメントを調整した方がよいでしょう。

オフセットのずれによるパフォーマンス低下の原理

前掲のテスト結果では、特にランダムライト性能が大きく落ち込んでいます。これは、オフセットがずれた状態で小さな書き込みを行うと、実際の書き込みはRead-Modify-Writeと呼ばれるアルゴリズムによって行われるためです。以下では、Read-Modify-Writeがどのように行われるか、図を用いて簡単に解説します。

以下のように、OSが1クラスタ(4KiB)を書き込むときについて考えます。

f:id:Lansen:20100724185020p:image

AFT採用HDDでは4KiB単位(図の太い長方形枠)の読み書きしかできないので、このように境界線をまたぐ書き込みを直接行うことはできません。

そこで、まず最初にHDD内のRAMに、境界前後の8KiB分のデータを読み込みます(Read)。

f:id:Lansen:20100724185019p:image

次に、RAM上のデータに、OSから送られた書き込みデータを上書きします(Modify)。

f:id:Lansen:20100724185018p:image

最後に、RAM上の8KiBのデータを書き込みます。これで、OSから指示された4KiBの範囲内だけの書き込みを行うことができます。

f:id:Lansen:20100724185017p:image

以上のように、OSは4KiBの書き込みしか行っていないにも関わらず、実際のディスクでは8KiBの読み込みと8KiBの書き込みが行われています。それでは遅くて当たり前です。

上記のプロセスは書き込みについてですが、読み込みに関してはより単純で、1物理セクタ分を余分に読み込み、いらない部分を省いてOSに送るだけです。この場合、常にOSの要求より1物理セクタだけ多くの読み込みが行われます。

NANDフラッシュ製品の場合

こだわりのMONOさんの記事でも解説されているように、SSDUSBメモリなどのNANDフラッシュ製品でも、これと同一の問題が発生します。NANDフラッシュは、読み込みも書き込みもページと呼ばれる単位で行う必要がありますが、ページの大きさは、例えば多くのMLCタイプのNANDでは4KiBとなっています。そのため、オフセットがずれていると、前述のAFT採用HDDと同様に、ページの境界をまたいだ書き込みが行われる可能性があるため、Read-Modify-Writeに起因するパフォーマンス低下が発生します。

オフセットがずれている場合のパフォーマンスの低下量は、製品によってかなりの差があるようです。以下に、いくつかのストレージについてオフセットを変化させた場合のCrystalDiskMarkの結果を掲載します。いずれも前述のWD20EARSと同じ環境での測定です。

f:id:Lansen:20100724154410p:image

f:id:Lansen:20100724154409p:image

  • Crucial CTFDDAC256MAG01G1(RealSSD C300シリーズ、256GB)

f:id:Lansen:20100724154408p:image

Vertexでは4KBの書き込み性能が若干下がっているだけですが、RealSSD C300では大きくベンチマーク結果が低下しています。RealSSD C300ほどの差が出ることは珍しく、Intel東芝JMF602といったあたりもBarefoot同様に4KBの書き込み性能が微減する程度のようです。

VertexなどのSSDパーティションアラインメントの影響が少ない理由は、以下のように推測することができます。

SSDは、複数のNANDに対して並列(またはインターリーブ)にデータの読み書きを行うことで高速化を図っています。コントローラが単純な設計であれば、例えば、ページサイズ4KiBのNANDを4個並列で動かした場合、一回の読み書きの単位が16KiBになります。そのため、それ未満のサイズの書き込みが行われると、必ずRead-Modify-Writeが行われます。

このSSD上のドライブオフセットがずれていることを想定します。もし書き込みがページの境界線をまたいでしまうと、2ページ分のRead-Modify-Writeが必要となるため、書き込みのレイテンシは2倍程度になると考えられます。

しかし、下図を見れば明らかなように、OSからの書き込み量が4KiBの場合、その書き込みが物理セクタの境界線をまたぐ確率は1/4でしかありません。

f:id:Lansen:20100724185016p:image

従って、4KBのランダムライトIOPSは、オフセットがずれているとフルスペックの80%(4/5)に下がると予想されます。同様に物理ページサイズが32KBなら8/9, 64KBなら16/17にしか変化せず、影響は限定的です。

一方、Intel,Micron,Sandforceのように、よりランダムライトが高速である製品は事情が異なる可能性が高いです。

ランダムライトが遅いSSDは、コントローラ仕事をサボっているから遅いのではなく、先ほどのRead-Modify-Writeのようにせっせと(無駄な)読み書きを行っているから遅いのです。SSDを語る上では、"Write Amplification"がよく話題になります。これは、"OSが実際に書き込んだ量の何倍の書き込みがSSD内部で行われたか"を表す指標です。先ほどのNANDを4並列で動かすSSDのRead-Modify-Writeの場合、OSからは4KiBの書き込みしかしていないのに、SSD内部では16KiBの読み書きが行われるとするなら、単純にそれだけでWrite Amplificationは4になります(実際のWrite Amplificationはガベージコレクションなどの影響でもっと増える)。この場合、どうがんばってもSSDの地力の4分の1以下しか性能を発揮できないわけです。また、JMF602プチフリ状態、あるいはUSBメモリSDカードでは、OSからの書き込みが行われる度にブロックコピー(詳細はこちらの記事参照)が行われます。この場合、Write Amplificationは簡単に数百を超えます。

例えばIntelの場合は10並列でNANDへの読み書きが行われますが、4KiBのOSからの書き込みごとに4x10=40KiBのRead-Modify-Writeを行っていたら、CrystalDiskMarkで観測されるような40〜50MB/sというスコアを出すことはできないでしょう。また、Intelが主張する"Write Amplification=1.1"を達成するのも到底不可能です。詳細はもちろん不明ですが、うまくRead-Modify-Writeを避けるようなアルゴリズムが実現されていると考えられます。

そして、それらのRead-Modify-Writeを避けるアルゴリズムコントローラごとに異なるというのは十分考えられます。Intelアルゴリズムオフセットがずれていた場合の悪影響を受けにくく、Micronのアルゴリズムは悪影響を受けやすいのでしょう。

アラインメントの状態チェックと対策

パーティション開始オフセットを簡単に調べるには次のようにします(XP,Vista,7共通,64bitでも可)。XPを使っていなくても、TrueImageなどのバックアップツールが勝手にオフセットを63にしてしまうことがあるので注意が必要です。

ずれたパーティションアラインメントを直す方法は、こだわりのMONOさんの記事に詳しく掲載されています。有料のソフトでもいいから簡単確実に修正したいという場合は、同様にこだわりのMONOさんの記事で紹介されているParagon Alignment Toolを使うのが良いでしょう。また、WesternDigital社は、自社のAFT採用HDD向けのオフセット修正ツールを公開しています。

wsleewslee 2010/07/29 10:05 はじめまして.記事の内容、勉強になりました.ありがとうございました.
この記事を中国語に訳し、中国国内のウェブサイト(無料)に公開したいですが、可能でしょうか.もちろん、公開時に元のリングを明記させていただきます.
ご返事をお待ちしております.
よろしくお願いいたします.

LansenLansen 2010/07/30 00:21 >wsleeさん
>この記事を中国語に訳し、中国国内のウェブサイト(無料)に公開したいですが、可能でしょうか.
大歓迎です。もし質問などがあれば、お気軽にどうぞ。

cuttingedgecuttingedge 2010/07/30 01:36 C300は64GBモデルがリリースされてかなり人気のようですから、この解説は非常に参考になりますね。ところで遅ればせながら、100万アクセス突破、おめでとうございます。あといつの間にか”課程大学院生”が落ちてますが、良いtenure-track positionがあるといいですね。

LansenLansen 2010/07/31 00:57 C300は最近安くていいですね。1.8インチ版も出ましたし、しばらくは人気が続きそうです。
100万PVはいつの間にか到達してました(汗
最近は特に更新頻度が低くて申し訳ありません…
ちなみに、来年度からようやく学生身分を脱却できそうな予感です。そうなったらBlogのタイトル変えないとなあ…

wsleewslee 2010/08/01 15:47 Lansen、ご回答ありがとうございます。

本記事を訳して見ました。
Part1を完成しましたのでご連絡します。
http://www.51nb.com/index.php?action-viewnews-itemid-59717-php-1

良い記事とわかりやすい画像をご提供いただきありがとうございます。。。
引き続き頑張ります。(Part2着手中。。。)

wsleewslee 2010/08/01 16:22 Lansenさん、

先ほどのコメントにはさんを書かずに大変失礼しました。
すみませんでした。

記事のURLを訂正します。
http://www.51nb.com/viewnews-59717.html

改めてありがとうございます。

LansenLansen 2010/08/01 20:05 お〜これはすごいですね。いや中国語は全く分からないんですがきっとすごいと思います。
しかしそのサイトはなかなか濃いですね。中国語で秋葉原ニュースってのはなかなか斬新(?)です。

>先ほどのコメントにはさんを書かずに大変失礼しました。
よくあることなので気にしないでください。

wsleewslee 2010/08/01 23:14 こんばんは。

Part2を完成しましたのでご「報告」します。^_^
http://www.51nb.com/viewnews-59719.html

有意義の一夜を過ごさせていただきました。
(この前は横浜みなとみらいで花火を見てました)
ありがとうございました。

明日は仕事なので、Part3は〜〜仕事の次第です。。。
水曜までは書きあがりたいですね。

LansenLansen 2010/08/03 01:34 お疲れ様です。
自分で言うのも何ですが、分量が多くて大変そうですね…

wsleewslee 2010/08/03 21:45 こんばんは。

Part3を完成しましたのでお知らせします。。。
http://www.51nb.com/viewnews-59773.html

シリーズを完成出来て、うれしく思います。
このたび、記事をご提供いただき本当にありがとうございました。

ご機会がありましたらまたよろしくお願いします。

LansenLansen 2010/08/06 01:01 お疲れさまでした。
さっき気がついたのですが、"CTFDDAC256MAG01G1"のメーカはMicronじゃなくてCrucialでした…
まあどっちでもほとんど変わりませんが。

維摩 輝煌維摩 輝煌 2011/03/30 00:04  維摩 輝煌と言います。
       
 私のxpでは、内臓HDDをusbの外付けHDDとして使うキットをつないで、WDのHDDを使っています。
 ところが、ダウンロードしている最中に、「遅延書き込みデーターの紛失」が発生します。
 原因は、このブログで取り上げられている問題が関係しているだろうと思い、紹介されているUtilityをダウンロードしてきました。
 使い方をサイトで調べてみると、XPでHDDをフォーマットした後に修正Utilityを使うと書いてあるサイトもあれば、データーファイルのあるHDDに直接、実行した事を報告するサイト等、複数ありました。
 パソコンに疎い私は分からなくなっており、どちらが正しいのか、教えて頂こうと発言させて頂いた次第です。
 多分、前者の例では、最初の使い方が正しいのでしょうけど、地震の影響で会社の創業が滞りがちで、日給月給の身なものですから、2台目のHDDを買うのが辛く、つい、前述の例の後の方法でやってみたくなっている、弱い私がいるのです。

 私のPCスペック
 CPUはPentum4 2.6GHz
 メモリーは1G
 OSはWindowsXP Service Pack2

LansenLansen 2011/03/31 02:03 うーん、オフセットのずれは単純にディスクの性能が下がるだけなので、
それが原因で「遅延書き込みデータの紛失」が発生するのはちょっと考えにくいですね…
「遅延書き込みデータの紛失」というのは、「ハードウェアの安全な取り外し」をせずにUSBを引っこ抜いた時なんかに発生します。USBメモリやUSB-HDDにまだ書き込むべきデータが残っているのに接続が切れてしまった、という状況ですね。
なので、問題はハードウェアのどこか(USBポート、ケーブル、変換アダプタなど)にありそうな予感がします。

修正Utilityというのは、Western Digital社が公開しているソフトのことでしょうか?
このソフトはHDD内のデータを残したままオフセットを直してくれますので、そのまま実行して大丈夫です。
ただし、ハードウェアに障害があるとデータが失われる可能性もありますので、何らかの方法でバックアップを取っておくことをおすすめします。

維摩 輝煌維摩 輝煌 2011/05/16 00:11  アドバイスありがとうございます。
 resが遅れてしまい、申し訳ありませんでした。
 最近、pcオンチの私には理解できない事象が次々と発生したものですから、こちらの対応に追われ、お礼のコメントをあげられませんでした。

>修正Utilityというのは、Western Digital社が公開しているソフトのことでしょうか?
 そうです。
>このソフトはHDD内のデータを残したままオフセットを直してくれますので、そのまま実行して大丈夫です。
>ただし、ハードウェアに障害があるとデータが失われる可能性もありますので、何らかの方法でバックアップを取っておくことをおすすめします。
 了解しました。
 一台HDを新たに購入して、フォーマットした後にオフセットを直してから、こちらにコピーした方がいいかもしれませんね。

 さて、次に書きますのは、理解不能な事象とそれに誤った対応した為にトホホな結果になった顛末です。
 
 私は会社の寮と自宅とで合計2台のpcを使っています。
 どちらも年代物のpcで、捨ててあっても多分、拾い手がつかないpcです。

 前回、アドバイスをさせて頂いたHDはWD製の内臓HDをusb接続で外付けとして使うキットで接続しており、寮と自宅の両方で使っています。

 寮で使っている時のドライブレターはIで、自宅で使っている時のドライブレターはHでした。

 パソコンに接続してあるHDのパーティションは、どちらもいじってないのですが、寮で使っているときIからJへ、自宅で使っているときJからIへと変わってしまったのです。

 ドライブレターが変わってしまうと、ランチャー・ソフトに登録してあるドライブレターの箇所を一つ一つ修正しなければならないのは不便と思い、自宅のPCの1代目のHDの頭の方にあるHDのパーティションを増やした所、ブートマネジャーのgrubが損傷してしまい、windowsが起動しなくなってしまったのです。

 grubの再インストールの処理方法をコピーしておいた紙がどこかにいってしまったのです。手がかりをネットで探そうにも、私がネットに接続できるのはwindwosだけです。解決の糸口が無くなってしまい途方に暮れてしまいましたが、偶々、前日、cd-romに焼いたpuppy4.3で何か出来ないかとフト思いたち、cdから起動させた所、起動メニューに「windowsXPを起動する」と言うのがあり、ここから、windowsを起動させてネットに繋げ、grubの再インストールする事が出来、復旧できたしだいです。
 何が幸いするか分かりませんね。

 こういう低レベルのpcユーザーですが、本来は難しい内容を分かりやすく解説しているこのブログに感服している所です。これからも、拝読させて頂こうと思います。健筆を期待しています。

LansenLansen 2011/05/20 00:49 それは災難でしたね…
やっぱり手軽にBootできるCDやUSBメモリなどを作ってあると、いざという時に役に立ちますね。僕もSystem Rescue CDに助けられたことがあります。
こちらのBlogは更新遅くて申し訳ありません。最近特に怠惰な上に、なかなかIHYerの血が騒がず新しい製品に手を出してないので、ネタが少ない状態です…