FPGA ベース・ハードウェアNTPサーバ(Stratum1)特設実験サイト


概要

さくらインターネットで開発した FPGA ベース・ハードウェア NTP サーバ(Stratum1)の情報公開を行っています。

さくらインターネットでは、2020 年 3 月 17 日から2021 年 3 月 31 日までの間、単体で約10ギガビット/秒(約 1300万 リクエスト/秒)の高負荷に耐え、Stratum 1 NTP サーバーとして働く専用デジタル回路を内製設計し、FPGA 上で動作させて提供する実験を実施しました。( プレスリリースページ )


当ページでは当時の実験の雰囲気をお伝えするとともに、開発したFPGA-NTP サーバの技術情報を公開しております。

技術解説

当試験を通して示したいコンセプト

昨今のデータセンターサービス事業においては、既製品のハードウェア(サーバー及びネットワークスイッチなど)やオープンソースソフトウェア(Linux 系OS など)を活用し、安定したサービスを品質に見合ったコストで提供することが一般的です。 これに加えて、お客様が求める機能や使い勝手にお応えするために、サービス提供や運用を自動化するシステムソフトウェア(Infrastracture as a Code とも)を日々改良していくことも一般的となりました。


一方、高度化するサイバー攻撃に対応したり、人工知能研究などに用いられる新しい計算処理に対応するためには、ソフトウェアによる動作では処理速度が間に合わなかったり、消費電力が大きすぎる場合があります。 そのような時、既製品のハードウェアの枠を超えた新しい機材が必要と考えられますが、必要な機能を備えた新しいハードウェアがいつも市中で手に入るわけではありません。 当プロジェクトはこの問いに対する一つの答えとして、システムソフトウェア同様に、「カスタムハードウェア機材をもサービス事業者が日々改良し適用していく」コンセプトの実証試験を目的としています。

情報通信機器の文脈で言うハードウェアは一般的に集積回路チップとプリント基板によってできた電子機器ですが、その両方とも設計を変更しての再生産には数か月~年単位の時間が掛かる事が普通です。しかし、FPGA に代表される「集積回路構造を後から書き込めるデバイス」とサーバー用途で良く使われる周辺回路を集積した FPGA カードを用いれば、サーバーに装備してFPGA 上に設計を投入することで、サーバーハードウェアに新しい機能をすぐに追加することができます。一方、必要な通信インターフェースを必要なだけ選んで装備することや、アンテナ接続等特殊な入出力を行いたい時には、その物理インターフェース(コネクターや信号規格の変換器などを搭載する部分)を開発する必要があります。


当コンセプトでは、共通のコネクタと信号規格を用いたメザニンボード(拡張用の”2階建て部分"ボード)をオンデマンドに自社で設計する方式を取り、設計が必要な部分をインターフェース部分に限定することで、少人数・短期間での改良・適用ができると考えています。最終的には図5 のように、リポジトリ(プロジェクト全体のソースコードを管理する保管場所)に拡張ボードの基板設計、FPGA に導入する回路設計のコード、制御ソフトウェアの 3 つ組を一括で集積し、サービス運用と並行して改良改善していくことを目標としています。


A concept of Hardware Appliance as a Code
図1 : カスタムハードウェア機材を日々改良し適用していくコンセプト

当コンセプトの検証のために、今回は具体的なユースケースの一つとして「重負荷のNTP サーバーを専用開発のカスタムサーバーで置き換える」ケースを想定し、開発を行いました。


高性能な NTP サーバに関する既存取り組み

NTP は PC やスマートフォンなどからの時刻問い合わせに対して NTP サーバーが時刻情報を応答する、シンプルなプロトコルです。しかし、IoT機器等を含む世界中の機器からのアクセスが集中した時、その負荷は多大なものとなり得ます。そのため、NTPサーバー群は階層構造を取り、上位の NTP サーバーからコピーされた時刻源によって動作することで、一台当たりの負荷を減らしシステム全体の能力を向上する仕組みをもっています。


一方、時刻がより正確とされ、信頼して使用されるのは高精度な時刻供給源からの信号を直接受け取って配信する Stratum 1 サーバーとされます。Stratum 1 サーバーを能力向上し、端末から直接 Stratum1 サーバーを参照することは、高精度の時刻配信と時刻配信システムの単純化を両立する一つの手段と考えられます。そこで、専用回路を用いたカスタム Stratum1 NTP サーバーを制作する試みが過去にも行われており、実運用も行われているものとしては NICT 公開 NTP サービス[1]、スウェーデン分散時刻配信サービス[2] などがあげられます。



本開発機も先行する高性能 NTP サーバに類似した専用回路設計によるアプローチを採用しておりますが、カスタムハードウェア機材をサービス運用者が日々改良し適用していくコンセプトにマッチするよう、インターフェースカード基板の内製設計によるノウハウの蓄積を行ったり、C 言語での記述から FPGA 用回路設計を生成できる高位合成ツールを採用する等、継続開発性を重視したものとなっています。

動作の仕組み

Stratum 1 NTP サーバーは一般に、高精度な時刻供給源と高信頼なネットワーク接続を必要とします。そこで、GNSS(Global Navigation Satellite System)衛星が発信する信号を用いて、正確に1秒ごとの時刻同期パルス(PPS)を発振する市販のGNSS 受信機とアンテナコネクターをメザニンボードに装備しました。また、NTP サーバーとしては現行品の中で最も高速なクラスと考えられる10 ギガビット・イーサネットの接続用インターフェースを合わせて装備しました。


当 GNSS 受信機が発振する同期パルスは 1 秒に 1 回です。その中間の時刻に時刻問い合わせが来た場合に応えるため、正しい現在時刻を1秒より十分小さい単位まで正確にカウントアップする機構が求められます。 そこで、時刻同期パルスの繰り返しを検出してFPGA 内にクロック周波数を微調整する制御機構(GNSS同期周波数生成回路)を構築し、約 30 ns (3000万分の1秒程度)の刻みで現在時刻を保持する仕組みとしました。


FPGA NTP server block diagram
図2 : カード上における機能分担

また、10 ギガビット・イーサネットの入力に接続された NTP 応答専用回路は図7のようなパイプライン処理構造となっており、64 bit 単位に分割して到着するデータを流れ作業のように毎クロック次々と受け入れ、次々に応答を行うことができます。これは一旦メモリなどにデータを蓄積してから処理を行うソフトウェア的な処理方式と異なり、高速処理を達成するために必要なクロック周波数が相対的に低くなるほか、新しい処理を追加してパイプラインを長くした場合も処理速度が落ちない特徴があります。


当システムには入力を 64bit に区切って処理するパイプラインが実装されており、それを 160 MHz のクロックで駆動することで、内部的には 10.24 ギガビット毎秒の処理性能を達成しています。


FPGA NTP server pipeline diagram
図3 : NTP サーバー回路処理パイプラインの模式図 (600Mbps 負荷時)

開発した機材と動作の模様

内製設計により開発したメザニンボードはVITA 57.1 FMC (LPC) 規格を参考に製作されており、高速なイーサネット信号をFPGAに受け渡す役割とGNSS 衛星からの信号受信を同時に行うことができます(図8)。

interface expansion board
図4 : 10ギガビットイーサネット& GNSS コンボ増設メザニンボード

当メザニンボードを、PCIe ブラケット側にFMC ポートを装備した市販 FPGA カードと組み合わせることで、データセンター内で用いられる 1U サーバーへの搭載を容易としました(図9, 10)。

expansion board equipped on parent FPGA card
図5 : FPGA カードに装着したところ
server with FPGA card equipped
図6 : サーバーに対し当機材を搭載したところ

サーバ仕様

サーバアドレス 運用は終了いたしました
NTP サービス動作ポート 123/UDP
対応プロトコル NTP v3 / v4
時刻同期源 GNSS 衛星信号
内蔵時計精度(時刻刻みの細かさであり、時刻の正確度とは異なります) 約29.8ナノ秒(33.445532 MHz)
NTP パケット処理能力 約 10Gbps (約 1300 万クエリー / 秒)
処理レイテンシ(処理パイプライン前後) 275ナノ秒(44 クロック@ 160MHz)
処理レイテンシ(装置への光入出力位置相当) 700~800ナノ秒(推定値)

更新履歴

  • 2020/03/18 r01 初稿公開
  • 2020/03/19 r02 技術解説に「高性能な NTP サーバに関する既存取り組み」の項を追加しました
  • 2020/03/19 r03 時刻表示のタイムゾーン表示の誤りを修正しました
  • 2021/04/01 r04 実験終了に伴い、サーバ状態表示を削除しました