BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Microsoftのソフトウェアトランザクショナルメモリに関する実験が終了

Microsoftのソフトウェアトランザクショナルメモリに関する実験が終了

原文(投稿日:2010/05/13)へのリンク

Dana Groff氏は、Microsoftが行っていた.NET Framework向けソフトウェアトランザクショナルメモリの実験の終了をアナウンスした。STM.NETとして知られているこの研究プロジェクトは、並列処理問題を取り扱う時に、明示的なロックの代替手段として、2008年から始まった

理論上、ソフトウェアトランザクショナルメモリはデータベースのトランザクションのように動作する。理想的には、2つのスレッドが同時に同一のデータを更新せず、ダーティリードが発生せず、デッドロックは自動的に検出、処理される。もちろん、これは楽観的ロックvs悲観的ロック、ロックの粒度、パフォーマンスへの影響といった課題ももたらす。

データベースには、その構造化データの点で、通常のソフトウェアに比べていくつかの明確なメリットがある。各行はアトミックであり、まとめてロック、読み込み、更新ができる。さらに、各行の位置は固定されており、細かい多数のロックがある場合や、そうでなければ必要になったタイミングでロックエスカレーションを行う、といった技術が利用可能である。通常のソフトウェアでは、各オブジェクトはルートからのポインタチェーン経由で参照しなければならず、意味的なグルーピングが妨げられ、「このコンテキストにおけるアトミックな単位は何なのか?」という疑問がわいてくる。

去る1月、Microsoftの並列コンピューティングの研究者、Joe Duffy氏はトランザクショナルメモリの回想において、STMに幻滅した4つの理由に言及している。

第1の理由は、I/Oの問題である。I/Oのほとんどは本質的にトランザクショナルではなく、分散コンピューティングがよりポピュラーになっていくにつれて、この問題は避けられないものになる。Joe Duffy氏はファイルアクセスだけでなく、イベントログ、Webサービス呼び出し、ユーザインタラクション、プラットフォーム呼び出しにも言及している。

この問題は、究極的には「世界はトランザクショナルになるのか、そうではないのか?」ということです。

私の考えでは、無拘束トランザクションが世界を成功の方向に向かわせるかどうかは、本質的にこの質問の答えに依存しています。確かにトランザクショナルNTFSやトランザクショナルレジストリがVistaに追加された時、答えは“イエス”であるように見えましたが、その勢いは著しくスローダウンしてきているようです。

第2の論点は弱い、もしくは強いアトミック性についての課題だ。事を非常にシンプルにすると、トランザクショナルオブジェクトがトランザクションの中でのみ読み書きされることを厳密に要求するのか、それとも開発者が行っていることを信用するのか、ということになる。前者はアプリケーションのトランザクショナルな部分とトランザクショナルではない部分の間のデータ共有で、多くの問題をもたらすだろう。後者は本質的にエラーを起こしやすい。

第3の理由は私有問題である。前述のように、通常のソフトウェアには、アトミックな単位の間にデータベースのようなきれいな境界がない。さらに事をややこしくしているのが、アトミックな単位がデータ構造の寿命内で、変更可能だと考えられていることだ。

我々のプロジェクトの現状、今後のこと、難しい問題などを話し合うための、週次の定例チームミーティングでのことです。まるで昨日のことのように覚えています。ソフトウェアトランザクショナルメモリーの先駆的な研究を行っている大学からのインターンがおり、彼はコーヒーをすすっていました。一方、私は紅茶をすすっていました。その時彼が、我々が(そしてその当時の業界のほとんどの人が)構築していたソフトウェアトランザクショナルメモリーを脅かす、あっと驚くような欠点を指摘しました。我々は1年以上の間、その問題に気が付かなかったのです。非常に驚かされ、また型通りのコンピュータサイエンスの信奉者にさせられた瞬間でした。

(訳注:このパラグラフは原文に記載されているサンプルコードについて述べています)トランザクションTx0がitIsOwnedをtrueに変更し、それをコミットします。その後、ソフトウェアトランザクショナルメモリの範囲外で何かしらの状態(このケースでは変数xが参照しているオブジェクト)を使用する処理へと進みます。その一方で、別のトランザクションTx1で楽観的にitIsOwnedを参照するとfalseなので、xを使用する処理を行います。置き換え更新(update in-place)システムではトランザクションが自由にxの状態を変更できます。もちろん、itIsOwnedがtrueに変更されたので、ここでロールバックされますが、その時にはもう後の祭りなのです。トランザクション外でxを使っているもう1つのスレッドは常に、変更された状態を参照します。そこから何が起こるのか、誰が知っているのでしょうか?置き換え更新のソフトウェアトランザクショナルメモリにおける、弱いアトミックの既知の欠陥です。

この例は不自然なものではなく、多くの環境で発生します。最初に我々が気が付いたことは、あるトランザクションがリンクリストからノードを削除し、一方で別のトランザクションがそのリストを使用している場合です。前者のスレッドがリストから要素を取り除いたので、その要素は自分の“所有物”だと信じていると、その状態が変わり続けている時に、期待を裏切られることになります。

Duffy氏がソフトウェアトランザクショナルメモリに幻滅した最後の理由は、実際にそれを使って成功したケースがないことだと述べている

これまでずっと、我々はソフトウェアトランザクショナルメモリのキラーアプリを探し続けてきました。業界全体でまだ並列処理を行うようなキラーアプリを見つけられていないので、これを探す責任をソフトウェアトランザクショナルメモリに負わせるのは不公平です。しかし、我々は最近になってより成功したものを発見し、私はソフトウェアトランザクショナルメモリを必要とするキラーアプリが、ここ5年で広く使われるだろうという確信が次第に持てなくなってきました。もっとも成功しているのは、呆れるほど並列な画像処理アプリですが、それには自然な分離があります。あなたが何かを共有しているなら、何かおかしなことをしているのです。

多くのMicrosoftリサーチプロジェクトと同じく、STM.NETのコードとサンプルは削除され、フォーラムはすぐにロックされる予定だ。我々が利用できるのは、ソフトウェアトランザクショナルメモリプログラミングガイドだけである。

この記事に星をつける

おすすめ度
スタイル

BT