SQL Server on Linux って?(第 2 回目)


 

Microsoft Japan Data Platform Tech Sales Team

坂本 禎尚

前回の記事では、SQL Server を Linux でも動くようにマルチ プラットフォーム化するにあたって開発陣が掲げたゴールと、そこに向けての課題に関してご紹介しました。

今回の記事では、その課題をどのようなアーキクテチャーにすることで解決してきているのかという点に関して、新たに作られた SQLPAL というプラットフォーム抽象化層に関して触れながらご紹介します。

尚、この対応は SQL Server と言っても、まずはデータベース エンジンからの対応となり、その他の SQL Server おなじみの Integration Services, Analysis Services, Reporting Services 等に関してはもう少し時間がかかりそうです。

 

SQLPAL についての前に、まず PAL についてお話しします。一般的に、複数の OS プラットフォーム上で動作するソフトウェアは、通常は PAL(Platform Abstraction Layer)、直訳すると ”プラットフォーム抽象化層” を持っています。

PAL はベースとなる OS プラットフォーム、そのライブラリの呼び出しやセマンティクスを対象のソフトウェア自体から抽象化する役割を持っています。ここに OS 固有のコードを集中して配置することで、残りのコードは OS を意識しなくても良いようにしているわけです。

これまでの SQL Server では Windows という OS でしか動作しなかった為、このような PAL という仕組みは必要ありませんでしたが、マルチ プラットフォーム化にあたっては避けて通ることができません。

そこで生み出されたものが SQLPAL です。SQLPAL は SOS と Drawbridge をその源流に持つ SQL Server 固有のハイブリッドなプラットフォーム抽象化層です。

SQL Operating System(SOS/SQLOS)

PAL は必要なかった、だから持っていなかったと言ったばかりなんですが、実は、SQL Server 2005 以降 SQL Server データベース エンジンと Windows OS の間に SOS というプラットフォーム層が作られています。

この層では、ユーザー モードのスレッド スケジューリング、メモリ管理や IO 同期管理を行っています。まるで、OS のようなことをやっているので Operating System という名前が付いています。これができたことによって、以下のようなメリットを生み出しました。

  • 集中管理された一部の管理機能と診断機能(DMV や xEvent)を提供 → デバッグ/サポータビリティの向上
  • 先行権のないスケジュール実行やリソース管理を SQL Server 自身に行わせることでシステム コール数を最小化 → パフォーマンスの向上

結果的に PAL の一部とも言えるものを作ったわけですが、その目的はパフォーマンス・サポータビリティの向上であって、OS に対する依存関係を抽象化するということは当時考えられていませんでした。

当時は考えられていなかったのですが、PAL になり得る素養を持ったものが既にあるわけですから、マルチプラットフォーム化の検討を担う開発陣は、この SOS をコアにして適切な PAL に成長させることも一時考ました。しかし、同時にその他の方法も模索します。

そして、彼らが次に目をつけたのが Drawbridge でした。

Drawbridge

一般論として、物理から仮想へとサーバー リソースの仮想化を進めていくことで、以前よりはコンピューター リソースのオーバー ヘッドは少なくなり効率化が進んだと言えます。しかし、同一の H/W で多くの仮想マシンをホスティングすれば、その仮想マシン数毎に OS は別個に上げなければらならないわけですから、これを動かす為の CPU やメモリーといったシステム リソースをはじめとして、依然オーバーヘッドは発生します。

Drawbridge は、このオーバーヘッドを更に減らせないか?ということに主眼を置いた Microsoft Research の研究プロジェクトであり、アプリケーションをサンドボックス化する為の新たな仮想形態と言うことができます。この Drawbridge は次のような 2 つのコアから形成されています。

image

<SQL Server on Linux: How? Introduction  より>

  • picoprocess
    • 最小限のカーネル API Surface を持ったプロセス ベースの分離コンテナで、プロセス空間内には包含された OS を持っています。また、実体として次のものから構成されています。
      • 空のアドレス空間
      • picoprocess に代わってホスト OS とやりとりするモニタ プロセス
      • 起動時にアドレス空間を占有し、picoprocess がホストと対話できるようにするホスト アプリケーション バイナリ インタフェース(ABI)を実装したカーネル ドライバー
  • Library OS
    • picoprocess 内に包含された OS。picoprocess はホスト OS から抽象化して切り離されているので、プロセスのアドレス空間内に OS の一部を必要とします。
      • ユーザー モードのライブラリ OS は、1,500 を超える Windows ABI のほとんどをユーザー モードで実装し、ホスト OS とやり取りが必要な ABI は 45 個程度(これはつまり、ホスト OS とやり取りする Surface Area をとても小さくすることができるということで、プラットフォーム抽象化の観点からは非常に優れていると言えます)
      • Library OS は、Windows コンポーネントもホストすることができたので、CLR や MSXML といった SQL Server が依存する他の API をホストするように実装することが可能

 

このように Drawbridge は非常にユニークで先進性のある考え方なのですが、元々の目的は仮想化であり、マルチ プラットフォーム化を目的としていた SQL Server の開発陣の目的とは一致しなかった為、これを"そのまま"適用するということにはなりませんでした。

とは言え、参考にできる部分も数多く存在したことは事実で、上手くそれらを流用しながら SQL Server が既に持っている SOS との Hybrid 戦略を取ることに決めました。その結果、生み出されたものが SQLPAL です。

SQLPAL

SQLPAL は SOS と Drawbridge の良いとこどりをしたプラットフォーム抽象化層で、イメージとしては Drawbridge をベースに SOS を組み入れたような感じになっています。

SQL Server が必要としない Library OS の領域は取り除いたうえで、SOS と Library OS をマージしています。

新しいアーキテクチャは下図のようになっており、システム リソースを使う、あるいはパフォーマンスが重視されるコードは全て SOS Direct API を通り、それ以外のもの、例えば MSXML のようなものは Windows API か NTUM を通るようになっています。

Architecture

アーキテクチャを図示すると階層化しているように見えますが、プロセス内に実際の境界線は存在しません。

プロセス中の全てのリソースは SQLPAL によって管理されます。これまでの SQL Server ではメモリーやスレッドなどの大半のリソースは SQL Server によって制御されていましたが、一部の例外も存在していました。必要なライブラリと Win32/NT API 群により自らスレッドを生成し、SOS の API を使うことなくメモリ管理をしていましたが、今度の新アーキテクチャでは Win32/NT API 群でさえも、SQLPAL が管理することになります。これに関しては、Linux に関わらず、Windows 上で動く場合にも同様となります。

下図は実行中のアドレス空間を図示しています。Host Extension は単なる Linux ネイティブのアプリケーションです。Host Extension は起動時に SQLPAL をロードし初期化を行い、SQLPAL が SQL Server を起動します。SQLPAL は単なるスレッドの集合体をソフトウェア分離されたプロセスで起動し、同一のアドレス空間内に割り当てて動かすことができます。

clip_image001[1]

<SQL Server on Linux: How? Introduction  より>

現状公開されているパブリック プレビュー版では、まだ完全に SOS と Library OS の統合は完了しておらず、あとほんの少しだけ時間がかかりそうですが、かなり近い将来に完全に統合されたものが出てくるロードマップになっています。

この記事を読んでちょっと触ってみようかなと興味を持って頂いた方は、インストールも非常に簡単ですので、是非トライしてみて下さい。

プラットフォーム毎のインストール ガイドはこちらです。

https://www.microsoft.com/en-us/sql-server/sql-server-vnext-including-Linux

 

また、マイクロソフトでは、この Linux 対応を含む SQL Server 次期バージョン 早期導入プログラム(SQLEAP)への参加企業様を募集しております。ご興味のあるお客様は弊社担当営業までお声がけ下さい。

 

関連記事

SQL Server on Linux って?(第 1 回目)

 

 

 

 

 

 

Comments (0)

Skip to main content