Spicata自分がやったお仕事原稿のフォローアップなどを掲載していきます。この広告は、90日以上更新していないブログに表示しています。FanSSDの速度に慣れすぎるとHDDでのシステム起動時間の正常範囲内の判断が鈍くなるのが恐い氷川です。Driveを中心に原稿をお手伝いさせていただきましたが、紙面ではページ数の制約も多かったため技術的な側面にはあまり触れませんでしたのでこちらで追記します。コンピュータ向けの新しいストレージオプションです」とあります。物理的にはフラッシュストレージ(SSD)とハードディスク(HDD)が1基ずつ接続されていますが、システム上では1つのボリュームとして表示されているため、使用しているユーザはあまり意識することはないでしょう。動作の仕組みとしては「アクセスを高速化するため、頻繁に使うファイルが自動的かつダイナミックにフラッシュストレージに移動され、あまり使わないファイルはハードディスクに保存されます。その結果、コンピュータ本体の起動時間が短縮されると同時に、システムがユーザの作業スタイルを学習していくにつれてアプリケーションの起動やファイルへのアクセスが速くなっていきます。Driveはこれらをすべてバックグラウンドで自動的に処理します」とありますが、要するに容量が多く可能な限り高速なストレージをソフトウェア的に実装する仕組みだと考えれば良いと思います。大容量のSSDはHDDに比べて高価ですし、数TBクラスのものも存在しますが、個人で気軽に買えるレベルではまだない現状です。そこで前述の「頻繁にアクセスする」データを高速なフラッシュドライブ側に乗せるというアイディアは以前からありました。XTシリーズがありますが、これらはSSD側の容量が8GBということもあり、起動ディスクを高速化しようとするとほとんどシステム領域だけで使い切ってしまうため、他のファイルのための領域はあまり多くありません。(ISRT)という機能もありますが、これは特定のチップセットを積んだマザーボードでのみ利用可能なこと、キャッシュの割当が最大64GBなこと、また、あくまでキャッシュなためディスク使用可能領域が減ってしまうことなどがあり費用対効果がよくありません。いうか今日日SSDでも120〜500GBあるので一部だけパーティションが区切られて頻繁に読み書きすることによって、寿命が縮むような使い方をするのも疑問が残ります。Driveは使用するSSDの容量に制限がないこと、実装をソフトウェアで行なうことで、特定のハードウェアに限定されないことなどから後発としてよく考えられた仕組みになっているのではないでしょうか。Clusteringが先入観にあるようで、そこで考察が完結してしまっているようです。2013年2月号でも解説しましたが、HDDは構造上、外周部のほうが読み込みが速く、内周部に近づくにつれて読み込み速度が遅くなります。この仕組みを利用して、HFS+は頻繁にアクセスされるファイルを監視して定期的にデータをディスク外周部へと再配置を行なっています。ファイルシステムにsyncがかかったとき、つまりバックグラウンドで利用状況が計算され、結果は/.hotfiles.btreeに格納されます。Clusteringの仕様です(この実装のソースコードは公開されていますので、興味のある方は一読されることをお勧めします)。Clusteringという仕組みはSSDには行なわれません。外周、内周という概念のないSSDには必要ない(というかむしろ均等に使うことが望ましいとされる)ので、ディスクのマウント時にHDDかSSDかのチェックが実行されます。/.hotfiles.btreeが無いことに気付くはずです。ディスクのどこを探しても.hotfiles.btreeは作成されていません。Clusteringから発展させたものかもしれませんが、実装に関してはまったく別の次元から行なわれているのです。Driveはまず優先的にSSD側のデータ領域を使い潰します。データが溢れると自動的にHDD側にスイッチされて書き込まれるため、書き込み速度が遅くなる以外とくにつつがなく進行していきます。ターミナルでiostatコマンドを使ってチェックしましたが、この動作自体はJBOD的であり、たぶんそういった類いのものと大きな違いはないと言っていいと思います。87.21特徴的なのはこの後で、読み出されたファイルには頻度を評価するメタデータが付与されます。その回数に応じてファイルシステムがSSDやHDDへの再配置をバックグラウンドで行なうようになります。末尾にCSの付いたカーネルタスクのコールが見えるはずです。Clusteringの役割を担っています。そもそもHFS+のファイルの再配置は20MB以下のサイズのみに限定されているため、それよりも大きなファイル(たとえば頻繁にアクセスするビデオファイルがあったら?)の配置が行なえなくなる可能性があります。単位で頻繁に入れ替えを行なっています。書き込み速度を稼ぐために定期的にSSD側に空き領域を確保し、約4GBの「ランディングゾーン」を作成しているのも特徴的です(この実装のソースコードも同様に公開されています)。Animationなど現在のAPIの柱となる重要なクラスばかりです。2の暗号化のために使われていました。Storageを呼び出しても実装されているんだかされていないんだかよくわらない引数が多く、現在も企みが見えない部分もあります。createを実行した際に指定したディスクの順番でインデックスが決まっており、HFS+が持っているディスクの種別判定は利用されていません。MLC的なもの)」みたいな組み合わせも想定できるわけで、意外に息の長い技術になるかも知れません。Driveで使われているcreateVolumeなどのオプションは見えていましたが、まさかこんな使い方をすると想像できた人は、中の人以外いなかったんじゃないでしょうか。「ちょっと未来過ぎて読者がついて来れない」という理由で没になっていました(苦笑)。Driveをきちんと解析した記事としてはこれが一番まっとうでした。これの追試をしていたといっても過言でないほどテスト内容も充実しています。古い記事ですが、いまだに重宝するのがこのシリーズ。白山さんまたこの続き書きませんかねえ...。本誌原稿作成の際にhfs_hotfiles.cのソースコードリーディングによる解説という多大なご協力をいただいたことをここで改めてお礼申し上げます。ありがとうございました。»プロフィールid:risonah自分がやったお仕事原稿のフォローアップなどを掲載していきます。@risonahはてなブログをはじめよう!risonahさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。