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

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

▶ オムロン株式会社の特許一覧

<>
  • 特許-メモリ制御装置、および制御方法 図1
  • 特許-メモリ制御装置、および制御方法 図2
  • 特許-メモリ制御装置、および制御方法 図3
  • 特許-メモリ制御装置、および制御方法 図4
  • 特許-メモリ制御装置、および制御方法 図5
  • 特許-メモリ制御装置、および制御方法 図6
  • 特許-メモリ制御装置、および制御方法 図7
  • 特許-メモリ制御装置、および制御方法 図8
  • 特許-メモリ制御装置、および制御方法 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-10
(45)【発行日】2023-10-18
(54)【発明の名称】メモリ制御装置、および制御方法
(51)【国際特許分類】
   G06F 13/38 20060101AFI20231011BHJP
   G06F 13/28 20060101ALI20231011BHJP
【FI】
G06F13/38 310C
G06F13/28 310M
G06F13/28 310C
【請求項の数】 5
(21)【出願番号】P 2019188407
(22)【出願日】2019-10-15
(65)【公開番号】P2021064166
(43)【公開日】2021-04-22
【審査請求日】2022-08-17
(73)【特許権者】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】100155712
【弁理士】
【氏名又は名称】村上 尚
(72)【発明者】
【氏名】玉井 俊規
【審査官】田中 啓介
(56)【参考文献】
【文献】特開2015-207288(JP,A)
【文献】特開2006-285300(JP,A)
【文献】国際公開第2007/129482(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F13/20-13/42
(57)【特許請求の範囲】
【請求項1】
第1デバイスのメモリにDMA(Direct Memory Access)方式でアクセスしてデータを読み書きするメモリ制御装置であって、
前記第1デバイス以外の第2デバイスから、1つの通信プロトコルにて複数のデータを受信するデータ受信部と、
前記複数のデータそれぞれに対応する受信ディスクリプタを指定する識別子を取得する識別子取得部と、
前記メモリに記憶された複数の受信ディスクリプタから、それぞれの前記識別子に対応する受信ディスクリプタを読み出す読出部と、
前記複数のデータのそれぞれを、前記メモリの、前記読出部によって読み出された前記受信ディスクリプタそれぞれにより指定されるアドレスに書き込むデータ書込部と、を備え、
前記アドレスは、前記第1デバイスにおいて実行される1つ以上のアプリケーションがアクセス可能な記憶領域を示し、
前記第1デバイスは複数のアプリケーションを実行し、
前記メモリには、アプリケーション毎にアクセス可能な記憶領域が規定されており、
前記識別子は、前記データを使用するアプリケーションを規定するアプリケーション情報を含んでおり、
前記読出部は、前記アプリケーション情報が規定するアプリケーションがアクセス可能な記憶領域のアドレスを指定する受信ディスクリプタを、前記識別子に対応する受信ディスクリプタとして読み出し、
前記メモリには、1つの識別子に対応する複数の受信ディスクリプタが記憶されており、
前記1つの識別子に対応する前記複数の受信ディスクリプタは、前記1つの識別子のアプリケーション情報が示すアプリケーションがアクセス可能な記憶領域内の、それぞれ異なるアドレスを指定しており、
前記読出部は、前記1つの識別子に対応する前記複数の受信ディスクリプタを、所定の順番で読み出す、メモリ制御装置。
【請求項2】
前記識別子取得部は、前記データ受信部が受信した前記データに含まれている前記識別子を取得する、請求項に記載のメモリ制御装置。
【請求項3】
前記識別子は、該識別子に対応する前記データを示す情報を含んでおり、
前記識別子取得部は、前記識別子を前記データと別個に取得する、請求項に記載のメモリ制御装置。
【請求項4】
前記第2デバイスの第2メモリに記憶された送信ディスクリプタを読み出す第2読出部を備え、
前記データ受信部は、前記第2メモリの、前記第2読出部によって読み出された前記送信ディスクリプタによって指定されるアドレスから読み出されたデータを前記データとして取得し、
前記識別子は、前記第2デバイスから前記第1デバイスにデータを送信する際の、前記送信ディスクリプタに応じて規定されている、請求項に記載のメモリ制御装置。
【請求項5】
第1デバイスのメモリにDMA(Direct Memory Access)方式でアクセスしてデータを読み書きするメモリ制御装置を制御するための制御方法であって、
前記第1デバイス以外の第2デバイスから、1つの通信プロトコルにて複数のデータを受信するデータ受信ステップと、
前記複数のデータそれぞれに対応する受信ディスクリプタを指定する識別子を取得する識別子取得ステップと、
前記メモリに記憶された複数の受信ディスクリプタから、それぞれの前記識別子に対応する受信ディスクリプタを読み出す読出ステップと、
前記複数のデータのそれぞれを、前記メモリの、前記読出ステップにおいて読み出された前記受信ディスクリプタそれぞれにより指定されるアドレスに書き込むデータ書込ステップと、を含み、
前記アドレスは、前記第1デバイスにおいて実行される1つ以上のアプリケーションがアクセス可能な記憶領域を示
前記第1デバイスは複数のアプリケーションを実行し、
前記メモリには、アプリケーション毎にアクセス可能な記憶領域が規定されており、
前記識別子は、前記データを使用するアプリケーションを規定するアプリケーション情報を含んでおり、
前記読出ステップにおいて、前記アプリケーション情報が規定するアプリケーションがアクセス可能な記憶領域のアドレスを指定する受信ディスクリプタを、前記識別子に対応する受信ディスクリプタとして読み出し、
前記メモリには、1つの識別子に対応する複数の受信ディスクリプタが記憶されており、
前記1つの識別子に対応する前記複数の受信ディスクリプタは、前記1つの識別子のアプリケーション情報が示すアプリケーションがアクセス可能な記憶領域内の、それぞれ異なるアドレスを指定しており、
前記読出ステップにおいて、前記1つの識別子に対応する前記複数の受信ディスクリプタを、所定の順番で読み出す、制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はデバイスと通信するメモリ制御装置等に関する。
【背景技術】
【0002】
ソケット通信において、受信データをDMA(Direct Memory Access)方式でメモリに書き込む、NIC(Network Interface Card)等のメモリ制御装置が従来知られている。
【0003】
図9は、あるデバイスにおいてDMA機能を有する従来のNICを使用した場合の、受信データのメモリへの書き込みに係る処理を説明するための模式図である。図9で示すように、受信データの書き込みに係る処理は、1~6の番号順に実行される。なお、図9では、表記の簡略化のため、ディスクリプタのことを「Desc」と記載する。
【0004】
まず始めに、デバイスのCPUは、自装置のメモリに対し、受信データのディスクリプタを予め設定しておく(1)。この設定は、ソケット通信を行う前等、データの受信前に行われることが望ましい。メモリにディスクリプタが設定されたことはNICに通知される、NICは通知を受けると、メモリに格納されているディスクリプタを予め読み込んでおく。ディスクリプタが複数存在する場合は、NICは、ディスクリプタを所定の順番で読み込む(2)。
【0005】
NICはデータを受信すると(3)、読み込んでおいたディスクリプタが示すメモリ上のアドレスに、受信データを書き込む(4)。ここで、受信データが書き込まれるアドレスは、CPUがデータ受信に係る処理を行うためにアクセスできる領域である。しかしながら、該アドレスは、CPUが実行するアプリケーションプログラム(以降、アプリと称する)が直接アクセスし、書き込む、および読み出すことはできない領域のアドレスである。NICは、受信データを書き込んだことを、CPUに通知する。
【0006】
CPUは受信データが書き込まれた旨の通知を受けると、該受信データを読み出して、解析する(5)。ここでの「解析」とは、例えば、受信データの種別、サイズ、および受信データを使用するアプリケーションの種類の少なくともいずれかを特定するための解析である。CPUは解析が終了すると、該解析結果に応じて、受信データをメモリ上の別のアドレスに再度書き込む(6)。この、再書き込み先のアドレスは、CPUが実行するアプリが直接アクセス可能、すなわちアプリが使用可能な記憶領域内のアドレスである。
【0007】
以上の処理によって、デバイスのCPUが実行するアプリにおいて、受信データを取り扱うことができる状態になる。
【先行技術文献】
【特許文献】
【0008】
【文献】特開2005-222469号公報
【文献】特開2009-065564号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
図9に示すように、従来のNICは、受信データを、アプリが直接取り扱えない記憶領域に書き込んでいた。そのため、CPUが、NICの書き込んだ受信データの解析および移動を行う必要があった。これにより、CPUの負荷が増大していた。また、受信データの解析および移動に係る処理が、データ受信の律速要因となっていた。
【0010】
これに対し、DMAでのデータ受信をより効率化することによって、データ受信をより高速化させる技術が開発されている。例えば、特許文献1には、受信データのデータサイズに応じて、適用するディスクリプタを変更することで、受信データの格納先アドレスを振り分ける技術が開発されている。しかしながら、データサイズに応じて受信データの格納先アドレスを振り分けただけでは、アプリで受信データを利用するために、さらに受信データを解析および移動する必要が生じる。
【0011】
本発明の一態様は、前述の問題点について鑑みたものである。本発明の一態様は、データ受信をより高速化させることが可能なメモリ制御装置等を実現することを目的とする。
【課題を解決するための手段】
【0012】
前記の課題を解決するために、本発明の一態様に係るメモリ制御装置は、第1デバイスのメモリにDMA(Direct Memory Access)方式でアクセスしてデータを読み書きするメモリ制御装置であって、前記第1デバイス以外の第2デバイスから、1つの通信プロトコルにて複数のデータを受信するデータ受信部と、前記複数のデータそれぞれに対応する受信ディスクリプタを指定する識別子を取得する識別子取得部と、前記メモリに記憶された複数の受信ディスクリプタから、それぞれの前記識別子に対応する受信ディスクリプタを読み出す読出部と、前記複数のデータのそれぞれを、前記メモリの、前記読出部によって読み出された前記受信ディスクリプタそれぞれにより指定されるアドレスに書き込むデータ書込部と、を備え、前記アドレスは、前記第1デバイスにおいて実行される1つ以上のアプリケーションがアクセス可能な記憶領域を示す。
【0013】
前記の課題を解決するために、本発明の一態様に係る制御方法は、第1デバイスのメモリにDMA(Direct Memory Access)方式でアクセスしてデータを読み書きするメモリ制御装置を制御するための制御方法であって、前記第1デバイス以外の第2デバイスから、1つの通信プロトコルにて複数のデータを受信するデータ受信ステップと、前記複数のデータそれぞれに対応する受信ディスクリプタを指定する識別子を取得する識別子取得ステップと、前記メモリに記憶された複数の受信ディスクリプタから、それぞれの前記識別子に対応する受信ディスクリプタを読み出す読出ステップと、前記複数のデータのそれぞれを、前記メモリの、前記読出ステップにおいて読み出された前記受信ディスクリプタそれぞれにより指定されるアドレスに書き込むデータ書込ステップと、を含み、前記アドレスは、前記第1デバイスにおいて実行される1つ以上のアプリケーションがアクセス可能な記憶領域を示す。
【0014】
前記の構成または処理によれば、メモリ制御装置は、メモリの、第1デバイスが実行するアプリケーションがアクセス可能な記憶領域に、直接データを書き込む。これにより、第1デバイスは、メモリに書き込まれたデータを移動させなくても、自装置が実行するアプリケーションにおいて該データを使用することができる。これにより、受信したデータの移動が不要になるため、データ受信をより高速に行うことができる。
【0015】
前記メモリ制御装置において、前記第1デバイスは複数のアプリケーションを実行し、前記メモリにはアプリケーション毎にアクセス可能な記憶領域が規定されており、前記識別子は、前記データを使用するアプリケーションを規定するアプリケーション情報を含んでおり、前記読出部は、前記アプリケーション情報が規定するアプリケーションがアクセス可能な記憶領域のアドレスを指定する受信ディスクリプタを、前記識別子に対応する受信ディスクリプタとして読み出すこととしてもよい。
【0016】
前記の構成によれば、受信したデータがどのアプリケーションで使用されるデータであるかを識別子に基づき特定し、該データを使用するアプリケーションがアクセス可能な記憶領域内のアドレスを指定する受信ディスクリプタを読み出す。これにより、データを、該データを使用するアプリケーションがアクセス可能な記憶領域に直接書き込むことができる。したがって、受信したデータの移動が不要になるため、データ受信をより高速に行うことができる。
【0017】
前記メモリ制御装置において、前記メモリには、1つの識別子に対応する複数の受信ディスクリプタが記憶されていてもよく、前記複数の受信ディスクリプタは、前記1つの識別子のアプリケーション情報が示すアプリケーションがアクセス可能な記憶領域内の、それぞれ異なるアドレスを指定してもよく、前記読出部は、前記1つの識別子に対応する前記複数の受信ディスクリプタを、所定の順番で読み出してもよい。
【0018】
前記の構成によれば、データ書込部によるデータの書き込み処理が遅れて、データ受信部が次に書き込むべきデータを受信してしまった場合でも、各データを別の受信ディスクリプタが示す、別のアドレスに書き込むよう指定することができる。したがって、データの書き込み処理が遅れた場合でも、誤ってデータを上書きしてしまうことを防止できる。
【0019】
前記メモリ制御装置において、前記識別子取得部は、前記データ受信部が受信した前記データに含まれている前記識別子を取得してもよい。
【0020】
前記の構成によれば、データと識別子とを同時に受信することができる。これにより、受信したデータの移動が不要になるため、データ受信をより高速に行うことができる。
【0021】
前記メモリ制御装置において、前記識別子は、該識別子に対応する前記データを示す情報を含んでおり、前記識別子取得部は、前記識別子を前記データと別個に取得してもよい。
【0022】
前記の構成によれば、識別子を含んだデータ形式に変更せずとも、データと識別子とを個別に送信することで、前述のメモリ制御装置と同様の効果を得ることができる。
【0023】
前記メモリ制御装置は、前記第2デバイスの第2メモリに記憶された送信ディスクリプタを読み出す第2読出部を備えていてもよく、前記データ受信部は、前記第2メモリの、前記第2読出部によって読み出された前記送信ディスクリプタによって指定されるアドレスから読み出されたデータを前記データとして取得し、前記識別子は、前記第2デバイスから前記第1デバイスにデータを送信する際の、前記送信ディスクリプタに応じて規定されていてもよい。
【0024】
前記の構成によれば、データを送信する側の第2デバイスにおける送信ディスクリプタから識別子が規定される。すなわち、データ送信の際に必要な送信ディスクリプタから識別子を規定するため、識別子の規定のために別途情報を取得せずとも、適切に識別子を規定することができる。
【発明の効果】
【0025】
本発明の一態様によれば、データ受信をより高速化させることができる。
【図面の簡単な説明】
【0026】
図1】本実施形態に係る第1デバイスに含まれる各部の、動作概要を示す図である。
図2】前記第1デバイスの要部構成の一例を示すブロック図である。
図3】前記第1デバイスのディスクリプタ制御部が実行するライトバック処理を、模式的に示したものである。
図4】本実施形態に係るNICの処理の流れの一例を示すフローチャートである。
図5】受信ディスクリプタと、受信データ領域との対応関係について模式的に示した図である。
図6】受信ディスクリプタの使用方法を模式的に示した図である。
図7】本実施形態に係るメモリ管理システムの要部構成の一例を示すブロック図である。
図8】本実施形態に係るFPGAの送信処理部と受信処理部の間のデータの流れを示すシーケンス図である。
図9】従来のNICを使用した場合の、受信データのメモリへの書き込みに係る処理を説明する模式図である。
【発明を実施するための形態】
【0027】
以下、本発明の一側面に係る実施の形態(以下、「本実施形態」とも表記する)を、図面に基づいて説明する。ただし、以下で説明する本実施形態は、あらゆる点において本発明の例示に過ぎない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【0028】
〔実施形態1〕
§1.適用例
図1は、本実施形態に係る第1デバイス100に含まれる各部の、動作概要を示す図である。第1第1デバイス100は図示の通り、NIC(Network Interface Card)1と、メモリ2と、CPU3とを含む。なお、図1ではディスクリプタ(記述子)のことを「Desc」と記載する。以降の図においても、「Desc」はディスクリプタを意味することとする。
【0029】
NIC(メモリ制御装置)1は、第1デバイス100における通信インタフェースである。NIC1は、他のデバイス(第2デバイス)から受信したデータをDMA(Direct Memory Access)方式でメモリ2に書き込む機能を有する。
【0030】
メモリ2は、第1デバイス100における記憶装置である。メモリ2の記憶領域はNIC1によって書き換えられる。また、メモリ2の記憶領域は、CPU3によって書き換えられる。詳細は後述するが、メモリ2は、受信ディスクリプタを記憶する記憶領域と、データを記憶する記憶領域とに分かれている。
【0031】
ここで、「受信ディスクリプタ」とは、メモリ2に受信データを書き込む際に用いるディスクリプタである。受信ディスクリプタは、NIC1が受信したデータの、メモリ2上での格納先アドレスを示す情報である。以降、受信ディスクリプタを記憶する記憶領域を「ディスクリプタ領域」、データを記憶する記憶領域を「データ領域」と称する。
【0032】
CPU3は、第1デバイス100における演算装置および制御装置である。CPU3は、メモリ2に書き込まれたデータを読み出して処理する。また、CPU3は、メモリ2または他の記憶装置に記憶されたアプリケーション(アプリ)プログラムを読み出して実行する。これにより、第1デバイスにおいてアプリが動作する。CPU3は、受信するデータの書き込みの際に用いる受信ディスクリプタを規定し、該受信ディスクリプタをメモリ2のディスクリプタ領域に書き込む。CPU3は、複数のアプリに対応して複数の受信ディスクリプタをメモリ2に設定する。CPU3は、各受信ディスクリプタがいずれのアプリに対応するかを示す情報をNIC1に予め通知する。本実施形態に係る受信ディスクリプタは、第1デバイス100のCPU3において実行される、少なくとも1つのアプリがアクセス可能な記憶領域内のアドレスを示す。
【0033】
図1に示すように、本実施形態に係る第1デバイス100において、受信データの書き込みに係る処理は、1~5の番号順に実行される。まず始めに、デバイスのCPUは、自装置のメモリに対し、受信ディスクリプタを予め設定しておく(1)。受信ディスクリプタの設定方法は特に限定されない。
【0034】
本実施形態に係る第1デバイス100では、NIC1は、受信ディスクリプタが設定された時点ではなく、データを受信してから受信ディスクリプタを読み込む。具体的には、NICはデータを受信すると(2)、受信データに含まれている識別子を取得する。ここで、「識別子」とは、アプリに対応しており、受信データに対応する受信ディスクリプタを指定する情報である。識別子の具体的構成は特に限定されない。例えば、識別子は、受信データが第1デバイスに送信されて来た際の通信プロトコルを示す情報を含んでいてもよい。また例えば、識別子は、受信データを使用するアプリを規定するアプリケーション情報を含んでいてもよい。それゆえ、アプリケーション情報は、受信ディスクリプタに対応しているともいえる。なお、CPU3は、各受信ディスクリプタがいずれの識別子に対応するかを示す情報をNIC1に予め通知してもよい。
NIC1は識別子に応じて、メモリ2から読み込む受信ディスクリプタを選定する(3)。NIC1は、選定した受信ディスクリプタを、メモリ2から読み込む(4)。
【0035】
受信ディスクリプタを読み込んだNIC1は、該受信ディスクリプタが指定するアドレスに受信データを格納する(5)。前述のように、受信ディスクリプタは、CPU3において実行されるアプリがアクセス可能なアドレスを示している。したがって、第1デバイス100においてCPU3は、メモリ2に書き込まれたデータを移動させなくても、アプリにおいて受信データを使用することができる。これにより、受信データの移動が不要になるため、データ受信をより高速に行うことができるという効果を奏する。
【0036】
§2.構成例
図2は、本実施形態に係る第1デバイス100の要部構成の一例を示すブロック図である。第1デバイス100は、NIC1と、メモリ2と、CPU3とを含む。NIC1と、メモリ2と、CPU3とはそれぞれバスで接続されている。なお、バスには前述の装置以外に、入力装置、表示装置、ROM(Read Only Memory)、および音声出力装置等が接続されていてもよい。
【0037】
第1デバイス100は、他のデバイスと、Ethernet(登録商標)等、ソケット通信を行う回線で接続している。なお、第1デバイス100は複数の他のデバイスと接続していてもよい。
【0038】
(CPU3)
CPU3は、前述の通り、第1デバイス100における演算装置および制御装置であり、第1デバイス100を統括的に制御する。CPU3は、各種アプリを動作させる。CPU3は、第1デバイス100におけるデータ通信を行う前に、予め受信ディスクリプタを作成(規定)し、作成した受信ディスクリプタをメモリ2のディスクリプタ領域21に書き込んでおく。
【0039】
(メモリ2)
メモリ2は、各種データを記憶する記憶装置である。メモリ2は、ディスクリプタ領域21と、ライトバック領域22と、受信データ領域23との3つの記憶領域に分かれている。なお、本実施形態においてライトバック領域22は必須ではない。
【0040】
ディスクリプタ領域21は、受信ディスクリプタを格納するための記憶領域である。受信ディスクリプタは、CPU3によって設定される。ライトバック領域22は、受信ディスクリプタをライトバックするための記憶領域である。受信ディスクリプタのライトバックについては後述する。受信データ領域23は、受信データを格納するための記憶領域である。図2に示すように、受信データ領域23は、識別子毎に分割されていてもよい。例えば、受信データ領域23は、識別子が示す受信ディスクリプタに応じて分割されていてもよい。
【0041】
(NIC1)
NIC1は、他のデバイスから受信したデータを、メモリ2にDMA転送するための装置である。NIC1は、受信データ格納バッファ18と、受信データ処理部11とを含む。
【0042】
受信データ格納バッファ18は、NIC1が他のデバイスから受信したデータを一時的に格納するバッファである。受信データ処理部11は、メモリ2における、受信データの適切な格納先アドレスを特定し、該アドレスに受信データをDMA転送する。
【0043】
受信データ処理部11は、データ受信部17と、アドレス計算部(識別子取得部)16と、ディスクリプタ制御部(読出部)14と、DMA制御部12と、受信データ制御部(データ書込部)13と、ディスクリプタ格納バッファ15と、を含む。
【0044】
データ受信部17は、他のデバイス(第2デバイス)からデータを受信し、該データを受信データ格納バッファ18に格納する。データ受信部17は、複数の通信プロトコルに対応していてもよい。例えば、データ受信部17は、サイクリック通信により送信されたデータ(サイクリックデータ)を受信してもよい。また、データ受信部17は、TCP-IP等の通信プロトコルによって送信されたデータを受信してもよい。データ受信部17は、受信したデータの通信プロトコルを受信データ制御部13に通知してもよい。
【0045】
本実施形態では、特段の記載が無い限り、データ受信部17は、サイクリックデータを受信することとする。データ受信部17は、1つの通信プロトコル(例えばサイクリック通信のプロトコル)で、複数のデータを受信する。
【0046】
アドレス計算部16は、複数の受信データそれぞれに対応する識別子を取得する。本実施形態では、アドレス計算部16は、受信データ格納バッファに格納された受信データから、該データに含まれている識別子を抽出して取得する。
【0047】
アドレス計算部16は、取得した識別子を解析することにより、各識別子に対応している受信ディスクリプタの、メモリ2における格納先アドレスを算出する。例えば、識別子がアプリ情報を含む場合、アドレス計算部16は、アプリ情報が規定するアプリがアクセス可能な記憶領域のアドレスを指定している受信ディスクリプタを選出してもよい。そして、アドレス計算部16は、該受信ディスクリプタのいずれかのアドレスを、識別子に対応する受信ディスクリプタのアドレスとして特定してもよい。アドレス計算部16は、受信ディスクリプタの格納先アドレスを、ディスクリプタ制御部14に出力する。
【0048】
ディスクリプタ制御部14は、受信ディスクリプタの格納先アドレスが入力されると、該アドレスから受信ディスクリプタを読み出すよう、DMA制御部12に指示する。また、ディスクリプタ制御部14は、ディスクリプタ格納バッファ15に格納された受信ディスクリプタを読み出し、該受信ディスクリプタによって指定される、メモリ2上の格納先アドレスを特定する。ディスクリプタ制御部14は、特定した格納先アドレスを受信データ制御部13に出力する。
【0049】
DMA制御部12は、NIC1においてメモリ2にアクセスするインタフェースである。DMA制御部12は、受信データ処理部11の各部からの要求に応じてメモリ2にアクセスし、データの格納および取得を行う。
【0050】
受信データ制御部13は、メモリ2の、ディスクリプタ制御部14が読み出した受信ディスクリプタが指定する格納先アドレスに、受信データを格納する。具体的には、受信データ制御部13に、受信ディスクリプタが指定する格納先アドレスが入力されると、受信データ制御部13は、受信データ格納バッファ18から受信データを読み出す。受信データ制御部13は、読み出した受信データを、DMA制御部12を介してメモリ2の指定されたアドレスに格納(書き込み)する。
【0051】
ディスクリプタ格納バッファ15は、DMA制御部12を介してNIC1が受信した受信ディスクリプタを一時的に格納しておくバッファである。ディスクリプタ格納バッファ15に格納された受信ディスクリプタは、ディスクリプタ制御部14によって読み出される。
【0052】
(ライトバック処理)
ディスクリプタ制御部14は、受信ディスクリプタのライトバック処理を実行してもよい。以降、受信ディスクリプタのライトバックのことを、単に「ライトバック」とも称する。本実施形態における「ライトバック」とは、受信ディスクリプタに情報を付加(すなわち、受信ディスクリプタを上書き)して、メモリ2のライトバック領域22に書き込むことを意味する。ここで言う「情報」とは、例えば、その受信ディスクリプタが指定するアドレスに書き込みした受信データのサイズ、および、受信データの書き込み完了を示す終了判定フラグ、の少なくとも一方を示す。
【0053】
図3は、ディスクリプタ制御部14が実行するライトバック処理を模式的に示したものである。図中の矢印は、受信ディスクリプタと、該受信ディスクリプタを上書きしたディスクリプタ(上書済ディスクリプタ)との対応関係を示している。図示のように、受信ディスクリプタと、上書済ディスクリプタとは1対1に対応している。受信データ制御部13は、受信データの書込みが終了すると、書込み終了の旨をディスクリプタ制御部14に通知する。ディスクリプタ制御部14は、該通知を受けると、ライトバックを実行する。すなわち、ディスクリプタ制御部14は、使用した受信ディスクリプタを上書きし、ライトバック領域22の、該受信ディスクリプタに対応するアドレスに、上書済受信ディスクリプタを書き込む。
【0054】
ディスクリプタ領域21に格納されている受信ディスクリプタは、データ受信の度に順次使用される。したがって、ディスクリプタ領域21に格納されている受信ディスクリプタ自体に終了判定フラグ等を付加して上書きしてしまうと、該受信ディスクリプタの再利用が困難になる。前述のようにライトバック領域22を設け、該領域に上書きした受信ディスクリプタを書き込むことによって、ディスクリプタ領域21に格納されている受信ディスクリプタの再利用を可能にすることができる。また、これにより、データ受信の終了判定フラグ、および受信データのサイズの記録等を、残すことができる。
【0055】
§3.処理の流れ
図4は、本実施形態に係るNIC1の処理の流れの一例を示すフローチャートである。NIC1のデータ受信部17は、他のデバイスから送信されたデータを受信する(S10)。データ受信部17は、受信データを受信データ格納バッファ18に格納する(S12)。受信データが格納されると、アドレス計算部16は、該受信データから識別子を取得して、解析する(S14)。例えば、アドレス計算部16は、識別子から、受信データの種別、および、受信データを使用するアプリを特定する。受信データの種別がサイクリックデータでない場合(S16でYES)、受信データ処理部11は、S18以降の処理を行わず、通常の受信処理を行う(S28)。通常の受信処理とは、例えば、DMA方式ではなく、通常のようにCPU3を経由してメモリ2にデータを書き込む処理であってよい。
【0056】
一方、受信データの種別がサイクリックデータである場合(S16でYES)アドレス計算部16は、識別子からアドレスを算出する(S18)。アドレス計算部16は、算出したアドレスをディスクリプタ制御部14に出力する。ディスクリプタ制御部14は、アドレス計算部16から入力されたアドレスに割り当てられている受信ディスクリプタを、DMA制御部12を介して読み込み、ディスクリプタ格納バッファ15に格納させる(S20)。ディスクリプタ制御部14は、ディスクリプタ格納バッファ15に格納した受信ディスクリプタを読み出し、該受信ディスクリプタが示すメモリ2上のアドレス、すなわち、受信データの書き込み先のアドレスを特定する。ディスクリプタ制御部14は特定したアドレスを受信データ制御部13に出力する。
【0057】
受信データ制御部13は、受信データを、メモリ2の、受信ディスクリプタが示すアドレスに書き込む(S22)。受信データ制御部13は、受信データの書込みが終了した旨をディスクリプタ制御部14に通知する。
【0058】
ディスクリプタ制御部14は、該通知を受けると、ライトバックを実行する。すなわち、ディスクリプタ制御部14は、メモリ2のライトバック領域22に、上書きした受信ディスクリプタを書き込む(S24)。
【0059】
以上の処理が終了すると、受信データ処理部11は、データの受信処理の完了をCPU3に通知する(S26)。
【0060】
なお、図4において、S16の判定処理、およびS28の処理は必須ではない。すなわち、S14の処理の後、S16の判定処理を経ずにS18の処理を実行してもよい。また、図4において、S24に示したライトバックに関する処理も必須ではない。
【0061】
§4.受信ディスクリプタの使用管理
メモリ2のディスクリプタ領域21には、1つの識別子に対応する複数の受信ディスクリプタが記憶されていてもよい。また、複数の受信ディスクリプタは、1つの識別子のアプリ情報が示すアプリがアクセス可能な記憶領域内の、それぞれ異なるアドレスを指定していてもよい。そして、ディスクリプタ制御部14は、複数の受信ディスクリプタを所定の順番で読み出してもよい。なお、アプリと識別子とは、1対1に対応していてもよいし、1対多で対応していてもよい。すなわち、1つのアプリに対し割り当てられる識別子は1つであってもよいし、複数であってもよい。
【0062】
図5は、1つの識別子に対し複数の受信ディスクリプタが設定されている場合の、受信ディスクリプタと、受信データ領域23との対応関係について模式的に示した図である。なお、図5では、ディスクリプタ領域21と受信データ領域23とをそれぞれ別個に表記しているが、図2等に示す通り、この2領域は同じメモリ2内の記憶領域であってよい。
【0063】
なお、図5において、ディスクリプタ領域21内のディスクリプタはそれぞれハイフンで繋がれた2つの数字の組合せで識別される。図5の例では、ハイフンの左側の数字は識別子の識別番号を、右側の数字は受信ディスクリプタの識別番号をそれぞれ示している。つまり、図5の例では、識別番号「0」の識別子に対応する受信ディスクリプタとして、識別番号「0」、「1」、「2」、および「3」の計4つの受信ディスクリプタが設定されている。また、識別番号「1」の識別子に対応する受信ディスクリプタとして、識別番号「0」の受信ディスクリプタが設定されている。なお、図5では識別番号「0」の識別子と、識別番号「1」の識別子とは異なるアプリに対応する識別子であることとする。
【0064】
図5において、受信データ領域23内の「TAG0」および「TAG1」の数字はそれぞれ、前述のアプリの識別番号に対応している。また、「Buf0」~「Buf3」の数字はそれぞれ、前述の受信ディスクリプタの識別番号に対応している。
【0065】
図5に示す通り、同じ識別子に対応する受信ディスクリプタが複数ある場合、ディスクリプタ制御部14は、所定の順番で受信ディスクリプタを読み出し、読み出した受信ディスクリプタに対応するアドレスに、順次受信データを格納する(「TAG0:Buf0」~「TAG0:Buf3」)。一方、前述の通り、メモリ2においてアプリが使用可能な記憶領域は、該アプリ毎に異なっている。したがって、異なるアプリに対応する識別子を取得した場合、ディスクリプタ制御部14は、メモリ2上の異なる記憶領域にデータを格納する(「TAG1:Buf0」)。
【0066】
図6は、NIC1のディスクリプタ制御部14における、使用する受信ディスクリプタの管理方法を模式的に示した図である。ディスクリプタ制御部14は例えば、図6に示すように、各識別子に対応する複数の受信ディスクリプタのうち、次に使用する受信ディスクリプタを、使用フラグを用いて管理してもよい。
【0067】
図6のディスクリプタ領域21には、計4つの受信ディスクリプタが設定されている。各受信ディスクリプタの識別番号は、図5に示した識別番号と同様の意味を持つ。つまり、図6の例では、識別番号「0」および「1」の識別子について、それぞれ対応する受信ディスクリプタがそれぞれ2つずつ設定されていることとする。
【0068】
図6に示すNIC1の「使用カウント」における欄内の数値は、各識別子(識別番号「0」および「1」の識別子)に対応する受信ディスクリプタのうち、次回のデータ受信の際に使用する受信ディスクリプタを示す数値である。図6に示す使用カウントの初期値は0であり、対応する受信ディスクリプタが使用される毎に1ずつカウントが増加する。また、カウントが設定されている受信ディスクリプタの数に達する場合、カウントは0に戻されることとする。
【0069】
例えば、NIC1が識別番号「0」の識別子を含むデータを最初に受信した場合、使用カウントは0である。よって、ディスクリプタ制御部14は、識別番号「0」の識別子に対応する、識別番号「0」の受信ディスクリプタを使用する。ディスクリプタ制御部14は、受信ディスクリプタを読み出した後、識別番号「0」の識別子の使用カウントを1増加させる。
【0070】
次に、NIC1が識別番号「1」の識別子を含むデータを受信した場合、対応する使用カウントは0である。したがって、ディスクリプタ制御部14は、識別番号「1」の識別子に対応する、識別番号「0」の受信ディスクリプタを使用する。ディスクリプタ制御部14は、受信ディスクリプタを読み出した後、識別番号「1」の識別子の使用カウントを0に戻す。
【0071】
さらに、NIC1が識別番号「1」の識別子を含むデータを受信した場合、対応する使用カウントは1である。したがって、ディスクリプタ制御部14は、識別番号「1」の識別子に対応する、識別番号「1」の受信ディスクリプタを使用する。ディスクリプタ制御部14は、受信ディスクリプタを読み出した後、識別番号「1」の識別子の使用カウントを0に戻す。
【0072】
このように、使用カウントを用いることで、複数の受信ディスクリプタを順番で使用することができる。したがって、受信データの書き込み処理が遅れて、データ受信部17が次に書き込むべきデータをすでに受信してしまった場合でも、各データを別の受信ディスクリプタが示す、別のアドレスに書き込むよう指定することができる。したがって、データの書き込み処理が遅れた場合でも、誤ってデータを上書きしてしまうことを防止できる。
【0073】
〔実施形態2〕
本発明の他の実施形態について、以下に説明する。なお、説明の便宜上、前記実施形態にて説明した部材と同じ機能を有する部材については、同じ符号を付記し、その説明を繰り返さない。
【0074】
§1.構成例
図7は、本実施形態に係るメモリ管理システム500の要部構成の一例を示すブロック図である。メモリ管理システム500は、FPGA(Field-Programmable gate array)4と、送信側CPU7と、受信側CPU8と、送信側メモリ(第2メモリ)5と、受信側メモリ6と、を含む。
【0075】
(FPGA4)
FPGA4と、送信側CPU7と、送信側メモリ5はバスで接続されている。また、FPGA4と、受信側CPU8と、受信側メモリ6とは、バスで接続されている。バスの規格は特に限定しないが、例えばPCIe(Peripheral Component Interconnect Express)の規格に準拠したバスを採用することができる。それぞれのバスには、入力装置、表示装置、ROM、および音声出力装置等が接続されていてもよい。
【0076】
FPGA4は、送信処理部41と受信処理部42とを含んでいる。送信処理部41は送信側メモリ5にDMA方式でアクセスする。また、受信処理部42は受信側メモリ6にDMA方式でアクセスする。本実施形態では、メモリ管理システム500のFPGA4の受信処理部42と、受信側CPU8と、受信側メモリ6とで、第1デバイスが実現される。また、本実施形態では、FPGA4の送信処理部41と、送信側CPU7と、送信側メモリ5とで、第2デバイスが実現される。第2デバイスは、第1デバイスにデータを送信する他のデバイスの一種である。
【0077】
すなわち、FPGA4は、第1デバイスと第2デバイスとのデータの送受信を仲介する装置である。具体的には、FPGA4の送信処理部41は、第2デバイスにおける送信側メモリ5からのデータ読出しと、データ送信処理と、を制御する。また、FPGA4の受信処理部42は、第1デバイスにおけるデータ受信処理と、第1デバイスにおける受信側メモリ6へのデータ書き込みと、を制御する。送信処理部41と受信処理部42の詳細な構成は後述する。
【0078】
(受信側CPU8および受信側メモリ6)
受信側CPU8は、実施形態1に示すCPU3と同様の構成を有する。受信側メモリ6は、実施形態1に示すメモリ2と同様の構成を有する。
【0079】
(送信側CPU7および送信側メモリ5)
送信側CPU7は、第2デバイスを統括的に制御する。送信側CPU7は、第2デバイスにおける各種アプリを動作させる。送信側CPU7は、第2デバイスにおけるデータ通信を行う前に、予め送信ディスクリプタを作成(規定)し、作成した送信ディスクリプタを送信側メモリ5の送信ディスクリプタ領域51に書き込んでおく。ここで、「送信ディスクリプタ」とは、送信処理部41が送信するデータの、送信側メモリ5での格納先アドレスを示す情報である。
【0080】
送信側メモリ5は、各種データを記憶する記憶装置である。送信側メモリ5は、送信ディスクリプタ領域51と、送信データ領域52との2つの記憶領域に分かれている。送信ディスクリプタ領域51は、送信ディスクリプタを格納するための記憶領域である。送信データ領域52は、送信データを格納するための記憶領域である。なお、送信側メモリ5は、送信ディスクリプタのライトバック処理に用いるライトバック領域を有していてもよい。
【0081】
(送信処理部41)
送信処理部41は、第2デバイスから第1デバイスへのデータの送信を制御する。送信処理部41は、DMA制御部411と、送信ディスクリプタ格納バッファ412と、送信ディスクリプタ制御部(第2読出部)413と、送信データ制御部414と、送信データ格納バッファ415とを含む。
【0082】
DMA制御部411は、送信処理部41の各部からの要求に応じて、送信側メモリ5にアクセスし、データの格納および取得を行う。
【0083】
送信ディスクリプタ格納バッファ412は、送信ディスクリプタを一時的に格納しておくバッファである。送信ディスクリプタ格納バッファ412に格納された送信ディスクリプタは、送信ディスクリプタ制御部413によって読み出される。
【0084】
送信ディスクリプタ制御部413は、送信ディスクリプタを読み出して送信ディスクリプタ格納バッファ412に格納するよう、DMA制御部12に指示する。また、送信ディスクリプタ制御部413は、送信ディスクリプタ格納バッファ412に格納された送信ディスクリプタを読み出し、該送信ディスクリプタによって指定される、送信側メモリ5上の格納先アドレスを特定する。また、送信ディスクリプタ制御部413は、送信ディスクリプタから、送信データの識別子(すなわち、受信処理部42にとっての受信データの識別子)を生成する。送信ディスクリプタからの識別子の生成方法は特に限定されない。例えば、送信ディスクリプタ制御部413は、送信ディスクリプタに含まれる一部の情報を識別子としてもよい。また、送信ディスクリプタ制御部413は、送信ディスクリプタから、送信データの種類を示す情報、送信データを使用するアプリを特定する情報等を特定して、該情報を識別子としてもよい。送信ディスクリプタ制御部413は、特定した送信データの格納先アドレスと、識別子とを送信データ制御部414に出力する。
【0085】
送信データ制御部414は、送信ディスクリプタが指定する格納先アドレスから送信データを読み出す。読み出した送信データは、一時的に送信データ格納バッファ415に格納してもよい。送信データ格納バッファ415は、送信データを一時的に格納するバッファである。送信データ制御部414は、読み出した送信データと、識別子とを対応付ける。送信データ制御部414は、送信データを受信処理部42の受信データ制御部425に、識別子をアドレス計算部423に出力する。
【0086】
(受信処理部42)
受信処理部42は、第1デバイスが受信したデータのメモリへの格納を制御する。受信処理部42は、DMA制御部421と、ディスクリプタ格納バッファ422と、ディスクリプタ制御部424と、アドレス計算部423と、受信データ制御部425と、を含む。
【0087】
DMA制御部421は、実施形態1に係るDMA制御部12と同様の処理を実行する。ディスクリプタ格納バッファ422は、実施形態1に係るディスクリプタ格納バッファ422と同様の処理を実行する。ディスクリプタ制御部424は、実施形態1に係るディスクリプタ制御部14と同様の処理を実行する。
【0088】
アドレス計算部423は、受信処理部42が受信したデータ(受信データ)の識別子を、送信データ制御部414から。データとは別個に受信する。それ以外アドレス計算部423の処理は、実施形態1に係るアドレス計算部16と同様である。
【0089】
受信データ制御部425は、実施形態1に係るデータ受信部17の機能と、受信データ制御部13の両方の機能を有する。具体的には、受信データ制御部425は、送信処理部41の送信データ制御部414から出力されたデータを受信する。
【0090】
なお、受信処理部42には、実施形態1と同様に受信データ格納バッファが含まれていてもよい。受信データ格納バッファが在る場合、受信データ制御部425は、受信データ格納バッファに受信データを一時的に格納する。受信データ格納バッファが無い場合、受信データ制御部425は、受信データを自己で一時記憶する。受信データ制御部425はまた、メモリ2の、ディスクリプタ制御部424が読み出した受信ディスクリプタが指定する格納先アドレスに、受信データを格納する。
【0091】
§2.処理の流れ
図8は、本実施形態に係るFPGA4の送信処理部41と受信処理部42の間のデータの流れを示すシーケンス図である。なお、図8のS70~S82に示す処理は、図4のS16~S28に示した処理と同様であるため、繰り返し説明しない。
【0092】
FPGA4の送信処理部41は、送信側CPUからデータの送信要求を受けるまで待機する(S50でNO)。データの送信要求を受けると(S50でYES)、送信ディスクリプタ制御部413は、DMA制御部411を介して、データ送信の実行回数分の送信ディスクリプタを読み込む(S52)。読み込んだ送信ディスクリプタは、一時的に送信ディスクリプタ格納バッファ412に格納してもよい。
【0093】
送信ディスクリプタ制御部413は、読み出した送信ディスクリプタによって指定される、送信側メモリ5上の送信データの格納先アドレスを特定する。送信データ制御部414は、送信ディスクリプタが指定する格納先アドレスから送信データを読み込む(S54)。送信データ制御部414が読み込んだ送信データは、一時的に送信データ格納バッファ415に格納されてもよい。
【0094】
送信ディスクリプタ制御部413はまた、送信ディスクリプタに応じて、送信データに対応する識別子を生成する。送信データ制御部414は、送信ディスクリプタ制御部413から識別子を受信し、該識別子を送信データと対応付けてから、受信処理部42のアドレス計算部423に送信する(S56)。
【0095】
受信処理部42のアドレス計算部423はデータの識別子を受信すると(S58)、該識別子を解析することにより、(S60)、該データの受信ディスクリプタの、受信側メモリ6における格納先アドレスを特定する。
【0096】
一方、送信処理部41の送信データ制御部414は、識別子の送信とともに、または識別子の送信と前後して、受信処理部42の受信データ制御部425に対し、データを送信する(S62)。受信データ制御部425は該データを受信データとして受信する(S64)。
【0097】
送信処理部41は、S62までの処理が終了すると、未実行の送信ディスクリプタがあるか否かを判定する(S66)。すなわち、送信処理部41は、S50において受けた送信要求のうち、まだ実行していないデータ送信があるか否かを判定する。未実行の送信ディスクリプタがある場合(S66でYES)、送信処理部41は、未実行の送信ディスクリプタとそれに対応する送信データについて、S54以降の処理を繰り返す。一方、未実行の送信ディスクリプタがない場合(S66でNO)、送信処理部41は、送信要求を受けての送信処理が終了したことを送信側CPU7に通知する(S68)。
【0098】
なお、図8において、S60の処理とS64の処理とは順不同で行われてよい。また、図8において、S70の判定処理、およびS82の処理は必須ではない。すなわち、S58~S64までの処理の後、S70の判定処理を経ずにS72の処理を実行してもよい。また、図8において、S78に示したライトバックに関する処理も必須ではない。
【0099】
〔ソフトウェアによる実現例〕
NIC1およびFPGA4の制御ブロックは、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、ソフトウェアによって実現してもよい。
【0100】
後者の場合、NIC1およびFPGA4は、各機能を実現するソフトウェアであるプログラムの命令を実行するコンピュータを備えている。このコンピュータは、例えば1つ以上のプロセッサを備えていると共に、前記プログラムを記憶したコンピュータ読み取り可能な記録媒体を備えている。そして、前記コンピュータにおいて、前記プロセッサが前記プログラムを前記記録媒体から読み取って実行することにより、本発明の目的が達成される。前記プロセッサとしては、例えばCPU(Central Processing Unit)を用いることができる。前記記録媒体としては、「一時的でない有形の媒体」、例えば、ROM(Read Only Memory)等の他、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、前記プログラムを展開するRAM(Random Access Memory)などをさらに備えていてもよい。また、前記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して前記コンピュータに供給されてもよい。なお、本発明の一態様は、前記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【0101】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【0102】
1 NIC(メモリ制御装置)
2 メモリ
5 送信側メモリ(第2メモリ)
6 受信側メモリ(メモリ)
3 CPU
4 FPGA(メモリ制御装置)
7 送信側CPU
8 受信側CPU
11 受信データ処理部
12、411、421 DMA制御部
13、425 受信データ制御部(データ書込部)
14、424 ディスクリプタ制御部(読出部)
15、422 ディスクリプタ格納バッファ
16、423 アドレス計算部(識別子取得部)
17 データ受信部
18 受信データ格納バッファ
21 ディスクリプタ領域
22 ライトバック領域
23 受信データ領域
41 送信処理部
42 受信処理部
51 送信ディスクリプタ領域
52 送信データ領域
100 第1デバイス
412 送信ディスクリプタ格納バッファ
413 送信ディスクリプタ制御部(第2読出部)
414 送信データ制御部
415 送信データ格納バッファ
500 メモリ管理システム
図1
図2
図3
図4
図5
図6
図7
図8
図9