Zynqサーバーの使われ方を妄想してみるスレ
(アカデミアの状況とか追ってないし専門外なので、もしかしてかなり既知/的外れなこと書いてる可能性あり)
15年くらい前にIP Switchって製品が登場して画期的だった。これってZynqサーバー(Xilinx Zynqを搭載したサーバー機器。そんなものが実際にあるのか俺は知らないがいずれ出てくるだろう)におけるARMとFPGAの使い分け方法を示唆してるのではないかなという思いつきをメモっておく。
IPスイッチ=Linux IPルータ+ATMスイッチ
当時、IPルータやATMスイッチはあったけど、IPスイッチはなかった。IPルーティングにはBGPやらOSPFやら複雑なアルゴリズム使った経路制御が必要でCPU処理が不可欠。CPU使わずハードだけでスイッチングは難しかった。するとどうしてもCPUがボトルネックになる。
そこで、53バイトの固定長セルを定義し、そのヘッダのアドレスを見てCPUなし(=布線論理のみで)でスイッチングすることを想定したプロトコル、ATMが登場した。ATMスイッチはIPルータより速かったけれど、結局はインターネットの隆盛に負けて、コンピューター間の通信プロトコルとしてATMがIPを置き換えることはなかった。
でもATMはしばらくプロバイダのバックボーン構築に使われてた。IPスイッチが登場したからだ。IPスイッチは文字通り、ATMスイッチの速さでIPをルーティングできる機械。中身はLinuxベース(いや正確にはIpsilonの中身はBSDだったかな)のIPルーティング制御箱とATMスイッチ。Linuxの方で経路制御したら、その経路をATMスイッチに設定する。あとはLinuxを介さずめっちゃ高速にIPスイッチングできるという仕組み。後にMPLSとして標準化された。
ポイントは、「めんどくさい処理はCPUで、簡単なストリーム処理はハードウェアで」という使い分け。これはZynqサーバーの使い方を考える上で面白い。
アプリごとに俺様SIMDを定義したい
いまのWebアプリやビッグデータの処理はほとんどがCPUによって実装されてて、まさにIPルータ時代。すべてのデータを一度CPUに持ってこないとなんにも処理できない、典型的なフォン・ノイマン・ボトルネック。でも、よく考えると、例えばSSLの暗号化とか、ロードバランサーとか、ファイアウォールでのウィルスチェックとか、RAID5コントローラーとか、CRCでデータ保護とか、簡単なところから脱CPU化は始まっている。
ZynqのようなARM+FPGAなヘテロコアを搭載したサーバーが一般化すれば、もっともっといろいろなアプリケーション特化した処理がハードウェア実装に移行できるはず。例えばTBクラスのデータに対してパターンマッチング/ソート/マージとか、大容量のストリームデータをフィルタしたりcontinuous query適用したりウィンドウ処理したりとか、そういう比較的単純な処理までいちいちディスク→メモリ→キャッシュ→レジスタって持ってきて64ビット単位でちまちま加工する必要はないのでは。Supersonicみたいに、既存CPUのSIMDを活用してデータ処理を高速化しようって動きもある。GPGPUでも何かできるかもしれない。でも、もしサーバーにFPGAがついていれば、例えば1024とか4096ビット、いやもっとデカい単位でデータをDMAしながらCPU介さずにストリーム処理する俺様SIMD命令を、アプリごとに定義して使うことだってできそうだ。できたらいいな。
FPGAでストリーム処理っていうのは、アカデミアや金融分野では結構前から研究されてる。特に金融はHFTっていうハードリアルタイム要件があるためFPGAでないと追いつかないみたい。
Webアプリやビッグデータも「CPUが必要な処理」と「ハードでできる処理」に分けてみよう
金融でのFPGAみたいなのは特殊用途だけど、Zynqサーバーが普及することで、もっと一般的なWebアプリやビッグデータの世界にもこの波がくるんじゃないかなぁ。。来てほしいなぁ(面白いから)。。そこで思い出すのが、IPスイッチにおけるCPUとハードの役割分担。HTTPリクエストを解釈したりユーザー認証したりトランザクショナルにデータベースレコードを書き換えたり、、っていったOLTPな処理はCPU任せでいいと思う。一方で、上述した比較的単純なストリーム処理は、CPUからFPGAに指令を出してオフロードする。CPUは太いデータの通り道を構成して展開する役割に専念する。すると、「CPUによるOLTP処理」と「FPGAによるストリーム処理」を組み合わせたWebアプリ設計技法ってのが生まれるんじゃないか、そんな時代にはFPGAプログラマ(まぁHDL直接書くっていうより高位合成主体だろうけど)がモテるんじゃないか。。
ってところで目が覚めた。