JP2020102218A - アプリケーション関数を装置にオフロードするためのシステム及び方法 - Google Patents

アプリケーション関数を装置にオフロードするためのシステム及び方法 Download PDF

Info

Publication number
JP2020102218A
JP2020102218A JP2019229993A JP2019229993A JP2020102218A JP 2020102218 A JP2020102218 A JP 2020102218A JP 2019229993 A JP2019229993 A JP 2019229993A JP 2019229993 A JP2019229993 A JP 2019229993A JP 2020102218 A JP2020102218 A JP 2020102218A
Authority
JP
Japan
Prior art keywords
bridge kernel
host
bridge
arguments
kernel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2019229993A
Other languages
English (en)
Inventor
ピー. カシャレ ランダス
Kachare Ramdas P
ピー. カシャレ ランダス
ジー. フィッシャー ステヘン
g fischer Stephen
ジー. フィッシャー ステヘン
ピー. ピント オスカー
P Pinto Oscar
ピー. ピント オスカー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2020102218A publication Critical patent/JP2020102218A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44594Unloading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Information Transfer Systems (AREA)
  • Computer And Data Communications (AREA)
  • Bus Control (AREA)

Abstract

【課題】本発明の目的は、装置にアプリケーション関数をオフロードするためのシステム及び方法を提供することにある。【解決手段】システムは、ホスト装置と、エンベデッドプロセッサを含むストレージ装置と、ブリッジカーネルのハードウェア及びブリッジカーネルのファームウェアを含むブリッジカーネル装置と、を備えるシステムを有し、ブリッジカーネル装置は、ホスト装置から複数の引数を受信し、データ処理のために、エンベデッドプロセッサに複数の引数を伝送するように構成される。【選択図】 図1A

Description

本発明は、オフロードするためのシステム及び方法に係り、より詳しくは、装置にアプリケーション関数を分担するシステム及び方法に関する。
最新の情報技術(IT)インフラストラクチャでは、多様な装置とプロセスによって、比較的多量のデータが生成され得る。このようなデータ生成器のいくつかの例は、スマート装置(例えば、アイフォーン(iPhone(登録商標))、アイパッド(登録商標)(iPad(登録商標))など)、自律走行車両、ソーシャルネットワーク、及びモノのインターネット(IOT)装置を含む。収集されたデータを分析・使用して、高いアプリケーションの効率性と生産性を達成するために、人工知能(Artificial Intelligence:AI)と機械学習(Machine Learning:ML)のアルゴリズムが開発されている。最近のITインフラストラクチャの発展に照らしてデータを処理・分析することが好ましい。
前記情報は、単に技術の背景に対する理解を増安ためだけのものであり、従来技術の存在又は関連性を認めるものと解釈されてはならない。
米国特許第8848741号明細書 米国特許出願公開第2007/0245409号明細書 米国特許出願公開第2008/0140932号明細書 米国特許出願公開第2014/0149692号明細書 米国特許出願公開第2014/0198652号明細書 米国特許出願公開第2016/0293274号明細書 米国特許出願公開第2019/0107956号明細書
本発明は、上述した技術的課題を解決しようとするものであって、本発明の目的とするところは、装置にアプリケーション関数をオフロードするためのシステム及び方法を提供することにある。
本開示の実施形態の一面は、装置にアプリケーション関数をオフロードするためのシステム及び方法に関連付けられる。本開示のいくつかの実施形態によると、システムは、ホスト装置と、エンベデッドプロセッサを含むストレージ装置と、ブリッジカーネルのハードウェア及び前記ブリッジカーネルのファームウェアを含むブリッジカーネル装置と、を備えるシステムを有し、前記ブリッジカーネル装置は、前記ホスト装置から複数の引数を受信し、データ処理のために前記エンベデッドプロセッサに前記複数の引数を伝送するように構成される。
いくつかの実施形態において、前記ブリッジカーネル装置の実装は、前記ホスト装置に明白(transparent)であり、前記ブリッジカーネル装置は、前記ホスト装置と前記ブリッジカーネル装置と間の伝送(transport)メカニズムに無関係であり、伝送メカニズムは、PCIe(Peripheral Component Interconnect express)又はイーサネット(登録商標)連結のいずれか一つである。いくつかの実施形態では、前記ストレージ装置は、SSD(Solid State Device)であり、前記エンベデッドプロセッサは、FPGA(Field Programmable Gate Array)プロセッサ、SSDコントローラ又は離散コプロセッサであり、前記エンベデッドプロセッサは、前記エンベデッドプロセッサ上で実行されるように構成されるオフロードされたアプリケーション関数を含み、前記ブリッジカーネルのファームウェアをさらに含み、前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を、前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置のホストレジスタインターフェースから受信された前記複数の引数をフェッチする。
いくつかの実施形態で、前記ストレージ装置は、FIFO(First In First Out)レジスタ及びDRAM(Dynamic Random Access Memory)を含み、前記DRAMは、前記ホスト装置から受信された前記複数の引数を格納するために、複数のデータバッファ及びハンドシェイク領域を含み、前記FIFOレジスタ及び前記DRAMは、前記ブリッジカーネルのハードウェアと通信できるように連結される。いくつかの実施形態では、前記FIFOレジスタは、データ処理のために前記オフロードされたアプリケーション関数を含む前記エンベデッドプロセッサに前記複数の引数を通過させるように構成される。いくつかの実施形態では、前記ブリッジカーネル装置は、前記ホスト装置のカスタマーアプリケーションモジュール上で実行されるホストアプリケーションに対するプロキシとして動作するように構成され、前記ホストアプリケーションは、前記オフロードされたアプリケーション関数がどこで、どのように実行されるかとは無関係である。
いくつかの実施形態では、前記ホスト装置は、カスタマーアプリケーションモジュール及びOpenCL(Open Computing Language)モジュールを含み、前記ホスト装置は、前記ストレージ装置を利用して、PCIe(Peripheral Component Internet express)又はイーサネット(登録商標)連結を設定するように構成される。いくつかの実施形態では、前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネルを含み、前記ブリッジカーネルのファームウェアは、前記エンベデッドプロセッサ上で実行されるように構成される複数のソフトウェアカーネルを含み、前記ホスト装置の前記カスタマーアプリケーションモジュール上で実行されるホストアプリケーションは、前記OpenCLモジュールを介して、前記複数のソフトウェアカーネルと前記複数のハードウェアカーネルのうち少なくとも一つと連結するように構成される。いくつかの実施形態では、前記ブリッジカーネル装置は、コスト関数に基づいて、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から1つ以上のカーネルを選択するように構成される。
いくつかの実施形態で、前記ブリッジカーネル装置は、前記複数の引数と、前記ホスト装置から受信されたストレージ又はネットワーキングのパラメータを用いて、前記コスト関数に基づいて、データ処理のために前記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の前記ハンドシェイク領域内の前記複数の引数をフェッチするように構成され、前記ホスト装置から受信された前記複数の引数を有する前記オフロードされたアプリケーション関数を呼び出すように構成される。いくつかの実施形態では、前記オフロードされたアプリケーション関数は、データ処理のため、前記複数の引数を使用するように構成される。
ここで開示されるいくつかの実施形態によると、方法は、ストレージ装置内のブリッジカーネル装置により、前記ストレージ装置に連結されたホスト装置からトリガーを受信する段階と、前記ブリッジカーネル装置により、前記ホスト装置から受信された複数の引数をフェッチする段階と、前記ブリッジカーネル装置により、前記ストレージ装置のDRAM内に前記複数の引数を格納する段階と、前記ブリッジカーネル装置により、前記DRAM内の第1の準備フラグを設定する段階と、前記ブリッジカーネル装置により、前記複数の引数に基づいて前記ストレージ装置のエンベデッドプロセッサ内の前記ブリッジカーネル装置のファームウェア内のオフロードされた関数の処理が完了されたかを決定する前記ブリッジカーネル装置に基づいて、前記DRAM内の完了フラグをポーリングする段階と、前記ブリッジカーネル装置により、ホストレジスタインターフェース内に第2の準備フラグが設定される段階と、を備え、前記ブリッジカーネル装置は、前記ホストレジスタインタフェースから前記複数の引数をフェッチするように構成され、前記複数の引数は、前記DRAMのハンドシェイク領域内に格納され、前記第1の準備フラグは前記DRAMの前記ハンドシェイク領域内に設定され、前記完了フラグは前記DRAMの前記ハンドシェイク領域内にポーリングされる。
いくつかの実施形態で、方法は、前記ブリッジカーネル装置により、前記DRAMの前記ハンドシェイク領域内の前記完了フラグを検出することに基づいて、前記DRAMの前記ハンドシェイク領域からエラー又は状態を読み取る段階と、前記ブリッジカーネル装置により、前記ホストレジスタインターフェースへの前記エラー又は前記状態をアップデートする段階と、をさらに備える。いくつかの実施形態では、方法は、前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAM内の前記第1の準備フラグをポーリングする段階と、前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAMの前記ハンドシェイク領域内に前記複数の引数をフェッチする段階と、前記ブリッジカーネル装置の前記ファームウェアにより、データ処理のために前記複数の引数を有する前記ストレージ装置の前記エンベデッドプロセッサ内の前記オフロードされたアプリケーション関数を呼び出す段階と、前記オフロードされたアプリケーション関数により、前記データ処理の完了に基づいて前記ブリッジカーネル装置の前記ファームウェアに、前記ブリッジカーネル装置の前記ファームウェアによって呼び出された前記オフロードされたアプリケーション関数を返す段階と、前記ブリッジカーネル装置の前記ファームウェアにより、前記DRAMの前記ハンドシェイク領域内に完了フラグを設定する段階と、を備える方法を有する。
本開示のいくつかの実施形態によると、システムは、エンベデッドプロセッサを含むストレージ装置と、ホスト装置から複数の引数を受信してデータ処理のために前記複数の引数を前記エンベデッドプロセッサに伝送するブリッジカーネル装置と、を備える。いくつかの実施形態で、前記ブリッジカーネル装置は、ブリッジカーネルのハードウェア及びブリッジカーネルのファームウェアを含み、前記ストレージ装置は、SSD(Solid State Drive)であり、前記エンベデッドプロセッサはFPGA(Field Programmable Gate Array)プロセッサ、SSDコントローラ又はコプロセッサであり、前記エンベデッドプロセッサはオフロードされたアプリケーション関数及び前記ブリッジカーネルのファームウェアを含み、前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を前記エンベデッドプロセッサ上で実行されるように構成される前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置から受信された前記複数の引数をホストレジスタインターフェースからフェッチする。
いくつかの実施形態で、前記ストレージ装置は、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つ以上のカーネルを選択するように構成される。
本発明は、ソフトウェアベースのオフロードされた関数を用いて、ホストでその機能を遂行するソフトウェアコードを再利用することができる。また、本発明は、ソフトウェア又はファームウェアとしてオフロードされた関数を実行して、ホストソフトウェアスタックとオフロードされるカーネルとの間のインターフェースをソフトウェアカーネル及び他の形態のカーネルの実装と同じように維持することができる。したがって、初期の迅速なオフロードがソフトウェアカーネルの形態で遂行され、後にオフロードされた関数は、全体のホストソフトウェアスタック、及び/又はシステムアーキテクチャを大幅に変更したり、中断したりせずに、ハードウェアで実装され得る。速いオフロード及び実行を通じて、より高い性能のカーネルが開発されているうち、他のシステムの活動(例えば、システム統合、検証、特性化など)が進行され得る。
すなわち、本発明は、効率的且つコスト効率的なデータ処理のために、アプリケーション関数をエンベデッドプロセッサを含むSSDのようなコンピュータのストレージ装置にオフロードすることができる。
ブリッジカーネルを含むシステムの例としてのブロック図を示す。 ブリッジカーネルによってオフロードされた関数の異なるカーネルへのコストベースのルーティングプロセスを示す。 オフロードされたカーネルに接続するホストアプリケーションの例としてのフローチャートを示す。 オフロードされたカーネルに接続するホストアプリケーションの例としてのフローチャートを示す。 ブリッジカーネルによってホストに提示されたレジスタインターフェースの例を示す。 図1のDRAMハンドシェイク領域のレイアウトの例を示す。 ブリッジのカーネルのハードウェアを状態マシンとして使用するフローチャートを示す。 ブリッジカーネルのファームウェアの動作を示す。
添付した図面と関連して、以下の詳細な説明は、本発明に基づいて提供された装置にアプリケーション関数をオフロード(off−load)するためのシステム及び方法のいくつかの例としての実施形態の説明として意図したものであり、本開示が構成できたり、使用できたりする唯一の形態を示すために意図したものではない。本説明は、図示した実施形態に関連して、本開示の特徴を説明する。しかし、同一又は同等の機能及び構造は、また本開示の範囲内に含まれるように意図した、異なる実施形態により達成され得ることを理解しなければならない。類似の要素符号は、類似の要素又は特徴を示すように意図する。
いくつかのシステムアーキテクチャで、データは、永続的ストアから高性能ネットワークを使用してストア(ストレージ装置)に連結できる比較的高性能のサーバにフェッチされ得る。処理及び分析のために、中央処理装置(CPU)に多量のローデータ(raw data)のようなデータ移動は、エネルギー消費、コンピューティング及び配置されたネットワークリソースの量の観点から多くのコストがかかる。このような大量のローデータの移動は、ネットワーク帯域幅、CPUサイクル及びCPUメモリのようなリソースの負担を増加させる。処理のためにサーバに大量のローデータを移動することは、サーバ上で実行されるアプリケーションによって経験されるレイテンシを増加させる。
いくつかの状況で、アプリケーションは、処理が完了し、決定が行われる前に、データがサーバにフェッチされるまで待機する必要がある。このような追加のリソース要求により高い資本支出と運用支出のコストが発生する可能性がある。したがって、ストレージ装置(例えば、SSD(solid state device))内でローデータを処理することは、多くのデータ分析の使用事例(例えば、増加するローデータの量を通じた収益を指向する使用事例)に対するコスト効率的な解決策を示すことができる。なお、データの移動を減らすことで、アプリケーションを実行するシステム応答の待機時間を向上させることができる。
さらに、データの分析作業を利用するシステムは、たびたび比較的多量のデータを読み取ってそれを処理し、フィルタリング及び他のデータ減少動作を通じてこれを減らすことができる。このような作業は、縮小された結果を移動するだけで、装置(例えば、SSD)内で、より高い利用可能な帯域幅を活用して、SSDとCPU(例えば、RAD(Remote Direct Attached Storage)の場合、PCIe(Peripheral Component Interconnect Express)インターフェース又はネットワークファブリックインターフェース)との間の制限された帯域幅を格納することにより、このような作業及びその他の類似の作業がSSDベースのサービスとして実装され得る。したがって、ストレージ装置(例えば、SSD)にもっと近くに又はその内部でデータを処理する技術は、効率的且つコスト効率的なデータ処理のために好ましい。
本開示のいくつかの実施形態は、アプリケーション関数をコンピュータのストレージ装置(例えば、エンベデッドプロセッサを含むSSD)にオフロードするための方法及びシステムを含んでおり、これは、いくつかの例では、効率的且つコスト効率なデータ処理の解決策につながることができる。スマートストレージ装置(例えば、エンベデッドプロセッサを含むSSD)は、ホストCPUプロセッサによって遂行され得るデータ処理機能の少なくとも一部を遂行するためのプラットフォームを提供することができる。スマートSSD又は類似のストレージ装置内では、このようなデータ処理機能を遂行することは、ストレージネットワークに対するエネルギー消費量、ネットワーク帯域幅、CPUサイクル、メモリなどに関する利点を提供することができる。
いくつかの例で、オフロードされた関数は、ストレージネットワークの性能を向上させつつ消費電力を低減させるため、エンベデッドプロセッサ(例えば、FPGA、SSDコントローラ又は離散コプロセッサ)を含むストレージ装置からRTL(Register−Transfer Level)ロジック、HLS(High−Level Synthesis)又はFPGA(Field−Programmable Gate Array)ロジックを使用して実装され得る。しかし、RTL又はHLSを使用する高性能のオフロードされた関数の長い開発サイクルは、システム開発の他の活動を遮断するか、相当に遅らす。本開示のいくつかの実施形態では、ソフトウェア(ファームウェアとも呼ばれる)関数として(例えば、SSD内の)エンベデッドプロセッサでオフロードされた関数の実行を可能にする。ソフトウェアとしてオフロードされた関数を実行すると、迅速な開発時間が達成され得る。ソフトウェアベースのオフロードされた関数は、ホスト(例えば、ホストCPU)で、すでにその機能を遂行するソフトウェアコードを再利用することができる。
ストレージ装置又はSSDのエンベデッドプロセッサでソフトウェア又はファームウェアとしてオフロードされた関数を実行することは、ホストソフトウェアスタックとオフロードされるカーネルとの間のインターフェースをソフトウェアカーネル及び他の形態のカーネルの実装と同じように維持することができる。したがって、初期の迅速なオフロードがソフトウェアカーネル形態で遂行され、後にオフロードされた関数は、全体のホストソフトウェアスタック、及び/又はシステムアーキテクチャを大幅に変更したり、中断したりせずに、ハードウェアで実装され得る。速いオフロードと実行を通じて、より高い性能のカーネルが開発されている間に、他のシステムの活動(例えば、システム統合、検証、特性化など)が進行され得る。
上述したように、本発明の一部の実施形態は、効率的且つコスト効率的なデータ処理のために、アプリケーション関数をFPGA、SSDコントローラ又は離散コプロセッサのようなエンベデッドプロセッサを含むSSDのようなコンピュータのストレージ装置にオフロードするための方法及びシステムを有する。いくつかの実施形態は、オフロードされた関数の代わりにホスト(例えば、ホストCPU)に対してプロキシとして機能できるFPGAハードウェアベースのブリッジカーネルを含み得る。ブリッジカーネルは、ホストドライバからの引数を受け入れ、それらの引数(例えば、パラメータ値、メモリポインタなど)をエンベデッドプロセッサ(例えば、FPGA、SSDコントローラ又は離散コプロセッサ)でソフトウェアカーネルとして実行されるオフロードされた関数へ伝送することができる。他の実施形態では、ハードウェアとファームウェアのピース(pieces)は、ホスト上で実行されるアプリケーションとソフトウェアカーネルとの間のブリッジとして使われ得る。その次に、これらのソフトウェアカーネルを高性能のためにハードウェアに移動し、後にホストへわかりやすく(transparent)移動することができる。従って、ブリッジカーネルのホストインターフェースを追加の修正なしで使用でき、これにより、コンピュータのストレージ装置(例えば、スマートSSD)のユーザーは、例として、既存のアプリケーション関数のコードベースをストレージ装置内のエンベデッドプロセッサ(例えば、 FPGA、SSDコントローラ又は離散コプロセッサ)にポーティング(porting)して、使用事例を迅速に開発することができる。
スマートSSDのための、これらの利用容易性の開発は、ここで開示した技術に対するユーザーのより速い採用を可能にする。HLSとRTLを使用する高性能のカーネルは、比較的多くの開発時間とリソースを要求できる。本開示の例としての実施形態は、高性能カーネルがバックグラウンドで開発される間、ユーザーが多様な作業(例えば、システム統合、カスタマーデモ、システムの状態及び他の作業)を遂行できるようにする。なお、ブリッジカーネルは、他のカーネルにコストベースのルーティングを遂行することができる。つまり、ブリッジカーネルは、ホストから受信された引数の一部の機能とエンベデッドプロセッサを含むストレージ装置に構成された、多様なストレージ装置又はネットワーキングパラメータをベースに、他のカーネルを呼び出すことができるとの意味である。例として、いくつかの実施形態では、ランタイム時に、ホストから受信された引数に基づいて、ブリッジカーネルは、適切に異なる性能レベルのカーネルを呼び出すことができる。
図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との連結を設定することができる。
ストレージ装置104は、ブリッジカーネルを含む。一部の実施形態では、ブリッジのカーネルは、ブリッジカーネルのハードウェア110及びブリッジカーネルのファームウェア116を含み得る。ストレージ装置104は、エンベデッドプロセッサ112、FIFO(first in first out)118レジスタ及びDRAM(dynamic random−access memory)をさらに含む。DRAM120は、データバッファ122及びハンドシェイク領域124を含む。エンベデッドプロセッサ112は、オフロードされたアプリケーション関数114及びブリッジカーネルのファームウェア116を含む。
一部の実施形態では、システム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との間のネットワーク連結を提供する。
図1Bは、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)によってオフロードされた関数の異なるカーネルへのコストベースのルーティングプロセスを示す。いくつかの実施形態では、システム100は、オフロードされた関数(例えば、オフロードされたアプリケーション関数114)をスマートSSD(例えば、ストレージ装置104)のようなストレージ装置に比較的迅速にポーティングすることができる。いくつかの実施形態では、ホスト(例えば、ホスト102)のCPU上で実行されるユーザーアプリケーション106は、いくつかの機能をスマートSSD(例えば、ストレージ装置104)にオフロードすることから利益を得ることができる。一般的に、SSD(例えば、ストレージ装置104)に格納された多くのデータを処理する機能は、このようなオフロードから利益を得ることができる。オフロードされた関数(例として、オフロードされたアプリケーション関数114)は、「カーネル」(例えば、126(1)〜126(n)、126(n+1)〜126(m))として参照され得る。
図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))とインターフェースすることができる。
一部の実施形態で、カーネル(例えば、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))の中から複数のカーネルの選択を行うことができる。
いくつかの実施形態で、ブリッジカーネルは、コスト関数に基づいて、データ処理のためのカーネルの選択を行うことができる。一部の実施形態では、コスト関数は、ホスト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に関連付けられた時間及び/又は日付、これらの組み合せなどを含み得るが、これに限定されない。
例えば、引数はホスト102アプリケーション側からブリッジカーネルに伝達され得る(例えば、ホスト102アプリケーションは、コスト関数をブリッジカーネルのハードウェア110にオフロードすることができる)。ブリッジカーネルは与えられたカーネルを使用してコストを計算することができる。ブリッジカーネルは、コスト関数とホスト102から受信された格納又はネットワーキングパラメータの組み合せに基づいて、最適なカーネルを選択することができる。例としては、ストレージ装置104は、2つのデータ圧縮カーネルを実現することができ、1つはスループットのために、他の1つは、より良い圧縮率のために設計されたものである。ホスト102からの圧縮の与えられたランタイムの呼び出しに対し、ブリッジカーネルは長さの引数をチェックすることができ、長さが、例えば64KBよりも大きいごとに、より良い圧縮率のカーネルを選択することができ、残りのためには、他のタイプの圧縮率のカーネルを選択することができる。一部の実施形態では、ブリッジカーネルのハードウェア110は、FIFOレジスタを用いてデータ処理に使用するために、カーネルの(126(1)〜126(n)、126(n+1)〜126(m))の中から最適なカーネルを選択することができる。
図2A、2Bは、オフロードされたカーネルに接続するホストアプリケーション(例えば、ユーザーアプリケーション106)の例としてのフローチャート200を示す。S201において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、上位階層(例として、図4に示すように、ホストの上位階層のソフトウェア136)からコール(call)又は呼び出しを受信することができる。S202において、ブリッジカーネル(例えば、ブリッジカーネルドライバ)は、ホストの引数(例えば、引数−1〜引数−n)をホストのレジスタインターフェース(例として、図3に示すレジスタインターフェース)に格納することができる。S203において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、データ処理のためにバッファ(例えば、データバッファ122)を割り当てることができる。S204において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、オフロードされたアプリケーション関数114によって必要な他の引数を初期化することができる。S205において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、処理のためにバッファにデータをフェッチすることができる。S206において、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)は、処理カーネルを呼び出すことができる。データ処理が完了すると、S207において、システム100は、クリーンアップの動作を遂行することができる。S208において、オフロードされたアプリケーション関数114は、ブリッジカーネル(例えば、ブリッジカーネルのドライバ)を介して、上位階層のアプリケーションソフトウェアに対する呼び出しを返すことができる。
一部の実施形態で、ブリッジカーネルは、ホスト102に一般的なレジスタインターフェースを提供することができる。図3は、ブリッジカーネルによってホスト102に提示されたレジスタインターフェース300の例を示す。レジスタインターフェース300は、ストレージ装置104に位置することができる。システム100は、オフロードされた関数(例として、オフロードされたアプリケーション関数114)に引数を伝達して返された値又は状態を検出するために(例えば、図3に示すように)レジスタインターフェース300を使用して、カーネルを(例えば、ユーザーアプリケーション106で実行中である)ホストアプリケーションに提示することができる。一部の実施形態では、システム100は、カーネルに対するバッファの割り当てを容易にするために、OpenCL108プラットフォームを使用することができる。
図4は、図1のDRAM120のハンドシェイク領域124のレイアウトの例を示す。図4に示すように、いくつかの実施形態では、ブリッジカーネルのハードウェア110は、ホスト102から受信された引数(例えば、引数−1〜引数−n)をストレージ装置104(例えば、スマートSSD)のDRAM120内に存在するセット又は予め決定されたメモリの位置に一時的に格納することができる。いくつかの実施形態では、オンチップのFIFO118の構造は、DRAM120の代わりにオフロードされたアプリケーション関数114、ファームウェア、及びブリッジカーネルのファームウェア116を統合するエンベデッドプロセッサ112に引数を伝達するのに使用され得る。
レジスタインターフェース300の内容、例えば、引数−1〜引数−nはDRAM120のハンドシェイク領域124に一時的に格納され得る。一度引数がDRAM120に格納されると、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124に「準備」フラグ128を設定することができる。この時点で、ブリッジカーネルのハードウェア110は、ファームウェア(例えば、ブリッジカーネルのファームウェア116)で実行される、オフロードされた関数が処理を完了するのを待機することができる。したがって、オフロードされた関数処理の完了を決定するために、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124で「完了」フラグ130をポーリングすることができる。
ブリッジカーネルのハードウェア110が「完了」フラグ130を検出すると、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124から任意のエラー又は他の状態を読み取ることができる。ブリッジカーネルのハードウェア110は、(図3に示したように)レジスタインターフェース300の対応するレジスタへのエラー及び/又は他の状態132をアップデートすることができる。ブリッジカーネルのハードウェア110は、「完了」レジスタを設定することができ、これは、最終的にオフロードされた関数の呼び出しの完了を表示するために、ホストアプリケーションのソフトウェア134によってポーリングされ得る。
図5は、ブリッジカーネルのハードウェアを状態マシンとして使用するフローチャート500を示す。ブリッジカーネルのハードウェアは、図1のブリッジカーネルのハードウェア110であり得る。
S501において、ブリッジカーネルのハードウェア110は、アイドル状態に維持される。S501において、ブリッジカーネルハードウェア110は、ホスト102からトリガーを受信する。S503において、ブリッジカーネルのハードウェア110は、ホストレジスタインターフェースからのホスト102から受信された引数(例えば、引数−1〜引数−n)をフェッチする(例として、図3に示すレジスタインターフェース)。S505において、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124にホスト102から受信された引数(例えば、引数−1〜引数−n)を一時的に格納する。引数がDRAM120に一時的に格納されると、S507において、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124の「準備」フラグ128を設定する。
この時点で、ブリッジカーネルのハードウェア110は、ファームウェア(例えば、ブリッジカーネルのファームウェア116)でのオフロードされた関数が引数に基づいて、それの処理を完了するのを待機する。このために、S509において、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124で「完了」フラグ130をポーリングする。一部の実施形態では、ブリッジカーネルのハードウェア110が「完了」フラグ130を検出すると、ブリッジカーネルのハードウェア110は、DRAM120のハンドシェイク領域124から任意のエラー及び/又は他の状態を読み取ることができる。ブリッジカーネルのハードウェア110は、(図3に示したように)レジスタインターフェース300の適切なレジスタへのエラー及び/又は他の状態132をアップデートする。ブリッジカーネルのハードウェア110は、オフロードされた関数の呼び出しの完了を示すためにホストアプリケーションのソフトウェア134によって順番にポーリングされる「完了」レジスタを設定する。
S511において、ブリッジカーネルのハードウェア110は、ホストレジスタインターフェース(例として、図3の300)で「準備」フラグ(ready flag)128を設定する。S511の後に、ブリッジカーネルのハードウェア110は、S501に復帰する。
図6は、ブリッジカーネルのファームウェアの動作を示す。ブリッジカーネルファームウェアは、図1のブリッジカーネルのファームウェア116であり得る。
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に返される。
一部の実施形態で、ブリッジカーネルは、アプリケーション(例えば、ユーザーアプリケーション106で実行中)をホストするためのプロキシとして動作する。例として(例えば、ユーザーアプリケーション106で実行中)、ホストアプリケーションは、オフロードされた関数がどこで又はどのように実装されるかとは無関係である。いくつかの実施形態では、カーネルの実装は、ホスト102に明白(transparent)であり得る。いくつかの実施形態では、カーネルは、ソフトウェアカーネルとしてエンベデッドプロセッサ(例えば、エンベデッドプロセッサ112)上に実装され得る。しかし、いくつかの実施形態では、カーネルは、ハードウェアゲート(例えば、ブリッジカーネルのハードウェア110)に実装され得る。
いくつかの実施形態で、ブリッジカーネルそのものは、オフロードされた関数(例えば、オフロードされたアプリケーション関数114)に無関係であり、これは、ユーザーの機密性(例えば、IPアドレスの機密性)を可能にする。したがって、ストレージ装置のユーザーに公開しなくても、ソフトウェアカーネル又はハードウェアカーネルに独自のオフロードされた関数を作成することができる。つまり、ブリッジカーネルのメカニズムの例としての実施形態は、個人(private)アクセラレーション機能をストレージ装置にオフロードするために、ユーザーによって使用されるプラットフォームとして動作できる。いくつかの実施形態では、カーネル及び/又はオフロードされた関数のホストインターフェースは変更されない可能性がある(例として、相当にホスト側を変更せず、カーネルを高性能バージョンにアップグレードすることができる)。そのような場合に、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)のRTLは、ホストアプリケーション(例えば、ユーザーアプリケーション106)に標準の又は合意されたインターフェースを提供することができる。
一部の実施形態で、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)は、ブリッジカーネルのファームウェア116とのハンドシェイクを遂行するために、FPGA DRAM(例えば、DRAM120)メモリを使用することができる。他の実施形態では、ブリッジカーネルのハードウェア110はブリッジカーネルのファームウェア116とのハンドシェイクを遂行するために、オンチップFIFO(例えば、FIFO118)を使用することができる。一部の実施形態では、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)のRTLは、エンベデッドプロセッサ112上で実行されるオフロードされた関数に引数を伝達するためにFPGA DRAM(例えば、DRAM120)を使用することができる。
一部の実施形態で、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)は、基本的なトランスポート(transport、伝送)メカニズム(例えば、PCIe、イーサネット(登録商標)など)とは無関係の可能性があり、これは、ホスト102とストレージ装置104との間の連結を設定するために使用される。一部の実施形態では、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)を含むシステム100は、ブリッジカーネルを使用しないシステムと比較して、比較的迅速なポーティング又は開発オプションを提供することで、比較的速いユーザーの参加を提供することができ、ユーザーによって既存のコードベースの再利用を増加させることができ、高性能のカーネルを開発している間に、システムは、他の活動を行うことになる。いくつかの実施形態では、ブリッジカーネル(例えば、ブリッジカーネルのハードウェア110)を含むシステム100は、またシステム統合、認証、テスト、デモなどを提供することができる。
いくつかの実施形態で、ブリッジカーネルは、ホストによって伝達された(及び/又は装置によって設定される)引数を使用して呼び出す、オフロードされた関数(例えば、カーネル)を決定することができる。一部の実施形態では、ブリッジカーネルは、ソフトカーネル、ハードカーネル又は多様な性能レベルの1つ以上のカーネルを呼び出すことができる。一部の実施形態では、ブリッジカーネルは、引数に基づいて、特定のカーネルを選択するために、コスト関数を使用することができる。いくつかの実施形態では、カーネルの選択は、アプリケーションのタイプ、アプリケーション識別子、名前空間識別子、ホスト識別子、LBAアドレスの範囲、NVMeセット識別子、NVMe提出キュー識別子、完了キュー識別子、ストリーム識別子、イーサネット(登録商標)MACのような構成パラメータ及び識別子、TCP/IPアドレス及びその他のトランスポート/ネットワークパラメータ、並びに日付及び時刻のような一般的なパラメータに基づく。
ただし、ここで第1、第2、第3などの用語は、多様なエレメント、構成要素、領域、層及び/又はセクションを説明するために使用するが、これらのエレメント、構成要素、領域、層及び/又はセクションは、これらの用語により限定されないと理解されるであろう。これらの用語は、他のエレメント、構成要素、領域、層又はセクションから1つのエレメント、構成要素、領域、層又はセクションを区別するために使用する。したがって、後述する第1のエレメント、構成要素、領域、層又はセクションは、本発明の思想及び範囲を逸脱することなく、第2のエレメント、構成要素、領域、層又はセクションを指すことができる。
1つのエレメント又は特色と図面で示した他のエレメント又は特色との特徴的な関係を説明するための説明を容易にするために、「すぐ下に」、「より下に」、「下部」、「特定の部分の下に」、「の上に」、「上部」のような空間的かつ相対的な用語がここで使用できる。空間的かつ相対的な用語は、図面で描写した方向に加えて、使用又は動作において、装置の他の方向を含むように意図する。例えば、もし図面の装置が裏返されると、他の構成要素又は特徴の「より下に」、「すぐ下に」又は「特定の部分の下に」で説明した構成要素は、他の構成要素又は特徴の「の上に」配置されるようになる。したがって、「より下に」又は「特定の部分の下に」の例としての用語は、上又は下の方向の両方を含み得る。装置は、別な方法で方向付けられ(例えば、90度又は他の方向に回転される)、空間的かつ相対的な記述語は、それに応じて解釈されるべきである。なお、エレメント又は層が2つのエレメント又は層の間にあると言及されるときは、それは、エレメント又は層が2つのエレメント又は層の間に有り得るか、又は1つ以上の間のエレメント又は層が、また存在することができる。
本明細書で使用する用語は、単に特定の実施形態を説明するためのものであり、本発明を限定しようとするものではない。本明細書で使用する「大体は」、「約」という用語及びこれと類似の用語は、近似の用語として使用し、程度の用語として使用せずに、本発明の当業者によって識別される、測定された又は計算された値の固有の変動を考慮するためのものである。
本明細書で使用するように、文脈上明らかに別のものを示していると判定されない限り、単数形「1つ」は、複数の形態も含むものと意図する。「構成される」、「構成されている」、「含む(comprise)」、及び「含んでいる(comprising)」という用語は、本明細書で使用するとき、これらの用語は、定められた特徴、整数、段階、動作、エレメント、及び/又は構成要素の存在を明示するが、1つ以上の他の特徴、整数、段階、動作、エレメント、構成要素、及び/又はそれらのグループの追加又は存在を排除しない。本明細書で使用する「及び/又は」という用語は、1つ又はそれ以上のリスト(list)された項目に関連付けられる任意かつすべての組み合せを含む。「少なくとも1つ」のような表現は、エレメント全体のリストを修正し、リストの個々のエレメントを修正しない。なお、本発明の実施形態を記述するときに、「できる」の使用は、「本発明の1つ以上の実施形態」を意味する。本明細書で使用する「使用(use)」、「使用される(using)」、及び「使用された(used)」という用語は、「利用(utilize)」、「利用される(utilizing)」、及び「利用された(utilized)」という用語の同義語として各々見なされ得る。また、「例示」という用語は、例又は図案を意味する。
1つのエレメントが、他のエレメントに「連結」されると述べるときには、それが他のエレメントと直接連結されたり、介在するエレメントが存在することができるものと理解されるべきである。一方、1つのエレメントが、他のエレメントと「直接連結」されると述べる場合には、介在するエレメントが存在しないことを示す。ここで使用する、「及び/又は」という用語は1つ以上の関連された、リストされた項目のすべての可能な組み合せを指示したり、含んだりすると理解されるべきである。
ここで引用された任意の数値範囲は、引用の範囲内に含まれる同一の数値精度のすべての部分範囲を含むものと意図する。たとえば、「1.0〜10.0」の範囲は、記載された最小値1.0と記載された最大値10.0との間、すなわち、2.4〜7.6のような10.0以下の最大値と1.0以上の最小値を有する(及び含む)すべての部分範囲を含むように意図する。例えば、本明細書に引用した任意の最大値の限定は、その中に含まれるすべての下位数値の限定を含むものと意図し、本明細書に引用した任意の最小値の限定は、それに含まれるすべてより高い数値の限定を含むものと意図する。
一部の実施形態で、本開示の方法とシステムの異なる実施形態の1つ以上の出力は、本開示の方法及びシステムの異なる実施形態の1つ以上の出力又は1つ以上の出力に関する情報を表示するためのディスプレイ装置に連結されたり、これを有する電子装置に伝送されたりすることができる。
本明細書で記述された本発明の実施形態による電子や電気装置、及び/又は他の任意の関連付けられる装置やエレメントは、任意の適切なハードウェア、ファームウェア(例えば、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つ又はそれ以上の他のコンピューティング装置に分散され得ることを認識しなければならない。
アプリケーション関数を装置にオフロードするためのシステム及び方法の例としての実施形態を、具体的に説明して図示したが、多くの修正及び変形が当業者には明らかであろう。したがって、ここで開示した、このように本開示の原理に基づいて構成された装置に、アプリケーション関数をオフロードするシステム及び方法は、本明細書に具体的に説明したものとは異なるように実装され得ることが理解されるべきである。本発明の概念は、また以下の特許請求の範囲及びその等価物で定義される。
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 アプリケーション関数の例

Claims (20)

  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に記載のシステム。
JP2019229993A 2018-12-21 2019-12-20 アプリケーション関数を装置にオフロードするためのシステム及び方法 Pending JP2020102218A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862784275P 2018-12-21 2018-12-21
US62/784275 2018-12-21
US16/543,264 US11204819B2 (en) 2018-12-21 2019-08-16 System and method for offloading application functions to a device
US16/543264 2019-08-16

Publications (1)

Publication Number Publication Date
JP2020102218A true JP2020102218A (ja) 2020-07-02

Family

ID=71096874

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019229993A Pending JP2020102218A (ja) 2018-12-21 2019-12-20 アプリケーション関数を装置にオフロードするためのシステム及び方法

Country Status (5)

Country Link
US (2) US11204819B2 (ja)
JP (1) JP2020102218A (ja)
KR (1) KR20200078331A (ja)
CN (1) CN111352666A (ja)
TW (1) TW202042059A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11853604B2 (en) 2021-03-18 2023-12-26 Kioxia Corporation Computational storage device, method, and data processing system executing operation in accordance with information in command

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11016755B2 (en) * 2019-07-31 2021-05-25 Dell Products L.P. System and method to secure embedded controller flashing process
KR20210113859A (ko) * 2020-03-09 2021-09-17 에스케이하이닉스 주식회사 데이터 처리 시스템 및 그 동작 방법
CN113051206A (zh) * 2020-05-04 2021-06-29 威盛电子股份有限公司 桥接电路与计算机系统
US11687276B2 (en) 2021-01-26 2023-06-27 Seagate Technology Llc Data streaming for computational storage
US11675540B2 (en) 2021-08-05 2023-06-13 Seagate Technology Llc In-line data flow for computational storage
US20230114636A1 (en) * 2021-10-12 2023-04-13 Samsung Electronics Co., Ltd. Systems, methods, and devices for accessing a device program on a storage device
US11728979B2 (en) 2022-01-05 2023-08-15 Dell Products L.P. Method and system for performing telemetry services for composed information handling systems
US20230214269A1 (en) * 2022-01-05 2023-07-06 Dell Products L.P. Method and system for performing computational offloads for composed information handling systems
CN114035842B (zh) * 2022-01-07 2022-04-08 飞腾信息技术有限公司 固件配置方法、计算系统配置方法、计算装置以及设备
CN115145592A (zh) * 2022-09-01 2022-10-04 新华三技术有限公司 离线模型部署方法和装置、网络设备、分析器
CN116541336A (zh) * 2023-07-04 2023-08-04 南方电网数字电网研究院有限公司 多核芯片、协处理器的软件运行方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US7870384B2 (en) * 2002-11-06 2011-01-11 International Business Machines Corporation Offload processing for secure data transfer
WO2006110952A1 (en) * 2005-04-19 2006-10-26 Fairlight.Au Pty Ltd Media processing system and method
US8151323B2 (en) 2006-04-12 2012-04-03 Citrix Systems, Inc. Systems and methods for providing levels of access and action control via an SSL VPN appliance
US8019929B2 (en) * 2006-09-13 2011-09-13 Rohm Co., Ltd. Data processing apparatus and data control circuit for use therein
US7958280B2 (en) * 2006-10-27 2011-06-07 Stec, Inc. Parallel data transfer in solid-state storage
CN101681282A (zh) 2006-12-06 2010-03-24 弗森多系统公司(dba弗森-艾奥) 用于共享的、前端、分布式raid的装置、系统和方法
US7660933B2 (en) * 2007-10-11 2010-02-09 Broadcom Corporation Memory and I/O bridge
US9223642B2 (en) * 2013-03-15 2015-12-29 Super Talent Technology, Corp. Green NAND device (GND) driver with DRAM data persistence for enhanced flash endurance and performance
US20110283059A1 (en) * 2010-05-11 2011-11-17 Progeniq Pte Ltd Techniques for accelerating computations using field programmable gate array processors
JP2014507717A (ja) * 2011-01-18 2014-03-27 エルエスアイ コーポレーション より高いレベルの冗長な情報の計算
US20120331278A1 (en) * 2011-06-23 2012-12-27 Mauricio Breternitz Branch removal by data shuffling
US20140059278A1 (en) 2011-11-14 2014-02-27 Lsi Corporation Storage device firmware and manufacturing software
US8848741B2 (en) 2012-06-21 2014-09-30 Breakingpoint Systems, Inc. High-speed CLD-based TCP segmentation offload
KR20140067737A (ko) 2012-11-27 2014-06-05 삼성전자주식회사 메모리 컨트롤러 및 메모리 컨트롤러의 동작 방법
US9250954B2 (en) 2013-01-17 2016-02-02 Xockets, Inc. Offload processor modules for connection to system memory, and corresponding methods and systems
US20150052280A1 (en) * 2013-08-19 2015-02-19 Emulex Design & Manufacturing Corporation Method and system for communications-stack offload to a hardware controller
US10326448B2 (en) * 2013-11-15 2019-06-18 Scientific Concepts International Corporation Code partitioning for the array of devices
US10332229B2 (en) * 2014-05-12 2019-06-25 Palo Alto Research Center Incorporated System and method for high performance k-means clustering on GPU with smart kernels
US11099918B2 (en) * 2015-05-11 2021-08-24 Xilinx, Inc. Accelerating algorithms and applications on FPGAs
US10075524B1 (en) * 2015-09-29 2018-09-11 Amazon Technologies, Inc. Storage bridge device for communicating with network storage
KR101923661B1 (ko) * 2016-04-04 2018-11-29 주식회사 맴레이 플래시 기반 가속기 및 이를 포함하는 컴퓨팅 디바이스
US20180115496A1 (en) * 2016-10-21 2018-04-26 Advanced Micro Devices, Inc. Mechanisms to improve data locality for distributed gpus
US10235202B2 (en) * 2016-11-08 2019-03-19 International Business Machines Corporation Thread interrupt offload re-prioritization
US10545860B2 (en) * 2017-08-10 2020-01-28 Samsung Electronics Co., Ltd. Intelligent high bandwidth memory appliance
US10942746B2 (en) * 2017-08-31 2021-03-09 Rail Vision Ltd System and method for high throughput in multiple computations
US10445118B2 (en) * 2017-09-22 2019-10-15 Intel Corporation Methods and apparatus to facilitate field-programmable gate array support during runtime execution of computer readable instructions
US10719474B2 (en) 2017-10-11 2020-07-21 Samsung Electronics Co., Ltd. System and method for providing in-storage acceleration (ISA) in data storage devices
US10896139B2 (en) * 2018-03-15 2021-01-19 Western Digital Technologies, Inc. Methods and apparatus for host register access for data storage controllers for ongoing standards compliance
US20200301898A1 (en) * 2018-06-25 2020-09-24 BigStream Solutions, Inc. Systems and methods for accelerating data operations by utilizing dataflow subgraph templates
US10719462B2 (en) * 2018-09-25 2020-07-21 Intel Corporation Technologies for computational storage via offload kernel extensions
US11074101B2 (en) * 2018-10-23 2021-07-27 International Business Machines Corporation Automated switching between interrupt context I/O processing and thread context I/O processing

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11853604B2 (en) 2021-03-18 2023-12-26 Kioxia Corporation Computational storage device, method, and data processing system executing operation in accordance with information in command

Also Published As

Publication number Publication date
US20220107857A1 (en) 2022-04-07
CN111352666A (zh) 2020-06-30
TW202042059A (zh) 2020-11-16
US11204819B2 (en) 2021-12-21
US20200201692A1 (en) 2020-06-25
KR20200078331A (ko) 2020-07-01

Similar Documents

Publication Publication Date Title
JP2020102218A (ja) アプリケーション関数を装置にオフロードするためのシステム及び方法
Tork et al. Lynx: A smartnic-driven accelerator-centric architecture for network servers
US8108467B2 (en) Load balanced data processing performed on an application message transmitted between compute nodes of a parallel computer
JP5689526B2 (ja) マルチキュー・ネットワーク・アダプタの動的再構成によるリソース・アフィニティ
CN109076029B (zh) 用于非统一网络输入/输出访问加速的方法和装置
US20180232254A1 (en) Migrating accelerators between compute systems
US11321256B2 (en) Persistent kernel for graphics processing unit direct memory access network packet processing
US7827024B2 (en) Low latency, high bandwidth data communications between compute nodes in a parallel computer
WO2019226355A1 (en) Embedded scheduling of hardware resources for hardware acceleration
US10341264B2 (en) Technologies for scalable packet reception and transmission
JP5669851B2 (ja) 論理的にパーティション化されたシステムにおいてパーティション間の効率的なコミュニケーションを行うための装置、方法、及びコンピュータ・プログラム
US10354033B2 (en) Mapping application functional blocks to multi-core processors
US7966618B2 (en) Controlling data transfers from an origin compute node to a target compute node
WO2018148934A1 (en) Merged input/output operations
US20190303209A1 (en) Data Processing System
WO2021113007A1 (en) Apparatus and methods for virtualization
CN118043792A (zh) 提供事件消息的可靠接收的机制
WO2020259286A1 (zh) 获取设备信息的方法、装置、存储介质及电子设备
Liu et al. Improving resource utilization of a cloud-based testing platform for android applications
CN113439260A (zh) 针对低时延存储设备的i/o完成轮询
Ploumidis et al. The ExaNeSt Prototype: Evaluation of Efficient HPC Communication Hardware in an ARM-based Multi-FPGA Rack
US11706293B1 (en) Buffer profile assignment management based on peer network device data
US20230185624A1 (en) Adaptive framework to manage workload execution by computing device including one or more accelerators
CN114567520B (zh) 实现集合通信的方法、计算机设备和通信系统
US20230195664A1 (en) Software management of direct memory access commands

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221027

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231219

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240313

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240528