(57)【要約】【課題】ネットワーク・アダプタ内で部分ワード書き込みを実施するための方法、システム及びコンピュータ・プログラムを提供する。【解決手段】  一般に、ネットワーク・アダプタを設計する際に問題となるのは、通常、バス幅（例えば、8x PCI Expressインタフェースの場合は６４ビット）に整列しているパケット・バッファ内の諸パケットに部分ワード（例えば、１６ビットのＩＰチェックサム）を挿入しなければならない場合である。実際、「チェックサム・オフロード」機能を実装するハードウェア論理では、かかる部分ワードの挿入が頻繁に必要となる。多くの従来の設計では、パケット内の指定された任意のオフセットにおいて部分ワードを挿入するためのハードウェア論理が必要となる。パケット・バッファ内のこの挿入位置は、奇数又は偶数位置であり得る。本明細書において広義に意図されていることは、本発明の少なくとも１つの推奨実施形態に従って、２バイトのＩＰチェックサムを８バイト・ワード内の任意の非整列位置に書き込むための簡単なアルゴリズムを実装することである。こうすると、１６個の１：８デマルチプレクサを使用する論理集約的な実装の使用を回避するか、又は待ち時間を増大させる「読み取り−修正−書き込み」アプローチを回避することができる。【選択図】  図２
2011508989.tif 000002
【特許請求の範囲】
【請求項１】
ネットワーク・アダプタ内で部分ワード書き込みを実施するための方法であって、
（ａ）主データ・パケットを受信するステップと、
（ｂ）前記主データ・パケットをパケット・バッファ及びチェックサム加算器に転送するステップと、
（ｃ）前記チェックサム加算器からのチェックサム・パケットを単一のマルチプレクサに転送するステップと、
（ｄ）前記単一のマルチプレクサからのチェックサム・ワードを前記パケット・バッファに向けて転送するステップとを含む、方法。
【請求項２】
前記ステップ（ｄ）が、前記単一のマルチプレクサの出力を２回以上複製することを含む、請求項１に記載の方法。
【請求項３】
（ｅ）バイト・イネーブル信号を前記パケット・バッファに転送するステップをさらに含む、請求項１又は請求項２に記載の方法。
【請求項４】
前記ステップ（ｅ）が、デコーダからのバイト・イネーブル信号を転送することを含む、請求項３に記載の方法。
【請求項５】
前記ステップ（ｄ）が、桁上げ出力ビットを累積チェックサム・ワードに加えることを含む、請求項１ないし請求項４の何れか１項に記載の方法。
【請求項６】
前記ステップ（ｄ）が、前記チェックサム・ワードを或るオフセットにおいて前記パケット・バッファに挿入することを含む、請求項１ないし請求項５の何れか１項に記載の方法。
【請求項７】
（ｆ）前記チェックサム加算器からのバイト交換済みチェックサム・パケットを前記単一のマルチプレクサに転送するステップをさらに含む、請求項１ないし請求項６の何れか１項に記載の方法。
【請求項８】
ネットワーク・アダプタ内で部分ワード書き込みを実施するためのシステムであって、
主データ・パケットを受信するためのチェックサム加算器と、
単一のマルチプレクサと、
パケット・バッファとを備え、
前記チェックサム加算器が、チェックサム・パケットを前記単一のマルチプレクサに転送するように動作し、
前記単一のマルチプレクサが、チェックサム・ワードを前記パケット・バッファに向けて転送するように動作する、システム。
【請求項９】
前記単一のマルチプレクサが、その出力を２回以上複製するように動作する、請求項８に記載のシステム。
【請求項１０】
バイト・イネーブル信号を前記パケット・バッファに転送するための手段をさらに備える、請求項８又は請求項９に記載のシステム。
【請求項１１】
前記転送するための手段がデコーダを含む、請求項１０に記載のシステム。
【請求項１２】
前記単一のマルチプレクサが、桁上げ出力ビットを累積チェックサム・ワードに加えるように動作する、請求項８ないし請求項１１の何れか１項に記載のシステム。
【請求項１３】
前記単一のマルチプレクサが、前記チェックサム・ワードを或るオフセットにおいて前記パケット・バッファに挿入するように動作する、請求項８〜ないし請求項１２の何れか１項に記載のシステム。
【請求項１４】
前記チェックサム加算器が、バイト交換済みチェックサム・パケットを前記単一のマルチプレクサに転送するように動作する、請求項８ないし請求項１３の何れか１項に記載のシステム。
【請求項１５】
請求項１ないし請求項７の何れか１項に記載の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク・アダプタ内で部分ワード書き込み（partial word store）を実施するための方法及びシステムに係り、さらに詳細に説明すれば、少ない遅れ及びより高い周波数でかかるタスクを実施することに係る。
【背景技術】
【０００２】
一般に、ネットワーク・アダプタを設計する際に問題となるのは、通常、バス幅（例えば、8x PCI Expressインタフェースの場合は６４ビット。かかるインタフェースの例は、www.pcisig.com, PCI Express Base spec. Rev 1.0aで見出すことができる）に整列しているパケット・バッファ内の諸パケットに部分ワード（例えば、１６ビットのＩＰチェックサム）を挿入しなければならない場合である。実際、「チェックサム・オフロード」機能を実装するハードウェア論理では、かかる部分ワードの挿入が頻繁に必要となる。多くの従来の設計（例えば、米国特許第５８９８７１３号明細書に記載の発明では、ホストによって消費されるプロセッサ・サイクルを減少させることを目的として、ＩＰチェックサムの計算を制御ユニットにオフロードすることにより、ホスト・コンピュータ及びネットワークの性能を改良するようにしている）では、パケット内の指定された任意のオフセットにおいて部分ワードを挿入するためのハードウェア論理が必要となる。パケット・バッファ内のこの挿入位置は、奇数又は偶数位置であり得る。
【０００３】
かかる部分ワード書き込みを実施するための従来の方法は、１６個の１：８デマルチプレクサを具備するシフタを使用することを含み、オフセットの下位３ビット（すなわち、パケットにおける指定されたチェックサム位置の最下位３ビット、例えば、chksum_pos[2:0]）は、シフト量を決定する「選択」線として作用する。オフセットの残りの上位ビットは、バイト・イネーブル信号の存在下で書き込まれているパケット・バッファのアドレスとして作用する。この方法に関する１つの問題は、クリチカル・データパス内に複数のデマルチプレクサが挿入されるために、この方法が高度に論理集約的であり、しかも動作周波数を減少させるということである。さらに、パケットバッファ・インタフェースにおいてバイト・イネーブル信号が存在しない場合、この方法は、「読み取り−修正−書き込み」（read-modify-store）アプローチを必要とし、その結果、待ち時間をさらに増大させるであろう。
【０００４】
前記従来のアプローチの他の重要な欠点は、パケット・バッファのワード境界（例えば、チェックサム位置=７）にチェックサムを挿入しなければならない場合、パケット・バッファ内に書き込むべきワードを別々に計算しなければならない（すなわち、下位のチェックサム・バイトが或るワード・アドレスのバイト７に書き込まれ、そして次のサイクルでは、上位チェックサム・バイトが次のワード・アドレスのバイト０に書き込まれる）ということである。従って、この論理は、これらの２つの書き込みサイクル用のデータを選択するために、別個のマルチプレクサを必要とする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第５８９８７１３号明細書
【非特許文献】
【０００６】
【非特許文献１】www.pcisig.com, PCI Express Base spec. Rev 1.0a
【発明の概要】
【発明が解決しようとする課題】
【０００７】
現存する高性能コンピューティング（ＨＰＣ）ネットワーク・アダプタは、待ち時間を低くし且つ高周波数における論理セルの消費を小さくするように、ハードウェアが諸動作を実行することを必要とする傾向がある。かかる最適化は、ＦＰＧＡ実装について特に重要である。というのは、ＦＰＧＡ実装では、ギガビットイーサネット・インタフェースの高スループット要件をサポートするために、２５０メガへルツの動作周波数が普通であるからである。簡述すれば、前述の類型に属する従来の技術は、かかる要請に対処するのに適切ではない。従って、当分野では、従来の技術の性能を改良し且つかかる要請を満たすことができるシステムを実装することに関する必要性が認識されている。
【課題を解決するための手段】
【０００８】
従って、本発明は、第１の側面において、ネットワーク・アダプタ内で部分ワード書き込みを実施するための方法を提供する。この方法は、
（ａ）主データ・パケットを受信するステップと、
（ｂ）前記主データ・パケットをパケット・バッファ及びチェックサム加算器に転送するステップと、
（ｃ）前記チェックサム加算器からのチェックサム・パケットを単一のマルチプレクサに転送するステップと、
（ｄ）前記単一のマルチプレクサからのチェックサム・ワードを前記パケット・バッファに向けて転送するステップとを含む。
【０００９】
好ましくは、前記ステップ（ｄ）は、前記単一のマルチプレクサの出力を２回以上複製することを含む。好ましくは、前記ステップ（ｄ）は、前記単一のマルチプレクサの出力を４回複製することを含む。好ましくは、前記方法は、（ｅ）バイト・イネーブル信号を前記パケット・バッファに転送するステップをさらに含む。好ましくは、前記ステップ（ｅ）は、デコーダからのバイト・イネーブル信号を転送することを含む。好ましくは、前記ステップ（ｄ）は、桁上げ出力ビットを累積チェックサム・ワード（accumulating checksum word）に加えることを含む。好ましくは、前記ステップ（ｄ）は、前記チェックサム・ワードを或るオフセットにおいて前記パケット・バッファに挿入することを含む。前記方法は、（ｆ）前記チェックサム加算器からのバイト交換済みチェックサム・パケット（byte-swapped checksum packet）を前記単一のマルチプレクサに転送するステップをさらに含む。
【００１０】
第２の側面において、ネットワーク・アダプタ内で部分ワード書き込みを実施するためのシステムが提供される。このシステムは、
主データ・パケットを受信するためのチェックサム加算器と、
単一のマルチプレクサと、
パケット・バッファとを備え、
前記チェックサム加算器は、チェックサム・パケットを前記単一のマルチプレクサに転送するように動作し、
前記単一のマルチプレクサは、チェックサム・ワードを前記パケット・バッファに向けて転送するように動作する。
【００１１】
好ましくは、前記単一のマルチプレクサは、その出力を２回以上複製するように動作する。好ましくは、前記単一のマルチプレクサは、その出力を４回複製するように動作する。好ましくは、前記システムは、バイト・イネーブル信号を前記パケット・バッファに転送するための手段をさらに備える。好ましくは、前記転送するための手段は、デコーダを含む。好ましくは、前記単一のマルチプレクサは、桁上げ出力ビットを累積チェックサム・ワードに加えるように動作する。好ましくは、前記単一のマルチプレクサは、前記チェックサム・ワードを或るオフセットにおいて前記パケット・バッファに挿入するように動作する。好ましくは、前記チェックサム加算器は、バイト交換済みチェックサム・パケットを前記単一のマルチプレクサに転送するように動作する。
【００１２】
第３の側面において、前記方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラムが提供される。
【００１３】
前記コンピュータ・プログラムは、前記方法を実施するようにコンピュータによって実行可能な命令のプログラムを有形的に記録した、当該コンピュータによって読み取り可能なプログラム・ストレージの形式で具体化することができる。
【００１４】
本明細書において広義に意図されていることは、本発明の少なくとも１つの推奨実施形態に従って、２バイトのＩＰチェックサムを８バイト・ワード内の任意の非整列位置（unaligned position）に書き込むための簡単なアルゴリズムを実装することである。こうすると、１６個の１：８デマルチプレクサを使用する論理集約的な実装の使用を回避するか、又は待ち時間を増大させる「読み取り−修正−書き込み」アプローチを回避することができる。
【発明の効果】
【００１５】
本発明は、従来技術において必要とされていたシフタ用の１６個の１：８デマルチプレクサを設ける必要性を回避するとともに、指定されたチェックサム位置がワード境界上にある場合にパケット・バッファ内の２つの隣接位置に書き込むべきチェックサム・データを選択するための追加の６４個の２：１マルチプレクサを設ける必要性を回避することができるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】部分ワード書き込みを実施するための従来のシステムを概略的に示す図である。
【図２】本発明の推奨実施形態に従ったシステムを概略的に示す図である。
【発明を実施するための形態】
【００１７】
添付の図面に示され且つ本明細書で説明する本発明のコンポーネントは、種々の異なる構成において配列及び設計可能であることが容易に理解されるであろう。従って、図１及び図２を参照して以下で詳述する本発明の装置、システム及び方法の諸実施形態は、請求項に係る本発明の範囲を制限するものではなく、単に本発明の選択された実施形態を表すものであるに過ぎない。
【００１８】
本明細書において「１つの実施形態」又はそれと同等の用語が現れている場合、これらの用語は、当該実施形態に関連して説明する特定の機能、構造又は特性が本発明の少なくとも１つの実施形態に含まれていることを意味する。従って、本明細書の種々の箇所で「１つの実施形態」又はそれと同等の用語が現れている場合、これらの用語の全ては、必ずしも同じ実施形態を指すとは限らない。
【００１９】
本発明の諸実施形態は、同一の部分に同一の参照番号又はラベルが付されている図面を参照することによって最も良く理解されるであろう。以下の説明は、例示することを意図するものであって、請求項に係る発明と整合するような装置、システム及びプロセスの選択された特定の実施形態を例示するに過ぎない。
【００２０】
図１は、前述のタイプの従来のシステムを示す。このシステムは、チェックサムチェックサム加算器１０２と、１６個の１：８デマルチプレクサを使用するシフタ１０４とを有する。
【００２１】
周知のように、パケット・バッファ１１６への入力は、２つのゲート１０８／１１２及び後述するデコーダ１１４から供給される。この例では、（図２に示す本発明のシステムと同様に）、６４ビット・パケットである主データ・パケット「pkt_data [63：0]」及びパケットが有効であることを表す単一ビット「pkt_valid」は、それぞれ２つの転送先に供給される。すなわち、前者は、チェックサム加算器１０２及びゲート１１０に供給され、後者は、チェックサム加算器１０２及びゲート１０８に供給される。ゲート１１０及び１１２が、２：１マルチプレクサとして示されているのに対し、ゲート１０６及び１０８は、ＯＲゲートとして示されている。主データ・パケットが受け取られる場合、チェックサム加算器１０２は、第１のチェックサム書き込み信号である「chksum_wr」を生成し、チェックサム位置（chksum_pos）が或るワード境界上にある場合は、第２のチェックサム書き込み信号である「chksum_wr_again」を生成する。「chksum_wr」が、ゲート１１０及び１０６に供給されるのに対し、「chksum_wr_again」は、ゲート１０６及び１１２に供給される。
【００２２】
シフタ１０４は、チェックサム加算器１０２から「chksum[15：0]」を受け取るとともに、パケットのチェックサム位置を指示する入力である「chksum_pos [2:0]」を受け取る。シフタ１０４からの出力は、「chksum_word [63:0]」及び「chksum_word_again [63:0]」を含む。これらの出力は、ゲート１１０及び１１２にそれぞれ供給される。ゲート１１０の全結合出力は、ゲート１１２に供給され、ゲート１１２の全結合出力は、パケット・バッファ１１６に供給される。
【００２３】
デコーダ１１４は、「chksum_pos [2:0]」を受け取り、パケット・バッファ１１６に入力すべき書き込みバイト・イネーブル信号である「wr_be[7:0]」を生成する。「chksum_wr_again」がアサートされる場合、デコーダ１１４によって生成される「wr_be[7:0]」が x”01”になることに留意されたい。この場合、チェックサム書き込み位置のアドレスは、「chksum_pos [n-1 : 3] + 1」、すなわちパケット内の次のワードである。また、「chksum_word_again [63:0]」がその最下位バイトとして「chksum [15:8]」を有することに留意されたい。すなわち、次の通りである。
chksum_word_again [7:0] = chksum [15:8] 
chksum_word_again [63:8] = ドント・ケア（すなわち、これらのバイトのバイト・イネーブル信号はゼロである。従って、これらのバイトは、パケット・バッファ１１６に書き込まれず、そのためこれらのバイトの値は、実際的意義を有しない）
【００２４】
また、「chksum_word [63:0]」は、「chksum [15:0]」を左シフトすることにより形成されることに留意されたい。従って、例えば、「chksum_pos [2:0]」がゼロであれば、次のようになる。
chksum_word [63:0] = x“000000000000” &chksum[15:0],
…1; chksum_word [63:0] = x”0000000000”& chksum[15:0] & x“00”, 
…
…6; chksum_word [63:0] = chksum[15:0] &x“000000000000” 
…7; chksum_word [63:0] = chksum[7:0] &“00000000000000”
【００２５】
対照的に、図２は、本発明の推奨実施形態に従ったシステムを概略的に示す。比較の目的上、主として図１のシステムと異なる側面について説明する。図１に示すコンポーネントと類似する図２のコンポーネントには、前者の１００番台の参照番号を２００番台に変更した参照番号が付されている。基本的な相違点は、前述のタイプのシフタ１０４が設けられていないことである。
【００２６】
その結果、本発明の推奨実施形態に従った「アダプタ」実装は、ホストの8x PCI Expressバス（そこには「pkt_data [63：0]」が示されている）からパケット・バッファ２１６に直接に流れ込む、ＩＰ／ＴＣＰ／ＵＤＰパケットを含む。このようにして、パケットの８バイトを、サイクルごとに、パケット・バッファ２１６に書き込むことができる。好ましくは、このハードウェアは、隣接するパケット・データの各２バイトを追加及び累積する際に、「チェックサム・オフロード」を実装するであろう。好ましくは、「循環桁上げ」（end around carry）が使用される。「循環桁上げ」では、チェックサムは、次のアクションによって、パケットの全長にわたって累積される。
checksum[17:0] = checksum[15:0] + checksum[17:16] + pkt_data[15:0] + pkt_data[31:16] + pkt_data[47:32] + pkt_data[63:48]
【００２７】
結果的なチェックサムは、checksum[15:0] から得られる。この checksum[15:0] は、それに加えられる「桁上げ出力」（すなわち、checksum[17:16]）を有するであろう。好ましくは、一旦パケットの全体が（「pkt_valid」を伴う「pkt_data[63:0]において）当該アダプタによって受け取られ且つパケット・バッファ２１６内に格納されると、当該アダプタは、計算された２バイトのＩＰチェックサムを「chksum_pos[n-1:0]」として指定された或るオフセットにおいてパケット・バッファ２１６に挿入する。
【００２８】
好ましくは、本発明の少なくとも１つの実施形態に従ったアプローチは、チェックサムを書き込むべきチェックサム位置の最下位ビット（chksum_pos[0]）を使用して、計算されたチェックサム又は当該チェックサムの交換された値を選択するであろう。すなわち、このアプローチが実装するマルチプレクサ２１８は、１つの入力としてチェックサム（例えば、x1234）を有し、他の入力としてバイト交換済みチェックサム（例えば、x3412）を有する。好ましくは、マルチプレクサ２１８の出力は、８バイト・ワードを得るために４回複製される。従って、書き込むべきチェックサム・ワード（８バイト）は、「x1234123412341234」であるか又は「x3412341234123412」の何れかである。この結果的な８バイト・ワードは、チェックサム位置の上位ビット（すなわち、chksum_pos[n-1:3]）として指定されたアドレスにおいて、パケット・バッファ２１６内に書き込まれる。パケット・バッファ２１６に供給されるバイト・イネーブル信号「wr_be[7:0]」は、chksum_pos[2:0] から（デコーダ２１４を介して）デコードされる。例えば、chksum_pos[2:0] = “101”であれば、チェックサムは、当該ワードのバイト５及び６に書き込まれる。すなわち、バイト・イネーブル信号「wr_be[7:0]」は、“01100000”である。
【００２９】
好ましくは、チェックサム加算器２０２は、パケット全体が受け取られた後に、「chksum_wr」（及びchksum_posが或るワード境界上にある場合は「chksum_wr_again」）を生成する。さらに、「chksum_wr_again」がアサートされる場合、デコーダ２１４によって生成される「wr_be[7:0]」は、x”01”である。この場合、chksum書き込みのアドレスは、「chksum_pos[n-1:3] + 1」、すなわち、パケット内の次のワードである。
【００３０】
利点について説明する。本発明の少なくとも１つの推奨実施形態に従った実装は、シフタ用の１６個の１：８デマルチプレクサを設ける必要性を回避するとともに、指定されたチェックサム位置が或るワード境界上にある場合にパケット・バッファ内の２つの隣接位置に書き込むべきチェックサム・データを選択するための追加の６４個の２：１マルチプレクサを設ける必要性を回避するであろう。この論理の減少は、クリチカル・データパス内のタイミング遅れを常に減少させる。指定されたチェックサム位置が２ワードにまたがる場合（すなわちchksum_pos = 7 又はchksum_pos =15 等である場合）、両方の書き込みサイクルのために同じ書き込みデータを使用することができる。
【００３１】
本発明の諸要素は、適切なソフトウェア・プログラムを実行する、少なくとも１つの汎用コンピュータ上で実装できることを理解されたい。また、これらの要素は、少なくとも１つの集積回路又はその一部として実装することができる。従って、本発明は、ハードウェア、ソフトウェア又はそれらの組み合わせにおいて実装できることを理解されたい。
【符号の説明】
【００３２】
２０２・・・チェックサム加算器
２０６・・・ＯＲゲート
２０８・・・ＯＲゲート
２１２・・・マルチプレクサ
２１４・・・デコーダ
２１６・・・パケット・バッファ
２１８・・・マルチプレクサ
【図１】
2011508989.tif 000003
【図２】
2011508989.tif 000004
【国際調査報告】
2011508989.tif 000005
2011508989.tif 000006