8月版 SSDをめぐる議論に浮かび上がるベンダ模様
小崎資広
2009/9/8
■Welcome to the Real World!
こうした反対の声に対して1つ1つ反論していったのが、Mark Lord(SATA方面の主要デベロッパで、hdparmの作者としても有名)です。
まず彼は、最近OCZ Vertexがファームウェアをバージョンアップし、TRIM対応になったことを説明し、自身が広範なテストを行ったことを告げました。ちょっと長いのですが、彼の実験結果を張り付けます。
■条件■
|
Beginning TRIM operations.. |
これを見ると、遅延は数ミリ秒のレンジに収まっているように見え、TRIMの性能は良好に思えます。しかし、これは"sleep 1"が問題を隠しているだけです。"sleep 1"を取り除いてもう一度同じ実験をすると……。
Beginning TRIM operations.. |
2回目以降のTRIMは100ミリ秒オーダの時間がかかることが分かります。また彼は、この結果は、たった1つのファイル削除処理でも、ファイルが複数のエクステントから構成されている場合は同様の時間がかかることを意味する、と付け足しました。
このため、TRIMコマンドサポートをATAドライバに追加するMatthewオリジナルのパッチを適用すると、あっという間に、システムが耐えられない速度まで性能が劣化したそうです。
また、所要時間はTRIMの発行数に比例するが、1つのTRIMで消すサイズにはほとんど比例しないそうです。彼によると「rm -rf /usr/src/linux」はTRIMで30分以上(!)もの時間を費やすけれど、50GB+のシングルエクステントは消去するのに数秒しかかからなかったとのこと。
これらのことから、VertexのTRIM対応とは、
- TRIMコマンドをトリガに、内部的にGC(ガベージコレクション)に似た動作を開始する
- 最初の1回はGCのバックグラウンド実行を開始して、すぐさまホストにTRIM完了を返信する
- 2回目以降は何らかの理由により同期的に完了を待ってしまうので、とてつもなく遅くなってしまう
という動作であると推測されています。
いい方を変えると、VertexのTRIMにはある種の最適化の痕跡が見受けられるが、少なくともLinuxのdiscardとの組み合わせにおいてはそれはまったく役に立っておらず(Linuxのほとんどのファイルは複数のエクステントから構成されます)、通常のファイル操作でも、あっという間に耐えられないほどの応答性劣化を引き起こします。
Vertexが複数のTRIMコマンドに弱過ぎることから、Windowsの仕様について疑問が上がりましたが、Markはあるベンダから聞いた話として、Windows 7におけるTRIMの挙動について以下のようになっていると説明しました。
- TRIMコマンドを送信するケースの例
- パーティションの3分の2以上を使用した状態でファイルを(本当に)削除する
- ゴミ箱を空にする
- パーティションを削除する
- TRIMコマンドを送信しないケース
- ファイルをゴミ箱に移動する
- パーティションをフォーマットする(たとえフルフォーマットでも)
- 空のパーティションを削除する
つまり、Linuxの現在の仕様とほとんど変わりません。
Markは、これらの経験から、TRIMをバッファリングしてバッチ実行することを強く支持します。Chris Worleyが、「えー、そんなおばかドライブを前提にするなんておかしいよ。OSはそんな変な仮定を置くべきじゃないよ」と不平を告げると、すぐさま「Welcome to the Real World」と一蹴、まったく譲りません。
結局、このスレッドはMatthewがほとんど返信を返さなかったこともあり、結論が出ないまま議論が流れてしまいました。Markのメールはどれも、数字に裏打ちされた根拠のあるものでしたが、あまりにも数字が劇的過ぎて、周囲が「そんな変なデバイスに振り回されたくない……」とドン引きしていってしまい、説得し切ることができなかったように思います。
ここからは筆者の推測になりますし、Matthewが沈黙を守ったので確かなことは分からないのですが、Intel(現在、MatthewはIntel所属です)のSSDのTRIMサポートは、以前考えていたよりも順調ではないのではないかと思います。そのため、以前の構想をほごにして、ソフトウェア側でSSD特有の遅延を隠ぺいする必要が出てきたのではないでしょうか。しかし、いま強引にパッチをマージしようとすると「Intelスペシャル対応、反対」の声が大き過ぎるので、Intel以外のTRIM対応SSDがいくつか市場に出てくるのを待っている……そんなところではないかと推測しています。
SSDベンダの新製品発売やファームウェアのアップデートが過熱すると予想されるWindows 7の発売前後になると、議論の第2ラウンドが始まるんじゃないでしょうか。そんなわけで今後も、SSDの動向からは目を離せそうにありません。
注4:エクステントとはファイルシステムかいわいからきた用語で、連続LBAを持つ複数のブロックのことです。多くのATAコマンドが開始LBAとセクタ数のペアを使うので、連続しているということが大きな意味を持ちます。 |
少年よ大志を抱け!
8月にIPAの主催で開催された「セキュリティ&プログラミングキャンプ2009」ですが、Linuxカーネル組は豊作で、参加者の中から3人がLKMLにデビューしました。
Tatsuhiro Aoshimaは/procの拡張に着手し、Linux Kernel Podcast(注5)でも注目パッチとして取り上げられています。Ryusei YamaguchiはNFSのレースコンディションのバグを修正し、ついでにBKL(Big Kernel Lock)を減らしたので、メンテナから賞賛を浴びました。このパッチは2.6.32でのマージがほぼ確定しています。
またHiroaki Wakabayashiは、mlock()処理中もSIGKILLでプロセスが終了できるように拡張し、従来は死ぬまでに数分かかることも珍しくなかったmlock()中のプロセス終了が瞬時に終わるようにする改善を提案しました。現在、これもマージする方向で調整中です。
Linuxもデベロッパの平均年齢が年々上昇傾向にあるといわれているので、若者の参入はうれしいですね。
注5:http://www.kernelpodcast.org/2009/08/18/20090816-linux-kernel-podcast/ |
関連記事: | |
学生の未来に期待する夏(@IT Security&Trust) | |
「実践的であれ」――伊藤直也氏から学生への言葉(@IT 自分戦略研究所) |
2/2 |
|
|
||||
|
連載 Linux Kernel Watch |
Linux Squareフォーラム Linuxカーネル関連記事 |
連載:Linux Kernel Watch(連載中) Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします |
|
連載:Linuxファイルシステム技術解説 ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する |
|
特集:全貌を現したLinuxカーネル2.6[第1章] エンタープライズ向けに刷新されたカーネル・コア ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する |
|
特集:/procによるLinuxチューニング[前編] /procで理解するOSの状態 Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する |
|
特集:仮想OS「User
Mode Linux」活用法 Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
Linuxのカーネルメンテナは柔軟なシステム カーネルメンテナが語るコミュニティとIA-64 Linux IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|