QuickTransitのトランスレーション技法

QuickTransitのトランスレーション技法

 異なるアーキテクチャのバイナリをトランスレーションする場合、通常、CPUの命令セットが1対1に対応することは無い。CISC(Complex Instruction Set Computer)からRISC(Reduced Instruction Set Computer)アーキテクチャに変換する場合には、RISCと比較してCISCの方が高度な命令を持つため、CISCの1命令を複数のRISC命令に変換する必要がある。逆にRISCからCISCへの変換の場合には、RISCの命令がCISCと比較して単純であるため、1対1で変換していくと非常に冗長な形になってしまいオーバーヘッドが大きくなる。

 上記のような問題を解消するため、QuickTransitでは「ダイナミックバイナリトランスレータ」というモジュールを用いて、図2のような方法でトランスレーションを行っている。

 ダイナミックバイナリトランスレータでは、コードを1命令ずつ変換するのではなく、ある程度のブロック単位で変換していく。取得したブロックは、一度「IR(Intermediate Representation:中間表現)」に変換する。

 この段階で最適化処理を行い、効率的なコードに変換する。さらに頻繁に利用されるコード(HotPath)を判別し、再最適化しOptimized IR(最適化済み中間表現)に変換する。

 最後に、最適化されたコードをターゲットのバイナリに変換する。このとき、HotPathとして判定されたコードはキャッシュされる。

 要点は、一度IRに落とし最適化している点にある。ダイナミックバイナリトランスレータは、「デコーダ」「最適化カーネル」「コードジェネレータ」の3階層に分かれており、図2に示すようにそれぞれの段階にて以下のような処理を行っている。

・デコーダ:コードをブロック単位で読み込みIRにトランスレーション
・最適化カーネル:IRを最適化(HotPathは再最適化)
・コードジェネレータ:IRをターゲットのバイナリに変換。HotPathはキャッシュする

 IRによって、さまざまなプラットホームで使えるような柔軟性を持たせ、最適化カーネルによる最適化とコードジェネレータによるキャッシュによって、トランスレーションの高速化を実現している。

QuickTransitの構造

 アプリケーションをトランスレーションし、実際に異なるアーキテクチャのマシン上で実行させるために、QuickTransitは、ダイナミックバイナリトランスレータのほかに「OSコールマッパー」という仕組みを用意している。

 これは、アプリケーションのシステムコールをトラップして、QuickTransitを実行しているホスト環境に合う適切なシステムコールにマッピングする仕組みである。適切なシステムコールが無い場合には、QuickTransitが独自にエミュレーションする。

 また、実際にアプリケーションを実行するには、ダイナミックバイナリトランスレータとOSコールマッパーのほかに、アプリケーションで利用するライブラリ群も必要になってくる。OEMの製品に関しては、OEM先が用意しているライブラリを利用することになるのだが、パッケージ製品(QuickTransit for Solaris/SPARC to ○○○)の場合には、Transitive社が用意した「SolarisWorld」を利用する。

 SolarisWorldは、Solaris/SPARCのライブラリ、コマンド、アプリケーションおよびそのほかのシステムファイル一式が含まれている。具体的には、「/soalris-sparc」 というディレクトリに、binや、lib、optなどのディレクトリが、あたかも実際のSolarisのルートディレクトリのように配置されている。

 このSolarisWorldだが、OpenSolarisをもとにしているため、Transitive社のOpenSolarisのディストリビューションと言うこともできる。また、トランスレーションの対象となるアプリケーションのバイナリもこのディレクトリ配下に配置/インストールすることとなる。

 それでは、実際に「QuickTransit for Solaris/SPARC to Solaris/x86-64」を使いSPARバイナリをx86で動作させる例を見ていこう。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30