TCPオフロードエンジン(TOE )は、一部のネットワークインターフェイスカード(NIC)で使用される技術で、 TCP/IPスタック全体の処理をネットワークコントローラにオフロードします。これは主に、ネットワークスタックの処理オーバーヘッドが大きくなるギガビットイーサネットや10ギガビットイーサネットなどの高速ネットワークインターフェイスで使用されます。TOEは、 iSCSIやネットワークファイルシステム(NFS)などのインターネットプロトコル(IP)ストレージプロトコルに関連するオーバーヘッドを削減する方法としてよく使用されます[ 1 ]。
TCPは元々 、信頼性の低い低速ネットワーク(初期のダイヤルアップモデムなど)向けに設計されましたが、バックボーン伝送速度(光キャリア、ギガビットイーサネット、10ギガビットイーサネットリンクを使用)と、より高速で信頼性の高いアクセスメカニズム( DSLやケーブルモデムなど)の面でインターネットが成長するにつれて、データセンターやデスクトップPC環境で1秒あたり1ギガビットを超える速度で頻繁に使用されるようになりました。このような速度では、ホストシステム上のTCPソフトウェア実装にはかなりの計算能力が必要です。2000年代初頭には、全二重ギガビットTCP通信は2.4GHz Pentium 4プロセッサの80%以上を消費する可能性があり、[ 2 ]システム上でアプリケーションを実行するための処理リソースがほとんど、またはまったく残らないという結果になりました。
TCPはコネクション指向プロトコルであり、複雑さと処理オーバーヘッドが増加する。これらの側面には以下が含まれる。
これらの機能の一部または全部を専用ハードウェア(TCPオフロードエンジン)に移行することで、システムのメインCPUを他のタスクに解放することができる。
一般的に受け入れられている経験則では、送受信するビットごとにCPUサイクルが必要である(つまり、送受信には1ヘルツのCPU処理が必要である)。1ビット/秒 のTCP/IP)。[ 2 ]例えば、5 Gbit/s(625 MB/s)のネットワークトラフィックには、5 GHzのCPU処理が必要です。これは、 5 Gbit/sのTCP/IPトラフィックに関連するTCP/IP処理を処理するには、2.5 GHzマルチコアプロセッサ の2つのコア全体が必要になることを意味します。イーサネット(この例では10GE)は双方向なので、 10 Gbit/s(合計スループット20 Gbit/s )を送受信できます。1サイクル/ビットのルールを使用すると、これは8つの2.5 GHzコアに相当します。
TCP/IPオフロードによって、 TCP/IP処理に使用されるCPUサイクルの多くが解放され、CPU(通常はサーバーCPU)は、ファイルシステム処理(ファイルサーバーの場合)やインデックス作成(バックアップメディアサーバーの場合)など、他のタスクを実行できるようになります。つまり、TCP/IPオフロードNICを搭載したサーバーは、TCP/IPオフロードNICを搭載していないサーバーよりも、より多くのサーバー処理を実行できるということです。
TOE はプロトコルのオーバーヘッドを解消できるだけでなく、ホストベース (サーバーおよび PC) エンドポイントの大部分に影響を与えるアーキテクチャ上の問題も解決できます。古いエンドポイント ホストの多くはPCIバスベースであり、サーバーや PCにネットワーク インターフェイスなどの特定の周辺機器を追加するための標準インターフェイスを提供します。PCI は、メイン メモリから PCI バスを介してネットワーク インターフェイス IC に少量のデータを転送するには非効率的ですが、データ バースト サイズが大きくなるにつれて効率が向上します。TCP プロトコルでは、多数の小さなパケット (確認応答など) が作成され、これらは通常ホスト CPU で生成され、PCI バスを介してネットワーク物理インターフェイスから送信されるため、ホスト コンピュータの IO スループットに影響します。
ネットワークインターフェース上に配置されたTOEソリューションは、CPUホストとはPCIバスの反対側に位置しているため、このI/O効率の問題を解決できます。TCP接続を介して送信されるデータは、小さなTCPパケットがPCIバスを通過する必要なく、大きなデータバーストサイズを使用してCPUからPCIバスを介してTOEに送信できます。
この技術における最初の特許の1つであるUDPオフロードは、1990年初頭にAuspex Systemsに付与されました。 [ 3 ] Auspexの創設者であるLarry BoucherとAuspexのエンジニア数名は、ネットワークスタックオフロードの概念をTCPに拡張し、カスタムシリコンで実装するというアイデアで、1997年にAlacritechを設立しました。彼らは1999年初頭に最初の並列スタックフルオフロードネットワークカードを発表しました。同社のSLIC(Session Layer Interface Card)は、現在のTOE製品の前身です。AlacritechはTCP/IPオフロードの分野で多数の特許を保有しています。[ 4 ]
2002年までに、 iSCSIなどのTCPベースのストレージの出現が関心を喚起し、「ドットコムバブルの終焉期に設立された企業を中心に、少なくとも12社の新規参入企業がストレージプロトコルとアプリケーション向けの商用半導体アクセラレータの機会を追い求め、6社ほどの既存ベンダーや自社ASIC設計と競合している」と言われていた。[ 5 ]
2005年、マイクロソフトはアラクリテックの特許基盤のライセンスを取得し、アラクリテックと共同で、TCPチムニーオフロードとして知られる部分的なTCPオフロードアーキテクチャを開発しました。TCPチムニーオフロードは、アラクリテックの「通信ブロック通過特許」を基盤としています。同時に、ブロードコムもTCPチムニーオフロードチップを製造するライセンスを取得しました。
TCPスタックをTOEで完全に置き換える代わりに、オペレーティングシステムのTCPスタックと連携して一部の操作をオフロードする代替手法があります。TCPチェックサムオフロードとラージセグメントオフロードは、今日のイーサネットNICの大部分でサポートされています。ラージ受信オフロードやTCP確認応答オフロードなどの新しい手法は、すでに一部のハイエンドイーサネットハードウェアに実装されていますが、純粋にソフトウェアで実装した場合でも効果的です。[ 6 ] [ 7 ]
並列スタック完全オフロードは、2つの並列TCP/IPスタックの概念からその名が付けられています。1つ目は、ホストOSに組み込まれているメインホストスタックです。2つ目の「並列スタック」は、 「ヴァンパイアタップ」を使用してアプリケーション層とトランスポート層(TCP)の間に接続されます。ヴァンパイアタップは、アプリケーションからのTCP接続要求を傍受し、TCP接続管理とTCPデータ転送を担当します。次のセクションで述べる批判の多くは、このタイプのTCPオフロードに関するものです。
HBA(ホストバスアダプタ)のフルオフロード機能は、iSCSIホストアダプタに搭載されており、 iSCSIストレージデバイスにTCP/IP経由で接続する際に、ホストシステムに対してディスクコントローラとして認識されます。このタイプのTCPオフロードは、TCP/IP処理だけでなく、iSCSIイニシエータ機能もオフロードします。HBAはホストに対してディスクコントローラとして認識されるため、iSCSIデバイスでのみ使用可能であり、一般的なTCP/IPオフロードには適していません。
TCPチムニーオフロードは、パラレルスタックのフルオフロードに対する主要なセキュリティ上の批判に対処します。部分オフロードでは、メインシステムスタックがホストへのすべての接続を制御します。ローカルホスト(通常はサーバー)と外部ホスト(通常はクライアント)の間で接続が確立されると、接続とその状態がTCPオフロードエンジンに渡されます。データの送受信という重い処理は、オフロードデバイスによって行われます。ほとんどすべてのTCPオフロードエンジンは、ホストCPUの介入なしにデータ転送を実行するために、何らかのTCP/IPハードウェア実装を使用します。接続が閉じられると、接続状態はオフロードエンジンからメインシステムスタックに返されます。TCP接続の制御を維持することで、メインシステムスタックは接続セキュリティを実装および制御できます。
TCPセグメンテーションオフロード(TSO)は、TCPセグメントタスクをネットワークインターフェースコントローラにオフロードできます。[ 8 ]
ラージレシーブオフロード(LRO )は、CPUオーバーヘッドを削減することで、高帯域幅ネットワーク接続の受信スループットを向上させる技術です。単一のストリームからの複数の受信パケットをより大きなバッファに集約してからネットワークスタックの上位に渡すことで、処理する必要のあるパケット数を削減します。Linuxの実装では、割り込みの数も削減するために、一般的にLROを新しいAPI (NAPI)と組み合わせて使用します。
ベンチマークによると、この技術を完全にソフトウェアで実装するだけでも、ネットワークパフォーマンスを大幅に向上させることができる。[ 6 ] [ 7 ] [ 9 ] 2007年4月現在 LinuxカーネルはTCPのLROをソフトウェアでのみサポートしています。FreeBSD 8は、それをサポートするアダプタでハードウェアLROをサポートしています。[ 10 ] [ 11 ] [ 12 ] [ 13 ]
LROは、エンドツーエンドの原則を破り、パフォーマンスに大きな影響を与える可能性があるため、ルーターとして動作するマシン上では動作すべきではありません。[ 14 ] [ 15 ]
汎用受信オフロード(GRO )は、TCP/ IPv4に限定されず、LROによって引き起こされる問題もない、汎用的なLROをソフトウェアで実装します。 [ 16 ] [ 17 ]
コンピュータネットワークにおいて、ラージセンドオフロード(LSO)は、CPUオーバーヘッドを削減することで、高帯域幅ネットワーク接続の出力スループットを向上させる技術です。これは、マルチパケットバッファをネットワークインターフェースカード(NIC)に渡すことで機能します。NICはこのバッファを個別のパケットに分割します。この技術は、 TCPに適用される場合はTCPセグメンテーションオフロード(TSO)または汎用セグメンテーションオフロード(GSO )とも呼ばれます。LSOとLROは独立しており、一方を使用するために他方を使用する必要はありません。
システムがコンピュータネットワーク経由で大量のデータを送信する必要がある場合、まずそのデータを、送信元コンピュータと宛先コンピュータ間のルーターやスイッチなどのネットワーク要素を通過できる小さなセグメントに分割する必要があります。このプロセスはセグメンテーションと呼ばれます。多くの場合、ホストコンピュータのTCPプロトコルがこのセグメンテーションを実行します。この処理をNICにオフロードすることをTCPセグメンテーションオフロード(TSO)と呼びます。
例えば、64 KiB(65,536バイト)のデータは、NICを経由してネットワークに送信される前に、通常1460バイトの45個のセグメントに分割されます。NICに何らかのインテリジェンスがあれば、ホストCPUは64 KBのデータを単一の送信要求でNICに渡すことができ、NICはそのデータを1460バイトのより小さなセグメントに分割し、ホストのTCP/IPスタックが提供するテンプレートに従って、各セグメントにTCP、IP、およびデータリンク層のプロトコルヘッダーを追加し、結果として得られたフレームをネットワーク経由で送信できます。これにより、CPUの処理負荷が大幅に軽減されます。2014年現在市場に出回っている多くの新しいNICはTSOをサポートしています。
一部のネットワークカードはTSOを十分に汎用的に実装しているため、他のトランスポート層プロトコルのフラグメンテーションをオフロードしたり、UDPのようにフラグメンテーションを単独でサポートしていないプロトコルのIPフラグメンテーションを実行したりするために使用できます。
UDPフラグメンテーションオフロード(UFO)は、UDPデータグラムタスクをネットワークインターフェースコントローラにオフロードできます。[ 18 ]
FreeBSDなどの他のオペレーティングシステムとは異なり、LinuxカーネルにはTOEのサポートは含まれていません(他の種類のネットワークオフロードと混同しないでください)。[ 19 ] ChelsioやQlogicなどのハードウェアメーカーからTOEサポートを追加するパッチはありますが、Linuxカーネル開発者はいくつかの理由からこのテクノロジーに反対しています。[ 20 ]
TOE技術に関する現在の研究の多くは、 Broadcom、Chelsio Communications、Emulex、Mellanox Technologies、QLogicなどの10ギガビットイーサネットインターフェースカードのメーカーによって行われています。
{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)-Receive-Offload (LRO) は、小さなパケットを大きなパケットに集約してネットワークスタックに渡すことで、パケットごとの処理オーバーヘッドを削減します。Generic-Receive-Offload (GRO) は、LRO の汎用ソフトウェアバージョンを提供します [...]。