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

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

▶ 株式会社東芝の特許一覧 ▶ 東芝電機サービス株式会社の特許一覧

特許7532292通信装置、プロセッサ、通信方法およびプログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-02
(45)【発行日】2024-08-13
(54)【発明の名称】通信装置、プロセッサ、通信方法およびプログラム
(51)【国際特許分類】
   H04L 69/14 20220101AFI20240805BHJP
【FI】
H04L69/14
【請求項の数】 11
(21)【出願番号】P 2021040208
(22)【出願日】2021-03-12
(65)【公開番号】P2022139706
(43)【公開日】2022-09-26
【審査請求日】2023-02-08
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】598076591
【氏名又は名称】東芝インフラシステムズ株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】山浦 隆博
(72)【発明者】
【氏名】小林 優太
【審査官】宮島 郁美
(56)【参考文献】
【文献】特開平09-181771(JP,A)
【文献】特開2019-159812(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L69/00
(57)【特許請求の範囲】
【請求項1】
フレームを受信する通信部と、
前記フレームの誤りを検出する誤り検出処理を実行する誤り検出部と、
前記誤り検出処理の終了を待たずに、前記フレームを、転送先のプロセッサのフレーム記憶部に転送する転送部と
記誤り検出部により誤りが検出された場合、前記転送部による転送を無効にする転送無効制御部と、
を備える通信装置。
【請求項2】
転送無効制御部は、前記転送部による転送を無効にしない場合、転送された前記フレームのメタ情報を更新し、前記メタ情報が更新されたことを前記転送先に通知し、前記転送部による転送を無効にする場合、転送された前記フレームのメタ情報を更新しない、
請求項1に記載の通信装置。
【請求項3】
前記転送無効制御部は、前記転送部による転送を無効にする場合、転送された前記フレームが無効であることを示す転送無効化情報を、前記転送先に送信する、
請求項1に記載の通信装置。
【請求項4】
前記フレームが、前記フレームが冗長化されていることを示す冗長化情報を含むか否かを判定する冗長化情報存在判定部と、
前記フレームが前記冗長化情報を含む場合、前記フレームから前記冗長化情報を除去する冗長化情報除去部と、を更に備え、
前記転送部は、前記冗長化情報を除去された前記フレームを、前記転送先のフレーム記憶部に転送する、
請求項1乃至3のいずれか1項に記載の通信装置。
【請求項5】
少なくとも1つの前記フレームを含むストリームを識別するストリーム識別部と、
前記冗長化情報からシーケンス番号を抽出するシーケンス番号抽出部と、
前記シーケンス番号を用いて、前記ストリームにおいて前記フレームを既に受信しているか否かを判定する重複判定部と、を更に備え、
前記転送無効制御部は、前記重複判定部により前記フレームを既に受信していると判定された場合、前記転送部による転送を無効にする、
請求項4に記載の通信装置。
【請求項6】
前記重複判定部は、
単一の前記ストリームにおける重複判定を行う単一ストリーム重複判定部と、
複数の前記ストリームにおける重複判定を行う複数ストリーム重複判定部と、を備え、
前記転送無効制御部は、前記単一ストリーム重複判定部および前記複数ストリーム重複判定部の少なくとも一方により前記フレームを既に受信していると判定された場合、前記転送部による転送を無効にする、
請求項5に記載の通信装置。
【請求項7】
前記誤り検出部は、前記フレームのFCS(Frame Check Sequence)フィールド以外のフィールドのCRC(Cyclic Redundancy Code)を計算し、前記FCSと前記CRCとが一致しない場合に誤りがあると判定する、
請求項1乃至6のいずれか1項に記載の通信装置。
【請求項8】
転送元から転送されたフレームを記憶するフレーム記憶部と、
前記フレームの転送を無効にするか否かを示す転送無効化情報と、前記フレームの重複の判定の要否を示す重複判定情報と、少なくとも1つの前記フレームを含むストリームのストリーム識別データと、前記フレームのシーケンス番号とを含むメタ情報を記憶するメタ情報記憶部と、
前記ストリーム識別データによりストリームを識別するストリーム識別部と、
前記重複判定情報に基づいて前記フレームの重複を判定するか否かを判定し、前記フレームの重複を判定する場合、前記ストリーム識別データにより識別されたストリームにおいて、前記シーケンス番号を用いて、前記フレームを既に受信しているか否かを判定する重複判定部と、
前記転送無効化情報が転送の無効を示さない場合、かつ、前記フレームを既に受信していない場合、前記フレームを処理する受信フレーム処理部と、
を備えるプロセッサ。
【請求項9】
通信装置が、フレームを受信するステップと、
前記通信装置が、前記フレームの誤りを検出する誤り検出処理を実行するステップと、
前記通信装置が、前記誤り検出処理の終了を待たずに、前記フレームを、転送先のプロセッサのフレーム記憶部に転送するステップと
記通信装置が、前記検出するステップにより誤りが検出された場合、前記転送するステップによる転送を無効にするステップと、
を備える通信方法。
【請求項10】
コンピュータを、
フレームを受信する通信部と、
前記フレームの誤りを検出する誤り検出処理を実行する誤り検出部と、
前記誤り検出処理の終了を待たずに、前記フレームを、転送先のプロセッサのフレーム記憶部に転送する転送部と
記誤り検出部により誤りが検出された場合、前記転送部による転送を無効にする転送無効制御部、
として機能させるためのプログラム。
【請求項11】
コンピュータを、
転送元から転送されたフレームを記憶するフレーム記憶部と、
前記フレームの転送を無効にするか否かを示す転送無効化情報と、前記フレームの重複の判定の要否を示す重複判定情報と、少なくとも1つの前記フレームを含むストリームのストリーム識別データと、前記フレームのシーケンス番号とを含むメタ情報を記憶するメタ情報記憶部と、
前記ストリーム識別データによりストリームを識別するストリーム識別部と、
前記重複判定情報に基づいて前記フレームの重複を判定するか否かを判定し、前記フレームの重複を判定する場合、前記ストリーム識別データにより識別されたストリームにおいて、前記シーケンス番号を用いて、前記フレームを既に受信しているか否かを判定する重複判定部と、
前記転送無効化情報が転送の無効を示さない場合、かつ、前記フレームを既に受信していない場合、前記フレームを処理する受信フレーム処理部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は通信装置、プロセッサ、通信方法およびプログラムに関する。
【背景技術】
【0002】
TSN(Time-Sensitive Networking)規格のひとつであるIEEE802.1CBでは、フレームは、シーケンス番号をつけて複製され、複数のフレームが送信されることによって、信頼性を向上させる。この規格では、受信側において既に受信したフレーム(重複フレーム)の除去処理が行われるが、フレームには誤りなどが発生している可能性があるため、フレームのデータ整合性の確認を行ってから除去処理を行うことが規定されている。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2009-32053号公報
【非特許文献】
【0004】
【文献】IEEE Std 802.1CB‐2017
【文献】IEEE Std 802.1Q‐2018
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来の技術では、データ整合性の確認処理による転送遅延を低減させることが難しかった。
【課題を解決するための手段】
【0006】
実施形態の通信装置は、通信部と誤り検出部と転送部と転送無効制御部とを備える。通信部は、フレームを受信する。誤り検出部は、前記フレームの誤りを検出する誤り検出処理を実行する。転送部は、前記誤り検出処理の終了を待たずに、前記フレームを、転送先のプロセッサのフレーム記憶部に転送する。転送無効制御部は、前記誤り検出部により誤りが検出された場合、前記転送部による転送を無効にする。
【図面の簡単な説明】
【0007】
図1】第1実施形態の通信装置のハードウェア構成の例を示す図。
図2】第1実施形態の通信装置の機能構成の例を示す図。
図3】第1実施形態のディスクリプタの例を示す図。
図4】第1実施形態のディスクリプタに含まれるステータスの例を示す図。
図5】第1実施形態のフレームのフォーマットの例を示す図。
図6】第1実施形態のホストプロセッサの初期化処理の例を示すフローチャート。
図7】第1実施形態のネットワークインタフェースコントローラのフレーム受信処理の例を示すフローチャート。
図8】第1実施形態のホストプロセッサのフレーム受信処理の例を示すフローチャート。
図9】第1実施形態の重複フレームの処理について説明するための図。
図10】第1実施形態の非重複フレームの処理について説明するための図。
図11】第2実施形態のディスクリプタに含まれるステータスの例を示す図。
図12】第2実施形態のネットワークインタフェースコントローラのフレーム受信処理の例を示すフローチャート。
図13】第2実施形態のホストプロセッサのフレーム受信処理の例を示すフローチャート。
図14】第3実施形態の通信装置の機能構成の例を示す図。
図15】第3実施形態のディスクリプタの例を示す図。
図16】第3実施形態のディスクリプタに含まれるステータスの例を示す図。
図17】第3実施形態のネットワークインタフェースコントローラのフレーム受信処理の例を示すフローチャート。
図18A】第3実施形態のホストプロセッサのフレーム受信処理の例を示すフローチャート。
図18B】第3実施形態のホストプロセッサのフレーム受信処理の例を示すフローチャート。
図19】第1乃至第3実施形態の通信装置を用いたシステムの構成例を示す図。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、通信装置、プロセッサ、通信方法およびプログラムの実施形態を詳細に説明する。
【0009】
フレームに誤りが発生しているか否かを確認せずに、フレームに含まれるシーケンス番号を既に受信されたシーケンス番号として記憶し、受信されたフレームの重複除去処理を行うと、誤ったシーケンス番号が受信済として処理される。そのため、フレームに誤りが発生していると、本来重複排除してはならないフレームの除去処理を行ってしまう場合がある。IEEE802.1CBでは、これを避けるため、フレームのデータ整合性の確認を行って除去処理を行うことが規定されている。このため、ホストにデータを転送する際に、データ整合性の確認処理が必要となる。
【0010】
以下、データ整合性の確認処理による転送遅延を低減させる実施形態について詳細に説明する。
【0011】
(第1実施形態)
はじめに、第1実施形態の通信装置のハードウェア構成の例について説明する。
【0012】
[ハードウェア構成の例]
図1は第1実施形態の通信装置100のハードウェア構成の例を示す図である。本実施形態の通信装置100は、メモリ1、ホストプロセッサ2、ストレージ3、ネットワークインタフェースコントローラ4およびストレージコントローラ5を備える。
【0013】
メモリ1は、ホストプロセッサ2内のメモリコントローラを介してホストプロセッサ2に接続される。メモリ1は、例えばDRAM(Dynamic Random Access Memory)などにより実現される。
【0014】
ホストプロセッサ2は、PCI Express(登録商標)などのバスを用いて、ストレージコントローラ5と接続される。同様に、ホストプロセッサ2は、PCI Express(登録商標)などのバスを用いて、ネットワークインタフェースコントローラ4と接続される。
【0015】
ホストプロセッサ2は、ストレージ3に格納された実行プログラムのイメージをメモリ1に展開し、メモリ1上の命令およびデータを読みながら処理を実行する。処理は、ホストプロセッサ2に備えられた1つまたは複数のコアにより実行される。なお図1ではメモリ1とホストプロセッサ2とを分けて記載しているが、図2以降では、図1のメモリ1とホストプロセッサ2との組み合わせで実現される構成を、ホストプロセッサの機能構成として説明する。
【0016】
ストレージ3は、例えばHDD(Hard Disk Drive)およびSSD(Solid State Drive)などにより実現される。ストレージ3は、SATA、SAS、および、U.2(SFF-8639)などの規格でストレージコントローラ5と接続される。またストレージ3とストレージコントローラ5とは一体となっていてもよい。
【0017】
ネットワークインタフェースコントローラ4は、ホストプロセッサ2をネットワーク200aおよび200bに接続する。以下、ネットワーク200aおよび200bを区別しない場合、単にネットワーク200という。ネットワーク200は、例えばEthernet(登録商標)である。例えば、ネットワークインタフェースコントローラ4は、物理的なEthernetポートを2つ備え、それぞれのポートがネットワーク200aと200bに接続されてもよい。また、例えば、ネットワーク200は、IEEE802.1Qで定義されるVLAN(Virtual LAN)に対応している。
【0018】
ネットワーク200は図1に示すように2つでもよいし、1つ又は3つ以上でもよい。物理的なEthernetポートの数と必ずしも一致する必要はなく、VLANのIDを分けて複数のネットワークに1つのEthenretポートで接続してもよい。また、ネットワーク200の種類は任意でよい。具体的には、ネットワーク200は、例えばオフィスネットワーク、データセンタ内部のネットワーク、車載ネットワーク、工場内ネットワーク、携帯基地局のネットワーク、および、コア設備のネットワークなどである。
【0019】
ネットワークインタフェースコントローラ4およびストレージコントローラ5は、例えばASIC(Application Specific Integrated Circuit)、または、FPGA(Field-Programmable Gate Array)などにより実現される。また、ネットワークインタフェースコントローラ4およびストレージコントローラ5は、ASIC、FPGAおよびプロセッサのうち2つまたは3つの組み合わせによって実現してもよい。また、ネットワークインタフェースコントローラ4およびストレージコントローラ5は内部に上述のメモリ1とは異なるメモリを内蔵していてもよい。また、ネットワークインタフェースコントローラ4およびストレージコントローラ5は、ホストプロセッサ2とは別のチップとして実装されてもよいし、SoC(System-on-a-Chip)として1つのチップとして実装されてもよい。
【0020】
[機能構成の例]
図2は第1実施形態の通信装置100の機能構成の例を示す図である。なお図2は、主に通信装置100に含まれるホストプロセッサ2およびネットワークインタフェースコントローラ4の機能構成の例を示す。図2に示すように、ホストプロセッサ2は、フレーム記憶部201、ディスクリプタ記憶部202および受信フレーム処理部203を備える。
【0021】
フレーム記憶部201は、ネットワークインタフェースコントローラ4で受信されたフレームを記憶する。
【0022】
ディスクリプタ記憶部202は、ネットワークインタフェースコントローラ4の制御に用いられる。ディスクリプタ(descriptor、記述子)は、フレームのデータ転送に用いられるメタ情報の一例である。ディスクリプタは、例えば、リングバッファになっており、2つの変数HeadおよびTailを用いて管理される。
【0023】
図3は第1実施形態のディスクリプタの例を示す図である。図3に示すように、HeadからTail-1のディスクリプタは、HW(ハードウェア)、すなわちネットワークインタフェースコントローラ4が所有しているディスクリプタを示す。また、TailからHead-1のディスクリプタは、SW(ソフトウェア)、すなわちホストプロセッサ2上で動作するソフトウェア(受信フレーム処理部203)が所有しているディスクリプタを示す。
【0024】
なお、Headの値とTailの値とが一致している場合にはSWが全てのディスクリプタエントリを所有しており、HWは書き込み可能なディスクリプタエントリがないことを意味する。HeadおよびTailの値は、レジスタインタフェースおよび後述するネットワークインタフェースコントローラ4の通知部416による割り込み信号を使って、ネットワークインタフェースコントローラ4およびホストプロセッサ2との間で通知される。
【0025】
受信ディスクリプタリングの各エントリ(各ディスクリプタ)は、転送先アドレス、長さおよびステータスを含む。転送先アドレスは、受信されるフレームを記憶するフレーム記憶部201(例えばホストプロセッサ2と接続されたメモリ)の記憶領域の先頭位置を示す先頭アドレスを示す。長さは、受信されるフレームの長さを示す。ステータスは、受信処理の状態を示す情報が記憶される。
【0026】
図4は第1実施形態のディスクリプタに含まれるステータスの例を示す図である。図4の例では、ステータスフィールドに書き込み完了フラグおよびエラーフラグがある。
【0027】
書き込み完了フラグは、受信フレーム処理部203によって0(書き込み未完了)に設定され、ネットワークインタフェースコントローラ4がフレームの転送を終え、フレームおよびディスクリプタの書き込みを完了した際に1(書き込み完了)に設定される。
【0028】
エラーフラグは、受信フレーム処理部203によって、0(エラーなし)に設定される。受信フレーム処理部203は、ネットワークインタフェースコントローラ4からのデータ転送中にデータのオーバーフローおよびアンダーランなどが発生した場合にエラーフラグを1に設定し、エラーがない場合にはエラーフラグを0に設定する。
【0029】
転送先アドレスは、受信フレーム処理部203により設定され、長さおよびステータスはネットワークインタフェースコントローラ4により設定される。
【0030】
受信フレーム処理部203は、例えばOS(Operating System)のデバイスドライバおよびユーザアプリケーションなどによって実現される。受信フレーム処理部203は、フレーム記憶部201に受信フレームを書き込む領域の確保をし、ディスクリプタ記憶部202にその領域を設定する。そして、受信フレーム処理部203は、ネットワークインタフェースコントローラ4からの割り込み通知を契機などにして、ディスクリプタ領域を参照し、フレーム記憶部201へのフレームデータの書き込みが完了していれば、フレーム記憶部201からフレームを取り出す。
【0031】
図2に戻り、ネットワークインタフェースコントローラ4は、通信部401、冗長化情報存在判定部402、誤り検出部403、冗長化情報除去部404、バッファ部405、転送部406、シーケンス番号抽出部407、ストリーム識別部408、ストリーム識別情報記憶部409、重複排除情報記憶部410、単一ストリーム重複判定部411、複数ストリーム重複判定部412、ディスクリプタ読み出し部413、転送無効制御部414、ディスクリプタ書き込み部415、通知部416および重複排除情報更新部417を備える。
【0032】
通信部401は、MAC(Media Access Controller)およびPHYと呼ばれる機能を含み、ネットワークにおけるデータリンク層および物理層のプロトコルに従ってフレームの送受信に必要な処理を行う。例えば通信部401は、IEEE802.3規格によって定められるEthernetのデータリンク層および物理層の処理を行う。
【0033】
図5は第1実施形態のフレームのフォーマットの例を示す図である。図5に示すように、フレームは、送信先MACアドレス、送信元MACアドレス、VLANタグ(VLAN Tag)、冗長タグ(Redundancy Tag)、タイプ/長さ、データ、および、FCS(Frame Check Sequence)を含む。VLANタグはIEEE802.1Qで定義され、冗長タグはIEEE802.1CBで定義されている。VLANタグおよび冗長タグは必ずしもこの順序でなくてよく、逆の順番であってもよい。また、他のタグが、VLANタグおよび冗長タグの前後もしくは間にあってもよい。
【0034】
図2に戻り、冗長化情報存在判定部402は、通信部401で受信されたフレームに冗長化情報が存在するか否かを判定する。冗長化情報は、フレームが冗長化されていることを示す情報である。例えば冗長化情報存在判定部402は、フレームを先頭からパースしていき、タイプ/長さフィールドが0xF1C1のIEEE802.1CBによって定義される冗長タグが存在するか否かを判定する。HSR(High-availability Seamless Redundancy)によって冗長化を行う場合には、冗長化情報存在判定部402は、HSR sequence tagと呼ばれるタグ(以下、HSRタグ)が存在するか否かを判定してもよい。PRP(Parallel Redundancy Protocol)を用いる場合には、冗長化情報存在判定部402は、PRP sequence trailerと呼ばれるトレーラ(以下、PRPトレーラ)を検出してもよい。
【0035】
誤り検出部403は、通信部401で受信されたフレームに誤りがあるかどうかを検出するための処理を行う。例えば、誤り検出部403は、データリンク層がイーサネットの場合には、FCS以外のフィールドの値を用いて算出した巡回冗長符号(Cyclic Redundancy Code、 CRC)をFCSフィールドに付加する。そして、受信側の誤り検出部403で、受信フレームからCRCを算出し、FCSフィールドに設定された値と一致しない場合に誤り(破損、欠損)の検出を行う。
【0036】
また、誤り検出部403は、IEEE802.11によって定義される無線LANにおいてもイーサネットと同様に誤りを検出してよい。誤り検出部403は、さらに上位層プロトコルである、ネットワーク層のプロトコルであるIPv4(Internet Protocol version 4)のヘッダチェックサムの値、およびトランスポート層のプロトコルであるTCP(Transmission Control Protocol)、UDP(User Datagram Protocol)のチェックサムの値などをチェックし、チェックサムの値が一致しない場合に誤りを検出してもよい。
【0037】
冗長化情報除去部404は、通信部401で受信されたフレームから冗長化情報を除去する。例えば、冗長化情報除去部404は、図5に示す冗長タグ部分を除去する。すなわち、冗長化情報除去部404から出力されるフレームは、送信先MACアドレス、送信元MACアドレス、タイプ/長さ(0x8100)、優先度(PCP)、CFI、VLAN ID、タイプ/長さ、データおよびFCSとなる。HSRおよびPRPなどの場合には、冗長化情報除去部404は、HSRタグおよびPRPトレーラを除去するようにしてもよい。この際に、冗長化情報除去部404は、FCSも除去するようにしてもよい。また、冗長化情報除去部404でFCSを除去せずに、冗長化情報除去部404の後段に別途FCS除去部を設けてもよい。
【0038】
バッファ部405は、通信部401で受信されたフレーム、または冗長タグおよびFCSなどが除去されたフレームを一時的に記憶する。このバッファ部405は例えば、転送部406の処理単位に達するまでデータを一時的に記憶するために用いられる。例えば転送部406のバス幅が512ビットであれば、バッファ部405は、512ビット単位で一時的に記憶する。ホストプロセッサ2に接続されるメモリは一般的にDRAMで構成されるため、バースト転送を行う方が効率がよい。このため、バッファ部405は、予め設定されたバースト長に達するまでバッファリングを行ってもよい。
【0039】
転送部406は、後述するディスクリプタ読み出し部413からフレームの転送先アドレスを取得し、当該転送先アドレスをフレーム記憶部201の転送先アドレスに書き込む。
【0040】
シーケンス番号抽出部407は、冗長化されて送信されたフレームからシーケンス番号を抽出する。IEEE802.1CBで定義されている冗長タグが付加されている場合には、シーケンス番号抽出部407は、冗長タグ(冗長化情報の一例)のシーケンス番号フィールドからシーケンス番号を取得する。HSRを用いる場合には、シーケンス番号抽出部407は、HSRタグからシーケンス番号を取得してもよい。また、PRPを用いる場合には、シーケンス番号抽出部407は、PRPトレーラからシーケンス番号を取得してもよい。
【0041】
ストリーム識別部408は、少なくとも1つのフレームを含むストリームを識別する。ストリームとは、1つの送信側から1つまたは複数の受信側への一連のフレームの流れである。ストリームは、送信先MACアドレス、送信元MACアドレス、VLAN ID、送信先IPアドレスおよび送信元IPアドレスなどにより識別される。
【0042】
具体的には、ストリームを識別する方法は、例えばIEEE802.1CBによって定義され、例えば以下の方法で行われる。
(1)送信先MACアドレスおよびVLAN IDの組み合わせ
(2)送信元MACアドレスおよびVLAN IDの組み合わせ
(3)送信先MACアドレス、VLAN ID、送信先IPアドレス、送信元IPアドレス、IPパケットの優先度(DSCP、Differentiated Services Code Point)、IPの上位層プロトコル、送信元ポート番号および送信先ポート番号
【0043】
上記の方法で識別されるストリームにはストリームハンドルと呼ばれる識別子が付与される。
【0044】
ストリーム識別情報記憶部409には、ストリーム識別部408でストリームの識別に用いられる情報が記憶される。具体的には例えば、ストリーム識別情報記憶部409は、ストリームハンドルの情報、ストリームの識別を行う物理的なイーサネットのポートの識別子およびストリームの識別を行う向き(送信方向又は受信方向)を記録する。
【0045】
重複排除情報記憶部410は、複製された複数のストリームから重複を除去し、単一のストリームに戻す際に用いられる重複排除情報を保持する。
【0046】
重複排除情報には、例えば、以下の情報の組み合わせを一つのエントリとして、そのエントリが複数含まれる。
(1)単一のストリームになるように重複排除を行うストリームのリスト(ストリームハンドルのリスト)
(2)重複排除を行う物理的なイーサネットのポートのリスト(イーサネットポートの識別子のリスト)
(3)上記イーサネットの物理的なポートにおいて重複排除を行う向き(送信方向または受信方向)
(4)重複排除を行う際のシーケンス番号の履歴
(5)単一ストリームの重複排除のためのエントリか複数ストリームの重複排除を行うためのエントリかを示す識別子
【0047】
単一ストリーム重複判定部411は、重複排除情報記憶部410に記憶されている単一ストリーム(individual stream)における重複排除情報を用いて、受信したフレームのシーケンス番号が既に受信済みであるか否かを判定する。単一ストリームにおける重複排除情報においては、単一のストリームにおいて受信された番号が記録される。例えば、ストリームAで4、5のシーケンス番号をもつフレームを受け取った後に、ストリームAでシーケンス番号5のシーケンス番号をもつフレームを受け取った場合に受信済み(重複している)と判定される。
【0048】
複数ストリーム重複判定部412は、重複排除情報記憶部410に記憶されている複数ストリームにおける重複排除情報を用いて、受信されたフレームのシーケンス番号が既に受信済みであるか否かを判定する。複数ストリームにおける重複排除情報においては、複数あるいずれかのストリームにおいて受信された番号が記録される。例えば、ストリームAおよびストリームBが重複排除するストリームのリストに記載されている場合で、ストリームAで1、3のシーケンス番号をもつフレームを受け取り、ストリームBでシーケンス番号2、4のシーケンス番号をもつフレームを受け取った場合には、ストリームAとBの複数ストリームにおける受信済みシーケンス番号は1、2、3、4である。この時、ストリームAにおいてシーケンス番号4をもつフレームが受信されると、複数ストリーム重複判定部412は、それは既にストリームBで受信済みのため、重複していると判定する。
【0049】
なお、単一ストリーム重複判定部411および複数ストリーム重複判定部412は、1つの重複判定部として実現されてもよい。また、重複判定部が、単一ストリーム重複判定部411および複数ストリーム重複判定部412を備えてもよい。
【0050】
ディスクリプタ読み出し部413は、ホストプロセッサ2に接続されているメモリに記憶されているディスクリプタの情報を読み出す。ホストプロセッサ2に接続されているメモリへのアクセスには時間を要するため、ディスクリプタ読み出し部413は、予めHeadからTail-1のディスクリプタをキャッシュするようにしてもよい。
【0051】
転送無効制御部414は、単一ストリーム重複判定部411、複数ストリーム重複判定部412、誤り検出部403および冗長化情報存在判定部402の出力からデータ転送を無効とするか否かを判定する。
【0052】
転送無効制御部414は、例えば、既に受信したフレームでなく、新たに受信したフレーム(重複がないフレーム)で、当該フレームに誤りがなければ、ディスクリプタ書き込み部415を介してフレーム長およびステータスなどをディスクリプタに書き込みを行う。
【0053】
転送無効制御部414は、受信フレームが既に受信されたフレーム、またはフレームに誤りがあった場合にはディスクリプタ書き込み部415にディスクリプタの書き込み指示を行わない(破棄すると判定する)。また、転送無効制御部414は、冗長化情報が存在し、単一ストリームおよび複数ストリームにおいて重複しておらず、かつ、誤り検出部403においてイーサネットフレーム(または無線LANフレーム)において誤りが発生していない場合に、重複排除情報更新部417に単一ストリームおよび複数ストリームの重複排除情報を更新するように指示する。
【0054】
ディスクリプタ書き込み部415は、ホストプロセッサ2に接続されたメモリに記録されているディスクリプタにフレーム長およびステータスなどの書き込みを行う。ディスクリプタ書き込み部415は、書き込みを完了すると通知部416にホストプロセッサ2に対して通知を行うように指示する。通知は複数のディスクリプタエントリの書き込みを行った後まとめて行われてもよい。
【0055】
通知部416は、ディスクリプタ書き込み部415からの指示により、割り込みによってホストプロセッサ2にディスクリプタを書き込んだことを通知する。すなわち、転送無効制御部414は、転送部406による転送を無効にしない場合、転送されたフレームのメタ情報を更新し、メタ情報が更新されたことを、通知部416を介して転送先に通知し、転送部406による転送を無効にする場合、転送されたフレームのメタ情報を更新しない。
【0056】
重複排除情報更新部417は、単一ストリーム重複排除情報と複数ストリームの情報とを更新する。具体的には、重複排除情報更新部417は、重複排除情報記憶部410に記憶されている受信フレームに対応する単一ストリーム重複排除情報を記録し、複数ストリーム重複排除情報に含まれる受信済みシーケンス番号の情報に、今回受信されたフレームのシーケンス番号を記録する。また、重複排除情報更新部417は、受信されたフレームのタイミングを更新してもよい。
【0057】
次に、図2、6、7および8を用いて第1実施形態の通信装置100の動作の例について説明する。
【0058】
図6は第1実施形態のホストプロセッサ2の初期化処理の例を示すフローチャートである。まず、受信フレーム処理部203が、ディスクリプタ記憶部202に記憶されているディスクリプタの管理をするための変数であるHeadおよびTailの位置を0に初期化し、ネットワークインタフェースコントローラ4に通知する(ステップS1)。これによりHeadおよびTailの値が共に0になり、ソフトウェアを動作させるホストプロセッサ2が全てのディスクリプタを保有していることになる。
【0059】
次に、受信フレーム処理部203が、変数iに0を代入する(ステップS2)。そして、受信フレーム処理部203が、i番目のディスクリプタエントリに対応するフレームの記憶領域をフレーム記憶部201から確保する(ステップS3)。次に、受信フレーム処理部203が、その記憶領域の先頭アドレスをi番目のディスクリプタエントリの転送先アドレスフィールドに書き込む(ステップS4)。
【0060】
次に、受信フレーム処理部203が、i番目のディスクリプタエントリの長さフィールドに0を書き込む(ステップS5)。そして、受信フレーム処理部203が、i番目のディスクリプタエントリのステータスフィールド(エラーフラグおよび書き込み完了フラグ)に0を書き込む(ステップS6)。
【0061】
次に、受信フレーム処理部203が、i+1と、ディスクリプタリングの長さnが一致するか否かを判定する(ステップS7)。i+1と、ディスクリプタリングの長さnが一致しない場合(ステップS7,No)、受信フレーム処理部203が、iに1を加算して(ステップS8)、i番目のディスクリプタに関する処理を繰り返す。一方、i+1と、ディスクリプタリングの長さnが一致する場合には(ステップS7,Yes)、受信フレーム処理部203が、ネットワークインタフェースコントローラ4に対して新たなTailの値としてiの値、すなわちn-1を通知し(ステップS9)、初期化処理を完了する。
【0062】
図7は第1実施形態のネットワークインタフェースコントローラ4のフレーム受信処理の例を示すフローチャートである。図7の二重線は並列処理の同期処理を表す。まず、通信部401でフレームが受信されると、誤り検出部403が、そのフレームに誤りがないかを検査する(ステップS21-1)。ここでは、イーサネット、無線LAN、IP、TCPおよびUDPなどのプロトコルの仕様に従った誤り検出を行う。例えば、イーサネットフレームの場合には、誤り検出部403が、FCS以外のフィールドに対してCRC値を求め、当該CRC値と、FCSフィールドに書かれたFCS値との一致を確認し、一致した場合は誤りがないことを検出する。
【0063】
このステップS21-1の処理と並列して、冗長化情報存在判定部402が、フレームに冗長化情報が存在するかを判定する(ステップS21-2)。ここでは、例えばフレーム中にIEEE802.1CBの冗長タグ、HSRタグおよびPRPトレーラなどが存在するか否かを判定する。冗長化情報が存在する場合には(ステップS21-2,Yes)、冗長化情報除去部404が、通信部401から出力されるフレームから冗長化情報を除去する(ステップS22-1)。この際に、冗長化情報除去部404は、FCSフィールドを一緒に除去してもよい。除去処理が完了したフレームのデータはバッファ部405に一時的に記憶される。
【0064】
冗長化情報が存在しない場合には(ステップS21-2,No)、フレームが、そのままバッファ部405に一時的に記憶される。続いて転送部406では、書き込み可能なディスクリプタがあるかの判定を行う(ステップS23)。ステップS23では、現在用いているディスクリプタの位置(Headの位置)が、ホストプロセッサ2から通知されたTailの値と一致するか否かが判定される。
【0065】
一致する場合(ステップS23,No)、ディスクリプタに空きがないと判定し、処理を終了する。
【0066】
一致しない場合(ステップS23,Yes)、転送部406は、ディスクリプタに空きがあると判定し、ディスクリプタ読み出し部413を介して現在のディスクリプタエントリの転送先アドレスを取得する(ステップS24)。
【0067】
バッファ部405に一定量データがたまる、またはフレームの終端がバッファ部405に記録されると(ステップS25,Yes)、転送部406は、転送先アドレスを先頭とするフレームの記憶領域に、データを書き込んでいく。この処理をフレーム全体のデータの転送が完了するまで繰り返すことで、受信されたフレームをホストプロセッサ2のフレーム記憶部201に書き込む。なお、一定量とは、転送部406がデータ転送を行うのに適した値であり、転送部406が行うデータ転送単位の倍数などで指定されるものである。バッファ部405では、フレームの全部ではなく一部がバッファされ、これを転送部406が転送する。
【0068】
ステップS22-1の冗長化情報除去処理と並列に、シーケンス番号の抽出処理が行われる(ステップS22-2)。シーケンス番号抽出処理は、シーケンス番号抽出部407によってフレーム中の冗長化情報に含まれるシーケンス番号を抽出することによって行われる。
【0069】
また、ステップS22-1の冗長化情報除去部404処理と並列に、ストリーム識別情報の抽出処理が行われる(ステップS22-3)。この処理はストリーム識別部408によって行われる。ストリームの識別は、イーサネットヘッダ、VLANタグおよびIPヘッダなどに含まれる情報を用いて行われる。具体的には、ストリーム識別情報記憶部409には、予めホストプロセッサ2のユーザプログラムなどによってストリームを識別するために使用するフィールド、およびそのフィールドの値などが、ストリームハンドルと呼ばれる識別子と共に記録されている。ストリーム識別部408では、この予め記録されたストリーム識別情報記憶部409の情報を用いて、現在受信されたフレームに対応するストリームハンドルを取得する。
【0070】
単一ストリーム重複判定部411および複数ストリーム重複判定部412は、取得されたストリームハンドルの情報からそれぞれ重複排除情報記憶部410に記憶されている重複排除情報を取得する(ステップS28-1,ステップS28-2)。すなわち、単一ストリームの重複判定に用いられる単一ストリーム重複排除情報と、複数ストリームの重複判定に用いられる複数ストリーム重複排除情報とをそれぞれ取得する。このように取得された重複排除情報を用いて、単一ストリーム重複判定部411および複数ストリーム重複判定部412で重複判定を行う。単一ストリーム重複判定部411では、単一ストリームにおいて、重複排除情報に含まれる受信済みのシーケンス番号を参照し、受信したフレームのシーケンス番号が既に受信されていれば重複と判定する。複数ストリーム重複判定部412では、複数ストリームにおいて、重複排除情報に含まれる受信済みのシーケンス番号を参照し、受信したフレームのシーケンス番号が既に受信されていれば重複と判定する。
【0071】
転送無効制御部414は、単一ストリーム重複判定部411、複数ストリーム重複判定部412、誤り検出部403および冗長化情報存在判定部402の出力からディスクリプタ書き込みを行うか否か(転送無効化)を判定する。まず、転送無効制御部414は、誤り検出処理(ステップS21-1)においてフレームに誤りがある場合(ステップS30,No)、ディスクリプタの書き込みやホストプロセッサ2への通知を行わず、処理を終了する。
【0072】
フレームに誤りがなく(ステップS30,Yes)、単一ストリームにおいて既に受信済みのフレーム、すなわち単一ストリームにおいて重複と判定された場合(ステップS31,Yes)、転送無効制御部414は、ディスクリプタの書き込みやホストプロセッサ2への通知を行わず、処理を終了する。
【0073】
単一ストリームにおいて重複と判定されなかった場合(ステップS31,No)、転送無効制御部414は、複数ストリームにおける重複を判定する(ステップS32)。複数ストリームにおいて受信済みのフレーム、すなわち複数ストリームにおいて重複と判定された場合には(ステップS32,Yes)、転送無効制御部414は、ディスクリプタの書き込みおよびホストプロセッサ2への通知などを行わず、単一ストリームの重複排除情報の更新をして(ステップS33)、処理を終了する。重複排除情報の更新では受信済みのシーケンス番号の追加および受信したタイミングの記録などが行われる。
【0074】
複数ストリームにおいて重複と判定されなかった場合には(ステップS32,No)、フレーム全体のデータ転送が完了すると(ステップS27の処理完了後)、転送無効制御部414が、ディスクリプタ書き込み部415にディスクリプタの書き込みを指示する。次に、指示を受けたディスクリプタ書き込み部415は、まず転送部406で転送したデータの長さをディスクリプタの長さフィールドに書き込む(ステップS34-1)。
【0075】
次に、ディスクリプタ書き込み部415は、ディスクリプタのステータスフィールドへの書き込みを行う(ステップS35)。ディスクリプタ書き込み部415は、ステータスフィールドのうち、エラーフラグにはデータ転送におけるエラーの有無、書き込み完了フラグには1を書きこむ。次に、ディスクリプタ書き込み部415は、通知部416を介してホストプロセッサ2に割り込みなどを用いてディスクリプタの書き込み(更新)を行ったことを通知する(ステップS36)。最後に、ディスクリプタ書き込み部415は、使用するディスクリプタの位置(Headの位置)を次のディスクリプタエントリに進める(ステップS37)。
【0076】
また、上記ディスクリプタへの書き込み処理と並列して、受信フレームが冗長化されたフレームであった(冗長化情報が存在する)場合(ステップS34-2,Yes)、転送無効制御部414は、単一ストリームおよび複数ストリームの重複排除情報の更新をして処理を終了する(ステップS38-1,ステップS38-2)。受信フレームが冗長化されたフレームでなかった(冗長化情報が存在しない)場合(ステップS34-2,No)、転送無効制御部414は、単一ストリームおよび複数ストリームの重複排除情報の更新を行わず、処理を終了する。
【0077】
図8は第1実施形態のホストプロセッサのフレーム受信処理の例を示すフローチャートである。はじめに、受信フレーム処理部203は、ネットワークインタフェースコントローラ4から割り込みを受けると、まず割り込み通知を無効化し(ステップS51)、割り込みを下げる(ステップS52)。
【0078】
次に、受信フレーム処理部203は、現在のディスクリプタエントリのステータスフィールドから書き込み完了フラグを確認し、書き込み完了(完了フラグが1)であるか否かを判定する(ステップS53)。書き込みが完了している場合(ステップS53,Yes)、次に受信フレーム処理部203は、エラーフラグを確認し、エラーが発生しているか否かを判定する(ステップS54)。エラーがある場合は(ステップS54,No)、受信フレーム処理部203は、フレームの処理を行わずに、ステップS56に進む。
【0079】
エラーがない場合(ステップS54,No)、受信フレーム処理部203は、現在のディスクリプタエントリの転送先アドレスと長さで示されるフレームをフレーム記憶部201から取得して、当該フレームの処理を行う(ステップS55)。
【0080】
次に、受信フレーム処理部203は、現在のディスクリプタエントリの長さに0を書き込む(ステップS56)。次に、受信フレーム処理部203は、ステータスフィールドに0を書き込む(ステップS57)。これによりエラーフラグおよび書き込み完了フラグなどがクリアされる。次に、受信フレーム処理部203は、次に使用されるディスクリプタエントリ位置を更新し(ステップS58)、ネットワークインタフェースコントローラ4に現在のディスクリプタエントリの位置を新たなTailとして通知する(ステップS59)。そして、受信フレーム処理部203は、書き込み済みフラグが1である限り処理を繰り返す(ステップS53に戻る)。
【0081】
書き込み済みフラグが0、すなわち書き込み完了でなければ(ステップS53,No)、受信フレーム処理部203は、割り込み通知を有効化し(ステップS60)、処理を終える。
【0082】
図9および図10に、従来および本実施形態におけるフレーム到着からフレーム転送完了またはフレーム破棄完了までのタイミングを示す。
【0083】
図9は第1実施形態の重複フレームの処理について説明するための図である。図9は重複したフレームを受信したため破棄をする場合の例を示す。従来は誤り検出を行いながらバッファリングをして、誤りがなく重複と判定されればフレームはホストプロセッサ2に通知されることなく破棄される。実施形態においては一定量バッファしたところでデータ転送が開始されるが、破棄が完了するタイミングは従来と一緒である。
【0084】
図10は第1実施形態の非重複フレームの処理について説明するための図である。図10は、ネットワークインタフェースコントローラ4が、重複していない新たなフレームを受信し、ホストプロセッサ2に通知する場合の例を示す。従来は一度全てバッファリングを行い、重複がないことを確認してからデータ転送を行うため、フレーム転送の完了までに時間を要する。一方、本実施形態は一定量バッファリングしたところからデータ転送を開始するのでフレーム転送完了までの時間を短縮することができる。
【0085】
以上説明したように、第1実施形態の通信装置100では、通信部401は、フレームを受信する。転送部406は、フレームを、転送先のフレーム記憶部201に転送する。誤り検出部403は、フレームの誤りを検出する。転送無効制御部414は、誤り検出部403により誤りが検出された場合、転送部406による転送を無効にする。
【0086】
これにより第1実施形態の通信装置100によれば、データ整合性の確認処理による転送遅延を低減させることができる。具体的には、第1実施形態の通信装置100では、フレームの重複または誤りが検出された場合、ディスクリプタの書き込みを行わず、データ転送を無効化できるようにすることで、データ受信直後からデータ転送することが可能となり、データ転送の遅延を削減することができる。従来は、重複排除処理が完了した後にしか受信したフレームのデータ書き込みを開始することができなかったが、第1実施形態の通信装置100によれば、重複判定前からデータの転送を開始することができ、低遅延なフレーム受信処理が可能になる。
【0087】
(第2実施形態)
次に第2実施形態について説明する。第2実施形態の説明では、第1実施形態と同様の説明については省略し、第1実施形態と異なる箇所について説明する。第2実施形態は転送無効制御部414の動きと、ディスクリプタエントリのステータスフィールドの構成とが、第1実施形態と異なる。
【0088】
図11は第2実施形態のディスクリプタに含まれるステータスの例を示す図である。図11の例では、ステータスフィールドに、第1実施形態の場合に加えて、更に誤りフラグおよび重複フラグがあるところが異なる。
【0089】
誤りフラグは、誤り検出処理において、誤りがあれば1、誤りがなければ0に設定される。また、重複フラグは、単一ストリーム重複判定処理と複数ストリーム重複判定処理とにおいて、どちらとも重複でないと判定された場合に0、どちらかにおいて重複と判定された場合には1が設定される。
【0090】
なお、単一ストリーム重複フラグと複数ストリーム重複フラグとをそれぞれ個別のフィールドで表すようにしてもよい。また、エラーフラグ、誤りフラグおよび重複フラグなどを統合して、無効化するか否かを1ビットの転送無効化フラグで表すようにしてもよい。
【0091】
第2実施形態の転送無効制御部414では、第1実施形態と異なり、ディスクリプタの書き込みは必ず行うが、エラーフラグ、誤りフラグおよび重複フラグなどの転送無効化情報をディスクリプタエントリのステータスフィールドに書き込むことにより、データ転送を無効化させることが可能である。転送無効化情報は、転送されたフレームが無効であることを示す情報である。
【0092】
図12は第2実施形態のネットワークインタフェースコントローラ4のフレーム受信処理の例を示すフローチャートである。第2実施形態では、単一ストリームおよび複数ストリームの重複判定後(ステップS29-1、ステップS29-2)、ディスクリプタに書き込むか否かの判定が行われない点と、ステップS34-2で受信フレームが冗長化されたフレームであると判定された場合の処理と、ステップS35-2が第1実施形態と異なる。
【0093】
第2実施形態では、ステップS34-1からのディスクリプタへの書き込み処理と並列して、受信フレームが冗長化されたフレームであったか否かを判定する(ステップS34-2)。受信フレームが冗長化されたフレームでなかった(冗長化情報が存在しない)場合(ステップS34-2,No)、転送無効制御部414は、単一ストリームおよび複数ストリームの重複排除情報の更新を行わず、処理を終了する。
【0094】
受信フレームが冗長化されたフレームであった(冗長化情報が存在する)場合(ステップS34-2,Yes)、誤り検出処理(ステップS21-1)においてフレームに誤りがあったか否かを判定する(ステップS38)。転送無効制御部414は、フレームに誤りがあった場合(ステップS38,No)、重複排除情報の更新を行わず、処理を終了する。
【0095】
フレームに誤りがなく(ステップS38,Yes)、単一ストリームにおいて既に受信済みのフレーム、すなわち単一ストリームにおいて重複と判定された場合(ステップS39,Yes)、転送無効制御部414は、重複排除情報の更新を行わず、処理を終了する。
【0096】
単一ストリームにおいて重複と判定されなかった場合(ステップS31,No)、転送無効制御部414は、複数ストリームにおける重複を判定する(ステップS40)。複数ストリームにおいて受信済みのフレーム、すなわち複数ストリームにおいて重複と判定された場合には(ステップS40,Yes)、転送無効制御部414は、単一ストリームの重複排除情報の更新をして(ステップS41)、処理を終了する。重複排除情報の更新では受信済みのシーケンス番号の追加および受信したタイミングの記録などが行われる。
【0097】
複数ストリームにおいて重複と判定されなかった場合には(ステップS40,No)、転送無効制御部414は、単一ストリームおよび複数ストリームの重複排除情報の更新をして処理を終了する(ステップS42-1,ステップS42-2)。
【0098】
また、ステップS34-1の後のステップS35-2では、ディスクリプタ書き込み部415は、ステータスフィールドのうち、エラーフラグおよび書き込み完了フラグに加えて、誤りフラグおよび重複フラグの書き込みを行う。
【0099】
図13は第2実施形態のホストプロセッサ2のフレーム受信処理の例を示すフローチャートである。第2実施形態では、ステータスフィールドの転送無効化情報が有効な場合には(ステップS54-2)、フレームの処理を行わない。具体的には、エラーフラグ、誤りフラグおよび重複フラグのいずれかが1であればフレームの処理を行わない。
【0100】
このように、第2実施形態の通信装置100によれば、フレームの重複と誤り検出の結果とをディスクリプタのステータスビットに転送無効化情報として伝達できるようにする。これにより、データ受信直後からデータ転送することが可能となり、データ転送の遅延を削減することができる。
【0101】
(第3実施形態)
第3実施形態は第2実施形態においてネットワークインタフェースコントローラ4側で行っていたストリーム識別処理および重複排除処理などをホストプロセッサ2-2で行うところが異なる。
【0102】
[機能構成の例]
図14は第3実施形態の通信装置100の機能構成の例を示す図である。第3実施形態では、ホストプロセッサ2-2が、ストリーム識別部204、ストリーム識別情報記憶部205、重複排除情報更新部206、重複排除情報記憶部207、単一ストリーム重複判定部208および複数ストリーム重複判定部209を備える。
【0103】
第3実施形態では、ネットワークインタフェースコントローラ4-2ではなく、ホストプロセッサ2-2が、後述するようにディスクリプタで伝達されたシーケンス番号と、ストリーム識別データで重複排除処理とを行うところが異なるが、各部の機能は第1実施形態と同じである。
【0104】
また、第3実施形態では、ネットワークインタフェースコントローラ4-2にストリーム識別情報抽出部418を備える。ストリーム識別情報抽出部418は、冗長化されたフレームにおいてストリームを識別するためのデータを抽出する。例えばストリーム識別情報抽出部418は、送信先MACアドレスやVLAN IDなど、第1実施形態で説明したストリーム識別に用いられる情報を抽出する。ディスクリプタ書き込み部415は、この抽出されたデータと、シーケンス番号抽出部407で抽出されたシーケンス番号とを後述するディスクリプタの重複判定情報としてディスクリプタに記憶して、ホストプロセッサ2-2に伝達する。
【0105】
図15は第3実施形態のディスクリプタの例を示す図である。第3実施形態では、第2実施形態のディスクリプタエントリ内に、ストリーム識別データフィールドとシーケンス番号フィールドとが追加されている。
【0106】
図16は第3実施形態のディスクリプタに含まれるステータスの例を示す図である。第3実施形態では、第1および第2実施形態で示した例に加えて、重複判定情報有無フラグと重複判定情報書き込み完了フラグとが設けられる。
【0107】
図17は第3実施形態のネットワークインタフェースコントローラ4-2のフレーム受信処理の例を示すフローチャートである。ここでは第2実施形態との差分のみを説明する。第3実施形態においては、ストリームの識別をホストプロセッサ2-2で行うため、ネットワークインタフェースコントローラ4-2ではストリーム識別に用いられるストリーム識別データのみを抽出する。
【0108】
ディスクリプタ書き込み部415は、まずシーケンス番号抽出部407とストリーム識別情報抽出部418とから得られたシーケンス番号およびストリーム識別データを重複判定情報としてディスクリプタの対応するフィールドに書き込む(ステップS42、ステップS43)。
【0109】
次に、ディスクリプタ書き込み部415は、ディスクリプタのステータスフィールドに重複判定情報有無フラグおよび重複判定情報書き込み完了フラグを書き込む(ステップS44)。重複判定情報有無フラグには、冗長化情報が存在する場合には1、そうでない場合には0が設定される。重複判定情報書き込み完了フラグには1が設定される。
【0110】
次に、ディスクリプタ書き込み部415は、通知部416を介してホストプロセッサ2に割り込みなどを用いてディスクリプタの書き込みを行ったことを通知する(ステップS45)。ステップS45、ステップS21-1およびステップS27の処理が終わると、ディスクリプタ書き込み部415は、ディスクリプタにフレーム長を書き込む(ステップS34-1)。
【0111】
ディスクリプタにフレーム長を書き込んだ後の処理においては、ディスクリプタ書き込み部415は、ディスクリプタのステータスフィールドのうち、エラーフラグ、誤りフラグおよび書き込み完了フラグを書き込む(ステップS35-3)。
【0112】
図18AおよびBは、第3実施形態のホストプロセッサ2-2のフレーム受信処理の例を示すフローチャートである。ここでは第2実施形態との差分のみを説明する。
【0113】
受信フレーム処理部203は、現在のディスクリプタのエントリのステータスフィールドの重複判定情報書き込み完了フラグを確認する(ステップS73)。書き込みが完了していない(書き込みフラグが0)の場合(ステップS73,No)、割り込みを有効化して(ステップS74)、処理を終了する。
【0114】
書き込みが完了している場合(書き込みフラグが1)の場合(ステップS73,Yes)、受信フレーム処理部203は、ステータスフィールドの重複判定情報有無フラグを確認し、重複判定情報の有無を確認する(ステップS75)。重複情報がある(重複判定情報有無フラグが1)の場合(ステップS75,Yes)、次に受信フレーム処理部203は、重複判定処理が既に済んでいるか否かを確認する(ステップS76)。
【0115】
重複判定が済んでいない(重複判定情報書き込み完了フラグが0)場合、受信フレーム処理部203は、ディスクリプタのストリーム識別データとシーケンス番号とを取得する(ステップS77)。ストリーム識別部204は、取得したストリーム識別データと、ストリーム識別情報記憶部409に記憶されているストリーム識別情報と、から受信フレームに対応するストリームハンドルを得る。
【0116】
次に、単一ストリーム重複判定部208および複数ストリーム重複判定部209が、ストリームハンドルを用いて重複排除情報記憶部207から単一ストリーム重複排除情報と複数ストリーム重複排除情報とを取得し(ステップS78、ステップS80)、それぞれにおいて受信フレームのシーケンス番号が受信済みであるかを判定する(ステップS79、ステップS81)。
【0117】
重複判定が終わると、受信フレーム処理部203は、現在のディスクリプタエントリのステータスフィールドのフレーム書き込み完了フラグが完了(1)であるかを確認する(ステップS82)。
【0118】
完了している場合には(ステップS82,Yes)、受信フレーム処理部203は、転送無効化情報が設定されているかを確認する(ステップS83)。ここで誤りフラグおよびエラーフラグなどが1に設定されていれば、受信フレーム処理部203は、フレームの受信処理を行わない。
【0119】
転送無効化情報が設定されていなければ(ステップS83,No)、受信フレーム処理部203は、単一ストリームにおいて重複が検知されたかを判定する(ステップS84)。重複が検知された場合には(ステップS84,Yes)、受信フレーム処理部203は、フレームの受信処理を行わない。単一ストリームにおいて重複が検知されなかった場合(ステップS84,Yes)、受信フレーム処理部203は、複数ストリームにおいて重複が検知されたかを判定する(ステップS85)。
【0120】
複数ストリームにおいて重複が検知されなかった場合には(ステップS85,No)、受信フレーム処理部203は、フレームの受信処理を実行し(ステップS86)、複数ストリームの重複排除情報の更新処理(ステップS87)と、単一ストリームの重複排除情報の更新処理(ステップS88)とを行う。重複排除情報の更新処理では、受信したフレームのシーケンス番号が記録される。
【0121】
複数ストリームにおいて重複が検知された場合には(ステップS85,Yes)、単一ストリームの重複排除情報の更新を行う(ステップS88)。
【0122】
以上が、第2実施形態との差分の説明である。
【0123】
このように、第3実施形態のホストプロセッサ2-2(プロセッサの一例)では、フレーム記憶部201が、転送元から転送されたフレームを記憶する。ディスクリプタ記憶部202(メタ情報記憶部の一例)が、フレームの転送を無効にするか否かを示す転送無効化情報と、フレームの重複の判定の要否を示す重複判定情報と、少なくとも1つのフレームを含むストリームのストリーム識別データと、フレームのシーケンス番号とを含むメタ情報を記憶する。ストリーム識別部204が、ストリーム識別データによりストリームを識別する。単一ストリーム重複判定部208および複数ストリーム重複判定部209(重複判定部の一例)が、重複判定情報に基づいてフレームの重複を判定するか否かを判定し、フレームの重複を判定する場合、ストリーム識別データにより識別されたストリームにおいて、シーケンス番号を用いて、フレームを既に受信しているか否かを判定する。そして、受信フレーム処理部203が、転送無効化情報が転送の無効を示さない場合、かつ、フレームを既に受信していない場合、フレームを処理する。
【0124】
第3実施形態の通信装置100によれば、フレームの重複をホストプロセッサ2-2で行いながら、誤り検出の結果を後からディスクリプタのステータスビットに転送無効化情報として伝達できる。これにより、データ受信直後からデータ転送することが可能となり、データ転送の遅延を削減することができる。
【0125】
(実施形態の変形例)
なお、上記実施形態においては、転送部406および誤り検出部403は別々の動作部として説明したが、転送部406が、誤り検出の機能も備え、データ転送をしながら誤り検出を行うようにしてもよい。
【0126】
また、IEEE802.1Qで定義されるingress filteringを行う受信フィルタ判定部を設けてもよい。受信フィルタ判定部がある場合、転送無効制御部414は、受信フィルタ判定部でフィルタリングの対象と判定された場合に、転送を無効化する。
【0127】
また、上記実施形態においては、転送部406によるデータ転送をフレームの終端まで行う例を示したが、例えば単一ストリーム重複判定部411および複数ストリーム重複判定部412などにおいて重複と判定された場合に、データ転送を中止するようにしてもよい。
【0128】
また、上記実施形態においては、ネットワークインタフェースコントローラ4(4-2)からホストプロセッサ2(2-2)にフレームを転送する例を示したが、ネットワークインタフェースコントローラ4およびホストプロセッサ2の間以外のフレーム転送に、実施形態のフレーム転送の構成および方法を適用してもよい。例えば、実施形態のフレーム転送の構成および方法を、例えば、ネットワークインタフェースコントローラ4内のフレーム転送に適用してもよい。また例えば、実施形態のフレーム転送の構成および方法を、ネットワークインタフェースコントローラ4から、別のネットワークインタフェースコントローラ4のフレーム転送に適用してもよい。また例えば、実施形態のフレーム転送の構成および方法を、ネットワークスイッチの内部のモジュール間の転送に適用してもよい。
【0129】
また、上記実施形態においては、IEEE802.1CBを用いる例を示したが、これに代えて、IETF(Internet Engineering Task Force)およびDetnet(Deterministic Networking)で標準化されているPREF(Packet Replication and Elimination Function)を用いてもよい。
【0130】
(システム構成例)
図19は第1乃至第3実施形態の通信装置100を用いたシステムの構成例を示す図である。図19は、工場またはプラントにおいて、エッジサーバ700から、5G(5th Generation)/ローカル5Gシステム500を介して現場のロボットアーム602a、602b、および、ベルトコンベア601を制御する例を示す。
【0131】
5G/ローカル5Gシステム500は、5Gコアネットワーク(Core Network)505と、セントラルユニット(Central Unit)504と、ディストリビューテッドユニット(Distributed Unit)503と、リモートユニット(Remote Unit)502と、ユーザイクイップメント(User Equipment)501と、を備える。5G/ローカル5Gシステム500は、3GPP(Third Generation Partnership Project)の規格によって定められる5G通信を行う。
【0132】
第1乃至第3実施形態の通信装置100は、例えば、エッジサーバ700および5Gコアネットワーク505に実装することができる。これにより、エッジサーバ700および5Gコアネットワーク505の間の通信のリアルタイム性を向上させることができる。
【0133】
また、第1乃至第3実施形態の通信装置100は、5G/ローカル5Gシステム500内の各部の間の通信に使用されてもよい。すなわち、リモートユニット502、ディストリビューテッドユニット503、セントラルユニット504、および、5Gコアネットワーク505の間の通信を行うために、リモートユニット502、ディストリビューテッドユニット503、セントラルユニット504、および、5Gコアネットワーク505の少なくとも一部に第1乃至第3実施形態の通信装置100が実装されてもよい。
【0134】
第1乃至第3実施形態の通信装置100は、ベルトコンベア601およびロボットアーム602a、602bの少なくとも一方と、ユーザイクイップメント501との間の通信、または、ベルトコンベア601とロボットアーム602a、602bとの間の通信に使用されてもよい。
【0135】
第1乃至第3実施形態の通信装置100が適用可能なシステムはこれに限られず、どのようなシステムであってもよい。例えば、5G/ローカル5Gを用いない工場またはプラントの産業用ネットワークシステム、および、自動車および航空機の内部のネットワークシステムなどに適用することもできる。
【0136】
第1乃至第3実施形態にかかる通信装置100で実行されるプログラムは、ストレージ3、および、ROMなどに予め組み込まれて提供される。なお通信装置100をFPGAで実現する場合、例えばFPGAのコンフィギュレーションを設定するためのデータ(コンフィギュレーションデータ)がプログラムに相当する。
【0137】
第1乃至第3実施形態にかかる通信装置100で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD-ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD-R(Compact Disk Recordable)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
【0138】
さらに、第1乃至第3実施形態にかかる通信装置100で実行されるプログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第1乃至第3実施形態にかかる通信装置100で実行されるプログラムをインターネットなどのネットワーク経由で提供または配布するように構成してもよい。
【0139】
第1乃至第3実施形態にかかる通信装置100で実行されるプログラムは、コンピュータを上述した通信装置の各部として機能させうる。このコンピュータは、プロセッサがコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
【0140】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0141】
1 メモリ
2 ホストプロセッサ
3 ストレージ
4 ネットワークインタフェースコントローラ
5 ストレージコントローラ
201 フレーム記憶部
202 ディスクリプタ記憶部
203 受信フレーム処理部
204 ストリーム識別部
205 ストリーム識別情報記憶部
206 重複排除情報更新部
207 重複排除情報記憶部
208 単一ストリーム重複判定部
209 複数ストリーム重複判定部
401 通信部
402 冗長化情報存在判定部
403 誤り検出部
404 冗長化情報除去部
405 バッファ部
406 転送部
407 シーケンス番号抽出部
408 ストリーム識別部
409 ストリーム識別情報記憶部
410 重複排除情報記憶部
411 単一ストリーム重複判定部
412 複数ストリーム重複判定部
413 ディスクリプタ読み出し部
414 転送無効制御部
415 ディスクリプタ書き込み部
416 通知部
417 重複排除情報更新部
418 ストリーム識別情報抽出部
100 通信装置
200 ネットワーク
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18A
図18B
図19