(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-16
(45)【発行日】2023-01-24
(54)【発明の名称】ゲートウェイに基づく時間ペリメータを使った複数のゲートウェイから到着するメッセージの時間ベースの処理
(51)【国際特許分類】
H04L 12/66 20060101AFI20230117BHJP
H04L 7/02 20060101ALI20230117BHJP
【FI】
H04L12/66
H04L7/02
(21)【出願番号】P 2022519281
(86)(22)【出願日】2020-07-22
(86)【国際出願番号】 US2020042974
(87)【国際公開番号】W WO2021061261
(87)【国際公開日】2021-04-01
【審査請求日】2022-07-26
(32)【優先日】2019-09-24
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-09-24
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】522117613
【氏名又は名称】クロックワーク システムズ インコーポレイテッド
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】イーロン ゲン
(72)【発明者】
【氏名】ディーパック メルグ
(72)【発明者】
【氏名】バラジ エス.プラバカール
【審査官】佐々木 洋
(56)【参考文献】
【文献】米国特許出願公開第2020/0034929(US,A1)
【文献】米国特許出願公開第2017/0289939(US,A1)
【文献】米国特許第07088677(US,B1)
【文献】特開2010-246084(JP,A)
【文献】欧州特許出願公開第02779489(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 12/66
H04L 7/02
(57)【特許請求の範囲】
【請求項1】
複数のソースからネットワーク化されたマシンの領域に送信されたメッセージに対して時間順序操作を実行するためのコンピュータで実施される方法であって、前記方法は、
複数のゲートウェイのそれぞれを参照クロックと同期させるためにソフトウェアベースの同期処理を実行することであって、各ゲートウェイがネットワーク化されたマシンの前記領域のペリメータ上のマシンであり、複数のソースからメッセージを受信するように接続され、前記ソフトウェアベースの同期処理は、
ペアのマシンの間でプローブを交換することであって、前記マシンが交換するプローブが前記ゲートウェイを含むことと、
異なるペアのマシンについて、前記ペアのマシン間で交換されるプローブの通過時間に基づいて前記ペアのマシン間のオフセットを推定することであって、前記通過時間が、前記プローブを送信する前記マシンからの送信タイムスタンプ及び前記プローブを受信する前記マシンからの受信タイムスタンプに基づいており、前記マシンのうちの1つが、前記参照クロックに基づいてタイムスタンプを生成することと、
少なくとも3つのマシンの異なるループについて、前記ループの周りのペアのマシンの間の前記推定されたオフセットの合計に基づいてループオフセット誤差を計算することと、
前記ループオフセット誤差に基づいて前記マシンの推定された絶対オフセットを調整することであって、マシンの前記絶対オフセットが前記参照クロックに対して定義されることと、を含む、ことと、
前記ゲートウェイのうちの1つを介して前記領域に入るメッセージを受信することであって、前記ゲートウェイは前記メッセージにタイムスタンプを付けることと、
前記領域への絶対入力時間に基づいた順序で前記受信されたメッセージに対して前記時間順序操作を実行することであって、前記絶対入力時間は前記参照クロックに対して相対的であり、前記ゲートウェイからの前記タイムスタンプに基づいて決定されることと、を含む、コンピュータで実施される方法。
【請求項2】
前記時間順序操作は、前記メッセージの前記絶対入力時間の時系列順に、前記受信されたメッセージに対して実行される、請求項1に記載のコンピュータで実施される方法。
【請求項3】
前記時間順序操作は、前記絶対入力時間に基づいた順序ではあるが厳密には前記絶対入力時間の時系列順によらずに前記受信されたメッセージに対して実行される、請求項1に記載のコンピュータで実施される方法。
【請求項4】
前記時間順序操作は、前記メッセージが前記領域に入った前記ゲートウェイにも基づく順序で、前記受信されたメッセージに対して実行される、請求項1に記載のコンピュータで実施される方法。
【請求項5】
前記時間順序操作がメッセージに対して実行される場合、メッセージは、前記ゲートウェイのうちの1つを介して前記領域に入っていなければならない、請求項1に記載のコンピュータで実施される方法。
【請求項6】
前記時間順序操作が、どのメッセージも見逃すことなく順番に実行され得るように前記受信されたメッセージをバッファリングすることをさらに含む、請求項1に記載のコンピュータで実施される方法。
【請求項7】
前記ゲートウェイは、ナノ秒のオーダーの前記参照クロックに同期される、請求項1に記載のコンピュータで実施される方法。
【請求項8】
前記ゲートウェイは、前記参照クロックからのナノ秒のオーダーの既知の偏差に同期されることが保証される、請求項1に記載のコンピュータで実施される方法。
【請求項9】
前記ゲートウェイを同期させることは、前記ゲートウェイのうちの少なくとも1つについて、
前記参照クロックに一致するように前記ゲートウェイのローカルクロックを補正することであって、前記ゲートウェイからの前記タイムスタンプが、前記絶対入力時間を示すことを含む、請求項1に記載のコンピュータで実施される方法。
【請求項10】
前記ゲートウェイを同期させることは、前記ゲートウェイのうちの少なくとも1つについて、
前記ゲートウェイのローカルクロックと前記参照クロックとの間のオフセットを判定することと、
前記オフセットに従って前記ゲートウェイからの前記タイムスタンプを補正することと、を含む、請求項1に記載のコンピュータで実施される方法。
【請求項11】
前記ペアのマシン間の前記オフセットを推定することは、コード化されたプローブの前記通過時間に基づいており、コード化されたプローブは、前記ペアのマシンの一方から前記ペアのマシンの他方に送信されるプローブのペアであり、前記ペアのプローブの前記送信タイムスタンプは、互いの所定の時間間隔内にあり、前記ペアのプローブの前記通過時間も、互いの所定の偏差内にある、請求項1に記載のコンピュータで実施される方法。
【請求項12】
前記ソフトウェアベースの同期処理は、
異なるペアのマシンについて、対の前記マシンの間で交換されたプローブの通過時間に基づいて、ペアの前記マシン間のドリフトを推定することと、
マシンのペアの間の推定ドリフトに基づいてマシンの絶対ドリフトを推定することと、をさらに含み、マシンの前記絶対ドリフトは前記参照クロックに基づいて定義される、請求項1に記載のコンピュータで実施される方法。
【請求項13】
前記ソフトウェアベースの同期処理は、前記参照クロックに一致するように、前記ゲートウェイのうちの少なくとも1つのローカルクロックの周波数を調整することをさらに含む、請求項1に記載のコンピュータで実施される方法。
【請求項14】
複数のソースから送信されたメッセージに対して時間順序操作を実行するためのコンピュータで実施される方法であって、前記方法は、
ネットワーク化されたマシンの2つ以上の領域の各々に対し、
複数のゲートウェイの各々を参照クロックと同期させるために、ソフトウェアベースの同期
処理を実行することであって、前記ゲートウェイは、ネットワークに接続されたマシンのその領域のペリメータにあり、複数の送信マシンからメッセージを受信するように接続されたマシンであることと、
前記ゲートウェイの1つを通じて前記領域に入るメッセージを受信することであって、前記ゲートウェイは前記メッセージにタイムスタンプを付けることと、
前記領域へ入る絶対時間に基づく順序で前記受信されたメッセージに時間順序付け操作を実行することであって、前記領域の1つに入る前記絶対時間は前記領域の参照クロックに対する相対時間であり、前記領域のゲートウェイから前記タイムスタンプに基づいて判定され、前記ソフトウェアベースの同期処理は、
ペアのマシンの間でプローブを交換することであって、前記マシンが交換するプローブが前記ゲートウェイを含むことと、
異なるペアのマシンについて、前記ペアのマシン間で交換されるプローブの通過時間に基づいて前記ペアのマシン間のオフセットを推定することと、前記通過時間が、前記プローブを送信する前記マシンからの送信タイムスタンプ及び前記プローブを受信する前記マシンからの受信タイムスタンプに基づいており、前記マシンのうちの1つが、前記参照クロックに基づいてタイムスタンプを生成することと、
少なくとも3つのマシンの異なるループについて、前記ループの周りのペアのマシンの間の前記推定されたオフセットの合計に基づいてループオフセット誤差を計算することと、
前記ループオフセット誤差に基づいてマシンの推定された絶対オフセットを調整することであって、前記マシンの前記絶対オフセットが前記参照クロックに対して定義されることと、
を含む、ことと、
を含む、コンピュータで実施される方法。
【請求項15】
前記領域の全てが、同じ前記参照クロックを使用する、請求項14に記載のコンピュータで実施される方法。
【請求項16】
前記領域の少なくとも2つが異なる参照クロックを使用する、請求項14に記載のコンピュータで実施される方法。
【請求項17】
前記領域の1つの前記ペリメータが、別の前記領域の前記ペリメータ内に完全に存在する、請求項14に記載のコンピュータで実施される方法。
【請求項18】
前記領域の1つの前記ペリメータが、別の前記領域の前記ペリメータ内に部分的に存在する、請求項14に記載のコンピュータで実施される方法。
【請求項19】
複数のソースから受信したメッセージに対して時間順序操作を実行するためのコンピュータシステムであって、前記コンピュータシステムは、
複数のゲートウェイを含むネットワーク化されたマシンの領域であって、各ゲートウェイは、ネットワーク化されたマシンの領域のペリメータにあるマシンであり、複数のソースからメッセージを受信するように接続される、ネットワーク化されたマシンの領域と、
前記ゲートウェイの各々を参照クロックと同期させるためにソフトウェアベースの同期処理を実行するコーディネータであって、前記ソースからのメッセージは、前記ゲートウェイを介して前記領域に入り、前記ゲートウェイは、前記入ったメッセージにタイムスタンプを付け、前記ソフトウェアベースの同期処理は、
ペアのマシンの間でプローブを交換することであって、前記マシンが交換するプローブが前記ゲートウェイを含むことと、
異なるペアのマシンについて、前記ペアのマシン間で交換されるプローブの通過時間に基づいて前記ペアのマシン間のオフセットを推定することと、前記通過時間が、前記プローブを送信する前記マシンからの送信タイムスタンプ及び前記プローブを受信する前記マシンからの受信タイムスタンプに基づいており、前記マシンのうちの1つが、前記参照クロックに基づいてタイムスタンプを生成することと、
少なくとも3つのマシンの異なるループについて、前記ループの周りのペアのマシンの間の前記推定されたオフセットの合計に基づいてループオフセット誤差を計算することと、
前記ループオフセット誤差に基づいてマシンの推定された絶対オフセットを調整することであって、前記マシンの前記絶対オフセットが前記参照クロックに対して定義されることと、
を含む、コーディネータと、
前記領域への絶対入力時間に基づいて、前記受信されたメッセージに対して前記時間順序操作を順番に実行するサブシステムであって、前記絶対入力時間は前記参照クロックに対して相対的であり、前記ゲートウェイからの前記タイムスタンプに基づいて判定される、サブシステムと、を備えるコンピュータシステム。
【請求項20】
ネットワーク化されたマシンの領域から複数の宛先へのメッセージのタイムトリガー配布を実行するためのコンピュータで実施される方法であって、前記方法は、
複数のゲートウェイのそれぞれを参照クロックと同期させるためにソフトウェアベースの同期処理を実行することであって、各ゲートウェイは、ネットワーク化されたマシンの前記領域のペリメータ上のマシンであり、複数の宛先にメッセージを送信するように接続され、前記ペリメータは、前記ペリメータに沿って受信された順番にメッセージを送信するゲートウェイの論理的な接続グループを定義することと、
前記ゲートウェイが、前記参照クロックに対する絶対時間に基づいた配布スケジュールに従って、ネットワーク化されたマシンの前記領域の外側の複数の宛先に配布するために、ネットワーク化されたマシンの前記領域内からメッセージを受信することであって、所与の配布の前に所与の時間ウィンドウのために前記メッセージをバッファリングすることであって、前記配布スケジュールは、前記ペリメータに沿った任意のゲートウェイで前記所与の時間ウィンドウ内に受信されたメッセージが、前記ペリメータに沿って受信された順序で送信されることを保証することと、
前記ゲートウェイが、前記受信されたメッセージの前記配布を実行することであって、各ゲートウェイは、前記参照クロックとの前記ゲートウェイの同期に基づいて絶対時間を判定することと、
を含み、前記領域の1つの前記ペリメータは、他の前記領域の前記ペリメータの内部に完全に存在する、コンピュータで実施される方法。
【請求項21】
前記配布スケジュールは、前記ゲートウェイの各々からの前記受信されたメッセージの同時配布を引き起こす、請求項20に記載のコンピュータで実施される方法。
【請求項22】
前記ゲートウェイはそれぞれ、前記配布スケジュールを含むコーディネータデバイスから命令を受信する、請求項20に記載のコンピュータで実施される方法。
【請求項23】
前記配布スケジュールによって示される送信時間に達するまで、前記ゲートウェイが前記受信されたメッセージをバッファリングする、請求項20に記載のコンピュータで実施される方法。
【請求項24】
前記受信されたメッセージは、前記受信されたメッセージの前記配布が、それらの配布期限前に到着したどのメッセージも見逃すことなく順番に実行され得るようにバッファリングされる、請求項23に記載のコンピュータで実施される方法。
【請求項25】
前記ゲートウェイは、前記ゲートウェイとそれらの宛先との間の既知のジッタに基づいて、前記配布スケジュールに追加のオフセットを適用する、請求項20に記載のコンピュータで実施される方法。
【請求項26】
前記ゲートウェイは、前記参照クロックのナノ秒のオーダー内に同期される、請求項20に記載のコンピュータで実施される方法。
【請求項27】
前記ゲートウェイは、前記参照クロックからの既知の時間偏差内に同期されることが保証される、請求項20に記載のコンピュータで実施される方法。
【請求項28】
前記ゲートウェイを同期させることは、前記ゲートウェイのうちの少なくとも1つについて、
前記参照クロックに一致するように前記ゲートウェイのローカルクロックを補正することであって、前記配布スケジュールは、前記配布のための前記参照クロックに対する時間を参照することを含む、請求項20に記載のコンピュータで実施される方法。
【請求項29】
前記ソフトウェアベースの同期処理は、
ペアのマシンの間でプローブを交換することであって、前記マシンが前記ゲートウェイを含むプローブを交換することと、
異なるペアのマシンについて、前記ペアのマシン間で交換されるプローブの通過時間に基づいて前記ペアのマシン間のオフセットを推定することであって、前記通過時間が、前記プローブを送信する前記マシンからの送信タイムスタンプ及び前記プローブを受信する前記マシンからの受信タイムスタンプに基づいており、前記マシンのうちの1つが、前記参照クロックに基づいてタイムスタンプを生成することと、
少なくとも3つのマシンの異なるループについて、ループオフセット誤差を計算することであって、前記ループの周りのマシンのペアの間の前記推定されたオフセットの合計として定義される前記ループオフセット誤差を計算することと、
前記ループオフセット誤差に基づいて前記マシンの推定された絶対オフセットを調整することであって、マシンの前記絶対オフセットは、前記参照クロックに対して定義されることと、を含む、請求項20に記載のコンピュータで実施される方法。
【請求項30】
前記ペアのマシン間の前記オフセットを推定することは、コード化されたプローブの前記通過時間に基づいており、コード化されたプローブは、前記ペアのマシンの一方から前記ペアのマシンの他方に送信されるプローブの対であり、前記対のプローブの前記送信タイムスタンプは、互いの所定の時間間隔内にあり、前記対のプローブの前記通過時間も、互いの予め設定された偏差内にある、請求項29に記載のコンピュータで実施される方法。
【請求項31】
前記ソフトウェアベースの同期処理は、
異なるマシンのペアについて、前記マシンのペアの間で交換されたプローブの通過時間に基づいて、前記マシンのペアの間のクロックドリフトを推定することと、
前記マシンのペアの間の前記推定されたクロックドリフトに基づいて前記マシンの絶対ドリフトを推定することであって、マシンの前記絶対ドリフトが前記参照クロックに関して定義されることと、をさらに含む、請求項29に記載のコンピュータで実施される方法。
【請求項32】
前記ソフトウェアベースの同期処理は、
前記参照クロックに一致するように、前記ゲートウェイのうちの少なくとも1つのローカルクロックの周波数を調整することをさらに含む、請求項31に記載のコンピュータで実施される方法。
【請求項33】
複数のソースから送信されたメッセージに対して時間順序操作を実行するためのコンピュータで実施される方法であって、前記方法は、
ネットワーク化された2つ以上のマシンのそれぞれについて、
複数のゲートウェイのそれぞれをその領域に固有の参照クロックと同期させるためにソフトウェアベースの同期処理を実行することであって、各ゲートウェイは、ネットワーク化されたマシンのその領域のペリメータ上にあり、複数の宛先にメッセージを送信するように接続されたマシンであり、前記ペリメータは、前記ペリメータに沿って受信された順番にメッセージを送信するゲートウェイの論理的な接続グループを定義することと、
前記複数の宛先のうちの1つまたは複数にアドレスが指定され、前記参照クロックに対する絶対時間に基づく配布スケジュールに従って前記ゲートウェイのうちの1つまたは複数を通して前記領域を出るメッセージを受信することと、
所与の配布の前に所与の時間ウィンドウのために前記メッセージをバッファリングすることであって、前記配布スケジュールは、前記ペリメータに沿った任意のゲートウェイで前記所与の時間ウィンドウ内に受信されたメッセージが、前記ペリメータに沿って受信された順序で送信されることを保証することと、
前記配布スケジュールに従って、1つまたは複数のゲートウェイによって受信されたメッセージの配布を実行することであって、各ゲートウェイは、そのゲートウェイの参照クロックとの同期に基づいて絶対時間を決定することと、
を含み、前記領域の1つの前記ペリメータは、前記領域の別の前記ペリメータの内部に完全に存在する、コンピュータで実施される方法。
【請求項34】
前記領域の全てが、同じ前記参照クロックを使用する、請求項33に記載のコンピュータで実施される方法。
【請求項35】
前記領域の少なくとも2つが、異なる参照クロックを使用する、請求項33に記載のコンピュータで実施される方法。
【請求項36】
前記異なる参照クロックは、前記領域の前記少なくとも2つのそれぞれについて異なる配布スケジュールをもたらす、請求項35に記載のコンピュータで実施される方法。
【請求項37】
前記領域の1つの前記ペリメータは、別の前記領域の前記ペリメータの内部に部分的に存在する、請求項33に記載のコンピュータで実施される方法。
【請求項38】
前記配布は、前記受信されたメッセージが前記ゲートウェイの各々でバッファリングされた後に起こる、請求項33に記載のコンピュータで実施される方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、複数のゲートウェイで受信されたメッセージが、メッセージのソースが同期されない場合があるにもかかわらず、時間ベースの順序で処理されることを保証することに関する。
【背景技術】
【0002】
ゲートウェイ等のマシン間のクロック同期精度への制限は、多くのアプリケーションにおいて実用的な制限を課す。たとえば、金融や電子商取引において、取引プラットフォームがゲートウェイで入札とオファーを受け取る順序で入札とオファーを一致させる必要があるため、クロックの同期が取引順序を判定するために重要である。入札及びオファーを送信またはルーティングするために使用されるマシンのクロックが同期されていない場合、入札及びオファーの順序が一致しない可能性があり、公平性の欠如につながる。金融取引所は、メッセージがほぼ同じ距離を移動し、したがってほぼ同じ通過時間を持つように、入札と提案のソースに対して等距離の位置に、メッセージを受信し、処理のために配列されるゲートウェイの配置を調整することによって、公平性の欠如の軽減を試みる。しかしながら、この較正にもかかわらず、メッセージは依然としてジッタのために順不同で配信され、公平性を維持するためにそのような較正された距離にゲートウェイを物理的に配置する必要があることによって、実用的な制約が課される。同様の問題は、メッセージがトレーディングプラットフォーム等の中央の場所から送信されるときにも発生し、前述の技術的な制限により、メッセージを他の当事者よりも先に一方に送信すると、先のメッセージの受信者に不公平な便宜が与えられる。
【0003】
同様の問題は、分散データベース、分散元帳(例えば、ブロックチェーン)、分散トランザクション追跡システム、計算またはネットワークの分散スナップショット、5Gモバイルネットワーク通信等の他のネットワーク化されたコンピュータシステムで発生する。これらのシステムでは、クロック同期の制限はジッタをもたらし、通信の偏向または非最適な処理をもたらす。
【図面の簡単な説明】
【0004】
本開示の実施形態は、添付の図面の実施例と併せて、以下の詳細な説明及び添付の特許請求の範囲からより容易に明らかになる他の利点及び特徴を有する。
【
図1】
図1は、メッセージ処理のためのパイプラインを表現する図である。
【
図2】
図2は、本開示の実施形態に関する機構のネットワークのグラフである。
【
図3】
図3は、本開示の実施形態に関するメッセージの時間配列された操作を実行するためのフロー図である。
【
図4】
図4は、本開示の実施形態に関するメッセージの時間トリガされた配布を実行するためのフロー図である。
【
図5A】
図5Aは、本開示の実施形態に関するネットワーク化されたマシンの2つ以上の領域を使用するコンピュータシステムのグラフである。
【
図5B】
図5Bは、本開示の実施形態に関するネットワーク化されたマシンの2つ以上の領域を使用するコンピュータシステムのグラフである。
【
図6】
図6は、本開示の一実施形態に関するゲートウェイのソフトウェアベースの同期を実行するためのコーディネータを含むネットワークのグラフである。
【
図7】
図7は、本開示の一実施形態に関するクロックオフセット及び/または周波数を補正するためのフローチャートである。
【
図8】
図8は、本開示の一実施形態に関するプローブレコード、及びプローブレコードから符号化されたプローブを識別する方法を示すデータ構造図である。
【
図9】
図9は、本開示の一実施形態に関するループ誤差の識別及び補正を図示するシステムのグラフである。
【
図10】
図10は、本開示の一実施形態に関するマシンのローカルクロック周波数を補正する制御システムのモデルのブロック図である。
【
図11】
図11は、本開示の一実施形態に関する適応フィルタバンクのブロック図である。
【発明を実施するための形態】
【0005】
図及び以下の説明は、例示のためのみの好ましい実施形態に関する。以下の説明から、本明細書に開示される構造、及び方法の代替的な実施形態は、特許請求されているものの原理から逸脱することなく、採用され得る実行可能な代替として容易に認識されることに留意されたい。
【0006】
異なるゲートウェイを通過するソースから到着するメッセージが、参照クロックに関連して判定されるように、異なるゲートウェイにおけるそれらのタイムスタンプに基づいて判定される順序で処理されることを保証するシステム及び方法が本明細書に開示される。ソースが参照クロックと同期していない場合も同様である。システム及び方法は、ソフトウェアベースであってもよく、したがって、この結果を達成するためにゲートウェイを物理的に較正する必要性を回避し、これは、高価であり、実用的ではなく、かつ不正確である。このように、メッセージのソースを参照クロックに同期させる必要なく、順番に処理されるため、公平性が達成される。そのような公平性を達成するために、ゲートウェイは、参照クロックのナノ秒のオーダー内にあり得る参照クロックの既知の時間偏差内に同期される。
【0007】
図1は、メッセージを処理するためのパイプラインの表現である。
図1に示すのは、それぞれが異なる機能を果たす様々なマシンである。
図1において、「N」の文字はノードである。ここで使用される「ノード」という用語は、メッセージが生成される、処理される、及び/または中継される、またはメッセージが目的地とされる任意の物理デバイスまたは仮想デバイスを指す。いくつかの実施形態では、ノードはマシンであってもよい。「マシン」という用語は、物理マシンまたは仮想マシン、サーバ、サーバブレード等のように、クロックを維持する、またはタイムスタンプを生成する任意のデバイスを指す。各マシンは、ローカルクロック(例えば、マシンのコンピュータ処理ユニット(CPU)に実装されるか、またはマシンのネットワークインターフェイスカード(NIC)等のマシンに動作可能に結合されるデバイスに実装される)を含む。
図1において、「S」の文字はソースノードを表す。ソースノードは、メッセージが発信されるノードである。ソースノードは、
図1の他のマシンを制御するエンティティとは異なるユーザ、企業、または他のそのようなエンティティの制御下にあり得る。用語メッセージは、ノード間で送信される任意の通信(例えば、単一のパケット、パケットの集合、及び/または単一のデータユニットまたはデータユニットの集合)を指す。なお、
図1を参照すると、「G」の文字はゲートウェイを表し、「0」の文字は時間順序動作を表す。「ゲートウェイ」という用語は、「時間順操作」という用語と同様に、以下の
図2を参照して詳細に定義される。オペレータノード104は、例えば、金融取引所、またはソースノードを制御しない別の中央エンティティによって制御され得る。パイプライン100は、ソースノード102から、様々なマシン101を通って、ゲートウェイ103へ、様々な他のノード101を通って、最後にメッセージに対して時間が順序付けられた動作を実行するオペレータノード104へのメッセージの例示的なフローを示す。マシンが全くないことを含む任意の数のマシンは、ソースノード102、ゲートウェイ103、及びオペレータノード104の間に配置されてもよい。さらに、図示されていないが、
図1に先行するソースノード102及び後続するノード104の破線は、さらなるノードが配置され得ることを示す。ソース102がメッセージを送信する前に、及び時間が順序付けられた動作が実行される前に、パイプライン100内で、ラインは単一の通信経路として描写されるが、これは例示的な便宜のためであり、
図1のブロック間に複数の経路が存在し得る。
【0008】
図2は、本開示の一実施形態に関する、マシンのネットワークのグラフである。ネットワーク200は、ソースノード210及びゲートウェイ220、ならびにコーディネータ230及びオペレータノード240を含む。図示されるように、オペレータノード240は、参照クロック245を含む。参照クロック245は、任意のマシン内にあってもよく、オペレータノード240の一部である必要はない。ネットワーク200は、
図1を参照して上述した追加のノードを含んでもよく、それらのノードは、
図2には描かれていない。ソースノード210は、時間が順序付けられた処理のために、ゲートウェイ220を通じてオペレータノード240にメッセージを送信する。ゲートウェイ220は、オペレータ240の参照クロック245に同期され、ゲートウェイ220によってソースノード210からのメッセージに適用されるタイムスタンプは、参照クロック245に関して絶対的であるようになる。一実施形態では、参照クロック245は、オペレータノード240以外のマシン内にある。ゲートウェイ220は、ソースノード210から受信したメッセージにタイムスタンプを適用し(例えば、各メッセージがゲートウェイ220によって受信された時間を示すため、メッセージがゲートウェイ220によって処理された時間を示すため、ゲートウェイ220からのメッセージの送信時間を示すため等)、次いで、メッセージをオペレータノード240に送信する。コーディネータ230は、ゲートウェイ220とオペレータノード240との間の同期を調整し、同期プロセスは、以下の
図6から
図11を参照してさらに詳細に説明される。オペレータノード240は、受信メッセージに対して時間が順序付けられた操作を実行する。例えば、まず、ゲートウェイのタイムスタンプに基づいてメッセージを並べ替え、次いで、時間が順序付けられたメッセージに対して動作を実行してもよい。時間が順序付けられた動作は、以下の
図3から
図4を参照してさらに詳細に定義及び説明される。
【0009】
ゲートウェイ220は、時間ペリメータ250を形成する。一実施形態では、時間ペリメータ250は、論理境界であり、時間ペリメータ250に沿ったゲートウェイは、参照クロック245に同期される。一実施形態において(例えば、金融交換シナリオにおいて)、時間ペリメータ250に沿ったまたは時間ペリメータ250内のマシン(すなわち、領域205内のマシン)は、参照クロック245に同期され得て、領域205の外側のマシンは、参照クロック245に同期され得る、または同期されない場合がある。一実施形態では、ソースノード210自体は、コーディネータ230によって参照クロック245に同期するように指示された場合、参照クロック245に同期され得る。
【0010】
図3は、本開示の一実施形態に関する、メッセージに時間順序付け動作を実行するためのフロー図である。
図3は、ソースアクティビティ、ゲートウェイアクティビティ、コーディネータアクティビティ、オペレータアクティビティの4つの列を含む。この例では、列に表示されるボックスは、対応するエンティティによって実行される。フロー300は、ソフトウェアベースの同期310を確立するサブプロセスから始まる。簡単に述べると、ソフトウェアベースの同期310は、コーディネータ(例えば、コーディネータ230)が、1つ以上のゲートウェイ(例えば、ゲートウェイ220)及び参照マシン(例えば、参照クロック245を含むオペレータノード240)を含むマシンのセット上の同期動作開始312aを開始することから始まる。ノード(ゲートウェイ及び参照マシンを含む)は、プローブ交換314をする。例示されるように、コーディネータは、交換されたプローブに基づいて、参照マシンの参照クロックに関して各マシンの絶対オフセットを推定し316、しかしながら、代替の実施形態では、ゲートウェイ自体が絶対オフセットを推定し得る。プローブの交換、及び絶対オフセットの推定を含むソフトウェアベースの同期は、以下の
図6から
図11に関してさらに詳細に説明される。ソフトウェアベースの同期310の終了時に、ゲートウェイ(例えば、ゲートウェイ320)は、参照クロックに同期される。
【0011】
データフロー300は、時間同期ゲートウェイを介してメッセージを受信する320ためのサブプロセスを確立するサブプロセスに進む。ソースノード(例えば、ソースノード210)は、メッセージを時間ペリメータ上のゲートウェイに送信する321。ゲートウェイは、例えば受信時に、メッセージを受信し322、メッセージにタイムスタンプを付ける324。したがって、ゲートウェイタイムスタンプは、各メッセージが時間ペリメータを横切る時間を確立する。時間ペリメータのゲートウェイが参照クロックに同期されるため、タイムスタンプは、メッセージが時間ペリメータの異なるゲートウェイに到着した場合でも、コーディネータ及び/またはオペレータが、所与の参照クロックに従って、メッセージが時間ペリメータに到着した時刻を確実に判定することを可能にする。タイムスタンプが付けられたメッセージはメッセージに時間順序付け処理のためにオペレータ(例えば、オペレータノード240)に送信される。
【0012】
タイムスタンプが付けられたメッセージがオペレータに送信された後、データフロー300は、メッセージに対して時間順序付け動作330を実行するサブプロセスを続ける。時間順序付け動作という用語は、メッセージに対して実行される動作を指し、メッセージは、ゲートウェイタイムスタンプに基づく順序で処理される。1つのアプローチでは、メッセージは順不同でオペレータに到着し得るため、オペレータは、メッセージが受信されるとタイムスタンプが付けられたメッセージをバッファする332。一実施形態では、メッセージは、バッファが満杯になるまでバッファリングされ、そのとき、オペレータは、タイムスタンプが付けられたメッセージを時間順序付ける334。代替的に、メッセージは、バッファに含まれる第1のメッセージが受信されてから所定の時間が経過するまでバッファリングされるか、または所定の期間の終わりまでバッファリングされ、その時点でオペレータは、タイムスタンプが付けられたメッセージを時間順序付ける334。メッセージのバッファリングは、所与の期間内に受信されたすべてのメッセージが、ジッタの影響を受けても、時間の順序付け(例えば、再順序付け)プロセスにおいて時間の順序付けをされ、見逃されないことを保証する。メッセージに時間順序付けすること334は、メッセージが領域205内で受信された順序でメッセージを順序付けることを含む。メッセージは、バッファ内でメッセージを物理的に並べ替えることによって、メッセージ内またはメッセージのヘッダ内でシーケンス番号を付加することによって、時間順序に対応するメッセージの識別子の順序付きリストを伴うデータ構造を生成することによって、またはメッセージの順序を確立する任意の他の手段を使用することによって、時間の順序付けがされてもよい。
【0013】
メッセージの時間順序付けは、ゲートウェイタイムスタンプに基づく任意の順序であってもよい。例えば、メッセージは、ペリメータにおけるメッセージの絶対時間入力の時系列順に処理されてもよい(例えば、ペリメータにおける入力時間に関して、先入れ先出しまたは後入れ先出し)。別の例として、メッセージは、メッセージの絶対時間エントリに加えて、メッセージの重要性、サービスの階層、サービスの質等の絶対時間エントリを重み付けする要因等のパラメータによって順序付けられ得る。
【0014】
時間順序付けは、メッセージが領域に入ったゲートウェイに基づいてもよい。一例として、いくつかのゲートウェイは、他のゲートウェイよりも高い重要性を割り当てられてもよく、オペレータノード240は、これらの重要性の高いゲートウェイからのメッセージを優先する重要性に基づいて、これらの後者のメッセージが他のメッセージの絶対時間エントリよりも遅い絶対時間エントリを有する場合でも、他のメッセージよりも早く、重要性の高いゲートウェイでのメッセージを優先させるような方法で絶対時間エントリを重み付けしてもよい。
【0015】
一実施形態では、所与のゲートウェイで受信されたメッセージは、それらが発信されたソース、及びジッタまたは他のネットワークによってタイムスタンプが付けられ得る。条件は、ゲートウェイタイムスタンプを、ソースがメッセージにタイムスタンプを付けた順序と矛盾させ得る。そのようなジッタは、ソースが互いに同期されるアウトオブオーダー処理を引き起こし得る。そのようなジッタまたは他のネットワークの問題によって引き起こされる問題を排除するために、ゲートウェイ自体は、ソースから定期的にメッセージを受信し、それらのソースタイムスタンプに基づいてそれらを順序付け、次いで、それらがゲートウェイのタイムスタンプに関係なく、それらのソースから出発した順序で処理されるようにシグナリングを含むバッファを有し得る。例えば、ゲートウェイは、そのゲートウェイのタイムスタンプを修正して順序を維持してもよく、またはメッセージを同じタイムスタンプを含む単一のメッセージに集約してもよく、その結果、メッセージは、それらのソース順序を維持しながら、ゲートウェイのタイムスタンプに従って他のゲートウェイからのメッセージに対して順番にオペレータノード240によって処理される。さらに、階層的なペリメータが確立されてもよく、そこでメッセージは、それらが横切る各ペリメータでタイムスタンプが付けられる。オペレータノード240は、(例えば、階層内のペリメータをランク付けするデータベースエントリに基づいて)階層内の各タイムスタンプがどこにランク付けされるかを判定してもよく、階層に従ってメッセージを処理してもよい。これは、
図5A及び
図5Bに関して以下でさらに詳細に議論される。
【0016】
一実施形態では、メッセージは、時間ペリメータを通過していないオペレータノード240によって受信され、したがって、同期されたタイムスタンプを含まない。そのようなメッセージに遭遇したとき、これらのメッセージは、臨機応変に(例えば、オペレータノード240がメッセージにタイムスタンプを付け、ゲートウェイ220から受信したメッセージにタイムスタンプを付け、周辺タイムスタンプに加えて、オペレータノード240によって適用されたタイムスタンプに基づいてメッセージを順序付けることによって)、オペレータノード240によって時間順序付けされてもよい。
【0017】
メッセージが時間順序付けされた後、オペレータは、時間順序付けされた操作を実行する336。データフロー300及び結果として生じる時間順序操作の例は、以下の通りである。一例として、ゲートウェイが金融交換の一部であり、メッセージが複数の市場参加者が異なるゲートウェイを通じて注文を発注するソースから受信された金融注文である場合、時間順序の操作は、時間的な順序で金融注文を解決するためであってもよく、それによって公平性を確保する。別の例として、ゲートウェイがマルチプレイヤーリアルタイムネットワークゲーム内の情報を受信するための導管であり、メッセージが異なるゲートウェイでゲームの複数のプレイヤーから受信されたゲームコマンドである場合、時間順序付け動作は、ゲームコマンドの時間的順序に従ってゲームを進行させることを含んでもよい。公平性は、例えば、ファーストパーソンシューティングゲームにおいて、参照クロックによれば、ターゲットに対して最初にショットを撮影したユーザがそのショットにクレジットされることで確保される。さらに別の例として、メッセージが、複数のコントローラによって、ランダムな遅延を有するネットワークを介してロボットに送信されるコマンドである場合(例えば、製造環境において)、時間順序操作は、指令がロボットに到着した順序にかかわらず、制御装置によって時間ペリメータに発行された順序でコマンドに作用することを確保してもよい。
【0018】
時間順序付けの別の態様では、
図4は、本開示の一実施形態による、メッセージの時間トリガ配布を実行するためのフロー図である。
図4は、ソースアクティビティ、ゲートウェイアクティビティ、コーディネータアクティビティ、及びオペレータアクティビティの4つの列を含む。この例では、列に表示されるボックスは、対応するエンティティによって実行される。フロー400は、ソフトウェアベースの同期を確立するサブプロセス410から始まる。サブプロセス310と同様に、ソフトウェアベースの同期410は、コーディネータ(例えば、コーディネータ230)が、1つまたは複数のゲートウェイ(例えばゲートウェイ220)及び参照マシン(例えば参照クロック245を含むオペレータノード240)を含むセットのマシン上で同期動作開始412をすることから始まる。そのマシン(1つ以上のゲートウェイ及び参照マシンを含む)は、領域205内のマシンとプローブ414を交換する。例示されるように、コーディネータは、交換されたプローブに基づいて参照マシンの参照クロックに関して絶対オフセットを推定し416、しかしながら、代替の実施形態では、ゲートウェイ自体が絶対オフセットを推定してもよい。プローブの交換、及び絶対オフセットの推定を含むソフトウェアベースの同期は、以下の
図6から
図11にて詳細に説明される。ソフトウェアベースの同期410の終了時に、ゲートウェイ(例えば、ゲートウェイ220)は、参照クロックに同期される。
【0019】
フロー400のサブプロセス420は、オペレータ(例えば、オペレータ240)からゲートウェイ(例えば、ゲートウェイ220)にメッセージを送信する421。例えば、メッセージは、金融取引所における売/買注文(いわゆる「注文簿情報」)であってもよく、市場参加者が地理的に異なる場所にいる場合でも、すべての売/買注文は同時に市場参加者に配布されなければならない。別の実施形態では、オペレータからのメッセージは、時間順序情報のパフォーマンス336とは独立した機密情報であってもよい。いずれの場合も、メッセージは、一般に、情報の使用に関して公衆のどのメンバーも不公平な利点を有しないように、公平性を達成するために、同時に公衆(例えば、ソースノード210)に公開されるべきタイプである。送信されたメッセージは、さらなる配布のために複数のゲートウェイに送信された同じ元のメッセージのコピーであってもよい。
【0020】
メッセージを受信した後422、時間順序分布が実行されるサブプロセス430は、フロー400の一部として発生する。各バッファのゲートウェイ432は、配布のためのメッセージを提供する。メッセージがバッファリングされた後、ゲートウェイは、メッセージを宛先に配布する434。メッセージの配布434は、各ゲートウェイで同時に発生し、宛先が(宛先に向かう途中でメッセージによって遭遇されるジッタに応じて)同時にメッセージを受信することを確保する。メッセージの同時配信434を確保するために、ゲートウェイは、サブプロセス410で推定されるように、そのゲートウェイの推定絶対オフセットを使用して調整された各ゲートウェイのローカルクロックから判定された時間にメッセージを配信するように命令される。ネットワーク条件またはネットワークリンクの物理的制限が特定の宛先へのメッセージを遅延させることが知られている実施形態では、ゲートウェイは、それらの特定の宛先へのメッセージが配布されるタイミングに追加のオフセットを適用することによって、この遅延を計算してもよい。別の実施形態では、メッセージは、単一の市場参加者が実行のために異なる金融取引所に送られ、そこで同時に異なる金融取引所で実行のために売/買注文を提出しなければならない。
【0021】
図5Aから
図5Bは、本開示の実施形態に関連する、ネットワークマシンの2つ以上の領域を使用するコンピュータシステムのグラフである。1つの領域205を含む
図2と区別されるように、
図5Aから
図5Bは、複数の領域を含み、各領域は、異なる時間ペリメータによって画定される。ゲートウェイ520Aは共に、領域505Aの境界を画定する時間ペリメータ550Aを形成する。ゲートウェイ520Bは共に、領域505Bの境界を画定する時間周辺550Bを形成する。オペレータノード540による処理のために束ねられたメッセージは、最初に時間ペリメータ550Aを横切り、次いで時間ペリメータ550Bを横切る。図示されるように、オペレータ540は、ゲートウェイ520A及び520Bの全てが同期される参照クロック545を含む。しかしながら、領域505aは、参照クロック545に同期されることに加えて、ゲートウェイ520aのいずれかの参照クロック等の異なる参照クロックに同期されてもよい。そのようなシナリオでは、ゲートウェイ520Aは、2つの参照クロック、すなわち、参照クロック545、及びゲートウェイ520Aのうちの1つの参照クロックに関して推定された絶対的なオフセットを有してもよい。そのようなシナリオでは、ソフトウェアベースの同期310及び410は、1つまたは両方の参照クロックに適用されてもよい。領域505A及び505Bは、異なるエンティティ(例えば、異なる金融取引所または異なるビデオゲームサーバ)の制御下にあってもよい。
【0022】
一実施形態において、ペリメータ550A及び550Bは、階層的に編成されてもよく、ここで、ペリメータの1つは、メッセージを時間順序付ける方法を判定する上で、他方よりも高い優先順位を有することがオペレータノード540に知られている。例えば、ペリメータ550Aが階層内でより高い場合、ペリメータ550A及び550Bの両方からのタイムスタンプを有するメッセージは、ペリメータ550Aからのタイムスタンプに従って処理される。しかしながら、エンティティ550Aからのタイムスタンプが同じである場合、または互いに閾値距離内(例えば、数ナノ秒等の誤差の余裕によって定義される距離)である場合、周囲550Bで適用されるタイムスタンプは、オペレータノード540のタイブレーカとして信頼されて、メッセージをどのように時間順序付けるかを判定してもよい。
【0023】
図5Bは、1つのペリメータが別のペリメータと部分的に重複する例示的な実施形態を示す。図示されるように、領域515Aを形成するペリメータ552Aは、領域515Bを形成する周辺552Bと部分的に重なり、共有領域515Cを形成する。ゲートウェイ520Bは共に、領域515Aの境界を画定する時間ペリメータ552Aを形成する。ゲートウェイ521Bは共に、領域515Bを画定する時間ペリメータ552Bを形成する。部分的な重複は、ゲートウェイ522Bがペリメータ550B及び551Bの両方の一部であるために発生する。領域515A及び515Bが重複する場合、共有領域515Cが形成される。ゲートウェイ522Bは、そのようなシナリオにおいて、参照クロック545B及び546B等の複数の参照クロックに同期されてもよい。一実施形態では、共有領域515C内の他のマシンは、領域515A及び領域515Bの参照クロック、すなわち参照クロック545B及び546Bに関して推定された絶対的なオフセットを有してもよい。そのようなシナリオでは、ソフトウェアベースの同期310及び410は、共有領域515C内のマシンについての参照クロック545B及び546Bの一方または両方に適用されてもよい。領域515A及び515Bは、異なるエンティティ(例えば、異なる金融取引所または異なるビデオゲームサーバ)の制御下にあってもよい。
図5Aを参照して上述したように、共有領域515Cのペリメータで受信されたパケットの時間順序付けの階層的処理が実行されてもよい。
【0024】
図6から
図11は、一実施形態に関するソフトウェアベースの同期プロセスを示す。
図6は、本開示の実施形態を実行するためのコーディネータを含むネットワークのグラフである。ネットワーク600は、
図2のネットワーク200の異なる実施態様を例示し、同様の参照符号及び用語は、これらの図及び他の図にわたって同じ重みの記述を担う。ネットワーク600は、グラフのノードであるマシン610を含む。マシン610は、
図2のゲートウェイ220等のゲートウェイであってもよい。描写されるように、ネットワーク600はメッシュネットワークであり、各マシン610は、1つまたは複数のリンク(明確にするためにいくつかのリンクは省略される)によって互いにリンクされる。しかしながら、ネットワーク600は、任意の他のタイプのネットワークであってもよい。例えば、ネットワーク600は、マシンがワイヤ上で直列に接続されるネットワークであってもよく、または任意の他の構成であってもよい。ネットワークは、複数の物理領域(例えば、ニューヨークからサンフランシスコ)にわたる大規模ネットワーク、または単一のサーバブレード内のネットワーク等の小規模ネットワークであってもよい。一実施形態において、ネットワーク600は、1つ以上のプリント回路基板上のクロックのネットワークであってもよい。
【0025】
任意のペアのマシン間の通信リンクは、グラフ内のノード間のエッジ620として表される。各エッジ620は、典型的には、任意の2つのマシン610間の複数の経路を表す。例えば、ネットワーク600は、示されるマシン610以外の多くの追加のノードを含んでもよく、その結果、任意のペアのマシン610間の異なるノードを通る複数の異なる経路が存在してもよい。
【0026】
ネットワーク600は、コーディネータ630及び参照クロック640をさらに含む。この例では、コーディネータ630は、
図8に関して以下でより詳細に説明されるように、他のマシン610をプローブすることによってネットワーク観測を取得するようにマシン610に命令する。コーディネータ630は、
図8に関して以下でさらに詳細に説明されるように、それらのネットワーク観測の記録を格納してもよく、または格納させてもよい。コーディネータ630は、さらに、制御信号をマシン610に送信してもよい。ここで使用される制御信号という用語は、マシンのローカルクロックの周波数が指定された量で調整される(したがって、ローカルクロックのドリフトを補正する)ことを示す信号を指す場合があり、また、マシンのローカルクロックによって指示された時間が指定された量で調整される(したがって、ローカルクロックのオフセットを補正する)ことを示す信号を指す場合がある。
【0027】
一実施形態では、コーディネータ630は、マシンハウジングコーディネータ630内またはネットワーク600の1つ以上のマシン内のいずれかに、ネットワーク600のトポロジーをマッピングするグラフを格納する。グラフは、ネットワーク600のマシン間の接続をマッピングするデータ構造を含んでもよい。例えば、グラフは、マシン間の直接接続(例えば、物理的または論理的に互いに次のホップであるマシン)、ならびにマシン間の間接接続(例えば、プローブ等の通信のために取ることができる各マルチホップパス)の両方をマッピングしてもよい。グラフはさらに、グラフ内の各エッジに対応するネットワーク観測値(例えば、エッジを横切ったプローブのプローブトランジット時間を示す、及び/または
図8に示される情報等の追加情報)を含んでもよい。
【0028】
マシンのうちの1つは、参照クロック640を含む。参照クロック640は、ネットワーク600のマシン内のクロックが同期されるクロックである。一実施形態では、参照クロック640は、ドリフトの対象ではない高度に較正されたクロックであり、ドリフトは、同期される他のマシンとは異なるマシン610に含まれる。別の実施形態では、参照クロック640は、原子クロックまたはいくつかの他の非常に正確なソースクロックによって判定され得るように、「絶対時間」に正確である高度に調整されたクロックであるかどうかに関係なく、他のマシン610のマスター参照として機能するマシン610に既に存在する既製のローカルクロックであってもよい。そのようなシナリオにおいて、コーディネータ630は、どのマシン610が任意にマスター参照として作用するかを選択してもよく、または管理者からの入力に基づいて参照マシンを割り当ててもよい。参照クロック640が「絶対時間」に対して正確である実施形態では、参照クロックは、グローバルポジショニングシステム(GPS)クロック、精密タイムプロトコル(PTP)グランドマスタークロック、原子クロック等の時間源であってもよい。
図10から
図11に関してより詳細に説明されるように、コーディネータ630は、制御信号を較正するときに参照クロック640を使用してもよい。参照クロック640に基づいて周波数及び/またはオフセットに対する信号補正をすることによって、コーディネータ630は、マシン610のローカルクロックを参照クロック640に高精度に同期させる。
【0029】
図6において、1つの参照クロック640のみが示されるが、一実施形態では、複数の参照クロック640が存在してもよい(例えば、
図5A及び
図5Bを参照して説明されるように)。例えば、追加の参照クロックは、参照クロックまたはそれらを収容するマシンの障害の場合の冗長性のために使用されてもよい。別の例として、マシン610は、複数のグループまたは領域(例えば、
図5A及び
図5Bを参照して説明されるように)(例えば、ネットワーク100の管理者によって適用される設定に基づいて)に分割されてもよい。例えば、ネットワーク600は、マシン610を、それぞれがパフォーマンスまたは実装を改善し得るマシン610の所定の数またはパーセンテージを有するグループに分割するように構成されてもよい。各グループ内において、1台のマシンが参照として指名されてもよく、そのマシンのクロックが残りのマシンの参照クロックとして使用される。各グループは、1つのグループを参照グループとして指名してもよいため、参照グループの参照クロックがすべてのグループの参照として機能することになる。参照クロック及びグループは、ここ記載されるクロック指名と一致して自動的に指名されてもよく、またはネットワーク管理者によって入力されてもよい。例として、ネットワークが5000台のマシンを含み、管理者がネットワークをプログラムして、各々が100台のマシンを保持するグループにマシンを分割する場合(例えば、100台のマシンを指定することに基づいて、またはパーセンテージを指定することによって)、50個のマシンのグループがあり、各々が100台のマシンを含む。100台のマシンのうちの1台は参照マシンとなり、100台のマシンのうちの他の99台は参照マシンの時計と同期する。さらに、50個のグループのうちの1つは参照グループであり、他の49個のグループは参照グループに同期する。
【0030】
コーディネータ630は、スタンドアロンサーバ内に実装されてもよく、マシン610のうちの1つまたは複数に実装されてもよく、またはその機能を2つ以上のマシン630及び/またはスタンドアロンサーバにわたって分散させてもよい。コーディネータ630は、ネットワーク600内のリンク620を介して、またはネットワーク600の外側のマシンまたはサーバハウジングコーディネータ630へのリンクを介してアクセス可能であってもよい。参照クロック640は、コーディネータ630内に実装されてもよく、またはマシン610、ネットワーク600内のスタンドアロンサーバ、またはネットワーク600外のサーバもしくはマシンのいずれかに別個のエンティティとして実装されてもよい。
【0031】
図7は、本開示の一実施形態に関する、クロック周波数及び/またはオフセットを補正するためのデータフロー図である。例えば、データフロー700の一部または全ては、ソフトウェアベースの同期310及び/または410を達成するために使用されてもよい。
図7の左側の列は、クロック周波数(すなわち、ドリフト)及び/またはオフセットを補正することによって、高精度のクロック同期を達成するためのコーディネータ(例えば、コーディネータ630)のアクティビティを説明し、右側の列は、マシン(例えば、マシン610)のアクティビティを説明する。
図7は、3つのフェイズを含むと考えることができ、すなわち、ネットワーク観測がマシンにネットワーク(例えば、ネットワーク600)の他のマシンをプローブさせることによって行われる第1のフェイズ、オフセット及びドリフトを推定するためにネットワーク観測が使用される第2のフェイズ、及びマシン間の高精度なクロック同期を達成するために周波数及び/またはオフセットが補償/補正される第3のフェイズを含む。
【0032】
第1のフェイズの一部として、データフロー600は、コーディネータ(例えば、コーディネータ630)がペアのマシンを割り当てる702ことから始まる。ここで使用されるペアの用語は、ネットワーク観測を収集する目的でプローブを互いに送信するマシンを指す。ここで使用されるとき、ネットワーク観測という用語は、ネットワークの観測可能な品質(例えば、以下で定義されるネットワーク動作の効果、キューイング遅延、観測可能なドリフト、オフセット等)を指す場合がある。プローブの用語は、ここで使用されるとき、あるマシンから別のマシンに送信される電子通信を指し、電子通信は、送信マシンからの送信時、及び受信マシンでの受信時にタイムスタンプが付けられる。タイムスタンプは、送受信マシンのそれぞれのCPU及び/または送受信マシンの一部である、または送受信マシンに動作可能に結合されるそれぞれのNIC等のタイムスタンプを適用するように構成されたマシンの任意の構成要素によって適用されてもよい。単一のマシンは通常、複数の他のマシンとペアになっている。ペアのマシンを割り当てるとき、コーディネータは、マシンをいくつかのマシンとペアに割り当てることができ、その数はネットワーク内のすべてのマシンよりも少ない。一実施形態では、マシンの数及びペアリングは、ネットワーク条件(例えば、混雑、待ち時間等)に基づいて事前定義されてもよく、または動的に変更されてもよい。マシンは、ランダムに、または決定論的アルゴリズムを通じて選択されてもよい。
【0033】
データフロー700は、コーディネータ630がペアになったマシンに互いにプローブを送信する704ように指示することによって進行する。プローブ送信から収集されたネットワーク観測は、プローブレコードを収集する706。ここで使用されるプローブレコードの用語は、送信マシン及び受信マシンの識別、送信タイムスタンプ、受信タイムスタンプ等の、プローブ送信から取得されたネットワーク観測を含むデータ構造を指す場合がある。プローブの通過時間は、送信タイムスタンプ及び受信タイムスタンプに基づいて判定されてもよい。プローブレコードは、
図8に関して以下でさらに詳細に説明される。ここで説明される実施形態は、コーディネータがプローブレコードを収集することを示しているが、一実施形態では、マシンの一部またはすべては、それぞれ、それらに送信されるプローブまたはそれらから送信されるプローブに関するプローブレコードを収集してもよく、それ自体がプローブレコードに対する処理を実行してもよい。
【0034】
プローブレコードが収集された後、コーディネータ(例えば、コーディネータ630)は、収集されたプローブレコードを使用してマシン(例えば、マシン610)のオフセット及び/またはドリフトを推定する第2のフェイズに入る。この例では、正確な推定を達成するために、コーディネータは、最初にプローブレコードをフィルタリングして708、符号化されたプローブを識別する。ここで使用されるように、符号化プローブという用語は、プローブのキューイングから生じる遅延等、ノイズの影響を受けないプローブレコードに対応するプローブを指す。コーディネータが符号化されたプローブを識別する1つの方法は、
図8に関してさらに詳細に説明される。符号化プローブに対応するプローブレコードのサブセットは、符号化プローブレコードと称されてもよい。所与のマシンでプローブレコードが収集される実施形態では、その所与のマシンは、その所与のマシンによって収集されるプローブレコードのフィルタリング708を実行してもよい。
【0035】
データフロー700は、分類子を符号化されたプローブレコードに適用すること710によって続く。分類子は、監督学習を通じて訓練された機械学習モデルであってもよい。分類子の例は、サポートベクトルマシン(”SVM”)である。コーディネータは、符号化されたプローブデータ(すなわち、通過時間のサンプル)から導出された上限点及び下限点を、ある期間にわたって2つのペアになったマシンから入力してもよい。分類子の出力は、勾配とインターセプトを伴う通過時間データに線形適合する。次いで、データフロー700は、コーディネータがペアのマシンの間のドリフトを推定する712とともに続く。一実施形態では、コーディネータは、ドリフトを、線形適合の傾き(例えば、通過時間の変化率の推定)と等価であるか、またはその関数であると推定する。コーディネータはまた、線形フィットのインターセプトを使用してオフセットを推定してもよい。オフセットを判定/推定することは、開示された場所でドリフトのために行うのと同様の方法で実行されてもよい。所与のマシンでプローブレコードが収集される実施形態では、その所与のマシンは、その所与のマシンによって収集されるプローブレコードに分類を適用し710、及びペアのマシンの間のドリフトの推定712を実行してもよい。
【0036】
ドリフトの推定は、符号化されたプローブがキューイング遅延に悩まされなかったが、符号化されたプローブがネットワーク動作の影響に悩まされる可能性があるため、完全に正確ではない場合がある。ネットワーク動作の効果は、ここで使用されるとき、ネットワークの構成要素によって引き起こされるノイズを指す場合がある。例えば、2つのペアのマシン間のリンクまたはゲートウェイは、ドリフト推定に影響を与えるレイテンシまたはジッタを導入し得る。一実施形態では、コーディネータは、3つ以上のマシンにわたる周波数ドリフト推定に基づくネットワーク効果を使用する714。以下、
図9に関して、ネットワーク効果を使用する714ための更なる詳細について説明する。
【0037】
コーディネータは、例えば、ネットワーク動作の効果に基づいて推定されたドリフトにフィルタを適用することによって、または推定されたドリフト及びネットワーク動作の効果を絶対ドリフトである機械学習モデルに供給することによって、マシンのローカルクロックの制御ループに観測を送信する716。ここで、「絶対」ドリフトまたはオフセットは参照クロックに対して相対的である。制御ループの詳細とコーディネータ推定絶対ドリフトは、
図10から
図11に関して以下でさらに詳細に説明される。絶対ドリフトを推定した後、コーディネータは、リアルタイムまたはほぼリアルタイムでクロック周波数を補正するかどうかを判定し得る(718)。絶対オフセットもまた、補正されてもよく718、またはコーディネータは、オフライン補正を実行してもよい720。リアルタイムで補正するかオフラインで補正するかを判定する方法は、
図10から
図11を参照して以下でさらに説明される。
【0038】
クロック周波数及び/またはオフセットを補正することに加えて、クロック周波数及び/またはオフセットを補正した後に発生した任意の新しいオフセット及びドリフトが連続的に補正されることを保証するために、プロセス700は、各ペアのマシンに対して周期的に再帰する。例えば、プロセス700は、ネットワーク(例えば、ネットワーク100)全体での同期が維持されることを保証するために、周期的に(例えば、2秒ごとに)発生し得る。更新された同期は、ソフトウェアベースの同期310及び410の各インスタンスで使用される。
【0039】
図6の議論に戻り、データフロー200のアクティビティ202から206におけるプローブレコードの作成をさらに詳細に説明する議論がここに現れる。所与のマシンにペアリングされるマシン600の数は、管理者によって固定される数であってもよい。一実施形態において、コーディネータ630は、ネットワーク条件に基づいてプロービングのために所与のマシンごとにペアリングされるマシンの数を動的に調整してもよい。例えば、ネットワーク接続性が閾値品質を上回る場合(例えば、低いレイテンシの量に基づいて)、コーディネータ630は、ネットワーク接続性の品質に比例してプローブするためにペアリングされるマシンの数を減らしてもよい。一方、ネットワーク接続品質が悪化すると、コーディネータ630は、所与のマシンごとにプロービングのためにペアリングされるマシンの数を増加させてもよい。ペアリングされるマシンの数は、また、ネットワークサイズに基づいて変化してもよい。
【0040】
どのマシンが所与のマシンにペアリングされるべきかを選択するとき、コーディネータ630は、所与のマシンがペアリングされるべき各マシンをランダムに判定してもよい。一実施形態では、コーディネータ630は、計算の容易さ、精度(例えば、ネットワークグラフによって指示されるようなクロック同期精度)、及び各マシン610にわたる負荷分散に基づいて、ペアリングを非ランダムに判定する。コーディネータ630は、管理者がペアリングを選択する、または特定のペアリングを選択させるパラメータを選択することによって、設計の選択に基づいてペアリングを慎重に決定してもよい。さらに、コーディネータ630は、多様性のレベルが低いマシンのためのいくつかのペアリングと比較して、多様性のレベルが高いマシンについてより多くのペアリングが発生するように指示し得る。ここで使用する場合、「多様性」という用語は、プローブがネットワーク600内を横断して別のマシンからマシンに到達する多数の経路を指してよく、経路の数が多いほど多様性が高い。
【0041】
プローブは、1つ以上のパラメータに基づいて変化し得る特定の頻度または期間で生じ得ることに留意されたい。例えば、コーディネータ630は、多様性が高いマシンに、多様性が低いマシンと比較して、それぞれ異なる経路をたどって、多数のプローブを1つまたは複数のペアになったマシンに伝送するように命令してもよく、これは、より少ない数のプローブを伝送してもよい。したがって、コーディネータ630は、多様性に比例して変化する周波数でマシンをペアマシンに送信するようにマシンに命令してもよい。
【0042】
コーディネータ(例えば、コーディネータ630)は、所与のマシン610が様々な他のマシン610とペアになっていることを判定し702、それらの同じマシンからプローブを受信する。「交換」という用語は、ここでは、ペアになったマシンが互いにプローブを送受信するシナリオを説明するために使用される。ここで使用されるとき、交換という用語は、マシンが同時にまたは互いに応答して送信されるという要件等のタイミングの態様を意味しない。
【0043】
一実施形態では、ネットワーク600は、ブロックチェーンネットワークを容易にするシステム等の信頼できないシステムであってもよい。そのような実施形態では、マシン610のいくつかは、オフセット及び/またはドリフトを判定するために使用されるデータを不正に振る舞い、誤って表示する可能性がある。そのようなシナリオでは、上記で論じたプローブに加えて、
図8に関して、コーディネータ630は、マシン610に、より多くのマシン(例えば、ネットワーク600のマシンの3分の1)を低周波数で(例えば、10回ごとに1回、または通常のコースで送信される100個、または1000個のプローブ)プローブするように指示してもよい。コーディネータ630は、より多くの数のマシンから取得されたデータが、通常の経路でプローブされるより少ない数のマシンと一致するかどうか(例えば、ドリフト及び/またはオフセットの閾値許容量内)を判定してよく、不一致のプローブデータが検出された場合、管理者に警告するか、または是正措置を講じてよい。
【0044】
図8は、本開示の一実施形態による、プローブレコード、及びプローブレコードから符号化されたプローブを識別する方法を例示するデータ構造図である。データ構造800は、複数のプローブに関する例示的なプローブレコードを含む。データ構造800は、単一の送信マシン「A」(例えば、ネットワーク600のマシン610である)及び単一の受信マシン「B」のプローブレコードを含むように描写されるが、任意の数の送信または受信マシン、データ構造800内に記憶されたプローブレコードを有してもよい。列810は、プローブの識別子を含み、各識別子1から6は、プローブのプローブレコードに対応する。列820は、どのマシンが所与のプローブレコードで示されたプローブであるかを示す。図示されるように、列820は、「A」とラベル付けされた送信機が各プローブを送信することを示し、しかしながら、これは単なる例示であり、様々な送信機が列820で識別されてもよい。
【0045】
列830は、どのマシンが所与のプローブレコードによって示されるプローブを受信したかを示す。図示されるように、列830は、「B」とラベル付けされた受信マシンが各プローブを受信したことを示すが、これは単なる例示であり、様々な受信マシンが列830で識別されてもよい。列840は、プローブの送信時間を示す。送信時間は、送信マシン自体(例えば、ネットワーク600の送信マシン「A」のCPU)、または送信マシンに動作可能に結合されたインターフェースもしくはデバイス(例えば、ネットワーク100の送信マシン「A」のNIC)のいずれかによってタイムスタンプが付けられる時間である。同様に、列850は、受信マシン、または例えば受信マシンのNICによるタイムスタンプであるプローブの受信時間を示す。一実施形態では、単一のCPUを有するマシンは、複数のNICを有してもよい。そのような実施形態では、コーディネータ630は、マシン(例えば、受信マシン)の複数のNICを、マシンのCPUのクロックに同期させ(例えば、ここに記載されるように、NICを参照マシンとして使用して、その時間をNICの時間に同期させることによって)、次いで、他のNICをCPUに同期させ、したがって、マシンの複数のNICを同期させることができる。
【0046】
コーディネータは、マシンに、プローブ間の指定されたまたは所定の時間間隔でプローブを送信するように命令してもよい。ここで使用される場合、用語「伝送時間間隔」(δ)は、2つのプローブの伝送時間間の指定された間隔または所定の時間間隔を指す。間隔は、一定の値であってもよく、またはネットワーク条件に基づいてコーディネータによって動的に選択されてもよい(例えば、ネットワークが渋滞している場合、より長い送信時間間隔が選択されてもよい)。
図8に見ることができるように、プローブ1は、任意の時間であってもよく、コーディネータによって指定された時間であってもよい時間Tiで送信される。コーディネータが送信マシンAに、1つ以上の時間間隔でプローブを受信マシンBに送信するように指示したように、プローブ2は、時間T1+δに送信される。さらに、プローブは、コーディネータによって、参照時点Tiに送信機Aから受信機Bに送信されるように命令されてもよいが、例示を容易にするために、
図8に示されるのは2つのみである。同様に、プローブ3及び4はそれぞれ時間T2及びT2+δで送られ、プローブ5及びδはそれぞれ時間T3及びT3+δで送られる。
【0047】
プローブID1及び2、3及び4、ならびに5及び6は、コーディネータがペアのプローブ符号化されたプローブであるかどうかを判定する方法を示すためにペアになっている。符号化プローブは、δの特定の間隔で、またはδからの閾値距離内で伝送されるプローブである。すなわち、プローブは各プローブ間の空間に基づいて符号化される。タイムスタンピングプローブの遅延は、送信マシン820及び/または受信マシン830における、または中間ノードを介したキューによって起こり得る。したがって、符号化プローブは、同じ送信機820によって連続して送信され、同じ受信機830によって受信され、受信時間がδ回、またはδの閾値マージン以内である(2つのプローブ間の遅延の最小の差に対応するために)プローブのペアである。すなわち、2つの符号化されたプローブの通過時間はほぼ同じである。ペアは主にコードされたプローブを記述するために使用されるが、これは単なる例示であり、コードされたプローブは、δの間隔を有するプローブの三重線、四重線等であってもよい。
【0048】
プローブ1及び2は、プローブ1がTTの通過時間を有するが、プローブ2がTT+D(Dは遅延を表す)の通過時間を有し、Dが閾値マージンよりも大きいため、2つのプローブが符号化されたプローブを形成しないシナリオを示す。すなわち、プローブ2は、プローブ2よりも長いDの通過時間を有する。プローブ3及び4は、プローブ3がプローブ4よりも長いDの通過時間を有するため、2つのプローブが符号化されたプローブを形成しないシナリオを示す。しかしながら、プローブ5及び6は、同じ通過時間(許容可能な閾値内)を有するため、符号化されたプローブである。
【0049】
一実施形態では、データ構造800は、コーディネータ630に直接アクセス可能なメモリ(例えば、実行中のコーディネータ630のマシンのローカルメモリ)に格納される。別の実施形態では、データ構造800は、マシン610にわたって配布され、各マシンは、そのマシンと他のマシンとの間で交換されたプローブのためのローカルデータ構造800を格納する。様々な処理は、データ構造800の情報を使用する
図9から
図11に関して以下で説明され、この処理は、コーディネータ630によって実行されてよいが、マシン610によって実行されてよい場合もある。マシン610は、処理(例えば、符号化されたプローブを識別し、サポートベクトルマシンを適用する等)を実行している場合、1つのマシンが他の処理で過負荷になっている場合、ペアの別のマシンは、過負荷になったマシンのデータ構造800のデータを取り出し、その過負荷になったマシンの代わりに処理を実行してもよい。
【0050】
図7に関して上述したように、符号化されたプローブレコードは、ドリフトが推定され得るSVM分類子等の分類子に入力されてもよい。しかしながら、ドリフト推定値は不正確な可能性があるが、ネットワーク効果を使用することによって補正可能である。
図9はループ誤差の識別及び補正を示すシステムのグラフである。マシン910は、共にネットワークループを形成するマシン1、マシン2、及びマシン3を含む。マシン910は、マシン110及び610に関して上述したのと同様の機能を有する。3つのマシンのみが描写されるが、これは便宜上のものに過ぎず、任意の数のマシンがネットワークループを形成してもよい。リンク920は、ネットワークループのマシンを接続し、リンク920-1は、マシン1をマシン2に接続し、リンク920-2は、マシン2をマシン3に接続し、リンク9203は、マシン3をマシン1に接続する。各リンクは、各ペアのマシン間の複数の異なる経路を表してもよい。
【0051】
各リンク920上の数字は、任意の単位で各々のリンクによって接続される2つのマシン間のドリフトである。したがって、リンク920-1は、マシン2のドリフトに対するマシン1のドリフトのための+20ユニットのドリフトを示し、リンク920-2は、マシン2と3との間の-15ユニットのドリフトを有し、リンク920-3は、マシン3と1との間の+5ユニットのドリフトを示す。所与のループの周りのドリフトの合計(周波数に適用されるネットワーク効果の結果であるループドリフト誤差と呼ばれる)は、推定されたクロックドリフトにおける誤差を示している。したがって、ループドリフト誤差がなかった場合、ループ内のすべてのリンクのドリフトの合計は0単位になる。しかしながら、図示されるように、ドリフトの合計は10単位であり(20-15+5=10)、不正確なクロック推定によって引き起こされ得るが、これはネットワーク効果を用いて補正することができる。コーディネータは、ペアを割り当てるときに、所与のマシンを複数のループの一部として割り当ててもよい。コーディネータは、ネットワーク効果を使用してクロックドリフトをより正確に推定するために、異なるペアのマシンのためのすべてのループを組み合わせてもよい。ペアを割り当てる場合、コーディネータは、パス対称性の必要性に制約されず、マシン1からマシン2へ行くのにかかる時間(またはホップの数)は、マシン2からマシン1へ行くのにかかる時間と同じである必要はない。一実施形態では、ループのいくつかは、参照クロック640を含み、したがって、ネットワーク効果が参照クロックに関して判定されることを保証する。一実施形態(例えば、コーディネータ630が存在しない場合)では、ネットワーク効果は、参照クロックを参照することなく使用することができ、各クロックは、その周波数ドリフトを判定し、統計操作(例えば、平均)は、ループドリフト誤差を判定するために取られる。ループの周りのこれらのループドリフト誤差は、ループ内のマシンの絶対ドリフトを調整するために使用される。例えば、ループのループドリフト誤差は、ループ内の異なるマシン間に割り当てられてもよい。
【0052】
図10は、本開示の一実施形態に関するマシンのローカルクロック周波数を補正するための適応的確率論的制御システムのモデルのブロック図である。制御ループ1000は、制御信号1004によってマシン1010のローカルクロック1015の周波数を調整するために使用される。マシン1010は、ネットワーク600のマシンであってもよく、マシン110及びマシン610に関して上述したのと同じ機能を含む。コーディネータモジュール1030は、マシン1010の一部として描写されるが代替的に、
図1に関して上述したように、別個のコーディネータ(例えばコーディネータ630)に完全にまたは部分的に設置してもよい。
【0053】
コーディネータモジュール1030は、
図7から
図9に関して上述したように、マシン1010の絶対オフセット及び絶対ドリフト1002を推定する。これらは、絶対時間のソースに接続されている参照クロックに対して測定されるため、絶対量である。制御ループ1000はまた、フィルタ1060及びコントローラ1070を含む。フィルタ1060は、所定のフィルタ(例えば、カルマンフィルタ)、観察に基づいて適応フィルタバンクから選択されるフィルタ、機械学習モデル等であってもよい。カルマンフィルタ及び適応フィルタバンクは、
図11に関してさらに詳細に論じられ、機械学習モデルの使用は、
図11に関してさらに詳細に論じられる。
【0054】
フィルタ1060の目的は2つであり、第1に、ドリフト及びオフセット推定におけるノイズを低減し、第2に、クロックの自然な進行を推定する。プロセス700(
図7から)は、周期的に(例えば、2秒ごとに)繰り返され、したがって、制御ループ1000は同様に周期的にループする。一実施形態では、クロックオフセットは、期間の中間(例えば、2秒周期に1秒)で推定され、一方、制御信号は、期間の終わり(例えば、2秒周期の2秒マーク)で発生する。したがって、フィルタ1060は、推定値内のノイズを低減することに加えて、制御時に正確であるフィルタされたオフセット及びドリフト値を出力1003に推定する。フィルタされたオフセット及びドリフトは、コントローラ1070によって受信される。コントローラ1070は、周波数(及びオフセット)調整信号1004をマシン1010のローカルクロック1015に出力し、調整は、ローカルクロック1015の周波数及びオフセット値の変化を反映して、ローカルクロック1015からオフセット及びドリフトを除去する。周波数及びオフセット調整は、また、制御ループの後続のサイクルにおいて、フィルタのための推定オフセット及びドリフトに加えて、フィルタのためのパラメータとしてフィルタ1060にフィードバックされる。この制御ループでは、制御されているプラントはローカルマシンの状態変数{絶対オフセット、絶対ドリフト}によって決定され、適応確率制御装置がプラントを制御するために使用される。以下
図11に関して説明するように、適応確率制御は、所与の調整が他の可能性のある調整と比較して正しい調整である可能性に基づいて制御信号を調整することを指し、制御信号が適用されると、実際の調整が観察され、各可能性のある制御信号が正しい調整につながる確率が調整される。
【0055】
図11は、本開示の一実施形態による、適応フィルタバンクのブロック図である。適応フィルタバンクという用語は、ここで使用されるとき、候補フィルタの集合を指す場合があり、それらのそれぞれは、ノイズの種類及び程度に基づいて信号からノイズを除去するのに最適である。例えば、
図6から10に関して論じられた(例えば、キューイング遅延、ネットワーク動作の影響、ループ誤差等)のようないくつかのノイズが観察できる。しかしながら、いくつかのノイズは、マシンの状態に固有であり、制御ループ1000(例えば、異なるメーカー及び機器のモデルにわたる制御入力に応答したノイズ変動)には知られていない。未知のノイズは、ここでは状態ノイズと呼ばれる。
【0056】
図10に関して上述したように、フィルタ1060の機能性を含むフィルタ1160は、カルマンフィルタであり得る候補フィルタ1161(ここでは適応フィルタバンクとも呼ばれる)のバンクを含む。候補フィルタ1161のそれぞれは、異なるレベルの状態ノイズに対応する。フィルタ選択モジュール1162は、各候補フィルタが最良適合である確率を計算し、次いで最良適合で候補フィルタを選択することによって、候補フィルタ1161からフィルタを選択する、確率的選択モジュールである。最初に、フィルタ選択モジュール1162は、観察されたノイズを受信し、観察されたノイズを使用して、推定されたドリフト及びオフセット1102をフィルタリングし、フィルタリングされたドリフト及びオフセット1103をコントローラ1070に出力するために使用される、最高確率の候補フィルタ1161を選択する。適応的な確率的制御を使用すると、最初にフィルタ選択モジュール1162は全てのフィルタが同様に可能性があることを見出し、任意にフィルタを選択することが可能である。フィルタを選択し、ローカルクロック1015が制御信号にどのように反応するかを観察した後、フィルタ選択モジュール1162は、各候補フィルタ1161が最適に適用される可能性を調整する。したがって、制御信号及びネットワーク観測に関するさらなる情報が経時的にフィルタ1160にフィードバックされると、適切な候補フィルタ1161の選択は、最終的に最良のマッチング候補フィルタに収束する。
【0057】
図7を参照して論じられたように、マシンのローカルクロックに送信される制御信号を導出するとき、補正は、リアルタイムで実行され得、したがって、リアルタイム制御信号(またはほぼリアルタイム制御信号)をもたらす。一実施形態では、観測ノイズが状態ノイズよりもはるかに小さい場合等、補正はオフラインで行われ得る。例えば、コーディネータは、観測ノイズが状態ノイズよりも小さい所定の量または因子であるかどうかを判定し得る。前記観測ノイズが前記状態ノイズよりも小さい所定の量または因子であると判定することに応答し、前記コーディネータは前記調整をオフラインで(またはバッチ方式で)実行してもよく、そうでない場合、前記コーディネータは前記調整をリアルタイムまたはほぼリアルタイムで実行してもよく、したがって、制御信号を前記ローカルクロックに迅速に送信させてもよい。システムの管理者は、オフライン補正がいつ行われるかを決定するパラメータを設定してもよく、オフライン補正が全く使用されないことを選択してもよい。
【0058】
本開示の実施形態の前述の説明は、そのようなクロックを非常に正確な同期にするために、石英クロック等の安価で不正確なクロックを含む、既製のクロックと共に使用するためにインストールされたソフトウェアモジュールで実施されてもよい。本開示の実施形態の前述の説明は、例示の目的で提示されたものであり、網羅的であること、または開示された正確な態様に本発明を限定することは意図されておらず、単に異なる例を例示するものである。本開示の範囲は、上で詳細に論じられていない他の実施形態を含むことを理解されたい。当業者は、添付のクレームの範囲で定義される精神及び範囲から逸脱することなく、上記の開示に照らして多くの修正及び変形が可能であることを理解することができる。したがって、本開示の範囲は、添付の特許請求の範囲及びそれらの法的同等物によって決定されるべきである。異なる図面における同様の参照番号は、異なる図面におけるそれらの対応物の説明の同じ重み及び効果を有する。
【0059】
最後に、明細書で使用される文言は、主に読みやすさと教育目的のために選択されたものであり、本発明の主題を描写または制限するために選択されていない場合がある。したがって、本発明の範囲は、この詳細な説明によってではなく、本明細書に基づいた出願で発行される任意のクレームによって制限されることが意図されている。したがって、実施形態の開示は、添付のクレームの範囲に記載される本開示の範囲を例示することを意図するものであり、限定することを意図するものではない。