【レポート】
FreeBSDのカンファレンスBSDCan(2005年5月13日、日本時間14日に米オタワで開催)でColin Precival氏が発表した論文(CACHE MISSING FOR FUN AND PROFIT)は、Hyper-Threadingに脆弱性があり、実際に脆弱性を使った攻撃が可能であることを示した。PCユーザーへの影響はほとんど考えられないが、Hyper-Threadingのメカニズムそのものに絡む脆弱性だけに、そのメカニズムは興味深いものだ。どのような方法でHyper-Threadingに対する攻撃が可能なのか、論文の内容を検討してみたい。
Hyper-Threadingの脆弱性は、Hyper-Threadingの仕組みそのものに大きく関係している。そのため多くの読者には復習気味にはなるだろうが、もういちどHyper-Threadingとは何だったのかを、簡単におさらいしておくことにしよう。
現在のCPUは内部に複数の実効ユニットを持ち、命令をOut-of-order(適当に並び替えて)で実行する構造を採用している。Pentium系CPUはx86命令をμOPSと呼ばれる縮小命令に変換、内部の複数の実行ユニットを効率よく動作させる順番に並び替え、命令を実行ユニットに送り込んでいる。
原理的には実行ユニットの数だけ、複数のμOPSが同時に実行できるはずだが、実際はそう簡単ではない。たとえば、x86命令並びに依存性がある場合、μOPSの実行順序を大きく変えることができず、実行ユニットのいくつかを遊ばせざるを得ない状況になる。
実際、CPU内部の実行ユニットは多くの時間、半分程度が遊んだ状態(動作していない状態)になっている。複数の実行ユニットがあるおかげで理論的なピーク性能は高いが、現実の性能は理論値に遠く及ばない、というわけだ。
実行ユニットを遊ばせるのは効率が悪い。そこで「1つのCPUを擬似的にデュアルプロセッサに見せかけてしまおう」というのがHyper-Threadingの基本的なアイデアだ。
デュアルプロセッサでは、各プロセッサにプロセスやスレッドが割り当てられるため、2つのプロセス/スレッドが同時に実行できる。Hyper-Threadingでは、1つのCPUを擬似的にデュアルプロセッサに見せかけることで(CPUは1つしかないが)同時に2つのプロセス/スレッドを実行できるようにする。
CPUは2つのプロセス/スレッドの命令をメモリから取り込むことになるが、異なるプロセス/スレッドには命令の実行順に関する依存性がない。したがって、複数の命令実行ユニットに効率よく命令を流し込むことができ「遊んでいる実行ユニットを大幅に減らす」ことができる。Hyper-Threadingの利点はここだ。
なお、プロセスはOSが起動するソフトウェアの実行単位、スレッドはソフトウェア内部から起動されるソフトウェアの一部の実行単位だが、OSはプロセス/スレッドを区別せずにCPUの実行を割り当てている。したがって、CPUから見ればプロセスやスレッドには区別がない、ということを覚えておいて欲しい。
| 【特別企画】標準で4GHz動作! メーカー公認のCPU+GPUダブルオーバークロックマシン登場 [08:30 2/10] |
| 新世代PCを開拓する「Windows on ARM」、MSが概要を説明 [08:07 2/10] |
| iPad 3の強化点はディスプレイ・バッテリ・GPUか - 海外報道 [23:04 2/9] |
| iTunes Matchが生み出す「Magic Money」とは? [22:47 2/9] |
| アスク、システムドライブを2.5インチSATA HDD/SSDに複製するUSBケーブル [18:50 2/9] |
|
北大、「ポジトロン断層撮影法」による脳腫瘍の性質を診断する手法を開発 [09:40 2/10] エンタープライズ |
|
NICTなど、手術支援ロボット「da Vinci」の3D裸眼映像伝送実証実験を計画 [09:36 2/10] エンタープライズ |
|
OAD『君のいる町 ~黄昏交差点~1』よりキャストメッセージを紹介 [09:22 2/10] ホビー |
|
ファーストサーバ、サイボウズの最新版「Office 9」をASPで提供開始 [09:19 2/10] ビジネスPC |
|
【コラム】独占画像の壁紙付コラム 第2回 リアル流血描写が話題のRPGを映画化!禁断の血しぶき増量画像も入手 [09:06 2/10] エンタメ |