IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 三星電子株式会社の特許一覧

特許7506472アプリケーション関数を装置にオフロードするためのシステム及び方法
<>
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図1A
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図1B
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図2A
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図2B
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図3
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図4
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図5
  • 特許-アプリケーション関数を装置にオフロードするためのシステム及び方法 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-18
(45)【発行日】2024-06-26
(54)【発明の名称】アプリケーション関数を装置にオフロードするためのシステム及び方法
(51)【国際特許分類】
   G06F 13/36 20060101AFI20240619BHJP
   G06F 13/10 20060101ALI20240619BHJP
   G06F 13/12 20060101ALI20240619BHJP
   G06F 3/06 20060101ALI20240619BHJP
   G06F 3/08 20060101ALI20240619BHJP
   G06F 13/38 20060101ALI20240619BHJP
【FI】
G06F13/36 310E
G06F13/10 340A
G06F13/12 340C
G06F3/06 301F
G06F3/08 H
G06F13/38 350
【請求項の数】 20
(21)【出願番号】P 2019229993
(22)【出願日】2019-12-20
(65)【公開番号】P2020102218
(43)【公開日】2020-07-02
【審査請求日】2022-10-27
(31)【優先権主張番号】62/784275
(32)【優先日】2018-12-21
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/543264
(32)【優先日】2019-08-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung-ro,Yeongtong-gu,Suwon-si,Gyeonggi-do,Republic of Korea
(74)【代理人】
【識別番号】110000051
【氏名又は名称】弁理士法人共生国際特許事務所
(72)【発明者】
【氏名】ランダス ピー. カシャレ
(72)【発明者】
【氏名】ステヘン ジー. フィッシャー
(72)【発明者】
【氏名】オスカー ピー. ピント
【審査官】松平 英
(56)【参考文献】
【文献】特開2009-187313(JP,A)
【文献】特開2017-102552(JP,A)
【文献】国際公開第2015/193947(WO,A1)
【文献】米国特許出願公開第2019/0042501(US,A1)
【文献】米国特許第08549345(US,B1)
【文献】米国特許出願公開第2006/0143506(US,A1)
【文献】特開2010-097252(JP,A)
【文献】特開2016-71886(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
12/00-12/128
G06F13/00-13/14
13/20-13/42
(57)【特許請求の範囲】
【請求項1】
ホスト装置と、
エンベデッドプロセッサを含むストレージ装置と、
ブリッジカーネルのハードウェア及び前記ブリッジカーネルのファームウェアを含むブリッジカーネル装置を含むシステムと、を備え、
前記ブリッジカーネル装置は、前記ホスト装置から複数の引数を受信し、データ処理のために、前記エンベデッドプロセッサに前記複数の引数を伝送するように構成され
前記エンベデッドプロセッサは、前記エンベデッドプロセッサ上で実行されるように構成される、オフロードされたアプリケーション関数を含み、前記ブリッジカーネルのファームウェアをさらに含み、
前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置のホストレジスタインターフェースから受信された前記複数の引数をフェッチすることを特徴とするシステム。
【請求項2】
前記ブリッジカーネル装置の実装は、前記ホスト装置に明白(transparent)であり、
記ホスト装置と前記ブリッジカーネル装置との間の伝送(トランスポート)メカニズムは、PCIe(Peripheral Component Interconnect express)又はイーサネット(登録商標)連結のいずれか1つであることを特徴とする請求項1に記載のシステム。
【請求項3】
前記ストレージ装置は、SSD(Solid State Device)であり、
前記エンベデッドプロセッサは、FPGA(Field Programmable Gate Array)プロセッサ、SSDコントローラ又は離散コプロセッサであることを特徴とする請求項1に記載のシステム。
【請求項4】
前記ストレージ装置は、FIFO(First In First Out)レジスタ及びDRAM(Dynamic Random-Access Memory)を含み、
前記DRAMは、前記ホスト装置から受信された前記複数の引数を格納するために、複数のデータバッファ及びハンドシェイク領域を含み、
前記FIFOレジスタ及び前記DRAMは、前記ブリッジカーネルのハードウェアと通信できるように連結されることを特徴とする請求項3に記載のシステム。
【請求項5】
前記FIFOレジスタは、データ処理のために、前記オフロードされたアプリケーション関数を含む前記エンベデッドプロセッサに前記複数の引数を通過させるように構成されることを特徴とする請求項4に記載のシステム。
【請求項6】
前記ブリッジカーネルのハードウェアは、前記ホスト装置から受信された前記複数の引数を前記DRAMの前記ハンドシェイク領域に一時的に格納するように構成されることを特徴とする請求項4に記載のシステム。
【請求項7】
前記ブリッジカーネル装置は、前記ホスト装置のカスタマーアプリケーションモジュール上で実行されるホストアプリケーションに対するプロキシとして動作するように構成され、
前記ホストアプリケーションは、前記オフロードされたアプリケーション関数がどこで又はどのように実行されるかとは無関係であることを特徴とする請求項4に記載のシステム。
【請求項8】
前記ホスト装置は、カスタマーアプリケーションモジュール及びOpenCL(Open Computing Language)モジュールを含み、
前記ホスト装置は、前記ストレージ装置を利用して、PCIe(Peripheral Component Internet express)又はイーサネット(登録商標)連結を設定するように構成されることを特徴とする請求項4に記載のシステム。
【請求項9】
前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネルを含み、
前記ブリッジカーネルのファームウェアは、前記エンベデッドプロセッサ上で実行されるように構成される複数のソフトウェアカーネルを含み、
前記ホスト装置の前記カスタマーアプリケーションモジュール上で実行されるホストアプリケーションは、前記OpenCLモジュールを介して前記複数のソフトウェアカーネル、及び前記複数のハードウェアカーネルの中の少なくとも1つと接続するように構成されることを特徴とする請求項8に記載のシステム。
【請求項10】
前記ブリッジカーネル装置は、コスト関数に基づいて、データ処理のために、前記複数のハードウェアのカーネルと前記複数のソフトウェアカーネルの中から1つ以上のカーネルを選択するように構成されることを特徴とする請求項9に記載のシステム。
【請求項11】
前記ブリッジカーネル装置は、前記複数の引数と前記ホスト装置から受信されたストレージ又はネットワークのパラメータとを用いて、前記コスト関数に基づいて、データ処理のために、前記1つ以上のカーネルを選択するように構成され、前記ホスト装置から受信された前記ストレージ又は前記ネットワークのパラメータは、SQID(Submission Queue Identifier)、CQID(Completion Queue Identifier)、ストリームID、ホストID、LBA(Logical Block Address)の範囲、NSID(Network Service ID)、MAC(Media Access Control)ID、 TCP(Transmission Control Protocol)/IP(Internet Protocol)フィールド、アプリケーション識別子、又は前記ホスト装置に関連付けられた日付及び時刻の中の少なくとも1つを含むことを特徴とする請求項10に記載のシステム。
【請求項12】
前記ブリッジカーネル装置は、前記FIFOレジスタを利用して、データ処理のために前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から1つ以上のカーネルを選択するように構成されることを特徴とする請求項11に記載のシステム。
【請求項13】
前記ブリッジカーネルのファームウェアは、前記DRAMの前記ハンドシェイク領域内の前記複数の引数をフェッチするように構成され、前記ホスト装置から受信された前記複数の引数を有する前記オフロードされたアプリケーション関数を呼び出すように構成されることを特徴とする請求項12に記載のシステム。
【請求項14】
前記オフロードされたアプリケーション関数は、データ処理のため前記複数の引数を使用するように構成されることを特徴とする請求項13に記載のシステム。
【請求項15】
ストレージ装置内のブリッジカーネル装置により、前記ストレージ装置に連結されたホスト装置からトリガーを受信する段階と、
前記ブリッジカーネル装置により、前記ホスト装置から受信された複数の引数をフェッチする段階と、
前記ブリッジカーネル装置により、前記ストレージ装置のDRAM内に前記複数の引数を格納する段階と、
前記ブリッジカーネル装置により、前記DRAM内に第1の準備フラグ(ready flag)を設定する段階と、
前記ブリッジカーネル装置により、前記複数の引数に基づいて前記ストレージ装置のエンベデッドプロセッサ内の前記ブリッジカーネル装置のファームウェア内の、オフロードされたアプリケーション関数の処理が完了したかを決定する前記ブリッジカーネル装置に基づいて、前記DRAM内の完了フラグ(done flag)をポーリングする段階と、
前記ブリッジカーネル装置により、ホストレジスタインターフェース内に第2の準備フラグが設定される段階と、を備え、
前記ブリッジカーネル装置は、前記ホストレジスタインターフェースから前記複数の引数をフェッチするように構成され、
前記複数の引数は、前記DRAMのハンドシェイク領域内に格納され、
前記第1の準備フラグは、前記DRAMの前記ハンドシェイク領域内に設定され、
前記完了フラグは、前記DRAMの前記ハンドシェイク領域内にポーリングされることを特徴とする方法。
【請求項16】
前記ブリッジカーネル装置により、前記DRAMの前記ハンドシェイク領域内の前記完了フラグを検出することに基づいて、前記DRAMの前記ハンドシェイク領域からエラー又は状態を読み取る段階と、
前記ブリッジカーネル装置により、前記ホストレジスタインターフェースで前記エラー又は前記状態をアップデートする段階と、をさらに備えることを特徴とする請求項15に記載の方法。
【請求項17】
前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAM内に前記第1の準備フラグをポーリングする段階と、
前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAMの前記ハンドシェイク領域内に前記複数の引数をフェッチする段階と、
前記ブリッジカーネル装置の前記ファームウェアにより、データ処理のために前記複数の引数を有する前記ストレージ装置の前記エンベデッドプロセッサ内の前記オフロードされたアプリケーション関数を呼び出す段階と、
前記オフロードされたアプリケーション関数により、前記データ処理の完了に基づいて前記ブリッジカーネル装置の前記ファームウェアに前記ブリッジカーネル装置の前記ファームウェアによって呼び出された前記オフロードされたアプリケーション関数を返す段階と、
前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAMの前記ハンドシェイク領域内に完了フラグを設定する段階と、をさらに備えることを特徴とする請求項15に記載の方法。
【請求項18】
エンベデッドプロセッサを含むストレージ装置と、
ホスト装置から複数の引数を受信し、データ処理のために前記複数の引数を前記エンベデッドプロセッサに伝送するブリッジカーネル装置と、を備え
前記エンベデッドプロセッサは、オフロードされたアプリケーション関数及び前記ブリッジカーネルのファームウェアを含み、
前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を前記エンベデッドプロセッサ上で実行されるように構成される前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置から受信された前記複数の引数をホストレジスタインターフェースからフェッチすることを特徴とするシステム。
【請求項19】
前記ブリッジカーネル装置は、ブリッジカーネルのハードウェア及びブリッジカーネルのファームウェアを含み、
前記ストレージ装置は、SSD(Solid State Drive)であり、
前記エンベデッドプロセッサは、FPGA(Field Programmable Gate Array)プロセッサ、SSDコントローラ又は離散コプロセッサであることを特徴とする請求項18に記載のシステム。
【請求項20】
前記ストレージ装置は、FIFO(First In First Out)レジスタ及びDRAM(Dynamic Random Acess Memory)を含み、
前記DRAMは、複数のデータバッファ及びハンドシェイク領域を含み、
前記FIFOレジスタ及び前記DRAMは、前記ブリッジカーネルのハードウェアと通信できるように連結され、
前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネル及び複数のソフトウェアカーネルを含み、
前記複数のソフトウェアカーネルは、前記エンベデッドプロセッサ上で実行されるように構成され、
前記ブリッジカーネル装置は、前記複数の引数と前記ホスト装置から受信されたストレージ又はネットワークのパラメータを利用して、コスト関数に基づいて、データ処理のために前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から1つ以上のカーネルを選択するように構成され、
前記ホスト装置から受信された前記ストレージ又は前記ネットワークのパラメータは、SQID(Submission Queue Identifier)、CQID(Completion Queue Identifier)、ストリームID、ホストID、LBA(Logical Block Address)の範囲、NSID(Network Service ID)、MAC( Media Access Control)ID、TCP(Transmission Control Protocol)/IP(Internet Protocol)フィールド、アプリケーション識別子、又は前記ホスト装置に関連付けられた日付及び時刻の中の1つ以上を含み、
前記ブリッジカーネル装置は、前記FIFOレジスタを使用して、データ処理のために前記複数のハードウェアカーネル及び前記複数のソフトウェアカーネルの中から、前記1つ以上のカーネルを選択するように構成されることを特徴とする請求項19に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、オフロードするためのシステム及び方法に係り、より詳しくは、装置にアプリケーション関数を分担するシステム及び方法に関する。
【背景技術】
【0002】
最新の情報技術(IT)インフラストラクチャでは、多様な装置とプロセスによって、比較的多量のデータが生成され得る。このようなデータ生成器のいくつかの例は、スマート装置(例えば、アイフォーン(iPhone(登録商標))、アイパッド(登録商標)(iPad(登録商標))など)、自律走行車両、ソーシャルネットワーク、及びモノのインターネット(IOT)装置を含む。収集されたデータを分析・使用して、高いアプリケーションの効率性と生産性を達成するために、人工知能(Artificial Intelligence:AI)と機械学習(Machine Learning:ML)のアルゴリズムが開発されている。最近のITインフラストラクチャの発展に照らしてデータを処理・分析することが好ましい。
【0003】
前記情報は、単に技術の背景に対する理解を増安ためだけのものであり、従来技術の存在又は関連性を認めるものと解釈されてはならない。
【先行技術文献】
【特許文献】
【0004】
【文献】米国特許第8848741号明細書
【文献】米国特許出願公開第2007/0245409号明細書
【文献】米国特許出願公開第2008/0140932号明細書
【文献】米国特許出願公開第2014/0149692号明細書
【文献】米国特許出願公開第2014/0198652号明細書
【文献】米国特許出願公開第2016/0293274号明細書
【文献】米国特許出願公開第2019/0107956号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、上述した技術的課題を解決しようとするものであって、本発明の目的とするところは、装置にアプリケーション関数をオフロードするためのシステム及び方法を提供することにある。
【課題を解決するための手段】
【0006】
本開示の実施形態の一面は、装置にアプリケーション関数をオフロードするためのシステム及び方法に関連付けられる。本開示のいくつかの実施形態によると、システムは、ホスト装置と、エンベデッドプロセッサを含むストレージ装置と、ブリッジカーネルのハードウェア及び前記ブリッジカーネルのファームウェアを含むブリッジカーネル装置と、を備えるシステムを有し、前記ブリッジカーネル装置は、前記ホスト装置から複数の引数を受信し、データ処理のために前記エンベデッドプロセッサに前記複数の引数を伝送するように構成される。
【0007】
いくつかの実施形態において、前記ブリッジカーネル装置の実装は、前記ホスト装置に明白(transparent)であり、前記ブリッジカーネル装置は、前記ホスト装置と前記ブリッジカーネル装置と間の伝送(transport)メカニズムに無関係であり、伝送メカニズムは、PCIe(Peripheral Component Interconnect express)又はイーサネット(登録商標)連結のいずれか一つである。いくつかの実施形態では、前記ストレージ装置は、SSD(Solid State Device)であり、前記エンベデッドプロセッサは、FPGA(Field Programmable Gate Array)プロセッサ、SSDコントローラ又は離散コプロセッサであり、前記エンベデッドプロセッサは、前記エンベデッドプロセッサ上で実行されるように構成されるオフロードされたアプリケーション関数を含み、前記ブリッジカーネルのファームウェアをさらに含み、前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を、前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置のホストレジスタインターフェースから受信された前記複数の引数をフェッチする。
【0008】
いくつかの実施形態で、前記ストレージ装置は、FIFO(First In First Out)レジスタ及びDRAM(Dynamic Random Access Memory)を含み、前記DRAMは、前記ホスト装置から受信された前記複数の引数を格納するために、複数のデータバッファ及びハンドシェイク領域を含み、前記FIFOレジスタ及び前記DRAMは、前記ブリッジカーネルのハードウェアと通信できるように連結される。いくつかの実施形態では、前記FIFOレジスタは、データ処理のために前記オフロードされたアプリケーション関数を含む前記エンベデッドプロセッサに前記複数の引数を通過させるように構成される。いくつかの実施形態では、前記ブリッジカーネル装置は、前記ホスト装置のカスタマーアプリケーションモジュール上で実行されるホストアプリケーションに対するプロキシとして動作するように構成され、前記ホストアプリケーションは、前記オフロードされたアプリケーション関数がどこで、どのように実行されるかとは無関係である。
【0009】
いくつかの実施形態では、前記ホスト装置は、カスタマーアプリケーションモジュール及びOpenCL(Open Computing Language)モジュールを含み、前記ホスト装置は、前記ストレージ装置を利用して、PCIe(Peripheral Component Internet express)又はイーサネット(登録商標)連結を設定するように構成される。いくつかの実施形態では、前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネルを含み、前記ブリッジカーネルのファームウェアは、前記エンベデッドプロセッサ上で実行されるように構成される複数のソフトウェアカーネルを含み、前記ホスト装置の前記カスタマーアプリケーションモジュール上で実行されるホストアプリケーションは、前記OpenCLモジュールを介して、前記複数のソフトウェアカーネルと前記複数のハードウェアカーネルのうち少なくとも一つと連結するように構成される。いくつかの実施形態では、前記ブリッジカーネル装置は、コスト関数に基づいて、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から1つ以上のカーネルを選択するように構成される。
【0010】
いくつかの実施形態で、前記ブリッジカーネル装置は、前記複数の引数と、前記ホスト装置から受信されたストレージ又はネットワーキングのパラメータを用いて、前記コスト関数に基づいて、データ処理のために前記1つ以上のカーネルを選択するように構成され、前記ホスト装置から受信された前記ストレージ又は前記ネットワーキングのパラメータは、SQID(Submission Queue Identifier)、CQID(Completion Queue Identifier)、ストリームID、ホストID、LBA(Logical Block Address)範囲、NSID(Network Service ID)、MAC(Media Access Control)ID、TCP(Transmission Control Protocol)/IP(Internet Protocol)フィールド、アプリケーション識別子、又はホストに関連付けられた日付及び時刻の中の少なくとも1つを含む。いくつかの実施形態では、前記ブリッジカーネル装置は、前記FIFOレジスタを利用して、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から1つ以上のカーネルを選択するように構成される。いくつかの実施形態では、前記ブリッジカーネルのファームウェアは、前記DRAMの前記ハンドシェイク領域内の前記複数の引数をフェッチするように構成され、前記ホスト装置から受信された前記複数の引数を有する前記オフロードされたアプリケーション関数を呼び出すように構成される。いくつかの実施形態では、前記オフロードされたアプリケーション関数は、データ処理のため、前記複数の引数を使用するように構成される。
【0011】
ここで開示されるいくつかの実施形態によると、方法は、ストレージ装置内のブリッジカーネル装置により、前記ストレージ装置に連結されたホスト装置からトリガーを受信する段階と、前記ブリッジカーネル装置により、前記ホスト装置から受信された複数の引数をフェッチする段階と、前記ブリッジカーネル装置により、前記ストレージ装置のDRAM内に前記複数の引数を格納する段階と、前記ブリッジカーネル装置により、前記DRAM内の第1の準備フラグを設定する段階と、前記ブリッジカーネル装置により、前記複数の引数に基づいて前記ストレージ装置のエンベデッドプロセッサ内の前記ブリッジカーネル装置のファームウェア内のオフロードされた関数の処理が完了されたかを決定する前記ブリッジカーネル装置に基づいて、前記DRAM内の完了フラグをポーリングする段階と、前記ブリッジカーネル装置により、ホストレジスタインターフェース内に第2の準備フラグが設定される段階と、を備え、前記ブリッジカーネル装置は、前記ホストレジスタインタフェースから前記複数の引数をフェッチするように構成され、前記複数の引数は、前記DRAMのハンドシェイク領域内に格納され、前記第1の準備フラグは前記DRAMの前記ハンドシェイク領域内に設定され、前記完了フラグは前記DRAMの前記ハンドシェイク領域内にポーリングされる。
【0012】
いくつかの実施形態で、方法は、前記ブリッジカーネル装置により、前記DRAMの前記ハンドシェイク領域内の前記完了フラグを検出することに基づいて、前記DRAMの前記ハンドシェイク領域からエラー又は状態を読み取る段階と、前記ブリッジカーネル装置により、前記ホストレジスタインターフェースへの前記エラー又は前記状態をアップデートする段階と、をさらに備える。いくつかの実施形態では、方法は、前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAM内の前記第1の準備フラグをポーリングする段階と、前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAMの前記ハンドシェイク領域内に前記複数の引数をフェッチする段階と、前記ブリッジカーネル装置の前記ファームウェアにより、データ処理のために前記複数の引数を有する前記ストレージ装置の前記エンベデッドプロセッサ内の前記オフロードされたアプリケーション関数を呼び出す段階と、前記オフロードされたアプリケーション関数により、前記データ処理の完了に基づいて前記ブリッジカーネル装置の前記ファームウェアに、前記ブリッジカーネル装置の前記ファームウェアによって呼び出された前記オフロードされたアプリケーション関数を返す段階と、前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAMの前記ハンドシェイク領域内に完了フラグを設定する段階と、を備える方法を有する。
【0013】
本開示のいくつかの実施形態によると、システムは、エンベデッドプロセッサを含むストレージ装置と、ホスト装置から複数の引数を受信してデータ処理のために前記複数の引数を前記エンベデッドプロセッサに伝送するブリッジカーネル装置と、を備える。いくつかの実施形態で、前記ブリッジカーネル装置は、ブリッジカーネルのハードウェア及びブリッジカーネルのファームウェアを含み、前記ストレージ装置は、SSD(Solid State Drive)であり、前記エンベデッドプロセッサはFPGA(Field Programmable Gate Array)プロセッサ、SSDコントローラ又はコプロセッサであり、前記エンベデッドプロセッサはオフロードされたアプリケーション関数及び前記ブリッジカーネルのファームウェアを含み、前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を前記エンベデッドプロセッサ上で実行されるように構成される前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置から受信された前記複数の引数をホストレジスタインターフェースからフェッチする。
【0014】
いくつかの実施形態で、前記ストレージ装置は、FIFO(First In First Out)レジスタ及びDRAM(Dynamic Random Acess Memory)を含み、前記DRAMは複数のデータバッファ及びハンドシェイク領域を含み、前記FIFOレジスタ及び前記DRAMは前記ブリッジカーネルのハードウェアと通信できるように連結され、前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネル及び複数のソフトウェアカーネルを含み、前記複数のソフトウェアカーネルは、前記エンベデッドプロセッサ上で実行されるように構成され、前記ブリッジカーネル装置は、前記複数の引数及び前記ホスト装置から受信されたストレージ又はネットワーキングのパラメータを利用して、コスト関数に基づいて、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から1つ以上のカーネルを選択するように構成され、前記ホスト装置から受信された前記ストレージ又は前記ネットワーキングのパラメータは、SQID(Submission Queue Identifier)、CQID(Completion Queue Identifier)、ストリームID、ホストID、LBA(Logical Block Address)の範囲、NSID(Network Service ID)、MAC(Media Access Control)ID、TCP(Transmission Control Protocol)/IP(Internet Protocol)フィールド、アプリケーション識別子、又は前記ホストに関連付けられた日付と時刻の中の1つ以上を含み、前記ブリッジカーネル装置は、前記FIFOレジスタを使用して、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から前記1つ以上のカーネルを選択するように構成される。
【発明の効果】
【0015】
本発明は、ソフトウェアベースのオフロードされた関数を用いて、ホストでその機能を遂行するソフトウェアコードを再利用することができる。また、本発明は、ソフトウェア又はファームウェアとしてオフロードされた関数を実行して、ホストソフトウェアスタックとオフロードされるカーネルとの間のインターフェースをソフトウェアカーネル及び他の形態のカーネルの実装と同じように維持することができる。したがって、初期の迅速なオフロードがソフトウェアカーネルの形態で遂行され、後にオフロードされた関数は、全体のホストソフトウェアスタック、及び/又はシステムアーキテクチャを大幅に変更したり、中断したりせずに、ハードウェアで実装され得る。速いオフロード及び実行を通じて、より高い性能のカーネルが開発されているうち、他のシステムの活動(例えば、システム統合、検証、特性化など)が進行され得る。
【0016】
すなわち、本発明は、効率的且つコスト効率的なデータ処理のために、アプリケーション関数をエンベデッドプロセッサを含むSSDのようなコンピュータのストレージ装置にオフロードすることができる。
【図面の簡単な説明】
【0017】
図1A】ブリッジカーネルを含むシステムの例としてのブロック図を示す。
図1B】ブリッジカーネルによってオフロードされた関数の異なるカーネルへのコストベースのルーティングプロセスを示す。
図2A】オフロードされたカーネルに接続するホストアプリケーションの例としてのフローチャートを示す。
図2B】オフロードされたカーネルに接続するホストアプリケーションの例としてのフローチャートを示す。
図3】ブリッジカーネルによってホストに提示されたレジスタインターフェースの例を示す。
図4図1のDRAMハンドシェイク領域のレイアウトの例を示す。
図5】ブリッジのカーネルのハードウェアを状態マシンとして使用するフローチャートを示す。
図6】ブリッジカーネルのファームウェアの動作を示す。
【発明を実施するための形態】
【0018】
添付した図面と関連して、以下の詳細な説明は、本発明に基づいて提供された装置にアプリケーション関数をオフロード(off-load)するためのシステム及び方法のいくつかの例としての実施形態の説明として意図したものであり、本開示が構成できたり、使用できたりする唯一の形態を示すために意図したものではない。本説明は、図示した実施形態に関連して、本開示の特徴を説明する。しかし、同一又は同等の機能及び構造は、また本開示の範囲内に含まれるように意図した、異なる実施形態により達成され得ることを理解しなければならない。類似の要素符号は、類似の要素又は特徴を示すように意図する。
【0019】
いくつかのシステムアーキテクチャで、データは、永続的ストアから高性能ネットワークを使用してストア(ストレージ装置)に連結できる比較的高性能のサーバにフェッチされ得る。処理及び分析のために、中央処理装置(CPU)に多量のローデータ(raw data)のようなデータ移動は、エネルギー消費、コンピューティング及び配置されたネットワークリソースの量の観点から多くのコストがかかる。このような大量のローデータの移動は、ネットワーク帯域幅、CPUサイクル及びCPUメモリのようなリソースの負担を増加させる。処理のためにサーバに大量のローデータを移動することは、サーバ上で実行されるアプリケーションによって経験されるレイテンシを増加させる。
【0020】
いくつかの状況で、アプリケーションは、処理が完了し、決定が行われる前に、データがサーバにフェッチされるまで待機する必要がある。このような追加のリソース要求により高い資本支出と運用支出のコストが発生する可能性がある。したがって、ストレージ装置(例えば、SSD(solid state device))内でローデータを処理することは、多くのデータ分析の使用事例(例えば、増加するローデータの量を通じた収益を指向する使用事例)に対するコスト効率的な解決策を示すことができる。なお、データの移動を減らすことで、アプリケーションを実行するシステム応答の待機時間を向上させることができる。
【0021】
さらに、データの分析作業を利用するシステムは、たびたび比較的多量のデータを読み取ってそれを処理し、フィルタリング及び他のデータ減少動作を通じてこれを減らすことができる。このような作業は、縮小された結果を移動するだけで、装置(例えば、SSD)内で、より高い利用可能な帯域幅を活用して、SSDとCPU(例えば、RAD(Remote Direct Attached Storage)の場合、PCIe(Peripheral Component Interconnect Express)インターフェース又はネットワークファブリックインターフェース)との間の制限された帯域幅を格納することにより、このような作業及びその他の類似の作業がSSDベースのサービスとして実装され得る。したがって、ストレージ装置(例えば、SSD)にもっと近くに又はその内部でデータを処理する技術は、効率的且つコスト効率的なデータ処理のために好ましい。
【0022】
本開示のいくつかの実施形態は、アプリケーション関数をコンピュータのストレージ装置(例えば、エンベデッドプロセッサを含むSSD)にオフロードするための方法及びシステムを含んでおり、これは、いくつかの例では、効率的且つコスト効率なデータ処理の解決策につながることができる。スマートストレージ装置(例えば、エンベデッドプロセッサを含むSSD)は、ホストCPUプロセッサによって遂行され得るデータ処理機能の少なくとも一部を遂行するためのプラットフォームを提供することができる。スマートSSD又は類似のストレージ装置内では、このようなデータ処理機能を遂行することは、ストレージネットワークに対するエネルギー消費量、ネットワーク帯域幅、CPUサイクル、メモリなどに関する利点を提供することができる。
【0023】
いくつかの例で、オフロードされた関数は、ストレージネットワークの性能を向上させつつ消費電力を低減させるため、エンベデッドプロセッサ(例えば、FPGA、SSDコントローラ又は離散コプロセッサ)を含むストレージ装置からRTL(Register-Transfer Level)ロジック、HLS(High-Level Synthesis)又はFPGA(Field-Programmable Gate Array)ロジックを使用して実装され得る。しかし、RTL又はHLSを使用する高性能のオフロードされた関数の長い開発サイクルは、システム開発の他の活動を遮断するか、相当に遅らす。本開示のいくつかの実施形態では、ソフトウェア(ファームウェアとも呼ばれる)関数として(例えば、SSD内の)エンベデッドプロセッサでオフロードされた関数の実行を可能にする。ソフトウェアとしてオフロードされた関数を実行すると、迅速な開発時間が達成され得る。ソフトウェアベースのオフロードされた関数は、ホスト(例えば、ホストCPU)で、すでにその機能を遂行するソフトウェアコードを再利用することができる。
【0024】
ストレージ装置又はSSDのエンベデッドプロセッサでソフトウェア又はファームウェアとしてオフロードされた関数を実行することは、ホストソフトウェアスタックとオフロードされるカーネルとの間のインターフェースをソフトウェアカーネル及び他の形態のカーネルの実装と同じように維持することができる。したがって、初期の迅速なオフロードがソフトウェアカーネル形態で遂行され、後にオフロードされた関数は、全体のホストソフトウェアスタック、及び/又はシステムアーキテクチャを大幅に変更したり、中断したりせずに、ハードウェアで実装され得る。速いオフロードと実行を通じて、より高い性能のカーネルが開発されている間に、他のシステムの活動(例えば、システム統合、検証、特性化など)が進行され得る。
【0025】
上述したように、本発明の一部の実施形態は、効率的且つコスト効率的なデータ処理のために、アプリケーション関数をFPGA、SSDコントローラ又は離散コプロセッサのようなエンベデッドプロセッサを含むSSDのようなコンピュータのストレージ装置にオフロードするための方法及びシステムを有する。いくつかの実施形態は、オフロードされた関数の代わりにホスト(例えば、ホストCPU)に対してプロキシとして機能できるFPGAハードウェアベースのブリッジカーネルを含み得る。ブリッジカーネルは、ホストドライバからの引数を受け入れ、それらの引数(例えば、パラメータ値、メモリポインタなど)をエンベデッドプロセッサ(例えば、FPGA、SSDコントローラ又は離散コプロセッサ)でソフトウェアカーネルとして実行されるオフロードされた関数へ伝送することができる。他の実施形態では、ハードウェアとファームウェアのピース(pieces)は、ホスト上で実行されるアプリケーションとソフトウェアカーネルとの間のブリッジとして使われ得る。その次に、これらのソフトウェアカーネルを高性能のためにハードウェアに移動し、後にホストへわかりやすく(transparent)移動することができる。従って、ブリッジカーネルのホストインターフェースを追加の修正なしで使用でき、これにより、コンピュータのストレージ装置(例えば、スマートSSD)のユーザーは、例として、既存のアプリケーション関数のコードベースをストレージ装置内のエンベデッドプロセッサ(例えば、 FPGA、SSDコントローラ又は離散コプロセッサ)にポーティング(porting)して、使用事例を迅速に開発することができる。
【0026】
スマートSSDのための、これらの利用容易性の開発は、ここで開示した技術に対するユーザーのより速い採用を可能にする。HLSとRTLを使用する高性能のカーネルは、比較的多くの開発時間とリソースを要求できる。本開示の例としての実施形態は、高性能カーネルがバックグラウンドで開発される間、ユーザーが多様な作業(例えば、システム統合、カスタマーデモ、システムの状態及び他の作業)を遂行できるようにする。なお、ブリッジカーネルは、他のカーネルにコストベースのルーティングを遂行することができる。つまり、ブリッジカーネルは、ホストから受信された引数の一部の機能とエンベデッドプロセッサを含むストレージ装置に構成された、多様なストレージ装置又はネットワーキングパラメータをベースに、他のカーネルを呼び出すことができるとの意味である。例として、いくつかの実施形態では、ランタイム時に、ホストから受信された引数に基づいて、ブリッジカーネルは、適切に異なる性能レベルのカーネルを呼び出すことができる。
【0027】
図1Aは、ブリッジカーネルを含むシステムの例としてのブロック図を示す。システム100は、ホスト102及びストレージ装置104(例えば、FPGAプロセッサを含むNVMe-oF(Non-Volatile Memory express over Fabrics)互換eSSD(Ethernet SSD)のようなスマートSSD、又はアクセラレーション機能があるNVMe SSD)を含む。ホスト102は、ユーザーアプリケーション106モジュール及びOpenCL(open computing language)108モジュールを含む。OpenCL108モジュールは、コンピューティング・オフロード・アプリケーション・プログラミング・インターフェースを示すために使用され得る(例えば、これは、ホスト102とストレージ装置104との間の任意のコンピューティングオフロードインターフェース(例えば、SSD)に適用され得る)。ホスト102は、PCIe(Peripheral Component Interconnect Express)又はイーサネット(登録商標)の連結を使用してストレージ装置104との連結を設定することができる。
【0028】
ストレージ装置104は、ブリッジカーネルを含む。一部の実施形態では、ブリッジのカーネルは、ブリッジカーネルのハードウェア110及びブリッジカーネルのファームウェア116を含み得る。ストレージ装置104は、エンベデッドプロセッサ112、FIFO(first in first out)118レジスタ及びDRAM(dynamic random-access memory)をさらに含む。DRAM120は、データバッファ122及びハンドシェイク領域124を含む。エンベデッドプロセッサ112は、オフロードされたアプリケーション関数114及びブリッジカーネルのファームウェア116を含む。
【0029】
一部の実施形態では、システム100のホスト102は、オペレーティングシステム(OS)、ファイルシステム(FS)及びNVMe-oFドライバをさらに含み得る。いくつかの実施形態では、ストレージ装置104は、イーサネット(登録商標)スイッチ、ベースボード管理コントローラ(baseboard management controller、以下ではBMC)及びPCIeスイッチを含むシャーシ(図示せず)内に有り得る。イーサネット(登録商標)スイッチは、ミッドプレーンを介してストレージ装置104(例えば、スマートSSD)へのイーサネット(登録商標)連結を提供し、PCIeスイッチは、ミッドプレーンを介してストレージ装置104に管理インターフェースを提供する。BMCは、システムマネージャーによって与えられた命令に基づいてストレージ装置104をプログラムすることができる。BMCは、イーサネット(登録商標)スイッチ、PCIeスイッチ及びストレージ装置104を含むシャーシの内部の構成要素を管理することができる。BMCは、システム管理のためのPCIe及び/又はシステム管理バス(SMBus)のインターフェースをサポートすることができる。BMCは、ストレージ装置104を構成し、イーサネット(登録商標)スイッチをプログラムすることができる。いくつかの実施形態では、イーサネット(登録商標)スイッチは、ホスト102とストレージ装置104との間のネットワーク連結を提供する。
【0030】
図1Bは、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)によってオフロードされた関数の異なるカーネルへのコストベースのルーティングプロセスを示す。いくつかの実施形態では、システム100は、オフロードされた関数(例えば、オフロードされたアプリケーション関数114)をスマートSSD(例えば、ストレージ装置104)のようなストレージ装置に比較的迅速にポーティングすることができる。いくつかの実施形態では、ホスト(例えば、ホスト102)のCPU上で実行されるユーザーアプリケーション106は、いくつかの機能をスマートSSD(例えば、ストレージ装置104)にオフロードすることから利益を得ることができる。一般的に、SSD(例えば、ストレージ装置104)に格納された多くのデータを処理する機能は、このようなオフロードから利益を得ることができる。オフロードされた関数(例として、オフロードされたアプリケーション関数114)は、「カーネル」(例えば、126(1)~126(n)、126(n+1)~126(m))として参照され得る。
【0031】
図1Bにおいて、カーネル(126(1)~126(n))は、ソフトウェアカーネルであり、カーネル(126(n+1)~126(m))は、ハードカーネル又はハードウェアカーネルである。カーネル(126(1)~126(n))の中でのソフトウェアカーネルは、エンベデッドプロセッサ112上で実行され得る。ホストアプリケーション(例えば、ユーザーアプリケーション106で実行)は、ホスト102上のOpenCL(例えば、OpenCL108)のような言語により提供されるインターフェースを介して、ストレージ装置104側のブリッジカーネルのハードウェア110を介してカーネル(126(1)~126(n)、126(n+1)~126(m))とインターフェースすることができる。
【0032】
一部の実施形態で、カーネル(例えば、126(1)~126(n)、126(n+1)~126(m))の中で、複数のカーネルは、高性能カーネル(例として、高性能のカーネルは設定された、又は予め決定された閾値を超える性能メトリックを有し得る)になることができ、カーネル(126(1)~126(n)、126(n+1)~126(m))の中で、他の複数のカーネルは、低性能のカーネルであり得る(例えば、低性能カーネルは設定された、又は予め決定された閾値未満の性能メトリックを有し得る)。ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)は、データ処理のためにカーネル(126(1)~126(n)、126(n+1)~126(m))の中から複数のカーネルの選択を行うことができる。
【0033】
いくつかの実施形態で、ブリッジカーネルは、コスト関数に基づいて、データ処理のためのカーネルの選択を行うことができる。一部の実施形態では、コスト関数は、ホスト102から受信された引数と、ホスト102から受信されたストレージ又はネットワーキングのパラメータに基づいて決定され得る。ストレージ又はネットワーキングのパラメータの例は、SQID(Submission Queue Identifier)、CQID(Completion Queue Identifier)、ストリームID、ホストID、LBA(Logical Block Address)の範囲、NSID(Network Service ID)、MAC(Media Access Control)ID 、TCP(Transmission Control Protocol)/IP(Internet Protocol)フィールド、アプリケーション識別子、ホスト102に関連付けられた時間及び/又は日付、これらの組み合せなどを含み得るが、これに限定されない。
【0034】
例えば、引数はホスト102アプリケーション側からブリッジカーネルに伝達され得る(例えば、ホスト102アプリケーションは、コスト関数をブリッジカーネルのハードウェア110にオフロードすることができる)。ブリッジカーネルは与えられたカーネルを使用してコストを計算することができる。ブリッジカーネルは、コスト関数とホスト102から受信された格納又はネットワーキングパラメータの組み合せに基づいて、最適なカーネルを選択することができる。例としては、ストレージ装置104は、2つのデータ圧縮カーネルを実現することができ、1つはスループットのために、他の1つは、より良い圧縮率のために設計されたものである。ホスト102からの圧縮の与えられたランタイムの呼び出しに対し、ブリッジカーネルは長さの引数をチェックすることができ、長さが、例えば64KBよりも大きいごとに、より良い圧縮率のカーネルを選択することができ、残りのためには、他のタイプの圧縮率のカーネルを選択することができる。一部の実施形態では、ブリッジカーネルのハードウェア110は、FIFOレジスタを用いてデータ処理に使用するために、カーネルの(126(1)~126(n)、126(n+1)~126(m))の中から最適なカーネルを選択することができる。
【0035】
図2A、2Bは、オフロードされたカーネルに接続するホストアプリケーション(例えば、ユーザーアプリケーション106)の例としてのフローチャート200を示す。S201において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、上位階層(例として、図4に示すように、ホストの上位階層のソフトウェア136)からコール(call)又は呼び出しを受信することができる。S202において、ブリッジカーネル(例えば、ブリッジカーネルドライバ)は、ホストの引数(例えば、引数-1~引数-n)をホストのレジスタインターフェース(例として、図3に示すレジスタインターフェース)に格納することができる。S203において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、データ処理のためにバッファ(例えば、データバッファ122)を割り当てることができる。S204において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、オフロードされたアプリケーション関数114によって必要な他の引数を初期化することができる。S205において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、処理のためにバッファにデータをフェッチすることができる。S206において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、処理カーネルを呼び出すことができる。データ処理が完了すると、S207において、システム100は、クリーンアップの動作を遂行することができる。S208において、オフロードされたアプリケーション関数114は、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)を介して、上位階層のアプリケーションソフトウェアに対する呼び出しを返すことができる。
【0036】
一部の実施形態で、ブリッジカーネルは、ホスト102に一般的なレジスタインターフェースを提供することができる。図3は、ブリッジカーネルによってホスト102に提示されたレジスタインターフェース300の例を示す。レジスタインターフェース300は、ストレージ装置104に位置することができる。システム100は、オフロードされた関数(例として、オフロードされたアプリケーション関数114)に引数を伝達して返された値又は状態を検出するために(例えば、図3に示すように)レジスタインターフェース300を使用して、カーネルを(例えば、ユーザーアプリケーション106で実行中である)ホストアプリケーションに提示することができる。一部の実施形態では、システム100は、カーネルに対するバッファの割り当てを容易にするために、OpenCL108プラットフォームを使用することができる。
【0037】
図4は、図1のDRAM120のハンドシェイク領域124のレイアウトの例を示す。図4に示すように、いくつかの実施形態では、ブリッジカーネルのハードウェア110は、ホスト102から受信された引数(例えば、引数-1~引数-n)をストレージ装置104(例えば、スマートSSD)のDRAM120内に存在するセット又は予め決定されたメモリの位置に一時的に格納することができる。いくつかの実施形態では、オンチップのFIFO118の構造は、DRAM120の代わりにオフロードされたアプリケーション関数114、ファームウェア、及びブリッジカーネルのファームウェア116を統合するエンベデッドプロセッサ112に引数を伝達するのに使用され得る。
【0038】
レジスタインターフェース300の内容、例えば、引数-1~引数-nはDRAM120のハンドシェイク領域124に一時的に格納され得る。一度引数がDRAM120に格納されると、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124に「準備」フラグ128を設定することができる。この時点で、ブリッジカーネルのハードウェア110は、ファームウェア(例えば、ブリッジカーネルのファームウェア116)で実行される、オフロードされた関数が処理を完了するのを待機することができる。したがって、オフロードされた関数処理の完了を決定するために、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124で「完了」フラグ130をポーリングすることができる。
【0039】
ブリッジカーネルのハードウェア110が「完了」フラグ130を検出すると、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124から任意のエラー又は他の状態を読み取ることができる。ブリッジカーネルのハードウェア110は、(図3に示したように)レジスタインターフェース300の対応するレジスタへのエラー及び/又は他の状態132をアップデートすることができる。ブリッジカーネルのハードウェア110は、「完了」レジスタを設定することができ、これは、最終的にオフロードされた関数の呼び出しの完了を表示するために、ホストアプリケーションのソフトウェア134によってポーリングされ得る。
【0040】
図5は、ブリッジカーネルのハードウェアを状態マシンとして使用するフローチャート500を示す。ブリッジカーネルのハードウェアは、図1のブリッジカーネルのハードウェア110であり得る。
【0041】
S501において、ブリッジカーネルのハードウェア110は、アイドル状態に維持される。S501において、ブリッジカーネルハードウェア110は、ホスト102からトリガーを受信する。S503において、ブリッジカーネルのハードウェア110は、ホストレジスタインターフェースからのホスト102から受信された引数(例えば、引数-1~引数-n)をフェッチする(例として、図3に示すレジスタインターフェース)。S505において、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124にホスト102から受信された引数(例えば、引数-1~引数-n)を一時的に格納する。引数がDRAM120に一時的に格納されると、S507において、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124の「準備」フラグ128を設定する。
【0042】
この時点で、ブリッジカーネルのハードウェア110は、ファームウェア(例えば、ブリッジカーネルのファームウェア116)でのオフロードされた関数が引数に基づいて、それの処理を完了するのを待機する。このために、S509において、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124で「完了」フラグ130をポーリングする。一部の実施形態では、ブリッジカーネルのハードウェア110が「完了」フラグ130を検出すると、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124から任意のエラー及び/又は他の状態を読み取ることができる。ブリッジカーネルのハードウェア110は、(図3に示したように)レジスタインターフェース300の適切なレジスタへのエラー及び/又は他の状態132をアップデートする。ブリッジカーネルのハードウェア110は、オフロードされた関数の呼び出しの完了を示すためにホストアプリケーションのソフトウェア134によって順番にポーリングされる「完了」レジスタを設定する。
【0043】
S511において、ブリッジカーネルのハードウェア110は、ホストレジスタインターフェース(例として、図3の300)で「準備」フラグ(ready flag)128を設定する。S511の後に、ブリッジカーネルのハードウェア110は、S501に復帰する。
【0044】
図6は、ブリッジカーネルのファームウェアの動作を示す。ブリッジカーネルファームウェアは、図1のブリッジカーネルのファームウェア116であり得る。
【0045】
S601において、ブリッジカーネルのファームウェア116は、アイドル状態に維持される。S603において、DRAM120の「準備」フラグ128は、エンベデッドプロセッサ112上で実行されるブリッジカーネルのファームウェア116によってポーリングされる。言い換えると、ブリッジカーネルのファームウェア116は、適切な引数を有するオフロードされた関数(例えば、オフロードされたアプリケーション関数114)を呼び出すオフロードマネージャーとして動作する。ブリッジカーネルのファームウェア116が「準備」フラグ128が設定されることを検出すると、S605において、ブリッジカーネルのファームウェア116は、DRAM120のハンドシェイク領域124に一時的に格納された引数(例えば、引数-1~引数-n)をフェッチする。S607において、ブリッジカーネルのファームウェア116は、ホスト102の引数とともにオフロードされたアプリケーション関数114を呼び出す。オフロードされたアプリケーション関数114は、引数(例えば、引数-1~引数-n)を使用して設計された通りに、データ処理関数を遂行する。オフロードされたアプリケーション関数114の例は、608に示す。データ処理が完了すると、S609において、オフロードされたアプリケーション関数114は、ブリッジカーネルのファームウェア116への呼び出しを返す。S611において、ブリッジカーネルのファームウェア116は、DRAM120のハンドシェイク領域124で「完了」フラグ130を設定する。「完了」フラグ130は、前に説明したように、ブリッジカーネルのハードウェア110によってポーリングされて完了を再びホスト102に伝送する。S611の後に、ブリッジカーネルのファームウェア116は、S601に返される。
【0046】
一部の実施形態で、ブリッジカーネルは、アプリケーション(例えば、ユーザーアプリケーション106で実行中)をホストするためのプロキシとして動作する。例として(例えば、ユーザーアプリケーション106で実行中)、ホストアプリケーションは、オフロードされた関数がどこで又はどのように実装されるかとは無関係である。いくつかの実施形態では、カーネルの実装は、ホスト102に明白(transparent)であり得る。いくつかの実施形態では、カーネルは、ソフトウェアカーネルとしてエンベデッドプロセッサ(例えば、エンベデッドプロセッサ112)上に実装され得る。しかし、いくつかの実施形態では、カーネルは、ハードウェアゲート(例えば、ブリッジカーネルのハードウェア110)に実装され得る。
【0047】
いくつかの実施形態で、ブリッジカーネルそのものは、オフロードされた関数(例えば、オフロードされたアプリケーション関数114)に無関係であり、これは、ユーザーの機密性(例えば、IPアドレスの機密性)を可能にする。したがって、ストレージ装置のユーザーに公開しなくても、ソフトウェアカーネル又はハードウェアカーネルに独自のオフロードされた関数を作成することができる。つまり、ブリッジカーネルのメカニズムの例としての実施形態は、個人(private)アクセラレーション機能をストレージ装置にオフロードするために、ユーザーによって使用されるプラットフォームとして動作できる。いくつかの実施形態では、カーネル及び/又はオフロードされた関数のホストインターフェースは変更されない可能性がある(例として、相当にホスト側を変更せず、カーネルを高性能バージョンにアップグレードすることができる)。そのような場合に、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)のRTLは、ホストアプリケーション(例えば、ユーザーアプリケーション106)に標準の又は合意されたインターフェースを提供することができる。
【0048】
一部の実施形態で、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)は、ブリッジカーネルのファームウェア116とのハンドシェイクを遂行するために、FPGA DRAM(例えば、DRAM120)メモリを使用することができる。他の実施形態では、ブリッジカーネルのハードウェア110はブリッジカーネルのファームウェア116とのハンドシェイクを遂行するために、オンチップFIFO(例えば、FIFO118)を使用することができる。一部の実施形態では、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)のRTLは、エンベデッドプロセッサ112上で実行されるオフロードされた関数に引数を伝達するためにFPGA DRAM(例えば、DRAM120)を使用することができる。
【0049】
一部の実施形態で、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)は、基本的なトランスポート(transport、伝送)メカニズム(例えば、PCIe、イーサネット(登録商標)など)とは無関係の可能性があり、これは、ホスト102とストレージ装置104との間の連結を設定するために使用される。一部の実施形態では、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)を含むシステム100は、ブリッジカーネルを使用しないシステムと比較して、比較的迅速なポーティング又は開発オプションを提供することで、比較的速いユーザーの参加を提供することができ、ユーザーによって既存のコードベースの再利用を増加させることができ、高性能のカーネルを開発している間に、システムは、他の活動を行うことになる。いくつかの実施形態では、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)を含むシステム100は、またシステム統合、認証、テスト、デモなどを提供することができる。
【0050】
いくつかの実施形態で、ブリッジカーネルは、ホストによって伝達された(及び/又は装置によって設定される)引数を使用して呼び出す、オフロードされた関数(例えば、カーネル)を決定することができる。一部の実施形態では、ブリッジカーネルは、ソフトカーネル、ハードカーネル又は多様な性能レベルの1つ以上のカーネルを呼び出すことができる。一部の実施形態では、ブリッジカーネルは、引数に基づいて、特定のカーネルを選択するために、コスト関数を使用することができる。いくつかの実施形態では、カーネルの選択は、アプリケーションのタイプ、アプリケーション識別子、名前空間識別子、ホスト識別子、LBAアドレスの範囲、NVMeセット識別子、NVMe提出キュー識別子、完了キュー識別子、ストリーム識別子、イーサネット(登録商標)MACのような構成パラメータ及び識別子、TCP/IPアドレス及びその他のトランスポート/ネットワークパラメータ、並びに日付及び時刻のような一般的なパラメータに基づく。
【0051】
ただし、ここで第1、第2、第3などの用語は、多様なエレメント、構成要素、領域、層及び/又はセクションを説明するために使用するが、これらのエレメント、構成要素、領域、層及び/又はセクションは、これらの用語により限定されないと理解されるであろう。これらの用語は、他のエレメント、構成要素、領域、層又はセクションから1つのエレメント、構成要素、領域、層又はセクションを区別するために使用する。したがって、後述する第1のエレメント、構成要素、領域、層又はセクションは、本発明の思想及び範囲を逸脱することなく、第2のエレメント、構成要素、領域、層又はセクションを指すことができる。
【0052】
1つのエレメント又は特色と図面で示した他のエレメント又は特色との特徴的な関係を説明するための説明を容易にするために、「すぐ下に」、「より下に」、「下部」、「特定の部分の下に」、「の上に」、「上部」のような空間的かつ相対的な用語がここで使用できる。空間的かつ相対的な用語は、図面で描写した方向に加えて、使用又は動作において、装置の他の方向を含むように意図する。例えば、もし図面の装置が裏返されると、他の構成要素又は特徴の「より下に」、「すぐ下に」又は「特定の部分の下に」で説明した構成要素は、他の構成要素又は特徴の「の上に」配置されるようになる。したがって、「より下に」又は「特定の部分の下に」の例としての用語は、上又は下の方向の両方を含み得る。装置は、別な方法で方向付けられ(例えば、90度又は他の方向に回転される)、空間的かつ相対的な記述語は、それに応じて解釈されるべきである。なお、エレメント又は層が2つのエレメント又は層の間にあると言及されるときは、それは、エレメント又は層が2つのエレメント又は層の間に有り得るか、又は1つ以上の間のエレメント又は層が、また存在することができる。
【0053】
本明細書で使用する用語は、単に特定の実施形態を説明するためのものであり、本発明を限定しようとするものではない。本明細書で使用する「大体は」、「約」という用語及びこれと類似の用語は、近似の用語として使用し、程度の用語として使用せずに、本発明の当業者によって識別される、測定された又は計算された値の固有の変動を考慮するためのものである。
【0054】
本明細書で使用するように、文脈上明らかに別のものを示していると判定されない限り、単数形「1つ」は、複数の形態も含むものと意図する。「構成される」、「構成されている」、「含む(comprise)」、及び「含んでいる(comprising)」という用語は、本明細書で使用するとき、これらの用語は、定められた特徴、整数、段階、動作、エレメント、及び/又は構成要素の存在を明示するが、1つ以上の他の特徴、整数、段階、動作、エレメント、構成要素、及び/又はそれらのグループの追加又は存在を排除しない。本明細書で使用する「及び/又は」という用語は、1つ又はそれ以上のリスト(list)された項目に関連付けられる任意かつすべての組み合せを含む。「少なくとも1つ」のような表現は、エレメント全体のリストを修正し、リストの個々のエレメントを修正しない。なお、本発明の実施形態を記述するときに、「できる」の使用は、「本発明の1つ以上の実施形態」を意味する。本明細書で使用する「使用(use)」、「使用される(using)」、及び「使用された(used)」という用語は、「利用(utilize)」、「利用される(utilizing)」、及び「利用された(utilized)」という用語の同義語として各々見なされ得る。また、「例示」という用語は、例又は図案を意味する。
【0055】
1つのエレメントが、他のエレメントに「連結」されると述べるときには、それが他のエレメントと直接連結されたり、介在するエレメントが存在することができるものと理解されるべきである。一方、1つのエレメントが、他のエレメントと「直接連結」されると述べる場合には、介在するエレメントが存在しないことを示す。ここで使用する、「及び/又は」という用語は1つ以上の関連された、リストされた項目のすべての可能な組み合せを指示したり、含んだりすると理解されるべきである。
【0056】
ここで引用された任意の数値範囲は、引用の範囲内に含まれる同一の数値精度のすべての部分範囲を含むものと意図する。たとえば、「1.0~10.0」の範囲は、記載された最小値1.0と記載された最大値10.0との間、すなわち、2.4~7.6のような10.0以下の最大値と1.0以上の最小値を有する(及び含む)すべての部分範囲を含むように意図する。例えば、本明細書に引用した任意の最大値の限定は、その中に含まれるすべての下位数値の限定を含むものと意図し、本明細書に引用した任意の最小値の限定は、それに含まれるすべてより高い数値の限定を含むものと意図する。
【0057】
一部の実施形態で、本開示の方法とシステムの異なる実施形態の1つ以上の出力は、本開示の方法及びシステムの異なる実施形態の1つ以上の出力又は1つ以上の出力に関する情報を表示するためのディスプレイ装置に連結されたり、これを有する電子装置に伝送されたりすることができる。
【0058】
本明細書で記述された本発明の実施形態による電子や電気装置、及び/又は他の任意の関連付けられる装置やエレメントは、任意の適切なハードウェア、ファームウェア(例えば、Application Specific Integrated Circuit:ASIC)、ソフトウェア、又はソフトウェア、ファームウェア及びハードウェアの組み合せを用いて実装され得る。たとえば、これらの装置の多様なエレメントは、1つの集積回路(Integrated Circuit:IC)チップ又は分離されたICチップに形成され得る。なお、これらの装置の多様なエレメントは、フレキシブルプリント回路フィルム(Flexible Printed Circuit Film)、TCP(Tape Carrier Package)、プリント回路基板(Printed Circuit Board:PCB)上に実装されたり、単一の基板上に形成されたりすることができる。なお、これらの装置の多様なエレメントは、コンピュータプログラムの命令を遂行し、本明細書で説明した、多様な機能を遂行するための他のシステムエレメントと相互作用する1つ以上のコンピューティング装置、又は1つ以上のプロセッサで遂行されるプロセス又はスレッド(Thread)であり得る。コンピュータプログラムの命令は、例えば、RAM(Random Access Memory)のような標準的なメモリ装置を利用するコンピューティング装置で実現されるメモリ内に格納される。コンピュータプログラムの命令は、また、例えば、CD-ROM、フラッシュドライブ(Flash Drive)、又はそのような他の一時的でないコンピュータ読み取り可能なメディア(Non-transitory Computer Readable Media)に格納される可能性もある。また、本発明の当業者は、本発明の例としての実施形態の思想と範囲を逸脱することなく、多様なコンピューティング装置の機能は、単一のコンピューティング装置に統合されたり集積されたりし、特定のコンピューティング装置の機能が1つ又はそれ以上の他のコンピューティング装置に分散され得ることを認識しなければならない。
【0059】
アプリケーション関数を装置にオフロードするためのシステム及び方法の例としての実施形態を、具体的に説明して図示したが、多くの修正及び変形が当業者には明らかであろう。したがって、ここで開示した、このように本開示の原理に基づいて構成された装置に、アプリケーション関数をオフロードするシステム及び方法は、本明細書に具体的に説明したものとは異なるように実装され得ることが理解されるべきである。本発明の概念は、また以下の特許請求の範囲及びその等価物で定義される。
【符号の説明】
【0060】
100 システム
102 ホスト
104 ストレージ装置
106 ユーザーアプリケーション
108 OpenCL
110 ブリッジカーネルのハードウェア
112 エンベデッドプロセッサ
114 オフロードされたアプリケーション関数
116 ブリッジカーネルのファームウェア
118 FIFO
120 DRAM
122 データバッファ
124 ハンドシェイク領域
126 カーネル
128 「準備」フラグ
130 「完了」フラグ
132 レジスタへのエラー及び/又は他の状態
134 ホストアプリケーションのソフトウェア
136 ホストの上位階層のソフトウェア
200、500 フローチャート
300 レジスタインターフェース
608 アプリケーション関数の例

図1A
図1B
図2A
図2B
図3
図4
図5
図6