JP5442755B2 - リモートデスクトッププロトコルのためのハードウェアアクセラレーション - Google Patents

リモートデスクトッププロトコルのためのハードウェアアクセラレーション Download PDF

Info

Publication number
JP5442755B2
JP5442755B2 JP2011538616A JP2011538616A JP5442755B2 JP 5442755 B2 JP5442755 B2 JP 5442755B2 JP 2011538616 A JP2011538616 A JP 2011538616A JP 2011538616 A JP2011538616 A JP 2011538616A JP 5442755 B2 JP5442755 B2 JP 5442755B2
Authority
JP
Japan
Prior art keywords
network
data
nic
packet
graphics processing
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.)
Active
Application number
JP2011538616A
Other languages
English (en)
Other versions
JP2012510126A5 (ja
JP2012510126A (ja
Inventor
スリニヴァス エヌケー
ウィルヘルム シュミーダー ロバート
アブド ナディム
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.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2012510126A publication Critical patent/JP2012510126A/ja
Publication of JP2012510126A5 publication Critical patent/JP2012510126A5/ja
Application granted granted Critical
Publication of JP5442755B2 publication Critical patent/JP5442755B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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/451Execution arrangements for user interfaces
    • G06F9/452Remote windowing, e.g. X-Window System, desktop virtualisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/04Protocols specially adapted for terminals or networks with limited capabilities; specially adapted for terminal portability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/133Protocols for remote procedure calls [RPC]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Human Computer Interaction (AREA)
  • Computer And Data Communications (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Communication Control (AREA)

Description

本発明は、リモートデスクトップのアクセス機能およびタスクを周辺機器にオフロードすることにより、ハードウェア高速化を図るシステムおよび方法に関する。
コンピューティングシステムにおけるネットワークアプリケーションは、7階層ISOモデルまたはWindows(登録商標)(商標)オペレーティングシステムによって使用される階層化モデルなどの階層化アーキテクチャが原因で、相当なホストプロセッサリソースを必要とし得る。データパケットがレイヤ間を進むようにデータパケットに対して実行される機能は、ソフトウェア集約型とすることができ、相当な量のプロセッサリソースおよびメモリリソースを要求し得る。さらに、ネットワークインタフェースカード(NIC)などの多くのコンピュータハードウェア周辺機器の能力、効率、およびスループットは向上している。このようなコンピュータシステム周辺機器は、しばしば専用プロセッサおよび専用メモリを備えており、そうした備えがなければコンピュータシステムプロセッサによってソフトウェアで実行される、高度で複雑なコンピューティングタスクを実行することが一般に可能である。例えば、多くのNICは、チェックサム計算/検証、データ暗号化/復号化、メッセージダイジェスト計算、TCPセグメンテーションまたはUDPセグメンテーション、受信側パケット分類、およびサービス妨害(Dos)攻撃に対する防御としてのパケットフィルタリングなど、NICが実行しなければ適切なネットワークレイヤにおいて、CPUによって、ソフトウェアで実行されるタスクを独自に実行することが可能である。そのため、このようなCPU集約型タスクを周辺ハードウェア機器にオフロードすること(offloading)には利点がある。これにより、ホストコンピュータにおけるCPU使用率およびメモリ帯域幅使用量が低減され、それによって、システム全体の効率、速度、およびスループットが向上する。
リモートコンピューティングシステムは、リモートコンピューティングシステムによってホストリソースにアクセスするユーザを有効にすることができる。リモートコンピューティングシステム上のサーバは、プログラムを実行し、TCP/IPプロトコルなどの通信プロトコルに準拠するネットワークを介して信号を送信することによって接続できるクライアントに、ユーザインタフェースを示す信号を伝送することができる。各接続クライアントは、セッション、すなわち、リソース一式を含む実行環境を提供され得る。各クライアントは、ユーザ入力を示す信号をサーバに伝送することができ、サーバは、ユーザ入力を適切なセッションに適用することができる。クライアントは、リモートデスクトッププロトコル(RDP)などのプロトコルを使用して、サーバリソースに接続することができる。RDPなどのプロトコルは、一般に、グラフィックス、ならびにUSB、プリンタ、キーボード、およびマウスなどのデバイストラフィック、加えて、サーバとクライアントの間のアプリケーションのための仮想チャネルも扱う。ターミナルサーバは、一般的なサーバ構成では数百存在し得るクライアントセッションを提供する。
RDPなどのプロトコルは、様々なこのようなリモートクライアントマシン機能をサポートする。一般に、サーバからのグラフィックスデータは、グラフィックスプリミティブ形式で符号化され、暗号化されるか、またはサーバ上でレンダリングされる必要があり、結果として現れるビットマップは、圧縮/暗号化され、ネットワークを介して伝送される必要がある。符号化操作、レンダリング操作、および暗号化操作は、本来は、非常にコンピュータを利用しており、高いCPU使用率を必要とする。したがって、上述の技法を使用して、このようなCPU集約型タスクを周辺ハードウェア機器にオフロードすることが有利である。
本開示は、これまではソフトウェアのプロセッサレベルにおいて実行されたリモート端末アクセス機能およびタスクを、コンピュータシステムに結合された適切なハードウェア周辺機器にオフロードするためのシステムおよび方法に関する。一実施形態では、タスクは、ネットワークインタフェースカード(NIC)周辺機器にオフロードすることができ、周辺機器は、オフロードされなければコンピュータCPUによって、ソフトウェアで、実行されるタスクの一部または全部を実行することができる。
一実施形態では、OS(オペレーティングシステム)は、コンピュータシステムに接続された(NICなどの)ハードウェア周辺機器のデバイスドライバに「問い合わせ(query)」を行うことができる。様々なデバイスドライバは、本明細書において「タスクオフロード機能(task offload capabilities)」と呼ばれる、それぞれのハードウェア周辺機器の処理能力を識別することによって応答することができる。一実施形態では、各特定の周辺機器のタスクオフロード機能が識別されると、OSは、その後、選択された周辺機器が一定のタスクを実行できるようにすることができる。OSは、その後、既に実行できるようにされたタスクを周辺機器が実行するよう、動的に必要に応じて要求することができる。
様々な実施形態では、このようなタスクは、RDPプロトコル処理中にレンダリングおよび圧縮機能が必要とされる場合は、このようなレンダリングおよび/または圧縮を含むことができる。したがって、プロトコルデータフローとともに埋め込まれ、TCP/IPなどであり、オフロードされた他のネットワークオフロードタスク上のRDPレベルの処理のための、オフロードパスを使用することによって、ネットワークカード上のハードウェア機能を利用することができる。
上述に加えて、本開示の一部を形成する特許請求の範囲、図面、および本文では、他の態様も説明される。本開示の1つまたは複数の様々な態様が、限定することなく、本明細書で言及される本開示の態様を達成するための回路構成および/またはプログラミングを含むことができ、回路構成および/またはプログラミングは実質的に、システム設計者の設計選択に応じて、本明細書で言及される態様を達成するように構成されたハードウェア、および/またはソフトウェア、および/またはファームウェアの任意の組み合わせとすることができることが当業者には理解できよう。
上述されたことは要約であり、したがって、簡略化、一般化、および細部の省略を必然的に含んでいる。要約はもっぱら一例に過ぎず、いかなる方法でも限定的であることを意図していないことが当業者には理解されよう。
本開示の態様を実施できるコンピュータシステム例を示す図である。 複数の仮想プロセッサおよび対応するゲストオペレーティングシステムを含む複数の仮想マシンを備える仮想マシン環境であって、仮想マシンは、スケジューラおよび他のコンポーネントを含み得る仮想化レイヤによって維持され、仮想化レイヤは、複数の仮想マシンのためにハードウェアを仮想化する、仮想マシン環境を示す図である。 本開示の態様を実施するための動作環境を示す図である。 本開示の態様を実施するための動作環境を示す図である。 本開示の態様を実施するための動作環境を示す図である。 ネットワークスタックの機能レイヤおよび本明細書で開示されるバイパス経路を示す図である。 NDIS経路の機能レイヤおよび本明細書で開示されるバイパス経路を示す図である。 本明細書で開示されるオフロード機構を示すラダー図である。 ホストコンピュータと周辺機器の間の同期を説明するブロック図である。 階層化ネットワークアーキテクチャ内に存在する機能コンポーネントのいくつかを示す図である。 本開示にしたがって、プログラムコンポーネントを通過するデータパケットのフローを説明する機能ブロック図である。 データパケットおよびパケット拡張の実施形態を示す図である。 リモートターミナルサービス処理を説明するアーキテクチャ例を示す図である。 リモートターミナルサービス処理の態様を説明する機能ブロック図である。 本開示の態様を実施するための操作手順例を示す図である。 本開示の態様を実施するための操作手順例を示す図である。 本開示の態様を実施するための操作手順例を示す図である。 上の図1〜図16に関して説明されるコンピュータ実行可能命令を持つコンピュータ可読媒体を示す図である。
一般論としてのコンピューティング環境
本開示の様々な実施形態についての完全な理解を提供するために、以下の説明および図において、ある具体的な詳細が説明される。本開示の主題の様々な実施形態を不必要に曖昧にすることを避けるために、しばしばコンピューティングおよびソフトウェア技術に関連するあるよく知られた詳細は、以下の開示では説明されない。さらに、以下で説明される詳細の1つまたは複数を用いずに、本開示の主題の他の実施形態を実施できることが当業者には理解されよう。最後に、以下の開示では、様々な方法が手順および順序を参照して説明されるが、このような説明は、本開示の主題の実施形態の明瞭な実施を可能にするためのものであり、その手順および順序が、本開示を実施するために必須であると理解されるべきではない。
本明細書で説明される様々な技法は、ハードウェア、ソフトウェア、または必要に応じて両方の組み合わせ、に関連して実施できることを理解されたい。したがって、本開示の方法および本開示の一連の装置、またはそれらのある態様もしくは部分は、磁気ディスク、CD−ROM、ハードドライブ、または他の任意の機械可読記憶媒体など、有形な媒体内に具現化されるプログラムコード(すなわち命令)形式を取ることができ、プログラムコードがコンピュータなどの機械にロードされ、機械によって実行された場合、機械は開示される主題を実施するための装置になる。プログラム可能なコンピュータ上でのプログラムコード実行の場合、コンピュータデバイスは一般に、プロセッサ、プロセッサによって可読な(揮発性メモリおよび不揮発性メモリおよび/または記憶素子を含む)記憶媒体、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含む。1つまたは複数のプログラムは、例えば、アプリケーションプログラミングインタフェース(API)、または再利用可能コントロールなどの使用を通して、本開示の主題に関連して説明されるプロセスを実施または利用することができる。このようなプログラムは、望ましくは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されて、コンピュータシステムと情報伝達を行う。しかし、プログラムは、必要に応じて、アセンブリ言語または機械語で実装することもできる。いずれの場合も、言語は、コンパイル言語またはインタプリタ言語とすることができ、ハードウェア実装と組み合わせることができる。
リモートデスクトップシステムは、クライアントコンピュータシステムによって遠隔地で実行できるアプリケーションを維持するコンピュータシステムである。入力は、クライアントコンピュータシステムにおいて入力され、(例えば、リモートデスクトッププロトコル(RDP)など、国際電気通信連合(ITU)T.120ファミリのプロトコルに基づいたプロトコルを使用して)ネットワークを介してターミナルサーバ上のアプリケーションに転送される。アプリケーションは、入力がターミナルサーバにおいて入力されたかのように、入力を処理する。アプリケーションは、受信した入力に応答して出力を生成し、出力は、ネットワークを介してクライアントコンピュータシステムに転送される。クライアントコンピュータシステムは、出力データを渡す。したがって、入力が受け取られ、出力が渡されるのは、クライアントコンピュータシステムにおいてであるが、処理が実際に行われるのは、ターミナルサーバにおいてである。セッションは、デスクトップ、デスクトップ内でのマウスの動きを追跡するサブシステム、アイコン上でのマウスクリックをプログラムのインスタンスを生成させるコマンドに変換するサブシステムなどの、シェルおよびユーザインタフェースを含むことができる。別の実施形態例では、セッションは、アプリケーションを含むことができる。この例では、アプリケーションは描画されているが、デスクトップ環境はまだ生成されており、ユーザから隠されていることがある。上述の説明は、例示的なものであること、本開示の主題は、様々なクライアント/サーバ環境で実施することができ、特定のターミナルサービス製品に限定されないことを理解されたい。
必ずしもすべてのリモートデスクトップ環境ではないが、ほとんどの場合、(クライアントコンピュータシステムにおいて入力される)入力データは一般に、アプリケーションに対するコマンドを表すマウスおよびキーボードデータを含み、(ターミナルサーバのアプリケーションによって生成される)出力データは一般に、ビデオ出力デバイス上に表示するためのビデオデータを含む。多くのリモートデスクトップ環境は、他のタイプのデータを転送できるように拡張する機能も含む。
プラグインがRDP接続を介してデータを転送できるようにすることによって、通信チャネルを使用して、RDPプロトコルを拡張することができる。このような多くの拡張が存在する。プリンタリダイレクション、クリップボードリダイレクション、ポートリダイレクションなどの機能は、通信チャネル技術を使用する。したがって、入力データおよび出力データに加えて、データを転送する必要がある多くの通信チャネルが存在することがある。したがって、出力データを転送するための不定期な要求と、利用可能なネットワーク帯域幅を求めて競合する他のデータを転送するための1つまたは複数のチャネル要求が存在することがある。
図2は、ターミナルサービスを可能にする実施200を示している。ターミナルサーバクライアントマシン202とターミナルサーバ204は、RDPを使用して通信する。ターミナルサーバクライアントマシン202は、ターミナルサーバクライアントプロセス206を実行し、ターミナルサーバクライアントプロセス206は、例えば、キーボードデータおよびマウスクリックデータなどのRDP入力デバイスデータ208を、ターミナルサーバ上でス生成されたターミナルサーバセッション210に送信し、ユーザインタフェースグラフィックスデータなどのRDP表示データ212を受信する。一般に、ターミナルサーバクライアントプロセス206は、シンクライアントプロセスであり、ほとんどの処理が、ターミナルサーバ204上で提供される。
図3は、ファイアウォール302を通してターミナルサービスを可能にする実施300を示している。リモートターミナルサーバクライアント304は、ネットワーク308を介してターミナルサービスゲートウェイ(TSG)306に接続する。ターミナルサーバクライアント上のハイパーテキスト転送プロトコル(HTTP)転送プロセス310とTSG 306上のHTTPプロセス312は、ファイアウォール302を通過する通信を容易にする。HTTP転送プロセス310は、リモートプロシージャコール(RPC)データ、またはRDPデータなどのデータを、TSG 306のためのHTTPSヘッダ内にラップする。TSG 306は、ソケット出力プロセス316によってソケット接続318を介してターミナルサーバ 314に接続することができる。ターミナルサーバクライアント304が認証され、接続が確立されると、RDPデータ320は、ターミナルサーバクライアント304とターミナルサーバ 314の間で双方向に通過することができる。
図4は、一般化された実施例400を示しており、既存のリモートプロシージャコール/ハイパーテキスト転送プロトコル(RPC/HTTP)プロキシを利用し、それによって、ファイアウォール402を通過するRPC/HTTP接続を介して、RDPなどのターミナルサービスプロトコルを提供する。実施のアーキテクチャは、RDPプロトコルをRPCコール内にラップすることによって、既存のRPCベースのプロキシを有利に利用できることを示している。特に、ターミナルサーバクライアント406上のRPC転送プラグイン404は、ターミナルサーバクライアント406とターミナルサーバ408の間の通信を提供するRDPストリームをRPCプロトコル内にラップする。これは、RPCベースのプロキシの利用を容易にし、それによって、ファイアウォールナビゲーションを可能にする。ターミナルサーバ上で、ユーザモードで動作できるRPCベースのプロキシ410は、受信したデータを、ターミナルサーバ上で、カーネルモードで動作できるソケットリスナ412に転送することができる。
上述したように、クライアントは、ターミナルサービスを使用してリソースに接続するために、リモートデスクトッププロトコル(RDP)などのリモートプロトコルを使用することができる。リモートデスクトップクライアントが、ターミナルサービスゲートウェイを介してターミナルサーバに接続する場合、ゲートウェイは、ターミナルサーバとのソケット接続を開き、クライアントトラフィックをRDPポート、またはリモートアクセスサービス専用のポートにリダイレクトすることができる。ゲートウェイはまた、HTTPSを介して伝送されるターミナルサービスゲートウェイプロトコルを使用して、クライアントとのあるゲートウェイ固有のやり取りを実行することができる。
ハイパーバイザなどの仮想マシンモニタは、仮想マシンを生成するプログラムであり、各仮想マシンは、下層の物理的なハードウェアリソースによって支援できる仮想ハードウェアリソースを有する。図1aは、複数の仮想マシン120、121を有する仮想マシン環境100を示しており、仮想マシン120、121は、複数の仮想プロセッサ110、112、114、116と、対応するゲストオペレーティングシステム130、132とを備える。仮想マシン120、121は、スケジューラ142および他のコンポーネント(図示されず)から成ることができる仮想化レイヤ140によって維持され、仮想化レイヤ140は、複数の仮想マシン120、121のためのハードウェア150を仮想化する。複数の仮想プロセッサ110、112、114、116は、下層のハードウェアの物理的なプロセッサ160、162に相当する仮想のものとすることができる。
上記区分を実施するためのバリエーションのすべては、単なる例示的な実施にすぎず、本明細書において本開示を任意の特定の仮想化態様に限定すると解釈すべきではない。
オフローディングを使用するハードウェアアクセラレーション
本開示の実施形態は、一般に、処理ユニット21の処理オーバヘッドおよびメモリ使用量を低減する能力を提供することに関する。これは、例えば、処理ユニット/CPU 21上で動作しているオペレーティングシステム、および/またはアプリケーションプログラム、および/または他のプログラムモジュールを用いて達成される特定のコンピューティングタスクを、コンピュータシステム20に接続された適切な周辺ハードウェア機器にオフロードすることによって達成される。このような周辺機器の多くは、専用プロセッサおよび専用メモリをいっそう装備するようになっており、一般にはもっぱらCPU 21によって達成される同じタスクの多くを十分に実行することが可能である。このようなデバイス例は、例えば、ネットワークインタフェースカード(図1の53)、ディスクドライブインタフェースカード(例えば、図1の32、33、34)、小型コンピュータシステムインタフェース(SCSI)デバイス、インテリジェントシリアルインタフェースカード、またはデータの暗号化/復号化のためのデバイスなどのアプリケーション固有の周辺機器を含むことができる。
本明細書で説明する本発明の一般的な概念は、上記の周辺ハードウェア機器のいずれかと接続して、コンピューティングタスクをオフロードするために使用できるが、開示された主題は、現在推奨の一実施形態例に関して説明され、コンピューティングタスクは、図1に示されるNIC 53などのネットワーク通信デバイスにオフロードされる。より具体的には、実例となる実施形態は、マイクロソフト(登録商標)コーポレーションから入手可能なWindows(登録商標)オペレーティングシステムのネットワーク環境およびアーキテクチャにおいて実施されるものとして説明される。しかし、Windows(登録商標)の概念およびWindows(登録商標)の専門用語を具体的に参照しはするが、ほとんどではないものの多くのオペレーティングシステムおよびネットワークアーキテクチャが、本開示の環境に関連する類似性を共有することを当業者が認識することが理解されよう。
図5は、本開示のネットワークモデルおよび本開示のコンポーネントを構成するコンポーネントの一部の相互関係を示している。通常の動作中、ネットワーク伝送されるメッセージが、アプリケーション500によって、ネットワークスタック502を介して周辺機器504に送られ、周辺機器504では、メッセージは、ネットワーク上の他のデバイスおよびアプリケーションに送信され、また他のデバイスおよびアプリケーションから受信される。ネットワークスタック502は、1つまたは複数の中間ソフトウェアレイヤ506を含む。アプリケーション500から送られたデータは、中間ソフトウェアレイヤ506を通過し、中間ソフトウェアレイヤ506では、データのパッケージ化、信頼性の高いデータ伝送、データ暗号化、およびメッセージダイジェストの計算など、特定の操作をデータに対して実行することができる
スイッチ508は、中間ソフトウェアレイヤ506のためのネットワークスタック操作を実行することから、処理ユニット150をオフロードするために使用される。スイッチ508は、別個に示されているが、ネットワークスタック502の最上位の中間レイヤに統合できることに留意されたい。データが、周辺機器504のためのチムニ510を通して周辺機器504に送られ、ネットワークスタック操作を実行する。この階層構造では、中間ソフトウェアレイヤは、ホストまたは周辺機器に排他的に存在する必要はなく、中間レイヤのいずれについても、完全にオフロードすること、ホストに残すこと、または両方を組み合わせる(例えば、1つもしくは複数の特定の接続をオフロードする)ことが可能である。加えて、チムニは、チムニ上にレイヤを形成することができる(例えば、IPsecチムニは、TCPチムニの上にレイヤを形成することができる)。接続は、信頼性の高いデータ転送および信頼性の低いデータ転送、ならびにユニキャストデータ転送またはマルチキャストデータ転送の任意の組み合わせとすることができる。中間レイヤをホストに残す場合、ホストは、周辺機器504内のキャッシュされた変数を(以下で説明されるように)更新する。例えば、接続のための転送制御ブロック(transport control block)(TCB)状態エントリは、周辺機器504にオフロードされるネットワーク層のためのルートキャッシュエントリ(route cache entry)(RCE)とともに、トランスポート層のためにオフロードすることができる。スイッチ508は、同じRCEを共有するネットワークスタック502を介して異なるTCBのためのトラフィックを送り続ける一方、スイッチ508は、オフロードされたTCBのためのチムニ510を通してトラフィックを送る。
スイッチ508は、オフロード要求を中間レイヤ506に送信することによって、オフロードを開始する。オフロード要求は、正常に接続をオフロードできるかどうかを決定する周辺機器504を支援するリソース情報を含む。各中間レイヤ506は、オフロード要求を拒否するか、またはリソース情報をオフロード要求に追加して、ネットワークスタック502内の隣接したソフトウェアレイヤにオフロード要求を送る。周辺機器504は、オフロード要求を受け取ったとき、接続をオフロードするために利用可能なリソースを有するかどうかを計算する。周辺機器504は、オフロードが可能でない場合はオフロード要求を拒否する。オフロードが可能である場合、周辺機器504は、オフロード要求を受け入れ、接続のためのリソースを割り当てる。周辺機器504は、パラメータの連結リストを有する完了メッセージを中間ソフトウェアレイヤ506に送ることによって、オフロード要求を完了する。パラメータの連結リストは、中間ソフトウェアレイヤ506およびスイッチ508が周辺機器と情報伝達することを可能にするために、中間ソフトウェアレイヤ506およびスイッチ508に情報を提供する。各中間ソフトウェアレイヤ506は、自身のための情報をパラメータの連結リストから削除する。
中間レイヤ506は、オフロードについての完了メッセージを受け取ったとき、その状態を周辺機器504に渡す。各状態は、3つのタイプの変数、すなわちCONST、CACHED、およびDELEGATEDを有することができる。状態は、3つのタイプの変数のすべてまたは一部を有することができる。CONST変数は、オフロードされた接続の存続期間中に変化しない定数である。CONST変数は、接続がアップロードされるとき、レイヤにリードバック(read back)されない。ホスト処理ユニット21は、CACHED変数の所有権を維持し、ホスト処理ユニット21におけるCACHED変数へのいかなる変更も、周辺機器504において更新されることを保証する。CACHED状態を変更する制御メッセージは、ネットワークスタック502によって処理される。結果として、接続がアップロードされるとき、ホストは、CACHED変数を書き込むが、リードバックする必要はない。ホスト処理ユニット21は、DELEGATED変数の所有権を周辺機器504に転送する。DELEGATED変数は、オフロードが発生したときに一度書き込まれ、オフロードが終了したときにリードバックされる。DELEGATED変数を転送し戻すことだけなので、接続をホストに転送し戻すことのオーバヘッドは最小限に抑えられる。ネットワークスタック502と、様々な性能上の理由でオフロード(すなわち権限委譲)されている周辺機器504との間で共有されなければならない状態(例えば制御)は、ネットワークスタック502および周辺機器504の両方が、状態の排他的な部分を互いに所有するように、ネットワークスタック502とチムニ510の間できれいに分割される(例えば、TCPオフロードにおけるIP ID)。ホスト処理ユニット21は、(例えば統計のために)必要とされる場合、DELEGATED変数について周辺機器504に問い合わせる。ホスト処理ユニット21は、診断のためにCONSTまたはCACHED変数について問い合わせることもできる。状態を3つのカテゴリに分割することで、ネットワークスタック502は、チムニ510ときれいに共存することができる。状態をオフロード要求に含めることができることに留意されたい。これは、状態が、委譲された状態変数を含まない場合、または最初のオフロード要求からオフロード要求が完了するまでの間に変化しない委譲された状態変数を含む場合に行うことができる。
周辺機器504またはホストは、オフロードされた接続をいつアップロードすべきかを決定する。アップロードは、周辺機器504またはスイッチ508のいずれかによって開始される。アップロードが開始されると、周辺機器504は、すべての未解決の要求を適切な状態で完了し、最上位の中間レイヤの委譲された状態をスイッチ508に渡す。スイッチ508は、さらなる送信要求をすべて待ち行列に入れ、受信バッファの提示を停止する。スイッチ508は、委譲された状態の制御権を取得するように最上位の中間レイヤに命令する。最上位の中間レイヤは、委譲された状態の制御権を取得し、スイッチ508に完了メッセージを送る。スイッチ508は、完了メッセージを受け取った後、周辺機器504にアップロードを確認し、それによって、周辺機器504は、もはや使用されていないリソースを解放することができる。
最上位の中間レイヤは、委譲された状態の制御権を取得するまで、オフロードされた接続についての到着データパケットを、処理のために周辺機器504に転送することに留意されたい。周辺機器504が委譲された状態をスイッチ508に渡すときと、最上位の中間レイヤが委譲された状態の制御権を取得するときの間に、データパケットが到着することがある。周辺機器504は、委譲された状態をスイッチ508に渡した後は、もはや到着データパケットを処理しない。周辺機器504は、到着データを受け取った場合、アップロードが進行中であることを通知するエラーメッセージを最上位の中間レイヤに送る。エラーメッセージは、最上位の中間レイヤが委譲された状態を受け取るまで、到着データの転送を停止し、さらなるデータをバッファリングするように最上位の中間レイヤに通知する。あるいは、周辺機器504上の増設バッファメモリのコストにおいて、到着データを周辺機器504に転送し、周辺機器504にデータをバッファリングさせることができる。
中間ソフトウェアレイヤ506によって、複数の接続を周辺機器504にオフロードすることができる。オフロードのために中間ソフトウェアレイヤの状態オブジェクトを参照する、上位レイヤ状態オブジェクト(すなわち、中間ソフトウェアレイヤ506の上位のレイヤの状態オブジェクト)の数についての参照カウンタが、中間ソフトウェアレイヤ506によって維持される。本明細書で使用される状態オブジェクトは、本明細書で使用されるようなCONST、CACHED、またはDELEGATEDとして分類される、特定のレイヤのための状態変数の集まりである。中間レイヤのオフロードされた状態オブジェクトが、中間レイヤの上位のレイヤによる状態オブジェクトへの参照を有さない場合、中間レイヤ506は、中間レイヤのための状態オブジェクトをアップロードし、委譲された状態変数を中間レイヤ506に送るように、メッセージを周辺機器504に送る。周辺機器504は、中間レイヤ506のための状態オブジェクトを削除し、中間レイヤ506は、完了メッセージをスイッチ508に送る。
図9は、Windows(登録商標)環境におけるネットワークモデルを構成する一定のコンポーネント群からなる概略図を示している。説明の目的で、様々なWindows(登録商標)コンポーネントに対応するOSIレイヤも示されている。OSIモデルの物理層に対応する下部レイヤには、(ネットワークカードまたはネットワークアダプタと呼ばれることがある)実際のNIC 900〜904が存在する。NICは、物理的な媒体(ネットワークケーブル)との物理的な相互接続と、特定のネットワークトポロジに従った、すべてのより高位のレベルのレイヤによって生成されたデータを運ぶ信号の伝送とを提供するハードウェアデバイスである。上述したように、多くのNICは、専用プロセッサおよびメモリを装備し、NICが実行しなければホストプロセッサCPUによって処理できるタスクを含む、追加の高度なコンピューティングタスクを実行することが可能である。NICは、コンピュータのスロット内に配置されるプリント回路基板カードとして、PCMCIA対応のスロット内に配置されるPCMCIAタイプカードとして、マザーボード上のコンピュータ筐体内に配置される専用チップとして、または他の任意の適切なもので、物理的に実装することができる。
各NICは、双方向ライン908〜912によって概略的に表されるように、対応するネットワークドライバ916〜920を介して、Windows(登録商標)ネットワークモデルと論理的に相互接続される。ネットワークドライバは、ネットワークモデルのMACサブレイヤ内に常駐し、対応するNICを介してWindows(登録商標)を物理ネットワークチャネルにリンクする。対応するNICのベンダによって提供されるソフトウェアコンポーネントとして一般に実装される各ドライバは、対応するネットワーク接続を介してパケットを送信および受信すること、ならびにオペレーティングシステムの代わりにNICを管理することを担う。各ドライバはまた、対応するNIC上でI/Oを開始し、対応するNICから割り込みを受け取り、上位のプロトコルドライバを呼び出すことで送信データ転送の完了を通知する。また、デバイスドライバは、対応するNICの追加の処理機能のいずれかを起動し、制御し、および/または監視することも担う。
ある環境では、ドライバコンポーネントは、TCP/IPまたはXNSなどの、単一の特定のネットワークプロトコルを実装するために書かれる。本開示の主題は、このような環境に適用可能である。しかし、説明目的で、本開示は、Windows(登録商標)ネットワークアーキテクチャに関連して説明され、Windows(登録商標)ネットワークアーキテクチャでは、network driver interface specification(NDIS)と呼ばれるインタフェースおよび環境が提供される。NDISインタフェースは、図9では926として機能的に示されている。NDISは、(その例が928〜934として示される)様々なトランスポートプロトコルの一つ一つからネットワークドライバ916〜920の各々を、またネットワークドライバの各々から様々なトランスポートプロトコルの一つ一つを隠蔽する。より詳細には、NDISは、1つまたは複数のNICドライバ(916〜920)が、1つまたは複数の下位のNIC(900〜904)、(図9で928〜934として表される)1つまたは複数の上位のトランスポートプロトコルドライバまたはトランスポート、およびオペレーティングシステムと情報伝達を行うインタフェースを表す。
本質的に、NDISは、NICドライバ開発のための完全に抽象化された環境を定義する。したがって、NICハードウェア割り込みの登録および捕捉から、トランスポートプロトコルドライバとの情報伝達、レジスタ操作およびポートI/Oを介した下位のNICとの情報伝達まで、NICドライバが実行する必要があるあらゆる外部機能について、NICドライバは、NDIS APIを頼りに機能を実行することができる。このレベルの抽象化およびその結果の移植性を提供するため、NDISは、NDISインタフェースライブラリラッパ(NDIS Interface Library Wrapper)と呼ばれるエクスポートライブラリ(図示されず)を使用する。NICドライバとプロトコルドライバ、NICドライバとオペレーティングシステム、およびNICドライバとNICの間の対話は、ラッパ機能へのコールを介して実行される。したがって、Windows(登録商標) NTのためのトランスポート固有のドライバを書く代わりに、ネットワークベンダは、単一のネットワークドライバの最上位レイヤとしてNDISインタフェースを提供する。そうすることで、いずれのプロトコルドライバも、このインタフェースをコールすることによって、そのネットワーク要求をネットワークカードに送ることができる。したがって、ユーザは、1つのネットワークカードおよび単一のネットワークドライバを使用して、TCP/IPネットワークおよびDLC(もしくはNWLINK、またはDECnet、VINES、およびNetBEUIなど)ネットワークを介して通信することができる。
ネットワーク層およびデータリンク層には、図9の例では928〜934として示される、トランスポート、プロトコル、および関連ドライバが存在する。Windows(登録商標)では、トランスポートプロトコルドライバは、ネットワークのユーザにサービスを提供するために、トランスポートドライバインタフェース(TDI)を、または場合によってはTDIの上位で別のアプリケーション固有のインタフェースを実装する、ソフトウェアコンポーネントである。Windows(登録商標)では、TDIは、機能ブロック938として示されるリダイレクタ機能およびサーバ機能など、セッション層において通信するネットワークコンポーネントに共通インタフェースを提供する。よく知られているように、トランスポートプロトコルは、ネットワークのためのデータオーガナイザとして動作し、基本的に、次の受信レイヤにデータをどのように提示すべきかを定義し、それに沿ってデータをパッケージ化する。トランスポートプロトコルは、対応するNICを介してネットワーク上にデータを送信できるように、(Windows(登録商標)環境ではNDISパケットと呼ばれることがある)パケットを割り当て、送信元アプリケーションからのデータをパケットにコピーし、NDISをコールすることによって、より下位のレベルのデバイスドライバにパケットを送る。
データパケットが様々なネットワークレイヤを、一般にネットワークモデルのレイヤ3およびレイヤ4を通過するとき、データパケットに対して追加の機能またはタスクも実行できることが理解されよう。本開示によれば、このような追加の機能またはタスクは、NICハードウェアによって、その代わりに実行することもできる。
例えば、従来はトランスポートプロトコルドライバによって実行していた1つのタスクは、チェックサム値を計算し、次にチェックサム値をパケットに追加することができる。これは、データがネットワークリンクを行き来するときに、データの整合性を保証する助けとなる。一般に、この操作は、パケットを構成するデータ要素を合計することによって計算された数をネットワークパケットに追加するために、ネットワークパケットの送信側に対応するトランスポートプロトコルを必要とする。次に、パケットの受信側は、追加されたチェックサム数をデータと比較し、それによって、データが送信中に変更されなかったことを確認する。このチェックサム計算および比較は、代わりにNICハードウェアにオフロードすることができる。
NICハードウェアにおいて最適に実行できる別の関連タスクは、データパケットのためのメッセージダイジェストの計算である。チェックサムと同様に、メッセージダイジェストは、パケット内のデータの整合性を保証するために使用される。加えて、メッセージダイジェストは、メッセージを送った当事者が、その主張通り当事者本人であることを保証することによって、データの信頼性を保証するために使用することができる。メッセージダイジェストの計算は、非常にCPU集約型であり、ソフトウェアで実行するにはコストが高い機能である。
別の望ましい機能は、パケット内のデータの暗号化である。暗号化とは、パケットの読み込み権限のない者が、事前に暗号鍵の情報を得られないまま、メッセージの内容を実際に見ることが不可能になるように、パケット内のメッセージを変換する暗号プロセスのことを指す。もちろん、暗号アルゴリズムも、非常にCPU集約型およびメモリ集約型となる傾向があり、ソフトウェアで実行した場合には非常にコストが高くなり得る。そのような暗号化の例は、セキュアソケットレイヤ(SSL)プロトコル暗号化、およびインターネットセキュリティプロトコル暗号化、すなわち「IPSec」を含む。よく知られているように、SSL暗号化プロトコルおよびIPSec暗号化プロトコルはどちらも、非常にCPU集約型およびメモリ集約型である。
データパケットに対して実行できる別のタスクは、TCPセグメンテーションまたはUDPセグメンテーションである。よく知られているように、TCPプロトコルおよびUDPプロトコルは、大きなデータパケットを、下位のネットワークによって許容される最大データサイズに合ったセグメントに分割する。例えば、イーサネット(登録商標)は、最大で1514バイトのパケットをネットワーク上で許容する。したがって、TCPまたはUDPは、例えば64Kバイトを送信しなければならない場合、データを解析、1514バイトのセグメントに分割しなければならない。
加えて、データパケットがネットワークから受信されるとき、データパケットに対してしばしばパケット分類が実行される。パケット分類は、サービス品質(QoS)ついてのデータパケットの識別を含む。言い換えれば、各データパケットは、最適性能を保証するためにデータパケットに対して実行されるべきサービスの形態を定義するフィールドを含む。例えば、ビデオおよびオーディオを含むデータパケットは、ビデオおよびオーディオを提示する際の高忠実性を保証するために、データパケットに対して実行される一定の機能を必要とすることがある。サービスの形態を識別するためのデータパケットの分類は、本開示に従って、NICハードウェアにオフロードすることができる。
パケットフィルタリングも、CPUの代わりに、NICハードウェアによって実行することができる。特に、データパケットは、それらがサービス妨害攻撃の一部である特徴を有するかどうかを特定するために評価することができる。しばしば、サーバソフトウェアは、サービスを要求するクライアントには悪意がないという仮定の下で作成される。しかし、クライアントが十分な教育を受けており、しかも悪意を有する場合、ユーザはしばしば、他のユーザに対するサーバのサービスを妨害するように設計された要求をサーバに向けて発行することができる。サービス妨害攻撃フィルタリングとは、データパケットがサービス妨害攻撃の特徴を有するかどうか特定するためにデータパケットを評価する能力に関係する。
サービス妨害攻撃の一例は、「SYNフラッド攻撃」であり、SYNフラッド攻撃では、1つまたは別の理由で、クライアントは、ハンドシェイクシーケンスにおいて、サーバのSYNcronize−ACKnowredge(SYK−ACK)応答に対していかなる最終的な肯定応答も送信しない。これによって、サーバが最終的にタイムアウトになるまで、サーバはシグナリングを続けることになる。
別のタイプのサービス妨害攻撃は、フラグメンテーションまたは「ティアドロップ(teardrop)」攻撃と呼ばれている。インターネットプロトコルは、パケットが次のルータで処理するには大き過ぎる場合、パケットを断片化する必要がある。後続の断片化されたパケットは、受信側においてパケット全体を再構築することを可能にする、最初のパケットの先頭のオフセットを識別する。フラグメンテーション攻撃では、ユーザは、しばしば受信側を機能不能にする偽のオフセット値を後続のフラグメント内に配置する。NICハードウェアは、データパケットを評価して、データパケットが特定の種類のサービス妨害攻撃の特徴を有するかどうかを特定することによって、これらのタイプのサービス妨害攻撃のためのフィルタリングを処理するように構成することができる。
上記および他の機能は一般に、様々なネットワークレイヤに存在するソフトウェアコンポーネントにおいてコンピュータCPU 20によって実行され、その結果、相当のコンピュータリソースを利用することがあり、コンピュータシステム性能の全般的な低下をもたらす。したがって、これらまたは他の類似のタスクを、代わりに対応するNICハードウェアにおいて実行できるようにオフロードすることによって、コンピュータシステムの全体的な速度および効率を大幅に向上させることができる。
ここで図6を参照すると、周辺機器504がNIC 56であり、スイッチ508は、トランスポート層インタフェース(TLI)スイッチ606である一実施形態が示されており、ネットワークスタック502は、トランスポート層600、ネットワーク層602、およびフレーム化層(framing layer)604を含む。ネットワーク層602は、経路層(path layer)としても知られており、フレーム化層604は、近傍層(neighbor layer)としても知られている。
ネットワークメッセージは、動作中に、アプリケーション500によって、ネットワークスタック502を介してNIC 56に送られる。アプリケーション500から送られたデータは、TLIスイッチ606を通過し、TLIスイッチ606は、データが、ホストベースのネットワークスタック502を下るのか、それともチムニ608を下るのかを制御する。TLIスイッチ606をネットワークスタック502の最上位レイヤに組み込むことができることに留意されたい。ネットワークスタック502内のソフトウェアレイヤは、アプリケーション500からデータを受け取り、そのデータをパケット形式にパッケージ化し、NDISミニドライバ610を介して、そのデータを周辺ハードウェア614に送る。データパケットがスタック502を通過するときに、ネットワークスタック502が実行できる他のタスクは、データ暗号化、信頼性の高いデータ伝送、およびメッセージダイジェスト(例えば、データパケットのためのチェックサムまたは巡回冗長検査(CRC))の計算を含む。これらのタスクの多くは、処理ユニット21によって実行され、プロセッサ集約型である。
接続のためのデータを、チムニ608(およびチムニドライバ612)を介してNIC56に送ることによって、スタック操作を実行することから処理ユニット21をオフロードするために、TLIスイッチ606が使用される。NDISミニドライバ610とチムニドライバ612の上縁が、マイクロソフト(登録商標)の製品版オペレーティングシステムのNDIS APIであることを当業者は理解されよう。説明目的で、伝送制御プロトコル(TCP)ベースのプロトコルスタックを使用して、開示される主題について説明する。しかし、本開示の教示を使用して、多くの種類の周辺機器を使用できること、また他のネットワークスタックをオフロードできることを当業者が認識することが理解されよう。例えば、ストリーム制御伝送プロトコル(SCTP)またはユーザデータグラムプロトコル(UDP)ベースのプロトコルスタックをオフロードすることができる。加えて、本開示は、インターネット小型コンピュータシステムインタフェース(iSCSI)、ネットワークファイルシステム(NFS)、または共通インタフェースファイルシステム(CIFS)など、より高位の機能プロトコルをオフロードするために使用することもできる。
オフロードが発生する多くの理由が存在する。限定ではなく、例として、理由のいくつかを以下で提供する。システム管理者は、オフロードされる特定のサービスを選択することができる。特定の接続上のトラフィック(バイト数またはパケット数の点で)が相当な量のリソースを消費している場合、その接続をオフロードすることができる。サービスの種類をオフロードすることができる。例えば、IPsecなどのセキュリティプロトコルをオフロードすることができる。オフロードは、ポリシによってさせることができる。例えば、管理者は、ある組織内からのすべての接続が最初にオフロードされるというポリシをもつことができる。使用されているシステムリソース(例えば、CPU利用、データキャッシュ使用、ページテーブルキャッシュ使用、メモリ帯域幅)は、接続をオフロードするようにホストプロセッサを誘導することができる。
図7は、TCP接続をオフロードするために取られる手順を示している。3ステージのプロセスが使用される。一般に、3ステージのプロセスは、TCP接続をオフロードするのに必要とされるリソースを割り当てること、層500、502、504、506の各々にハンドルを提供すること、層500、502、504、506の各々についての状態をNIC 53にオフロードすることである。オフロード遷移中、TLIスイッチ506は、アプリケーション200から送られたすべてのメッセージをバッファリングする。あるいは、トランスポート層500が、データをバッファリングする。オフロードが完了したとき、バッファリングされたデータが、オフロードデータ伝送と同じ機構を使用して、NIC 53に転送される。オフロード遷移中に到着パケットを受信した場合、NIC 53は、トランスポート層委譲状態がNIC 53に渡されるまで、層500、502、504、506を介してデータを上方に移動させ続ける。
TLIスイッチ506は、トランスポート層500にオフロード要求を送ることによって(ライン700)、オフロードを開始する。オフロード要求は、次層の局所的状態を指示するポインタ(例えば、トランスポート層500の場合のTCBポインタ、ネットワーク層502の場合のRCEポインタ、フレーム化層504の場合のARPテーブルポインタ、またはNDISミニドライバ510の場合のNDISミニポートポインタ)、オフロードタイプ(例えば、TLIスイッチ506の場合のTCP、ネットワーク層502の場合のIPv6など)、および正常にTCP接続をオフロードできるかどうかをNIC 53が決定する助けとなるリソース情報を含む。また、TLIスイッチ506は、ディスパッチテーブルもNIC 53に提供することができる。トランスポート層500は、オフロード要求を拒否するか、またはTLIスイッチリソース情報にTCPリソース情報を追加して、オフロード要求をネットワーク層502に送る(ライン702)。
ネットワーク層502は、オフロード要求を受け取り、接続をオフロードすることを拒否するか、またはTCPリソース情報およびTLIスイッチリソース情報にネットワークリソース要件を追加して、オフロード要求をフレーム化層504に送る(ライン704)。ネットワーク層502は、ディスパッチテーブルもNIC 53に提供することができる。フレーム化層504は、接続をオフロードすることを拒否するか、またはネットワークリソース要件、TCPリソース情報、およびTLIスイッチリソース情報にフレーム化リソース要件を追加して、オフロード要求をNIC 53に送る(ライン506)。
NIC 53は、オフロード要求を受け取り、TCP接続をオフロードするのに利用可能なリソースを有するかどうかを計算する。NICは、オフロードが可能でないと判定した場合、オフロード要求を拒否する。NICは、オフロードが可能であると判定した場合、オフロード要求を受け入れ、接続のためのリソース(例えば、TCB、ルートキャッシュエントリ(RCE)、アドレス解決プロトコル(ARP)テーブルエントリ(ATE))を割り当てる。NIC 53は、パラメータの連結リストおよびディスパッチテーブルを生成し、層500、502、504、506に渡し、パラメータの連結リストを有する完了メッセージをフレーム化層504に送ることによって(ライン408)、オフロード要求を完了する。パラメータは、層500、502、504、506の各々のためのオフロードハンドルおよびディスパッチテーブルを含む。本明細書で使用されるオフロードハンドルとは、ソフトウェアレイヤが周辺機器と情報伝達することを可能にする機構を意味する。限定ではなく、例として、オフロードハンドルは、ポインタベースのハンドル、配列への参照として使用される整数値、ハッシュテーブル(例えばハッシュ関数)、ソフトウェアレイヤ(もしくはネットワークスタック)と周辺機器との間の通信チャネル、または状態オブジェクトを参照するために周辺機器が使用する、ソフトウェアレイヤによって渡されるパラメータ一式になり得る。
ディスパッチテーブルは、データを直接NIC 53に送るため、またはデータを直接NIC 53から受け取るために使用される。ディスパッチテーブルは、診断を提供するために使用することもできる。例えば、ソフトウェアレイヤを追加して、システムを監視すること、またシステムが適切に機能していることを確認するために誤りを投入することができる。加えて、必要に応じて、追加の機能を追加できるソフトウェアレイヤによって、ディスパッチテーブルにパッチを適用することができる。例えば、ソフトウェアレイヤを追加して、フィルタドライバの機能を提供することができる。パッチは一般に、追加機能が挿入される元の機能を指示するポインタを獲得し、追加機能にポインタをリダイレクトする(すなわちポインタを向ける)ことによって適用される。パッチが挿入された後、元の機能が呼び出されたときは常に、追加機能がその機能を実行し、その後、元の機能を呼び出す。
フレーム化層504は、宛先MACアドレスが変化した場合またはカプセル化タイプが変化した場合の容易な更新のために、ARPテーブルエントリ内にフレーム化層のためのオフロードハンドルおよびディスパッチテーブルを格納する。その後、フレーム化層504は、ATEに関連するNIC 53状態を更新する(ライン710)。フレーム化層504は、その状態を連結リストから除去し、連結リスト内の残りの情報をネットワーク層502に転送する(ライン712)。
ネットワーク層502は、ネットワーク層502のためのオフロードハンドルおよびディスパッチテーブルを格納する。ネットワーク層502はまた、その状態をNIC 53に送る(ライン714)。ネットワーク層502は、連結リストからネットワーク層情報を除去し、パラメータの連結リストおよびディスパッチテーブルを有する完了メッセージをトランスポート層500に送る(ライン716)。ネットワーク層502は、オフロードされた状態のために受け取るIPフラグメントを、処理のためにNIC 53に転送することができ、また、ネットワーク層502がIPフラグメントをネットワーク層において処理し、トランスポート層500に転送することができる。
一代替実施形態では、層の状態オブジェクトが、オフロード要求と共に送られる。例えば、フレーム化層状態オブジェクトおよびネットワーク層状態オブジェクトは、オフロード要求と共に送られ、オフロード要求と完了イベントとの間に、キャッシュされた状態が変化した場合にのみ、状態が更新される。層状態オブジェクト全体は、委譲された状態が存在しないか、またはオフロード要求とオフロード要求の完了との間に変化できない場合にのみ、オフロード要求と共に送ることができる。しかし、委譲された状態が存在し、オフロード要求とオフロード要求の完了との間に変化できる場合であっても、CONSTとして分類された変数は、オフロード要求と共に送ることができる。
トランスポート層500は、トランスポート層のためのオフロードハンドルを格納し、その状態をNIC 53に送る(ライン718)。任意の未解決送信バッファまたは任意の未解決受信バッファが保留状態で存在する場合、トランスポート層500は、バッファをTLIスイッチ506に返す。トランスポート層500がバッファをTLIスイッチ506に返し始めると、TLIスイッチ506は、トランスポート層500にバッファを送るのを停止し、それらを待ち行列に入れ、トランスポート層500がパラメータの連結リストおよびディスパッチテーブルを有する完了メッセージをTLIスイッチ204に送るのを待つ。トランスポート層500は、すべてのバッファを返し、その後、完了メッセージを送る(ライン720)。TLIスイッチ506は、完了メッセージを受け取ると、送信バッファおよび受信バッファをNIC 53に転送する(ライン722)。TLIスイッチ506は、ディスパッチテーブルを使用して、すべての未解決受信バッファをおよびすべての将来の受信バッファをポストし、処理のためにNIC 53に送る。オフロード要求が完了するのにかかる時間の間、各層500、502、504は、オフロードされる状態オブジェクト(すなわち、層に関連する状態オブジェクト)についての新しいオフロード要求を拒否するか、またはオフロードが完了するまで、それらを待ち行列に入れる。
トランスポート層500は、トランスポート状態がNIC 53にオフロードされていない場合、到着TCBデータを処理して、TLIスイッチ506にデータを渡す能力を依然として有する。TCBデータがオフロードの最中に到着した場合、トランスポート層500は、データを保持し続けるか、またはデータを処理して、それをTLIスイッチ506に渡すことができる。トランスポート層500がその状態をNIC 53に送ったとき(ライン718)とTLIスイッチがバッファをNIC 53に転送したとき(ライン722)の間は、ネットワークスタック202を通って来る到着TCBデータが、NIC 53に送られる。
後のオフロード要求のとき、ネットワーク層502およびフレーム化層504は、NIC 53から受け取ったオフロードハンドルを、先のオフロードからNIC 53に渡す。これは、ネットワーク層502およびフレーム化層504のためのリソースがすでに割り当てられていることをNIC 53に伝え、それによって、NICリソースを節約し、オフロードをスピードアップする。
先に示したように、層500、502、504は、それらの状態をNIC 53に渡す。各状態は、3つのタイプの変数を、すなわち、CONST、CACHED、およびDELEGATEDを有する。CONST変数は、オフロードされた接続の存続期間中に変化しない定数である。CONST変数は、接続が終了したとき、その層にリードバックされない。ホスト処理ユニット21は、CACHED変数の所有権を維持し、ホスト処理ユニット21におけるCACHED変数へのいかなる変更も、NIC 53において更新されることを保証する。結果として、ホストは、CACHED変数を書き込むが、(システム診断がそれを要求しない限り)リードバックはしない。ホスト処理ユニット21は、DELEGATED変数の所有権をNIC 53に転送する。DELEGATED変数は、オフロードが発生したときに一度書き込まれ、オフロードが終了したときにリードバックされる。DELEGATED変数を転送し戻すことだけなので、接続をホストに転送し戻すことのオーバヘッドは最低限に抑えられる。ホスト処理ユニット21は、(例えば統計のために)必要とされる場合、DELEGATED変数についてNIC 53に問い合わせる。
トランスポート層500のためのCONST変数は、宛先ポート、送信元ポート、「気付(care-of)」アドレスが変化する可能性がある場合にモバイルIPが存在することを示すフラグ、SENDウィンドウスケールファクタおよびRECVウィンドウスケールファクタ、ならびにネットワーク層502のためのNICハンドルを含む。トランスポート層500のためのCACHED変数は、TCP変数およびIP変数である。TCP変数は、有効MSS(Effective MSS)、NIC 53によって受信指示にコピーされるバイトの数、ネーグリング(Nagling)をオフにするフラグ、キープアライブ(Keep-Alive)が必要であることを示すフラグ、およびキープアライブ設定(すなわち、間隔、プローブの数、デルタ)を含む。IP変数は、TOSおよびTTLを含む。DELEGATED変数は、現在のTCP状態、次のRECV(すなわちRCV.NEXT)のシーケンス番号、受信ウィンドウサイズ(RCV.WND)、最初の送達確認なしのデータ(First Un-Acked Data)のシーケンス番号(SND.UNA)、次のSENDのシーケンス番号(SND.NEXT)、これまで送信された最大のシーケンス番号(SND.MAX)、最大の送信ウィンドウ(MAX_WIN)、現在の輻輳ウィンドウ(CWIN)、スロースタート閾値(SSTHRESH)、平滑化RTT(8*A)、デルタ(8*D)、現在の再送カウント、次の再送についての残存時間、およびエコーされるタイムスタンプを含む。
ネットワーク層502のためのCONST変数は、(IPv4またはIPv6のための)宛先IPアドレスおよび(IPv4またはIPv6のための)送信元宛先IPアドレスを含む。ネットワーク層502のためのCACHED変数は、フレーム化層504のためのNICハンドルを含む。ネットワーク層502のためのDELEGATED変数は、IPパケットID開始値を含む。フレーム化層504のためのCACHED変数は、ARPアドレス、およびヘッダのフォーマット(例えば、LLC/SNAP[Logical Link Control/Sub−Network Access Protocol]またはDIX[Digital、Intel、Xerox])を示すフラグを含む。
ネットワーク層状態は、複数の接続の間で共有でき、フレーム化層状態は、複数の経路(例えばIPエイリアス)の間で共有できるので、トランスポート層状態は、ネットワーク層のためのハンドルを含み、ネットワーク層状態は、フレーム化状態へのハンドルを含む。この階層構造は、いくつかの理由のために維持される。IP ID名前空間は、すべてのオフロードされた接続にわたって、経路毎に管理されなければならないので、接続は、ネットワーク層のためのNICハンドルを必要とする。ルート更新は次のホップアドレスを変更することができ、その結果、新しいMACアドレスをポイントすることができるので、経路は、フレーム化層のためのNICハンドルを必要とする。階層はまた、NICによって維持される必要がある状態の量を縮約する。例えば、IPv4のためのARP更新は、IPアドレスからMACアドレスへのマッピングを変更することができる(例えば、サーバ上でフェイルオーバされるインタフェース)。ホストは、キャッシュされた変数としてMACアドレスを維持し、その結果、ホストは、キャッシュされた状態を1回だけ更新すればよく、すべての接続は、新しいインタフェースに引き継がれる。
TCP接続がオフロードされると、NIC 53は、NIC 53が送信するパケットのパケット識別子(例えばIP ID)の割り当てを担う。IP IDは、インタフェース毎または層状態オブジェクト毎にオフロードされる。NIC 53には、IP ID名前空間の一部が割り当てられる。一実施形態では、NIC 53には、IP ID名前空間全体の半分が割り当てられ、ネットワーク状態がNIC 53に渡されるときに使用する、IPパケットID開始値が与えられる。NIC 53は、以下の公式を使用して、NIC 53が送信するIPパケット上でIP IDを生成する。Cur.sub.−−IPID=[(Start.sub.−−IPID_For_This_Path)+(Counter_For_This_Path)mo−d32k]mod 64K Counter_For_This_Path=Counter_For_This_Path+1
オフロードされた接続がアップロードされたか、または無効化された場合、NIC 53は、NIC 53が使用する次のIPID値をネットワーク層に転送し、次に発生するオフロードのために格納し、ホスト処理ユニット21は、割り当てられたIP ID名前空間の一部を使用し続ける。ホスト処理ユニット21は、最大限のIP ID名前空間を使用することができるが、オフロードが発生するたびに、カウンタが設定されなければならない。
NIC 53は、データが受信された順番で、データを受信バッファ内に配置し、オフロードされた接続についてポストされた順番で、アプリケーションバッファを満たす。多くのアプリケーションは、受信バッファをポストする前に、受信指示を待つ。一実施形態では、NIC 53は、グローバルなバッファプールを有し、接続のためにデータが到着したが、アプリケーション受信バッファがポストされていない場合に使用する。グローバルなバッファプールは、オフロードされた接続にわたって使用され、1)順序が狂ったTCP伝送に対する対処、2)IPデータグラムのデフラグメント、3)アプリケーションがゼロコピーアルゴリズムには小さ過ぎるバッファをポストしている場合に、ゼロコピーアルゴリズムで以外のバッファコピーアルゴリズムを実行するために使用することができる。あるいは、リソースの効率的な使用が問題とならない場合、接続毎のバッファプールを使用することもできる。しかし、NICが接続毎のバッファプールをサポートしない場合、またはシステムリソースが不足している(例えば、メモリ内にアプリケーションバッファを確保するにはリソースが十分でない)場合は、グローバルなバッファプールが使用される。
ここで図8を参照すると、接続がNIC 53にオフロードされると、NIC 53への2つの経路が存在することとなる。第1の経路は、NDISミニドライバ510を通って、フレーム化層504、ネットワーク層502、およびトランスポート層500に到る。第2の経路は、オフロードされた接続808を通り、これはチムニと呼ばれる。ホストコンピュータの観点からすれば、2つの経路について、通信の点ではすべてが同じである。キャッシュされた状態変数は、先に示したように、NIC 53のキャッシュされた状態変数を更新する処理ユニット21を用いて、2つの経路を同期させる。キャッシュされた変数の更新は、矢印802、804、806によって示されている。
到着データパケットが到着したとき、NIC 53は、到着データパケットがオフロードされた経路を通過するか、それともオフロードされていない経路を通過する(すなわち、NDISミニドライバ510およびレイヤ504、502、500のNDIS経路を通る)か、を判定する。一実施形態では、NIC 53は、送信元TCPポート番号および宛先TCPポート番号、送信元IPアドレスおよび宛先IPアドレス、ならびにプロトコルタイプに対してハッシュ関数を実行することによって、どちらの経路に到着データパケットを送るべきか判定する。ハッシュがオフロードされた接続パラメータと一致する場合(すなわち、ハッシュバケットチェーンが探索され、接続のすべてのタプルについて正確な一致が生じる場合)、チムニ808が使用される。ハッシュがハッシュインデックスと一致しない場合、ネットワークスタック502を通るオフロードされていない経路が使用される。キャッシュされた状態を更新する制御メッセージが、ホストによって処理される。これによって、NIC 53は、ICMP、DNS、およびRIPメッセージなど、オフロードされた接続を除いて、どのような制御メッセージも処理する必要がなくなる。
先に述べたように、Windows(登録商標)または類似の階層化ネットワークモデルにおけるデータ伝送の基本単位は、データパケットである。Windows(登録商標)環境では、データパケットは、NDISパケットと呼ばれる。各パケットは、スタックの最上位(すなわちISOスタックのレイヤ5)から最低位のソフトウェアレイヤ(すなわちISOスタックのレイヤ2)まで移動する。したがって、パケットは、データの送信中およびデータの受信中にレイヤを通過するとき、各レベルにわたって共通のデータ構造を定義する。例として、図10は、パケットがそれぞれのレイヤを通過して、イーサネット(登録商標)NICとして900で示されるNICまで下るときに、パケットによってたどられる経路を示している。上で述べたように、トランスポートドライバ928は、送信元アプリケーションからデータを受け取り、それを下位のプロトコルに準拠するパケット形式でパッケージ化し、その後、パッケージ化したパケットを、NDISインタフェース926を介してより下位のレベルのデバイスドライバ916に転送する。加えて、トランスポートプロトコルは、パケットに対して他の機能(例えばチェックサム計算など)を実行することができる。あるいは、図10に示されるIPセキュリティ機能1044(例えば、暗号化および/またはメッセージダイジェスト計算)などの追加機能をパケットに対して実行する他の機能コンポーネントが、ネットワーク層またはデータリンク層に存在することができる。
一実施形態では、データパケット1042は、コンピューティングタスクをNICハードウェア900などの周辺機器にオフロードする手段となる。例えば、図10では、アプリケーションデータ1040は、ネットワークモデルの上位レイヤから、TCP/IP 928などの適切なトランスポートプロトコルドライバに渡される。ドライバは、データを適切なデータパケット1042に再パッケージ化する。その後、この特定のデータパケット1042に対してどのような追加機能が実行されようとも、それに応じて、パケット拡張と呼ばれる事前定義されたデータ構造をデータパケットに追加する機能コンポーネントが含まれる。以下でさらに詳細に説明されるように、パケット拡張の内容は、データパケットがNIC 53に到達したときに、1つのタスクまたは複数のタスクのどれを、データパケットに対して実行するか指示する。データパケット1042がネットワークドライバ916に到達したとき、NIC 53によってどのタスクを実行するかを確認するために、このパケット拡張の内容が、ドライバ916によって問い合わされる。その後、ドライバ916は、パケット拡張の内容を介して要求された機能タスクが何であろうとも実行できるように、NIC上でハードウェアを制御/操作する。
例えば、図10では、データパケット1042は、ソフトウェアコンポーネント1044に渡され、ソフトウェアコンポーネント1044は、別途実装することができ、またはパケット拡張をパケット1042に付加するトランスポートプロトコルドライバ自身の一部として実装することができる。オフロードされる特定のタスクに応じて、データがパケット拡張内に含まれる。例えば、IPセキュリティ機能が実装される場合、指定された暗号鍵に従ってNIC 53がデータパケットを暗号化すべきであることを示すデータが含まれるだろう。もちろん、ソフトウェアコンポーネント1044は、上で説明したような多くの機能のいずれか1つが、ネットワーク層に存在するソフトウェアコンポーネントによる代わりに、ハードウェアレベルで実行されるように、事前定義されたデータを付加することができる。デバイスドライバ916は、パケット拡張から情報を取り出し、その後、NIC 53において指定されたタスクを起動する。
図11は、データパケット1042の一般的な構造の一実施形態を示している。パケット1042は、使用されるネットワーク環境そのものに応じて、任意のフォーマットをとることができるが、Windows(登録商標)環境では、パケットは、NDISに従ってフォーマットされ、協同するデバイスドライバおよび協同するプロトコルドライバによって目的が定義されるフラグ、パケットに関連するOut−of−band data(OOB)の格納のための領域、パケットの長さに関する情報、およびパケットのデータ内容に関するメモリ記憶場所を指示するポインタなどの情報を含む。
さらに、図11は、タスクオフロードを識別するためにNDISデータパケットに付加される追加のデータ構造フィールドである、パケット拡張1150を示している。説明されるように、宛先NICにオフロードされる特定の1つのタスクの識別、または特定の複数のタスクの識別のために必要な情報を含むデータ構造を定義するのは、このパケット拡張1150である。好ましい実施形態では、タスクオフロードタイプ(例えば、チェックサム、暗号化/復号化など)毎に、事前定義されたデータフィールドが、パケット拡張1150内に含まれる。このデータフィールドは、(チェックサムなどの)特定の機能が実行されることを指示するだけの、1つの制御フラグの型または複数の制御フラグの型を容易に取ることができ、または、情報は、タスクをどのように実行すべきかをさらに定義するデータ構造を指示するポインタの型を取ることができる。
NIC 53は、添付したパケットのみに適用するように、パケット拡張1150内のタスクオフロード制御フィールドを認識するように構成することができる。したがって、例えば、NIC 53がチェックサム操作を実行することを示すフラグを特定のパケットが含む場合、NIC 53は、添付したパケットのみにチェックサム操作を実行する。しかし、与えられたパケットにおいてそのようなフラグが存在しない場合、NIC 53は、そのパケットに対してチェックサム操作を実行しない。あるいは、NIC 53が別途命令されるまで、NICはネットワーク上に送信されたこのパケットおよびすべての後続のパケットに対して、オフロードされたタスクを実行することを、パケット拡張1150内のタスクオフロード制御フィールドは指示できる。
パケット拡張1150は、どのタスクを実行するかを、受信機構のNIC機構に命令することができる。例えば、パケット拡張は、復号化、チェックサム操作、パケット分類、サービス妨害攻撃に対する防御としてのパケットフィルタリング、パケットの再構築、およびパケット拡張を実行するようにNICを構成できる他の任意の受信機能などの、ネットワークからパケットを受信したときに適切な一定の機能を、受信機構NICが実行することを、NICに命令することができる。もちろん、送信機構は、受信機構NICのタスクオフロード機能を知らない可能性がある。受信機構NICが要求された機能を実行できない場合、受信機構CPUが、代わりにその機能を果たすだろう。したがって、送信機構は、受信機構においてNICが特定のパケットに対して何を行うかについて、一部の制御を有することができる。
加えて、送信機構は、パケットを受信するためにNIC 53が機能するとき、NIC 53を制御するために、パケット拡張を使用することもできる。例えば、ネットワーク上に送信される特定のパケットは、NIC 53がパケットを受信したときに、NIC 53がパケットの復号化を実行するという、NIC 53への命令を含む、パケット拡張を含むことができる。この場合、前記命令はネットワークから受信したパケットに対して機能を実行するためのものであるので、前記命令はネットワーク上に送信されるパケットには適用されない。したがって、この場合、ネットワーク上に送信されるパケットのためのパケット拡張は、パケットを受信するときに、どの受信機能がNIC 53にオフロードされるかを制御するための機構としての機能を果たす。送信機構は、パケットを送信するときは常に、パケット毎にNIC 53の受信機能を制御する機会を有する。
図11に示された例をさらに参照すると、パケット拡張1150は、NIC(例えば、NIC 53)にオフロードされた送信機能を制御する多くのデータフィールド1151から1153、およびNIC(例えば、NIC 53または受信機構のNIC)にオフロードされた受信機能を制御する多くのデータフィールド1154から1158を含む。
例えば、パケット拡張1150は、NIC 53がチェックサム操作を実行することを示すデータフィールド1151を含む。これは、送信NIC 53自身が、付加されたパケットに対してチェックサム操作を実行することを、送信NIC 53に指示する。
パケット拡張1150はまた、パケットデータのSSL暗号化もしくはパケットデータのIPSec暗号化、および/またはメッセージダイジェストの計算に関連して実行されるようなセキュリティ機能を、NIC 53が実行すべきであることを指示するために、セキュリティ機能データフィールド1152も含むことができる。このタイプのセキュリティタスクのため、フィールド1152は、データ構造(例えばデータ構造1160)を含むメモリ記憶場所を指示するポインタを好ましくは含み、同様に、そのデータ構造が、暗号化および/またはメッセージダイジェスト機能の実行に関する情報を含む。ある状況下では、関連するデータを有するメモリ記憶場所を指示するポインタを含むことは、パケット拡張自身の中に実際のデータを格納することに勝る利点を有する。
図11を参照すると、チェックサムデータフィールド1154は、チェックサム計算が送信機構で実行されたすべての受信パケットについて、データがNIC 53へ行く途中で変更されていないことを確認するために、NIC 53がチェックサム計算を実行することを指示する。後のチェックサムフィールドによってはっきりと違反されない限り、このチェックサムフィールド1154は、無期限に、または与えられた期間の間、すべてのパケットのためのチェックサム受信機能を制御することができる。
パケット拡張は、パケットデータのSSL復号化もしくはパケットデータのIPScc復号化、および/またはメッセージダイジェストの計算に関連して実行されるようなセキュリティ機能を、パケットが受信されたときに、NIC 53が実行することを指示する、セキュリティフラグ1155も含むことができる。このタイプのセキュリティタスクのため、フィールド1155は、データ構造(例えばデータ構造1160)を含むメモリ記憶場所を指示するポインタを好ましくは含み、同様に、そのデータ構造が、暗号化および/またはメッセージダイジェスト機能の実行に関する情報を含む。
パケット拡張はまた、受信したパケットを大量データ(bulk data)に構築するようNIC 53に命令するアセンブリデータフィールド1156、上述したように、サービス品質のために各パケットを分類するようNIC 53に命令する分類フィールド1157、
および上述したように、DOS攻撃の特徴について到着パケットをフィルタリングするためのDenial of Service(DOS)攻撃フィルタフィールド1158も含むことができる。パケット拡張1150はまた、受信機構NICが、攻撃されたパケットに対して実行することが意図された、フラグ1154〜1158に類似した受信機能データフィールドを含むことができる。
一実施形態では、パケット拡張1150内に含まれる情報は、パケット1142が送信された特定のデバイスドライバによって問い合わされる。例示的な実施形態において説明されるWindows(登録商標)環境では、このタイプの機能は、適切なNDISファンクション呼び出しを行うことによって、好んで実行される。例えば、パケットのためのパケット拡張1150のメモリ記憶場所を指示するポインタを返す、事前定義されたNDIS機能への呼び出しを実行することができる。その後、デバイスドライバソフトウェアは、どのタスクを実行すべきかを識別することができ、オフロードされたタスクに応じて、適切な方法で、ドライバの対応するNICハードウェアを実行/操作することができる。
コンピュータプロセッサからハードウェア周辺機器にコンピューティングタスクをオフロードするために実際のデータパケットを利用することは、多くの理由で有利である。例えば、トランスポートドライバは、パケット毎に周辺機器の機能を利用することができる。これによって、タスクを動的にダウンロードすることが可能になり、周辺機器の機能を必要に応じて使用することができる。したがって、コンピュータシステムについての処理オーバヘッドが特定の時点において低い場合、あるタスクを、従来の方式によりコンピュータプロセッサ上で実行するほうが望ましいことがある。あるいは、他のコンピューティングタスクによってCPUに重い負荷がかかっている場合、CPUは、必要なパケット拡張をデータパケットに付加するだけで、周辺機器にタスクをオフロードすることができる。
別の利点は、単一のパケットによって複数のタスクをオフロードし、実質的に多くの操作を一度に「バッチ処理」する能力である。例えば、コンピュータプロセッサが、チェックサム操作または暗号化操作を実行する場合、データフィールド全体をメモリ記憶場所にロードしなければならず、その後で、操作を、すなわち、チェックサムの計算またはパケットデータの暗号化を完了することができる。さらに、階層化ネットワークモデルのため、一度にただ1つの操作しか実行できず、その結果、複数回にわたってデータをメモリにコピーする必要がある。しかし、パケット単位の手法は、1つのパケットで複数のタスクをオフロードすることを可能にする。したがって、ハードウェア周辺機器は、ハードウェアの能力に応じて、データに対して単一パスで2つ以上の操作を実行することができ、それによって、コンピュータシステムのスループットおよび効率を大幅に高めることができる。
上記の方式は、特定のNICにオフロードされるタスクを指定する能力に関連して特に役立つが、他の方法では、パケット単位の情報転送も使用できることが理解されよう。例えば、特定のNICが所定の時間にパケットの配信をスケジュールすることが可能である場合、NICハードウェアによってパケットをどのように、および/または、いつ送信すべきかを識別する情報を渡すために、パケット拡張データ構造を使用することができる。
一実施形態では、トランスポートプロトコルドライバが、特定のタスクをNICにオフロードするために、パケット拡張をデータパケットに付加する前に、2つの追加機能が最初に実行される。様々な処理能力を各々が有する、多くの異なるタイプのハードウェア周辺機器が存在する場合において、本開示の実施形態は、トランスポートドライバが、コンピュータシステムに接続された周辺機器のタスクオフロード機能について最初に問い合わせることができる手段を望ましくは提供する。これらの機能が確認されると、その後、トランスポートプロトコルドライバは、関心のあるこれらのタスクを設定し、または有効にすることができる。有効にされると、以降は、上述した方法で、パケット単位に、指定されたタスクを利用することができる。
リモートアクセスプロトコルのためのハードウェアアクセラレーション
言及したように、リモートアクセスおよびターミナルサービスは一般に、リモートデスクトッププロトコル(RDP)などのプロトコルを使用するデスクトップ仮想化を必要とする。本開示はRDPプロトコルに関して説明されるが、開示される原理は、仮想ネットワークコンピューティング(VNC)およびCitrix(登録商標) XenApp(登録商標)など、リモートアクセスサービスを提供する任意のシステムに容易に適用できることを当業者は理解されよう。
RDPなどのプロトコルは、グラフィック表示情報をリモートコンピュータからユーザに転送することによって、また入力をユーザからリモートコンピュータに転送し、リモートコンピュータにおいて入力を局所的に投入できるようにすることによって、リモートコンピュータシステムとのユーザ対話を円滑化するように設計される。このプロトコルはまた、ユーザコンピュータ上のコンポーネントとリモートコンピュータ上で動作するコンポーネントの間で専用の通信を行なうことを可能にする、拡張可能なトランスポート機構を提供する。そのようなプロトコルは、仮想デスクトップを提示し、一般にグラフィックスを扱い、USB、プリンタ、キーボード、およびマウスなどのデバイストラフィックを処理する。ターミナルサーバは、一般に複数のリモートクライアントセッションを提供する。ターミナルサーバからのグラフィックスデータは、グラフィックスプリミティブ形式で符号化され、暗号化されるか、またはサーバでレンダリングされる必要があり、結果のビットマップは、圧縮および暗号化され、クライアントに伝送される必要がある。
符号化操作、レンダリング操作、および暗号化操作は、本来はきわめてコンピュータ集約型であり、一般に高いCPU使用率を必要とする。豊富なデスクトップ仮想化技術を提供するため、対応するグラフィックス忠実度は、豊富であるべきである。符号を最適化するよりも、RDP処理中の必要なときにレンダリングタスクおよび/または圧縮タスクを実行できる追加のハードウェアリソースを利用することによって、レンダリングおよび暗号化に関連するホストCPUサイクルおよびネットワーク使用率を低減することができる。加えて、データが伝送される前に、CPU集約型リモートデスクトップ操作をネットワークプロセッサまたは他の周辺機器にオフロードすることによって、ホストCPU処理を低減ことができる。上述したように、チムニオフロードとも呼ばれるタスクオフロードは、チェックサム、大きな送信セグメンテーション、IPsec、およびTCB状態処理などのTCP/IP処理を、インテリジェントネットワークインタフェースにオフロードするために使用することができる。したがって、上で説明されたチムニオフロードの原理を利用して、RDPなどのプロトコルを使用するリモートアクセスサービスの提供に関連するタスクの一部または全部を扱うほうが有利である。
図12は、リモートデスクトップ仮想化を提供するための例示的アーキテクチャを示している。リモートデスクトッププロセスは一般に、リモートデスクトップデータパケットを送信および受信するためにトランスポート層インタフェース(TLI)を利用する、一般にはTCPである、トランスポートプロバイダ上に積み重ねられる。例えば、1つまたは複数のアプリケーション1200は、グラフィックスAPIおよび媒体APIを呼び出すことができ、それを受けて、グラフィックスAPIおよび媒体APIは、リモートアクセス処理スタック1210によってさらに処理されるグラフィックス出力を生成する。その後、ネットワーク移送ドライバ1220が、データパケットの伝送を処理することができる。
図13は、リモートデスクトップ処理機能のさらなる例示的な図を提供する。1つまたは複数のアプリケーションは、サーバ上で動作し、クライアントディスプレイに表示するためのグラフィックスを生成することができる。例えば、アプリケーション1 1310およびアプリケーション2 1312は、グラフィックススタック1318によって処理されるグラフィックスを生成することができる。グラフィックススタック1318は、グラフィカルオブジェクトを表現し、それらを出力デバイスに伝送することを担う、様々なグラフィックスコンポーネントを含むことができる。このようなコンポーネント例は、グラフィックスデバイスインタフェース(GDI)1314およびDirectX(DX)1316を含む。
このようなアプリケーションのグラフィックス出力は、リモートアクセスプロトコルスタック1320によって捕捉され、コマンド命令1322およびビットマップ1324としてさらに処理される。コマンド命令または描画命令は、グラフィック画像を生成するのに必要な操作を符号化するため、または特定のキャッシュを操作するために使用される。プライマリ描画命令は一般に、描画操作を符号化するために使用される。各プライマリ命令は、フィールド圧縮アルゴリズムが適用される1組のフィールドに体系化することができる。これらのアルゴリズムは、命令が最後に送られて以降、フィールドが変更されていない場合は、そのフィールドの送信を排除するように、またあるフィールドタイプがより小さなサイズのデータによって表すことができる場合は、そのフィールドタイプのためのフィールド符号化のサイズを削減するように設計することができる。プライマリ命令例は、長方形および線などのグラフィックオブジェクトを描画すること、ならびにテキストの断片を表示することを含む。セカンダリ描画命令は、キャッシュを管理するために使用することができる。
ビットマップ処理1324は、キャッシング1326および圧縮1328をさらに含む。キャッシングプロセスは、タイリング機能1330およびハッシュ計算機能1332をさらに含むことができる。リモートアクセスプロトコルは、ビットマップ、カラーテーブル、および文字などの描画プリミティブを格納するために、キャッシュを使用することができる。キャッシング技法の使用は、複数の描画操作で使用されるアイテムをサーバからクライアントに送信するのが一度だけであることを保証することによって、データトラフィックを低減することができる。
ビットマップ処理1324およびコマンド命令処理1322の出力は、符号化された命令1334として組み合わせることができる。リモートアクセスプロトコルは、データを圧縮するために大量圧縮1336を使用することができる。
データのための大量圧縮を利用することに加えて、リモートアクセスプロトコルは、サーバからクライアントに送信されるビットマップデータの圧縮を実行するために、ランレングス符号化(RLE)規則の変形を使用することもできる。この時点で、データをフレーム化し(1338)、データを暗号化し(1340)、ネットワーク(1342)を介して、データを伝送することができる。
上述したように、TCPなどの機能は、上述したチムニオフロードの技法を利用して、周辺機器にオフロードすることができる。上述したように、RDPなどのプロトコルに関連するグラフィックス画像のリモート処理は、更新されたビットマップ画像をサーバからクライアントに継続的に送信することによって達成され、これはコンピュータ集約的なタスクである。したがって、本開示は、上述のリモートアクセス処理タスクを包含するように、チムニオフロードの概念を拡張する。様々な実施形態では、リモートデスクトップ仮想化に関連する1つまたは複数の処理タスクは、チムニにオフロードすることができる。一部の実施形態では、リモートアクセス処理タスクのサブセットをオフロードすることができる。例えば、一部の実施形態では、ビットマップ圧縮1328、キャッシング1326、および大量圧縮1336の1つまたは複数は、開示したオフロードの原理を使用して処理するために、NICなどの周辺機器にオフロードすることができる。他の実施形態では、リモートアクセス処理の大部分または全部を、例えば、図13において説明したタスクを、周辺機器にオフロードすることができ、ホストプロセッサは、制御機能および管理機能のみを保持する。
図14および図15は、処理1400、処理1402、処理1404、処理1406、処理1408、処理1410、処理1412、処理1414、および処理1416を含む、ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するための例示的な操作手順を示しており、リモートアクセスデータユニットを送信および受信するために、トランスポート層インタフェースが使用される。図14を参照すると、処理1400は、操作手順を開始し、処理1402は、周辺機器が1つまたは複数の指定されたリモートアクセス処理タスクを実行するためのタスクオフロード機能を含むことを判定することを示している。処理1404は、後続のデータユニットと共に使用されるコンテキスト情報を含む、周辺機器が1つまたは複数の処理タスクを実行するという指示を、周辺機器に送ることを示している。処理1406は、1つまたは複数のリモートアクセス処理タスクを、周辺機器に実行させることを示している。
処理1408は、一実施形態では、リモートアクセスがリモートデスクトッププロトコル(RDP)を使用して実行されることを示している。処理1410は、処理タスクが部分的なRDP処理を提供できることを示している。あるいは、処理1412は、処理タスクが完全なRDP処理を提供することを示している。処理1414は、例示的な処理タスクはRDPビットマップ圧縮を含むことを示している。処理1416は、例示的な処理タスクはRDP大量圧縮を含むことを示している。
図15に進むと、処理1502は、処理タスクがRDPキャッシングを含むことを示している。処理1504は、処理タスクが、コンピュータシステムの進行中の要求に応じて、選択的に周辺機器にオフロードされることを示している。処理1504は、タスクオフロードバッファ内の少なくとも1つのフラグインジケータを設定することによって、タスクオフロード機能を使用可能にすることを示している。一実施形態では、各周辺機器ドライバ(例えば図9を参照)は、そのデバイスドライバおよびそれに対応する周辺機器のためのタスクオフロード機能を各々が含む、事前定義されたタスクオフロードバッファロケーションを、それに関連付けておくことができる。タスクオフロードバッファは、周辺機器およびそのデバイスドライバによってサポートされる特定のタスクを識別することができ、サポートされる個々のタスクに固有の任意の情報も含む。一実施形態では、デバイスドライバのタスクオフロードバッファの内容は、NDISファンクション呼び出しによって検索することができる。処理1508は、一実施形態では、周辺機器がネットワークインタフェースカード(NIC)であることを示している。
処理1510は、データパケットを、階層型ネットワークモデルを介して転送できることを示している。処理1512は、データパケットはネットワークデータおよびパケット拡張データを含むことができることを示している。処理1514は、データパケットは、周辺機器が処理タスクのバッチを実行することを指示する。処理1516は、パケット拡張データが、少なくとも1つの処理タスクが周辺機器によって実行されることを示す少なくとも1つのデータフィールドを含むことを示している。
図16は、処理1600、処理1602、および処理1604を含む、リモートアクセス処理タスクを周辺機器にオフロードするための例示的な操作手順を示している。図16を参照すると、処理1600は、操作手順を開始し、処理1602は、デバイスがリモートアクセスプロトコル処理タスクを実行することを指示するデータパケットを、周辺機器に送ることを示している。処理1604は、処理タスクを前記プロセッサに実行させることを示している。
上記で言及した態様のいずれも、方法、システム、コンピュータ可読媒体、または任意のタイプの製造物で実施することができる。例えば、図17によれば、コンピュータ可読媒体は、リモートアクセス処理タスクを周辺機器にオフロードためのコンピュータ実行可能命令を格納することができる。このような媒体は、周辺機器がタスクオフロード機能を含むことを判定するための第1の命令サブセット1710、周辺機器が前記処理タスクの1つを実行するという指示を周辺機器に送るための第2の命令サブセット1712、および1つまたは複数のリモートアクセス処理タスクを周辺機器に実行させるための第3の命令サブセット1714を含むことができる。本明細書で開示される他の様々な態様を表現するために追加的な命令セットが使用できること、また現在開示された3つの命令サブセットは、本開示によれば細部において異なり得ることが当業者には理解されよう。
例えば、命令には、リモートデスクトッププロトコル(RDP)を使用して実行される前記リモートアクセスのための命令1716をさらに含むことができる。命令には、キャッシングおよび大量圧縮のための命令1718、多重化/フレーム化、暗号化、およびコマンド命令符号化のための命令1720、ならびにデータパケットを、階層型ネットワークモデルを介して転送するための命令1722をさらに含むことができる。
上述したように、本開示の主題の態様は、プログラムされたコンピュータ上で実行することができる。図1および以下の説明は、これらの態様を実行できる適切なコンピューティング環境の簡単な説明を提供することを意図している。図1のコンピュータシステムが、一部の実施形態において、図2〜図4のサーバおよびクライアントを達成できることを当業者は理解できよう。これらの例示的な実施形態では、サーバおよびクライアントは、図1で説明されたコンポーネントの一部または全部を含むことができ、ある実施形態では、サーバおよびクライアントは各々、本開示の特定の態様を実例化するように構成された回路構成を含むことができる。
本開示において使用される回路構成という用語は、専用ハードウェアコンポーネントを含むことができる。同一の実施形態または他の実施形態では、回路構成は、ファームウェアまたはスイッチによって機能を実行するように構成されたマイクロプロセッサを含むことができる。同一の実施形態または他の例示的な実施形態では、回路構成は、機能を実行するように動作可能なロジックを具現化するソフトウェア命令がメモリに、例えば、RAMおよび/または仮想メモリにロードされたときに構成することができる、1つまたは複数の汎用処理ユニットおよび/またはマルチコア処理ユニットなどを含むことができる。回路がハードウェアとソフトウェアの組み合わせを含む例示的な実施形態では、実装者は、ロジックを具現化するソースコードを書くことができ、ソースコードは、汎用処理ユニットによって処理できる機械可読コードにコンパイルすることができる。
図1は、本開示の態様と共に構成されるコンピューティングシステムの例を示している。コンピューティングシステムは、コンピュータ20など含むことができ、コンピュータ20は、処理ユニット21、システムメモリ22、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット21に結合するシステムバス23を含む。システムバス23は、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺機器のバス、およびローカルバスを含む、いくつかのタイプのバス構造のいずれかとすることができる。システムメモリは、リードオンリメモリ(ROM)24およびランダムアクセスメモリ(RAM)25を含む。基本入出力システム(BIOS)26は、スタートアップ中などにコンピュータ20内の要素間で情報を転送する助けとなる基本ルーチンを含み、ROM 24内に格納される。コンピュータ20は、図示されていないハードディスクから読み取り、ハードディスクに書き込むためのハードディスクドライブ27、リムーバブル磁気ディスク29から読み取り、または磁気ディスク29に書き込むための磁気ディスクドライブ28、およびCD ROMまたは他の光学媒体などのリムーバブル光ディスク31から読み取り、または光ディスク31に書き込むための光ディスクドライブ30をさらに含むことができる。一部の例示的な実施形態では、本開示の態様を具現するコンピュータ実行可能命令は、ROM 24、ハードディスク(図示されず)、RAM 25、リムーバブル磁気ディスク29、光ディスク31、および/または処理ユニット21のキャッシュ内に格納することができる。ハードディスクドライブ27、磁気ディスクドライブ28、および光ディスクドライブ30は、それぞれハードディスクドライブインタフェース32、磁気ディスクドライブインタフェース33、および光ドライブインタフェース34によってシステムバス23に接続される。ドライブおよび関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージをコンピュータ20に提供する。本明細書で説明した環境は、ハードディスク、リムーバブル磁気ディスク29、およびリムーバブル光ディスク31を利用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジ、ランダムアクセスメモリ(RAM)、およびリードオンリメモリ(ROM)など、コンピュータによってアクセス可能なデータを格納できる他のタイプのコンピュータ可読媒体も、動作環境において使用できることを当業者であれば理解されたい。
オペレーティングシステム35、1つまたは複数のアプリケーションプログラム36、他のプログラムモジュール37、およびプログラムデータ38を含む、多くのプログラムモジュールは、ハードディスク、磁気ディスク29、光ディスク31、ROM 24、またはRAM 25上に格納することができる。ユーザは、キーボード40およびポインティングデバイス42などの入力デバイスを介して、コマンドおよび情報をコンピュータ20に入力することができる。他の入力デバイス(図示されず)は、マイク、ジョイスティック、ゲームパッド、衛星用アンテナ、またはスキャナなどを含むことができる。上記および他の入力デバイスは、システムバスに結合されるシリアルポートインタフェース46を介して、しばしば処理ユニット21に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインタフェースによって接続することもできる。ディスプレイ47または他のタイプの表示装置も、ビデオアダプタ48などのインタフェースを介して、システムバス23に接続することができる。ディスプレイ47に加えて、コンピュータは、スピーカおよびプリンタなどの他の周辺出力デバイス(図示されず)も一般に含む。図1のシステムは、ホストアダプタ55、小型コンピュータシステムインタフェース(SCSI)バス56、およびSCSIバス56に接続される外部記憶デバイス62も含む。
コンピュータ20は、リモートコンピュータ49など、1つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク環境において動作することができる。リモートコンピュータ49は、別のコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイスまたは他の共通ネットワークノード、仮想マシンとすることができ、図1にはメモリ記憶デバイス50しか示されていないが、コンピュータ20に関連して上述した要素の多くまたはすべてを一般に含むことができる。図1に示された論理接続は、ローカルエリアネットワーク(LAN)51およびワイドエリアネットワーク(WAN)52を含むことができる。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
LANネットワーク環境において使用される場合、コンピュータ20は、ネットワークインタフェースまたはアダプタ53を介してLAN 51に接続することができる。WANネットワーク環境において使用される場合、コンピュータ20は、インターネットなどのワイドエリアネットワーク52上で通信を確立するためのモデム54または他の手段を一般に含むことができる。モデム54は、内蔵または外付けとすることができ、シリアルポートインタフェース46を介してシステムバス23に接続することができる。ネットワーク環境では、コンピュータ20に関連して示されたプログラムモジュールまたはそれらの一部は、リモートメモリ記憶デバイス内に格納することができる。示されるネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段が使用できることが理解されよう。さらに、本開示の主題についての多くの実施形態は、コンピュータシステムに非常によく適合すると想定されるが、本文書において、本開示をこのような実施形態に限定することは意図していない。
上述の詳細な説明は、例および/または動作図によって、システムおよび/またはプロセスの様々な実施形態について説明した。このようなブロック図および/または例が、1つまたは複数の機能および/または動作を含む場合、このようなブロック図または例の中の各機能および/または動作は、幅広いハードウェア、ソフトウェア、ファームウェア、または実質的にそれらの任意の組み合わせによって、個別におよび/または一括して実装できることが当業者には理解されよう。
本明細書で説明された主題についての特定の態様および実施形態が示され、説明されたが、本明細書の教示に基づいて、変更および修正を施すことができ、したがって、本明細書で説明された主題の真の主旨および範囲内にあるかのように、添付の特許請求の範囲は、このような変更および修正のすべてを包含することが当業者には明らかであろう。

Claims (15)

  1. ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するコンピューティングシステムにおいて、リモートデスクトップグラフィックス処理タスクをネットワーク周辺機器にオフロードする方法であって、前記タスクはグラフィックスレンダリング及び圧縮タスクを含み、前記方法は、
    前記ネットワーク周辺機器が、指定された一または複数のリモートデスクトップグラフィックス処理タスクを実行するためのタスクオフロード機能を含むことを判定することと、
    後続のデータユニットと共に使用されるコンテキスト情報を含む、前記ネットワーク周辺機器が前記一または複数のリモートデスクトップグラフィックス処理タスクを実行するという指示を、前記ネットワーク周辺機器に送信することと、
    前記一または複数のリモートデスクトップグラフィックス処理タスクを前記ネットワーク周辺機器に実行させることと
    を備え
    前記リモートデスクトップグラフィックス処理タスクは、さもなければ前記コンピューティングデバイスに実行されるタスクである、
    方法。
  2. 前記一または複数のリモートデスクトップグラフィックス処理タスクは、部分的なリモートアクセス処理を提供する請求項1に記載の方法。
  3. 前記一または複数のリモートデスクトップグラフィックス処理タスクは、完全なリモートアクセス処理を提供する請求項1に記載の方法。
  4. 前記一または複数のリモートデスクトップグラフィックス処理タスクは、ビットマップ圧縮処理を行う請求項1に記載の方法。
  5. 前記一または複数のリモートデスクトップグラフィックス処理タスクは、バルク圧縮処理を行う請求項1に記載の方法。
  6. 前記一または複数のリモートデスクトップグラフィックス処理タスクは、キャッシング処理を行う請求項1に記載の方法。
  7. 前記一または複数のリモートデスクトップグラフィックス処理タスクは、前記コンピューティングシステム、ネットワーク接続タイプ、およびリモートクライアントのうちの少なくとも1つの進行中の要求に応じて、前記ネットワーク周辺機器に選択的にオフロードされる請求項1に記載の方法。
  8. 記ネットワーク周辺機器に関連付けられたタスクオフロードバッファ内の少なくとも1つのフラグインジケータを設定することにより前記タスクオフロード機能をイネーブルするステップをさらに備えた請求項1に記載の方法。
  9. 前記ネットワーク周辺機器は、ネットワークインタフェースカード(NIC)である請求項1に記載の方法。
  10. 前記データユニットは、階層化ネットワークモデルを介して転送され、前記データユニットは、ネットワークデータおよびパケット拡張データを含むことを特徴とする請求項1に記載の方法。
  11. 前記データユニットは、前記ネットワーク周辺機器が前記リモートデスクトップグラフィックス処理タスクのバッチを実行することを指示し、前記パケット拡張データは、前記ネットワーク周辺機器によって実行されるために、少なくとも1つの前記リモートデスクトップグラフィックス処理タスクを示す少なくとも1つのデータフィールドを含む請求項10に記載の方法。
  12. ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するコンピューティングシステムであって、前記コンピューティングシステムは、リモートデスクトップグラフィックス処理タスクをネットワーク周辺機器にオフロードするように適合され、前記コンピューティングシステムは、
    少なくとも1つのプロセッサと、
    前記少なくとも1つのプロセッサに通信できるように結合された少なくとも1つのメモリとを含み、前記メモリは、前記プロセッサに、
    前記ネットワーク周辺機器によってビットマップ圧縮、バルク圧縮、またはキャッシングのうちの1つの処理を行うリモートデスクトップグラフィックス処理タスクを実行させることを指示するデータパケットを、前記ネットワーク周辺機器に送信させ、
    前記ネットワーク周辺機器に前記リモートデスクトップグラフィックス処理タスクを実行するためのタスクオフロード機能が含まれないと判定されたことに応答して、前記処理タスクを実行させる
    コンピュータ実行可能命令を格納していることを特徴とするコンピューティングシステム。
  13. ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するコンピューティングシステムにより実行されると、前記コンピューティングシステムに、請求項1ないし11いずれか一項に記載の方法のステップを実行させるコンピュータプログラム
  14. 前記タスクオフロード機能は、多重化/フレーム化、暗号化、およびコマンド命令符号化のうちの1つをさらに備える請求項13に記載のコンピュータプログラム
  15. 請求項13または14に記載のコンピュータプログラムを記憶したコンピュータ可読記憶媒体。
JP2011538616A 2008-11-26 2009-10-30 リモートデスクトッププロトコルのためのハードウェアアクセラレーション Active JP5442755B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/324,305 US8572251B2 (en) 2008-11-26 2008-11-26 Hardware acceleration for remote desktop protocol
US12/324,305 2008-11-26
PCT/US2009/062746 WO2010062679A2 (en) 2008-11-26 2009-10-30 Hardware acceleration for remote desktop protocol

Publications (3)

Publication Number Publication Date
JP2012510126A JP2012510126A (ja) 2012-04-26
JP2012510126A5 JP2012510126A5 (ja) 2012-12-13
JP5442755B2 true JP5442755B2 (ja) 2014-03-12

Family

ID=42197396

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011538616A Active JP5442755B2 (ja) 2008-11-26 2009-10-30 リモートデスクトッププロトコルのためのハードウェアアクセラレーション

Country Status (5)

Country Link
US (2) US8572251B2 (ja)
EP (1) EP2350861A4 (ja)
JP (1) JP5442755B2 (ja)
CN (1) CN102227718A (ja)
WO (1) WO2010062679A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022045449A1 (ko) * 2020-08-24 2022-03-03 오픈엣지테크놀로지 주식회사 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8453148B1 (en) 2005-04-06 2013-05-28 Teradici Corporation Method and system for image sequence transfer scheduling and restricting the image sequence generation
US20090249219A1 (en) * 2008-03-31 2009-10-01 Best Steven F Providing a Shared Desktop Interface of Multiple Computer Terminals
US8572251B2 (en) 2008-11-26 2013-10-29 Microsoft Corporation Hardware acceleration for remote desktop protocol
US9104406B2 (en) * 2009-01-07 2015-08-11 Microsoft Technology Licensing, Llc Network presence offloads to network interface
US8224885B1 (en) 2009-01-26 2012-07-17 Teradici Corporation Method and system for remote computing session management
US20100215052A1 (en) * 2009-02-20 2010-08-26 Inventec Corporation Iscsi network interface card with arp/icmp resolution function
US8397242B1 (en) * 2009-06-30 2013-03-12 Symantec Corporation System and method for managing operations within virtual machines
US9015333B2 (en) * 2009-12-18 2015-04-21 Cisco Technology, Inc. Apparatus and methods for handling network file operations over a fibre channel network
US9425986B2 (en) 2010-03-03 2016-08-23 Iwebgate Technology Limited System and method for multiple concurrent virtual networks
US8615014B2 (en) * 2010-03-03 2013-12-24 Iwebgate Technology Limited System and method for multiple concurrent virtual networks
CN102333065A (zh) * 2010-07-12 2012-01-25 戴元顺 云交互协议设计
US8726132B2 (en) 2010-12-14 2014-05-13 International Business Machines Corporation Checksum verification accelerator
KR20120072134A (ko) * 2010-12-23 2012-07-03 한국전자통신연구원 가상 데스크톱 가속 장치 및 방법
US8886699B2 (en) * 2011-01-21 2014-11-11 Cloudium Systems Limited Offloading the processing of signals
US8667157B2 (en) * 2011-07-29 2014-03-04 Hewlett-Packard Development Company, L.P. Hardware bus redirection switching
US8910273B1 (en) 2011-08-04 2014-12-09 Wyse Technology L.L.C. Virtual private network over a gateway connection
KR101467430B1 (ko) * 2011-12-12 2014-12-01 주식회사 케이티 클라우드 컴퓨팅 기반 어플리케이션 제공 방법 및 시스템
CN103491121B (zh) * 2012-06-13 2017-11-28 中兴通讯股份有限公司 一种支持双ip业务的ndis驱动方法和驱动系统
US10031782B2 (en) * 2012-06-26 2018-07-24 Juniper Networks, Inc. Distributed processing of network device tasks
US20140184613A1 (en) * 2013-01-01 2014-07-03 Doron Exterman Method for offloading graphic processing unit (gpu) processing tasks to remote computers
US9118596B2 (en) * 2013-02-28 2015-08-25 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Reducing fragmentation of packets in a networking environment
US9686323B1 (en) * 2013-03-14 2017-06-20 Teradici Corporation Method and apparatus for sequencing remote desktop connections
CN104252391B (zh) * 2013-06-28 2017-09-12 国际商业机器公司 用于在分布式计算系统中管理多个作业的方法和装置
US20150052280A1 (en) * 2013-08-19 2015-02-19 Emulex Design & Manufacturing Corporation Method and system for communications-stack offload to a hardware controller
US20150055456A1 (en) * 2013-08-26 2015-02-26 Vmware, Inc. Traffic and load aware dynamic queue management
WO2015044718A1 (en) * 2013-09-27 2015-04-02 Freescale Semiconductor, Inc. A selectively powered layered network and a method thereof
US9604139B2 (en) * 2013-11-11 2017-03-28 Amazon Technologies, Inc. Service for generating graphics object data
US9582904B2 (en) * 2013-11-11 2017-02-28 Amazon Technologies, Inc. Image composition based on remote object data
US9413830B2 (en) 2013-11-11 2016-08-09 Amazon Technologies, Inc. Application streaming service
US9578074B2 (en) 2013-11-11 2017-02-21 Amazon Technologies, Inc. Adaptive content transmission
US9805479B2 (en) 2013-11-11 2017-10-31 Amazon Technologies, Inc. Session idle optimization for streaming server
US9641592B2 (en) 2013-11-11 2017-05-02 Amazon Technologies, Inc. Location of actor resources
US9634942B2 (en) 2013-11-11 2017-04-25 Amazon Technologies, Inc. Adaptive scene complexity based on service quality
JP6404347B2 (ja) * 2013-12-20 2018-10-10 インテル・コーポレーション 実行オフロード
CN104951353B (zh) * 2014-03-28 2018-09-21 华为技术有限公司 一种对vnf实现加速处理的方法及装置
US9515931B2 (en) 2014-05-30 2016-12-06 International Business Machines Corporation Virtual network data control with network interface card
CN104133671B (zh) * 2014-06-30 2017-10-27 汉柏科技有限公司 一种数字处理设备的硬件接口屏蔽装置及方法
US9684364B2 (en) * 2014-12-09 2017-06-20 Intel Corporation Technologies for out-of-band power-based task scheduling for data centers
CN105740081A (zh) * 2014-12-12 2016-07-06 华为技术有限公司 客户端、usb设备及显示处理系统和方法
US9934019B1 (en) * 2014-12-16 2018-04-03 Amazon Technologies, Inc. Application function conversion to a service
US10320918B1 (en) * 2014-12-17 2019-06-11 Xilinx, Inc. Data-flow architecture for a TCP offload engine
CN104598298A (zh) * 2015-02-04 2015-05-06 上海交通大学 基于虚拟机当前工作性质以及任务负载的虚拟机调度算法
IL238690B (en) 2015-05-07 2019-07-31 Mellanox Technologies Ltd Network-based computational accelerator
WO2016186628A1 (en) * 2015-05-15 2016-11-24 Hewlett-Packard Development Company, L.P. Hardware bus redirection
US10237566B2 (en) 2016-04-01 2019-03-19 Microsoft Technology Licensing, Llc Video decoding using point sprites
US10511521B2 (en) 2016-08-03 2019-12-17 Anchorfree Inc. System and method for virtual multipath data transport
US10200249B1 (en) * 2016-12-09 2019-02-05 Amazon Technologies, Inc. Network traffic management for virtualized graphics devices
US11063879B2 (en) * 2017-04-12 2021-07-13 New York University Determining a receive window of a receiving device that reduces bufferbloat in a wireless communications system, such as that caused by TCP dynamics over millimeter wave links
JP6934758B2 (ja) * 2017-06-28 2021-09-15 アラクサラネットワークス株式会社 パケット中継装置およびパケット中継方法
US11178023B2 (en) * 2017-06-30 2021-11-16 Intel Corporation Data plane interface network quality of service in multi-tenant data centers
CN109508159A (zh) * 2017-09-12 2019-03-22 亿阳安全技术有限公司 录像文件以及录像生成的方法、相关设备以及存储介质
US10382350B2 (en) 2017-09-12 2019-08-13 Mellanox Technologies, Ltd. Maintaining packet order in offload of packet processing functions
US11005771B2 (en) 2017-10-16 2021-05-11 Mellanox Technologies, Ltd. Computational accelerator for packet payload operations
US11502948B2 (en) 2017-10-16 2022-11-15 Mellanox Technologies, Ltd. Computational accelerator for storage operations
US10841243B2 (en) 2017-11-08 2020-11-17 Mellanox Technologies, Ltd. NIC with programmable pipeline
US10708240B2 (en) * 2017-12-14 2020-07-07 Mellanox Technologies, Ltd. Offloading communication security operations to a network interface controller
US11409569B2 (en) * 2018-03-29 2022-08-09 Xilinx, Inc. Data processing system
US10761903B2 (en) * 2018-03-29 2020-09-01 Servicenow, Inc. Management instrumentation and discovery (MID) server support for executing automated flows within a cloud based system
US10977193B2 (en) * 2018-08-17 2021-04-13 Oracle International Corporation Remote direct memory operations (RDMOs) for transactional processing systems
US10754707B2 (en) 2018-08-08 2020-08-25 Intel Corporation Extending berkeley packet filter semantics for hardware offloads
US10824469B2 (en) 2018-11-28 2020-11-03 Mellanox Technologies, Ltd. Reordering avoidance for flows during transition between slow-path handling and fast-path handling
KR102304584B1 (ko) * 2018-12-18 2021-09-24 한양대학교 에리카산학협력단 데이터 플레인 가속화 기술과 하드웨어 암호화 처리 장치를 이용한 초고속 암호 통신 시스템 및 그 방법
US10958597B2 (en) * 2019-02-25 2021-03-23 Cisco Technology, Inc. General purpose ring buffer handling in a network controller
CN109802872B (zh) * 2019-03-19 2021-07-30 北京信而泰科技股份有限公司 一种报文捕获方法、装置及设备
US11184439B2 (en) 2019-04-01 2021-11-23 Mellanox Technologies, Ltd. Communication with accelerator via RDMA-based network adapter
CN111861854A (zh) * 2019-04-30 2020-10-30 华为技术有限公司 用于图形渲染的方法及装置
US11159655B1 (en) * 2020-04-27 2021-10-26 Nvidia Corporation Techniques for enhancing the UDP network protocol to efficiently transmit large data units
CN111625585B (zh) * 2020-05-22 2021-08-31 中科驭数(北京)科技有限公司 硬件加速数据库的访问方法、装置、主机及存储介质
IL276538B2 (en) 2020-08-05 2023-08-01 Mellanox Technologies Ltd A cryptographic device for data communication
CN114095153A (zh) 2020-08-05 2022-02-25 迈络思科技有限公司 密码数据通信装置
US11290458B1 (en) * 2020-09-25 2022-03-29 Dell Products L.P. Smart peripheral device for an information handling system
US20220103488A1 (en) * 2020-09-28 2022-03-31 Vmware, Inc. Packet processing with hardware offload units
US20210150074A1 (en) * 2020-12-23 2021-05-20 Jose Niell Vm encryption of block storage with end-to-end data integrity protection in a smartnic
CN114756730A (zh) * 2020-12-29 2022-07-15 华为技术有限公司 一种使用网络设备进行数据查询的系统、方法、及装置
JP7104201B2 (ja) * 2021-03-19 2022-07-20 アラクサラネットワークス株式会社 パケット中継装置およびパケット中継方法
US11934658B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Enhanced storage protocol emulation in a peripheral device
US11934333B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Storage protocol emulation in a peripheral device

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2693444B2 (ja) 1987-07-02 1997-12-24 キヤノン株式会社 ドアホン
US6275867B1 (en) * 1995-09-12 2001-08-14 International Business Machines Corporation Operation-partitioned off-loading of operations in a distributed environment
US6427171B1 (en) * 1997-10-14 2002-07-30 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6904519B2 (en) * 1998-06-12 2005-06-07 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
US6141705A (en) * 1998-06-12 2000-10-31 Microsoft Corporation System for querying a peripheral device to determine its processing capabilities and then offloading specific processing tasks from a host to the peripheral device when needed
CN101383949B (zh) 1998-07-17 2011-08-03 联合视频制品公司 通过远程访问链接选择节目以便记录的系统及其方法
JP2000057106A (ja) * 1998-08-12 2000-02-25 Victor Co Of Japan Ltd 分散処理システム
US6788704B1 (en) * 1999-08-05 2004-09-07 Intel Corporation Network adapter with TCP windowing support
JP2001177632A (ja) 1999-12-17 2001-06-29 Mitsubishi Electric Corp 移動体通信端末
US7203741B2 (en) * 2000-10-12 2007-04-10 Peerapp Ltd. Method and system for accelerating receipt of data in a client-to-client network
US20030046330A1 (en) * 2001-09-04 2003-03-06 Hayes John W. Selective offloading of protocol processing
JP4383700B2 (ja) 2001-12-28 2009-12-16 株式会社東芝 携帯通信端末
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack
US7181531B2 (en) * 2002-04-30 2007-02-20 Microsoft Corporation Method to synchronize and upload an offloaded network stack connection with a network stack
JP2004040698A (ja) 2002-07-08 2004-02-05 Sanyo Electric Co Ltd 放送受信装置及び番組についてのチャットシステム
JP2005039540A (ja) 2003-07-15 2005-02-10 Sony Corp テレビジョン受像機
US7966613B2 (en) * 2004-01-20 2011-06-21 Broadcom Corporation System and method for supporting multiple users
DE602005021487D1 (de) * 2004-06-17 2010-07-08 Broadcom Corp Verfahren und system zum unterstützen von leseoperationen für iscsi- und iscsi-chimney
CN1747444A (zh) * 2004-09-10 2006-03-15 国际商业机器公司 数据处理系统网络中从主机单元分担数据流的方法及引擎
US20060132489A1 (en) * 2004-12-21 2006-06-22 Hewlett-Packard Development Company, L.P. Remote computing
US20060253605A1 (en) * 2004-12-30 2006-11-09 Prabakar Sundarrajan Systems and methods for providing integrated client-side acceleration techniques to access remote applications
TWM279908U (en) * 2005-07-26 2005-11-01 Uniwill Comp Corp Expansion device connection structure of portable information device
US7844442B2 (en) * 2005-08-16 2010-11-30 Exent Technologies, Ltd. System and method for providing a remote user interface for an application executing on a computing device
US8447898B2 (en) * 2005-10-28 2013-05-21 Microsoft Corporation Task offload to a peripheral device
US7656894B2 (en) * 2005-10-28 2010-02-02 Microsoft Corporation Offloading processing tasks to a peripheral device
US7899864B2 (en) * 2005-11-01 2011-03-01 Microsoft Corporation Multi-user terminal services accelerator
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
JP2008141487A (ja) 2006-12-01 2008-06-19 Funai Electric Co Ltd テレビジョン装置およびテレビジョンシステム
US7865746B2 (en) * 2006-12-27 2011-01-04 International Business Machines Corporation Power state control for a desktop blade in a blade server system
JP2008166980A (ja) 2006-12-27 2008-07-17 Funai Electric Co Ltd テレビジョンシステムおよびリモコン装置
WO2008137047A2 (en) * 2007-04-30 2008-11-13 Netapp, Inc. Method and apparatus for offloading network processes in a computer storage system
US8131302B2 (en) * 2007-07-20 2012-03-06 Broadcom Corporation Method and system for dynamically splitting jobs across multiple agnostic processors in wireless system
US20090024687A1 (en) * 2007-07-20 2009-01-22 Thomas Quigley Method and system for formatting returned result from remote processing resource in wireless system
US8295306B2 (en) * 2007-08-28 2012-10-23 Cisco Technologies, Inc. Layer-4 transparent secure transport protocol for end-to-end application protection
US20090106436A1 (en) * 2007-10-23 2009-04-23 Telefonaktiebolaget Lm Ericsson (Publ) Methods and systems for offload processing
US8253732B2 (en) * 2008-01-03 2012-08-28 International Business Machines Corporation Method and system for remote visualization client acceleration
US8572251B2 (en) * 2008-11-26 2013-10-29 Microsoft Corporation Hardware acceleration for remote desktop protocol
US8194977B2 (en) * 2008-12-09 2012-06-05 Microsoft Corporation Remote desktop protocol compression acceleration using single instruction, multiple dispatch instructions

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022045449A1 (ko) * 2020-08-24 2022-03-03 오픈엣지테크놀로지 주식회사 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기

Also Published As

Publication number Publication date
US8572251B2 (en) 2013-10-29
US20100131669A1 (en) 2010-05-27
EP2350861A4 (en) 2015-07-08
WO2010062679A2 (en) 2010-06-03
CN102227718A (zh) 2011-10-26
EP2350861A2 (en) 2011-08-03
WO2010062679A3 (en) 2010-07-22
US20140055464A1 (en) 2014-02-27
JP2012510126A (ja) 2012-04-26
US8850027B2 (en) 2014-09-30

Similar Documents

Publication Publication Date Title
JP5442755B2 (ja) リモートデスクトッププロトコルのためのハードウェアアクセラレーション
JP5025941B2 (ja) 統合ホストプロトコルスタック管理を使用するセキュアなインターネットプロトコル(ipsec)オフロードのための方法および装置
JP4638658B2 (ja) オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法
JP4327496B2 (ja) ネットワークスタックをオフロードする方法
US7526577B2 (en) Multiple offload of network state objects with support for failover events
JP4406604B2 (ja) Tcp/ip、rdma、及びipストレージアプリケーションのための高性能ipプロセッサ
JP5426545B2 (ja) 暗号化広域ネットワークトラフィック最適化方法
EP2552080B1 (en) Chimney onload implementation of network protocol stack
US10355997B2 (en) System and method for improving TCP performance in virtualized environments
US7685287B2 (en) Method and system for layering an infinite request/reply data stream on finite, unidirectional, time-limited transports
US9178966B2 (en) Using transmission control protocol/internet protocol (TCP/IP) to setup high speed out of band data communication connections
US8793384B2 (en) Recovery of disconnected channels over a reliable protocol
US20140317309A1 (en) System and devices facilitating dynamic network link acceleration
KR101067394B1 (ko) 페일오버 이벤트를 지원하는 네트워크 상태 객체의 다중오프로드용 방법 및 컴퓨터 프로그램 제품
US9686117B2 (en) Chimney onload implementation of network protocol stack
US10924423B2 (en) Adaptive mechanism to adjust UDT packet size based on actual network condition
US10498867B2 (en) Network interface device and host processing device field
KR102605213B1 (ko) 프로그래머블 nic를 활용한 http/2 기반 l7 로드 밸런서의 리퀘스트 처리 이양방법 및 이를 이용한 l7 로드 밸런서

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121023

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121023

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130710

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130712

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130719

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130723

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131023

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131119

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131218

R150 Certificate of patent or registration of utility model

Ref document number: 5442755

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250