JP2023031710A - 通信装置及びその制御方法、並びにプログラム - Google Patents
通信装置及びその制御方法、並びにプログラム Download PDFInfo
- Publication number
- JP2023031710A JP2023031710A JP2021137368A JP2021137368A JP2023031710A JP 2023031710 A JP2023031710 A JP 2023031710A JP 2021137368 A JP2021137368 A JP 2021137368A JP 2021137368 A JP2021137368 A JP 2021137368A JP 2023031710 A JP2023031710 A JP 2023031710A
- Authority
- JP
- Japan
- Prior art keywords
- processing
- header
- data
- kernel
- mac
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/166—IP fragmentation; TCP segmentation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
【課題】OSカーネルに対する変更を行うことなく、MACヘッダのキャッシュ情報の使用可否によらず、送信パケットを生成するための通信プロトコル処理の一部をオフロード処理により実現する。【解決手段】動的ロードソフトウェア211は、OSカーネル201による通信プロトコル処理をフックすると、近傍エントリの状態を判定する。動的ロードソフトウェア211は、判定された近傍エントリの状態に基づいて、ヘッダ生成処理を制御する。動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持している場合、オフロード処理部106がMAC層より上位層のヘッダ及びMACヘッダを生成するよう制御する。一方、動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持していない場合、オフロード処理部106が上位層のヘッダを生成し、OSカーネル201がMACヘッダを生成するよう制御する。【選択図】図2
Description
本発明は、データ通信を行うための通信装置及びその制御方法、並びにプログラムに関するものである。
通信装置において、TCP/IP等の通信プロトコルによる処理では、バッファに格納された送信対象のユーザデータ(送信データ)のパケット化が行われる。例えば、送信データは、TCPにおけるMSS(最大セグメントサイズ)単位の分割データ(セグメントデータ)に分割される。その後、分割データ及び疑似ヘッダのチェックサムが計算されるとともに、分割データを含み、かつ、TCPヘッダ及びIPヘッダが付加されたIPパケットが生成される。更に、生成されたIPパケットにMACヘッダを付加することで、イーサネット(登録商標)フレーム等のMACフレームが生成され、生成されたMACフレームが伝送路へ送信される。
近年、CPUの処理負荷の軽減及び高速送信のために、上述のセグメントデータへの分割と、各通信プロトコルのヘッダの生成とを、ネットワークI/F(インタフェース)等のハードウェアを用いて行うオフロード技術が用いられることがある。例えば、特許文献1に記載のように、CPUに代えてネットワークI/FがTCPのセグメント化処理の一部又は全部を行うTSO(TCP Segmentation Offload)が知られている。また、特許文献1には、通信デバイスがTSO機能を備えているか否かによらず、CPUとは異なるハードウェアを用いて、セグメントデータへの分割とTCP/IP/イーサネットヘッダの生成とを行う技術が記載されている。
上述の従来技術では、送信データのパケット化(フレーム化)をオフロード処理により実現することには、OSカーネルのプロトコルスタックに対する変更(例えば、OSのソースコードに対する変更)が伴いうる。これは特にLinux(登録商標)等のOSS(オープンソースソフトウェア)のOSカーネルでは、OSの保守性及び品質の観点で望ましくない。また、MACヘッダのキャッシュ情報(宛先IPアドレスと宛先MACアドレスとの対応情報)を使用できない場合、ハードウェアを用いたオフロード処理ではMACヘッダを生成することはできず、送信パケット(送信フレーム)を生成することができないことがありうる。
そこで、本発明は、OSカーネルに対する変更を行うことなく、MACヘッダのキャッシュ情報の使用可否によらず、送信パケットを生成するための通信プロトコル処理の一部をオフロード処理により実現するための技術を提供することを目的とする。
本発明の一態様に係る通信装置は、前記通信装置において動作するOSカーネルによる通信プロトコル処理を、前記OSカーネルの代わりに実行する処理手段であって、送信対象の送信データをセグメントデータに分割する分割処理と、前記分割処理で分割された各セグメントデータに対してヘッダを生成して付与するヘッダ生成処理とを行う、前記処理手段と、前記OSカーネルによる前記通信プロトコル処理をフックするフック手段と、前記フック手段によって前記通信プロトコル処理がフックされると、前記送信データに付与されるMACヘッダのキャッシュ情報を保持する近傍エントリの状態を判定する判定手段と、前記判定手段によって判定された前記近傍エントリの状態に基づいて、前記ヘッダ生成処理を制御する制御手段と、を備え、前記制御手段は、前記近傍エントリが有効なキャッシュ情報を保持している場合、前記処理手段がMAC層より上位層のヘッダ及び前記MACヘッダを生成するよう制御し、前記近傍エントリが有効なキャッシュ情報を保持していない場合、前記処理手段が前記上位層のヘッダを生成し、前記OSカーネルが前記MACヘッダを生成するよう制御することを特徴とする。
本発明によれば、OSカーネルに対する変更を行うことなく、MACヘッダのキャッシュ情報の使用可否によらず、送信パケットを生成するための通信プロトコル処理の一部をオフロード処理により実現できる。
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。更に、添付図面においては、同一又は同様の構成に同一の参照番号を付し、重複した説明は省略する。
<通信装置のハードウェア構成>
図1は、本発明の一実施形態に係る通信装置100のハードウェア構成例を示すブロック図である。通信装置100は、通信機能を備える装置であり、例えば、カメラ、プリンタ、スマートフォン、タブレット、PC(パーソナルコンピュータ)、又はプロジェクタ等の装置でありうる。
図1は、本発明の一実施形態に係る通信装置100のハードウェア構成例を示すブロック図である。通信装置100は、通信機能を備える装置であり、例えば、カメラ、プリンタ、スマートフォン、タブレット、PC(パーソナルコンピュータ)、又はプロジェクタ等の装置でありうる。
通信装置100は、CPU102、ROM103、RAM104、通信デバイス105、及びオフロード処理部(オフロード処理ハードウェア)106を有する。システムバス101は、CPU102、ROM103、RAM104、通信デバイス105及びオフロード処理部106を互いに接続しており、接続されたデバイス間の各種データの転送経路となる。
CPU102は、OS又はデバイスドライバを介してハードウェアデバイス103~106を統括的に制御することで、通信装置100を制御する。ROM103は、CPU102によって実行されるOS及びデバイスドライバ等の制御プログラムを格納している。RAM104は、CPU102の主メモリ及びワークエリア等として機能し、プログラムやデータを一時的に格納しうる。
通信デバイス105は、MAC(Media Access Control)モジュール107及びPHY(Physical Layer)モジュール108を有し、ネットワーク111を介して通信相手装置との通信を行う。ネットワーク111は、例えば、イーサネット(登録商標)規格に準拠した通信(有線LAN通信)のためのネットワークである。ネットワーク111を介したデータの送受信は、CPU102によってネットワークドライバが実行され、当該ネットワークドライバに応じてMACモジュール107が制御されることにより行われる。
なお、通信デバイス105は、有線LAN通信に代えて又は有線LAN通信に加えて、無線LAN(Wi-Fi(登録商標))規格に準拠した通信(無線LAN通信)を行う機能を有してもよい。通信デバイス105は、任意の有線又は無線通信規格に準拠して通信IP通信を行うことができるように構成されうる。
オフロード処理部106は、DMAC(ダイレクトメモリアクセスコントローラ(Direct Memory Access Controller))109及びプロトコル処理部(プロトコル処理ハードウェア)110を有するハードウェアユニットである。オフロード処理部106は、CPU102からオフロードされた処理(例えば、セグメント分割処理及びヘッダ生成処理)を実行する。オフロード処理部106は、通信装置100において動作するOSカーネル(図2のOSカーネル201)による通信プロトコル処理を、当該OSカーネルの代わりに実行する。即ち、オフロード処理部106は、CPU102からオフロードされた処理を実行する。具体的には、オフロード処理部106は、後述するように、送信対象の送信データをセグメントデータに分割する分割処理と、当該分割処理で分割された各セグメントデータに対してヘッダを生成して付与するヘッダ生成処理とを行う。
DMAC109は、RAM104に格納されているデータのプロトコル処理部110への転送、及びプロトコル処理部110によって処理されたデータのRAM104への転送を行う。DMAC109によるデータ転送は、CPU102により制御される。なお、図1には1つのDMAC109のみが示されているが、オフロード処理部106に複数のDMAC109が設けられてもよい。複数のDMACには、例えば、RAM104からデータを読み込むためのDMAC、及びRAM104にデータを書き込むためのDMAC等が含まれうる。
プロトコル処理部110は、TCP/IP(Transmission Control Protocol/Internet Protocol)等の通信プロトコルによる処理(通信プロトコル処理)を実行する機能を有するハードウェアである。プロトコル処理部110は、例えば、TCP又はUDPのチェックサム計算、及びヘッダ生成処理等を行いうる。
なお、図1に示される構成例は一例にすぎず、通信装置100は図1に示されていない構成要素を備えてもよい。例えば、通信装置100はタイマ管理部を備えてもよい。タイマ管理部は、所定時間が経過したかを管理しうる。また、通信装置100は、複数のCPUを備えてもよいし、CPU102が1つ又は複数のプロセッサで構成されてもよい。通信装置100がカメラである場合、撮像部及び表示部を備えてもよい。
<通信装置の機能構成>
図2は、本実施形態における通信装置100の機能構成例を示すブロック図である。通信装置100は、本実施形態に関連する機能構成として、アプリケーション200と、OSカーネル201と、動的ロードソフトウェア211と、オフロード処理部106に設けられる第二セグメント分割部218及び第二ヘッダ生成部219とを有する。なお、本実施形態では、CPU102が実行するOSカーネル201としてLinuxを想定しているが、Linuxに限定されず、Linux以外のOSカーネルが使用されてもよい。
図2は、本実施形態における通信装置100の機能構成例を示すブロック図である。通信装置100は、本実施形態に関連する機能構成として、アプリケーション200と、OSカーネル201と、動的ロードソフトウェア211と、オフロード処理部106に設けられる第二セグメント分割部218及び第二ヘッダ生成部219とを有する。なお、本実施形態では、CPU102が実行するOSカーネル201としてLinuxを想定しているが、Linuxに限定されず、Linux以外のOSカーネルが使用されてもよい。
(アプリケーション200)
アプリケーション200は、ユーザ空間に存在するユーザアプリケーションである。本実施形態では、アプリケーション200は、TCP/IPv4通信を行うアプリケーションであるが、UDP通信を行うアプリケーションであってもよい。任意のサイズの、送信対象のアプリケーションデータ(送信データ)が、アプリケーション200からOSカーネル201(プロトコルスタック202)へ入力される。
アプリケーション200は、ユーザ空間に存在するユーザアプリケーションである。本実施形態では、アプリケーション200は、TCP/IPv4通信を行うアプリケーションであるが、UDP通信を行うアプリケーションであってもよい。任意のサイズの、送信対象のアプリケーションデータ(送信データ)が、アプリケーション200からOSカーネル201(プロトコルスタック202)へ入力される。
(OSカーネル201)
OSカーネル201は、プロトコルスタック202、近傍エントリ処理部209、及び転送処理部210を有する。プロトコルスタック202は、コネクション管理部203、第一バッファ管理部204、第一セグメント分割部205、第一ヘッダ生成部206、ウィンドウ制御部207及びIP処理フック部208を有する。
OSカーネル201は、プロトコルスタック202、近傍エントリ処理部209、及び転送処理部210を有する。プロトコルスタック202は、コネクション管理部203、第一バッファ管理部204、第一セグメント分割部205、第一ヘッダ生成部206、ウィンドウ制御部207及びIP処理フック部208を有する。
コネクション管理部203は、通信装置100の通信コネクションを管理する。例えば、コネクション管理部203は、アプリケーション200に対する通信コネクションのMSS(最大セグメントサイズ(Maximum Segment Size))及びオフロード設定情報等のソケット情報、及びARP(Address Resolution Protocol)テーブルのエントリとして保持される近傍エントリ等を管理する。近傍エントリは、MACアドレスとIPアドレスとの対応関係を示す対応情報(セグメント分割により得られたセグメントデータに付与されるMACヘッダのキャッシュ情報)を含む。このように、近傍エントリは、送信データに付与されるMACヘッダのキャッシュ情報を保持する。
第一バッファ管理部204は、カーネル空間で使用される送信バッファを管理するための管理データを生成する。送信バッファは、RAM104の記憶領域に確保され、第一バッファ管理部204によって生成される管理データを用いて管理される。第一バッファ管理部204は、送信バッファの管理データとして、例えば、OSカーネルがLinuxである場合、struct sk_buffで定義される構造体を生成する。管理データは、カーネル空間のデータアドレス及びソケット情報への参照、通信デバイス情報への参照等を含む。
第一セグメント分割部205は、アプリケーション200によって生成された送信データをMSS単位で分割し、得られたセグメントデータをカーネル空間の送信バッファへ格納(コピー)する。送信バッファに格納されるセグメントデータのデータサイズは、ウィンドウ制御部207において管理されているTCP送信ウィンドウサイズ及び輻輳ウィンドウサイズ等に基づいて決定される。また、第一セグメント分割部205は、TCPセッションにおいてチェックサム計算のオフロード設定が行われていない場合、送信バッファへセグメントデータを格納する際に、当該セグメントデータに対するチェックサム値の計算を行う。
第一ヘッダ生成部206は、TCP又はUDPのトランスポート層の処理、及びIPのネットワーク層の処理(具体的には、各プロトコルのヘッダ生成処理)を行う。ウィンドウ制御部207は、TCP送信ウィンドウサイズ及び輻輳ウィンドウを管理する。IP処理フック部208は、通信プロトコル処理(IPプロトコル処理)として、第一ヘッダ生成部206がIPヘッダについてのヘッダ生成処理を行っている途中で、当該IPプロトコル処理をフックするコールバックを登録する機能を有する。例えば、Linuxでは、Netfilterと呼ばれるフレームワークで提供されるAPI(Application Programming Interface)を使ってIP処理フック部208による処理が実現される。
近傍エントリ処理部209は、管理データが示すIPヘッダに含まれる送信先IPアドレスに対応する近傍エントリを参照することで、MACヘッダのキャッシュ情報を取得する。近傍エントリ処理部209は、取得したキャッシュ情報を用いて、セグメントデータに付与する、MACアドレスを含むMACヘッダを生成する。なお、近傍エントリは、例えば、Linuxにおいては、struct neighbour構造体を用いて管理される。近傍エントリ処理部209は、送信先IPアドレスに対応する近傍エントリが存在しない場合、又は近傍エントリは存在するが有効ではない場合、アドレス解決処理を行うことでアドレス情報(IPアドレスに対応するMACアドレス)を取得する。このアドレス解決処理は、IPv4通信の場合にはARP(Address Resolution Protocol)処理であり、IPv6通信の場合にはNeighbor Discovery処理である。このように、本実施形態の近傍エントリ処理部209は、送信データの送信先IPアドレスに対応するMACアドレスを、アドレス解決処理により取得し、取得したMACアドレスを含むMACヘッダを生成する生成手段の一例として機能する。
本実施形態において、近傍エントリが有効である有効状態とは、アドレス解決が成功した状態、アドレス解決成功後のアドレス情報の有効期限内の状態、及びアドレス情報が静的に設定されている状態(アドレス解決が不要な状態)を指す。一方、近傍エントリが無効である無効状態とは、上記以外の状態(例えば、アドレス未解決状態、アドレス情報の有効期限が切れた状態、及びアドレス解決中の状態を指す。近傍エントリが有効状態である場合、近傍エントリは、MACヘッダ(MACアドレス)の有効なキャッシュ情報を保持している。この場合、近傍エントリ処理部209は、このキャッシュ情報に基づいてMACヘッダを生成し、生成したMACヘッダを、管理データが管理する送信バッファに格納する。その後、送信バッファの管理データ(即ち、送信バッファに格納された、TCP/IP/MACヘッダが付与された送信データ)は、近傍エントリ処理部209から転送処理部210へ送られる。
転送処理部210は、入力された管理データ(即ち、送信バッファに格納された、TCP/IP/MACヘッダが付与された送信データ)を通信デバイス105へ転送する機能を有する。転送処理部210には、通信デバイス105のドライバも含まれる。なお、通信デバイス105のドライバは、OSカーネル201に含まれていてもよいし、動的ロードソフトウェア211として実現されてもよい。実施形態の転送処理部210は、送信データを分割して得られた各セグメントデータにMACヘッダを付与して得られたMACフレームを、通信デバイス105へ転送する転送手段の一例として機能する。
(動的ロードソフトウェア211)
動的ロードソフトウェア211は、OSカーネル201の起動後に動的にロードされるソフトウェアであり、OSカーネル201とは独立して動作する。動的ロードソフトウェア211は、コールバック登録部212、処理判定部213、プロトコル処理返付部214、ソケット情報書換部215、第二バッファ管理部216及びデータリンク(DL)層入力部217を有する。なお、動的ロードソフトウェア211が実行する処理の手順については図3のフローチャートを用いて後述する。
動的ロードソフトウェア211は、OSカーネル201の起動後に動的にロードされるソフトウェアであり、OSカーネル201とは独立して動作する。動的ロードソフトウェア211は、コールバック登録部212、処理判定部213、プロトコル処理返付部214、ソケット情報書換部215、第二バッファ管理部216及びデータリンク(DL)層入力部217を有する。なお、動的ロードソフトウェア211が実行する処理の手順については図3のフローチャートを用いて後述する。
コールバック登録部212は、IP処理フック部208が提供する機能を用いて、OSカーネル201によるIPプロトコル処理(通信プロトコル処理)をフックするコールバックを登録する。つまり、本実施形態において、コールバック登録部212は、IPプロトコル処理をフックする機能を有する。コールバック登録部212によるコールバックの登録は、動的ロードソフトウェア211がロードされたタイミングで実行される。
処理判定部213は、コールバック登録部212によって登録されたコールバック内で、IPヘッダが生成された管理データの中身を解析し、当該管理データについて処理判定(管理データの処理方法の決定)を行う。処理判定部213は、例えば以下の判定(決定)を行いうる。
●管理データを、IPプロトコル処理のフック元であるプロトコルスタック202の処理に戻すという判定。
●管理データのソケット情報を書き換えるという判定。
●管理データについてオフロード処理を行うという判定。
なお、処理判定部213による処理判定の詳細については図4のフローチャートを用いて後述する。
●管理データを、IPプロトコル処理のフック元であるプロトコルスタック202の処理に戻すという判定。
●管理データのソケット情報を書き換えるという判定。
●管理データについてオフロード処理を行うという判定。
なお、処理判定部213による処理判定の詳細については図4のフローチャートを用いて後述する。
プロトコル処理返付部214は、処理判定部213により、管理データをプロトコルスタック202の処理に戻すと判定された場合に、当該管理データを、プロトコルスタック202に戻す。あるいは、プロトコル処理返付部214は、ソケット情報書換部215によるソケット情報の書き換えが行われた管理データを、プロトコルスタック202に戻す。
ソケット情報書換部215は、処理判定部213により、管理データのソケット情報を書き換えると判定された場合、当該管理データのソケット情報の書き換えを行う。書換対象のソケット情報は、例えば、MSSのキャッシュ値、及びチェックサム計算をオフロード(ハードウェアオフロード)するためのオフロード設定である。
ソケット情報内のMSSのキャッシュ値を、実際のMSS値よりも大きい値に設定することで、第一セグメント分割部205による分割後のセグメントデータサイズを大きくすることが可能である。これにより、1つの管理データで管理されるセグメントデータのサイズが大きくなる。また、セグメントオフロードを行うように設定することで、セグメントデータサイズを大きくすることも可能である。セグメントオフロードを行うように設定する場合、最大セグメントサイズ及び最大セグメント数の設定も行う。また、チェックサム計算をオフロードするように設定することで、第一セグメント分割部205によるチェックサム計算を不要にすることが可能であり、プロトコルスタック202における処理負荷が軽減される。
ソケット情報の書き換えが行われた管理データは、プロトコル処理返付部214によってプロトコルスタック202に戻される。ソケット情報の書き換えが行われた通信コネクションについては、それ以降、例えば大きなサイズのセグメントデータについてチェックサム計算が行われていない管理データが、動的ロードソフトウェア211で処理される。
第二バッファ管理部216は、処理判定部213により、管理データ(第一の管理データ)についてオフロード処理を行うと判定された場合に、別の送信バッファを管理するための新たな管理データ(第二の管理データ)を確保(生成)する。なお、本実施形態においてオフロード処理の対象となる処理は、セグメント分割処理及びヘッダ生成処理である。確保される管理データの個数は、元の管理データ(第一の管理データ)が管理しているセグメントデータサイズを、実際のTCPセッションのMSSで除算することによって算出される。この除算において剰余が発生した場合には切り上げが行われうる。例えば、元の管理データが管理しているセグメントデータサイズが15000バイトであり、MSSが1460バイトである場合、11個の送信バッファに対応する11個の管理データが確保される。なお、管理データによって管理される送信バッファは、RAM104に記憶領域に確保される。
また、第二バッファ管理部216は、元の管理データ(第一の管理データ)及び新たに確保した管理データ(第二の管理データ)を、オフロード処理のためにオフロード処理部106へ出力する。なお、第二の管理データは、第一の管理データ(OSカーネル201からIPプロトコル処理がフックされた際の元の管理データ)とは異なるものである。
DL層入力部217は、オフロード処理部106によるオフロード処理(セグメント分割処理及びヘッダ生成処理)が行われた送信データに対応する管理データを受信し、IPプロトコル処理のフック元であるOSカーネル201のDL層へ送信する。より具体的には、DL層入力部217は、近傍エントリが有効状態である場合には、管理データを転送処理部210に送信し、近傍エントリが無効状態である場合には、管理データを近傍エントリ処理部209へ送信する。なお、DL層入力部217が実行する処理の手順については図6のフローチャートを用いて後述する。なお、DL層入力部217による処理は、上述のコールバック処理内で行われる。
(オフロード処理部106)
オフロード処理部106は、その機能構成として、第二セグメント分割部218及び第二ヘッダ生成部219を有する。
オフロード処理部106は、その機能構成として、第二セグメント分割部218及び第二ヘッダ生成部219を有する。
第二セグメント分割部218は、DMAC109を備えている。第二セグメント分割部218は、第一の管理データを用いて管理されるセグメントデータのアドレスを、データの読み出し元、第二の管理データを用いて管理されるセグメントデータ領域を、データの書き出し先として、セグメント分割処理を行う。
第二ヘッダ生成部219は、第二の管理データが示す、セグメント分割処理が行われた送信データに付与すべきTCPヘッダ及びIPヘッダの生成を行う。ここで、第一の管理データが示す送信データには、IPプロトコル処理により得られたIPヘッダを示すヘッダデータが含まれている。このため、第二ヘッダ生成部219は、このヘッダデータに基づいて、第二の管理データに対応する送信データに対するヘッダ生成処理を行う。また、第二ヘッダ生成部219は、近傍エントリの状態(有効状態又は無効状態)に応じて、MACヘッダを生成する処理も行う。なお、オフロード処理部106(第二セグメント分割部218及び第二ヘッダ生成部219)が実行する処理の手順については図5のフローチャートを用いて後述する。
本実施形態では、第二セグメント分割部218と第二ヘッダ生成部219はオフロード処理部106で実現されるが、ソフトウェアにより実現されてもよい。また、図2に示される構成は一例であり、図2に示される複数の機能部が1つの機能部に統合されてもよいし、いずれかの機能部が複数の機能部に分けられてもよい。また、図2に示される機能部に含まれる一部又は全部の機能部が、ASIC(Application Specific Integrated Circuit)等のハードウェアにより実現されてもよい。
<動的ロードソフトウェアの処理手順>
図3は、本実施形態における動的ロードソフトウェア211によって実行される処理の手順を示すフローチャートである。動的ロードソフトウェア211は、IP処理フック部208によりプロトコルスタック202からフックされる通信プロトコル処理(IPプロトコル処理)に関連する第一の管理データに対する処理方法を判定(決定)し、判定結果に基づいて処理を実行する。図3の各ステップの処理は、例えば、ROM103に格納されているプログラムをCPU102が読み出して実行することによって実現される。
図3は、本実施形態における動的ロードソフトウェア211によって実行される処理の手順を示すフローチャートである。動的ロードソフトウェア211は、IP処理フック部208によりプロトコルスタック202からフックされる通信プロトコル処理(IPプロトコル処理)に関連する第一の管理データに対する処理方法を判定(決定)し、判定結果に基づいて処理を実行する。図3の各ステップの処理は、例えば、ROM103に格納されているプログラムをCPU102が読み出して実行することによって実現される。
S301で、動的ロードソフトウェア211は、処理判定部213により、プロトコルスタック202から、OSカーネル201による通信プロトコル処理(IPプロトコル処理)をフックし、コールバック登録部212によって登録されたコールバック処理を開始する。次にS302で、動的ロードソフトウェア211は、通信プロトコル処理がフックされると、処理判定部213により、フックされた通信プロトコル処理に関連する第一の管理データについて判定処理を行う。当該判定処理は、図4を用いて後述する手順で実行される。後述するように、当該判定処理は、送信データに付与されるMACヘッダのキャッシュ情報を保持する近傍エントリの状態を判定する処理を含む。
S303で、動的ロードソフトウェア211は、S302の判定処理により、第一の管理データについてオフロード処理(ハードウェアオフロード)を行うとの判定結果が得られたか否かを判定する。動的ロードソフトウェア211は、オフロード処理を行わないとの判定結果が得られた場合、処理をS304へ進め、オフロード処理を行うとの判定結果が得られた場合、処理をS307へ進める。
S304で、動的ロードソフトウェア211は、S302の判定処理により、第一の管理データのソケット情報を書き換えるとの判定結果が得られたか否かを判定する。動的ロードソフトウェア211は、ソケット情報を書き換えるとの判定結果が得られた場合、S305へ処理を進め、ソケット情報を書き換えないとの判定結果が得られた場合、S306へ処理を進める。S305で、動的ロードソフトウェア211は、ソケット情報書換部215により、第一の管理データのソケット情報を、上述したように書き換え、S306へ処理を進める。S306で、動的ロードソフトウェア211は、第一の管理データについての処理を、フック元のプロトコルスタック202に戻し、コールバック処理を終了する。動的ロードソフトウェア211は、コールバックの返り値として、例えば、Netfilterフレームワークにおいては、NF_ACCEPTで定義された定数を返す。
一方、S307で、動的ロードソフトウェア211は、第二バッファ管理部216により、上述の演算により、オフロード処理部106(第二セグメント分割部218)によるセグメント分割処理において生成されるパケット数(セグメント数)を算出する。このように、動的ロードソフトウェア211は、送信データのサイズと所定サイズ(本実施形態では、TCPにおけるMSS)、セグメント分割処理で送信データから得られるセグメントデータの数を示すセグメント数を算出する。
次にS308で、動的ロードソフトウェア211は、第二バッファ管理部216により、S307で算出した生成パケット数に対応する第二の管理データを確保する。即ち、生成パケット数分の第二の管理データが確保される。例えば、Linuxにおいては、生成するパケットの数(セグメント数)に等しい回数、alloc_skb()を呼び出すことで、第二の管理データが確保される。このようにして、動的ロードソフトウェア211は、送信データを格納するための送信バッファとは別に、セグメントデータを格納するための、セグメント数に等しい数の送信バッファを管理する管理データ(第二の管理データ)を生成する。
更にS309で、動的ロードソフトウェア211は、オフロード処理部106に対して、オフロード処理の実行を指示する。例えば、メモリマップドI/Oとして登録されたオフロード処理部106のレジスタに対して、オフロード処理に必要な情報を書き込むとともに、オフロード処理の実行の開始を指令する。オフロード処理に必要な情報には、例えば、第一の管理データのアドレス情報、及び第二の管理データのアドレス情報等が含まれる。このようにして、動的ロードソフトウェア211は、第一の管理データ(のアドレス情報)及び第二の管理データ(のアドレス情報)を、オフロード処理部106へ送る。
次にS310で、動的ロードソフトウェア211は、オフロード処理部106によるオフロード処理が完了したか否かを判定する。この判定は、例えば、オフロード処理部106による処理の実行状態を示す、オフロード処理部106のレジスタ値を読み出し、読み出した値に基づいて行われる。動的ロードソフトウェア211はオフロード処理処理が完了していない場合、S311の判定処理を繰り返し(例えば、所定時間経過するごとに)実行し、オフロード処理処理が完了した場合、S311へ処理を進める。
S311で、動的ロードソフトウェア211は、オフロード処理部106のオフロード処理によりセグメント分割処理及びヘッダ生成処理が行われた送信データに対応する第二の管理データを、フック元であるOSカーネル201へ送信する処理を行う。この送信処理は、図6を用いて後述する手順で実行される。最後にS312で、動的ロードソフトウェア211は、フックされた通信プロトコル処理に関連する第一の管理データ(元の管理データ)のメモリ領域を解放し、コールバック処理を終了する。動的ロードソフトウェア211は、例えば、Linuxにおいては、kfree_skb()を呼び出すことで、第一の管理データのメモリ領域を解放する。また、動的ロードソフトウェア211は、コールバックの返り値として、例えば、Netfilterフレームワークにおいては、NF_STOLENで定義された定数を返す。
<データ判定処理>
図4は、本実施形態におけるデータ判定処理(S302)の手順を示すフローチャートである。データ判定処理では、処理判定部213が、プロトコルスタック202からフックされる通信プロトコル処理に関連する第一の管理データを解析し、当該データに対する処理方法を決定する。
図4は、本実施形態におけるデータ判定処理(S302)の手順を示すフローチャートである。データ判定処理では、処理判定部213が、プロトコルスタック202からフックされる通信プロトコル処理に関連する第一の管理データを解析し、当該データに対する処理方法を決定する。
S401で、処理判定部213は、第一の管理データが示すIPヘッダからトランスポート層の通信プロトコルを確認し、当該通信プロトコルがオフロード処理対象の通信プロトコルであるか否かを判定する。本実施形態では、一例として、TCPがオフロード処理の対象となることを想定する。つまり、S401の判定は、通信プロトコルの種類に基づいて行われる。処理判定部213は、トランスポート層の通信プロトコルがTCPであればS402へ処理を進め、TCPでなければS409へ処理を進める。
S402で、処理判定部213は、第一の管理データのTCPヘッダからポート番号を確認し、当該ポート番号がオフロード処理対象のポート番号であるか否かを判定する。本実施形態では、オフロード処理の対象とすべきアプリケーションのポート番号(対象ポート番号)が予め指定(入力)されている。処理判定部213は、ポート番号が対象ポート番号であればS403へ処理を進め、対象ポート番号でなければS409へ処理を進める。なお、S402の処理(ポート番号によるフィルタリング)は、例えば、特定のアプリケーションのみを対象としてオフロード処理を行いたい場合に実行されればよく、それ以外の場合には省略されてもよい。
S403で、処理判定部213は、ソケット情報が書き換え済みであるか否かを判定する。具体的には、処理判定部213は、ソケット情報内のMSSのキャッシュ値及びオフロード設定情報を確認する。処理判定部213は、ソケット情報が書き換え済みであればS404へ処理を進め、書き換え済みでなければS411へ処理を進める。
S404で、処理判定部213は、次に送信すべきセグメントデータに関連する近傍エントリ(MACヘッダのキャッシュ情報)が存在するか否かを判定する。処理判定部213は、近傍エントリがなければS409へ処理を進め、近傍エントリがあればS405へ処理を進める。S405で、処理判定部213は、第一の管理データのセグメントデータサイズがMSSより大きいか否かを判定する。処理判定部213は、セグメントデータサイズがMSSよりも大きければS406へ処理を進め、MSS以下であればS409へ処理を進める。
この判定処理により、動的ロードソフトウェア211(処理判定部213)は、送信データのサイズが所定サイズ(本実施形態では、TCPにおけるMSS)を超える場合に、当該送信データを所定サイズのセグメントデータに分割する分割処理を、オフロード処理部106に実行させる制御を行う。また、動的ロードソフトウェア211(処理判定部213)は、送信データのサイズが所定サイズを超えない場合には、フックされた通信プロトコル処理をOSカーネル201に戻すことで、当該通信プロトコル処理をOSカーネル201に実行させる制御を行う。
S406で、処理判定部213は、近傍エントリが有効状態であるか否かを判定する。処理判定部213は、近傍エントリが有効状態である場合(即ち、近傍エントリが有効なキャッシュ情報を保持している場合)、S407へ処理を進める。一方、処理判定部213は、近傍エントリが有効状態でない場合(即ち、近傍エントリが有効なキャッシュ情報を保持していない場合)、S408へ処理を進める。なお、近傍エントリの状態に関しては、図2を参照して上述したとおりである。このように、S404及びS406において、処理判定部213は、送信データに付与されるMACヘッダのキャッシュ情報を保持する近傍エントリの状態を判定する。
S407で、処理判定部213は、動的ロードソフトウェア211内で保持されているMACヘッダ生成フラグをONに設定する。一方、S408で、処理判定部213は、当該MACヘッダ生成フラグをOFFに設定する。MACヘッダ生成フラグは、オフロード処理部106の第二ヘッダ生成部219によってMACヘッダを生成するか否かを示すフラグである。当該フラグがONに設定されている場合、第二ヘッダ生成部219がMACヘッダを生成する。当該フラグがOFFに設定されている場合、第二ヘッダ生成部219がMACヘッダを生成しない。S407又はS408におけるMACヘッダ生成フラグの設定が完了すると、処理判定部213は、S410へ処理を進める。
S409で、処理判定部213は、第一の管理データ(に対応する送信データ)がオフロード処理対象ではなく、当該データをプロトコルスタック202のプロトコル処理へ戻すと判定する。この場合、動的ロードソフトウェア211は、図3のS306において当該管理データをプロトコル処理返付部214に送る。
S410で、処理判定部213は、第一の管理データについてオフロード処理を行う(第一の管理データがオフロード処理対象である)と判定する。この場合、動的ロードソフトウェア211は、図3のS307において当該管理データを第二バッファ管理部216に送る。
S411で、処理判定部213は、第一の管理データのソケット情報を書き換えると判定する。この場合、動的ロードソフトウェア211は、図3のS305において当該管理データをソケット情報書換部215に送る。
<オフロード処理部106の処理手順>
オフロード処理部106は、通信装置100において動作するOSカーネル201による通信プロトコル処理を、OSカーネル201の代わりに実行する。具体的には、オフロード処理部106は、送信対象の送信データをセグメントデータに分割するセグメント分割処理と、セグメント分割処理で分割された各セグメントデータに対してヘッダを生成して付与するヘッダ生成処理とを行う。オフロード処理部106は、近傍エントリが有効なキャッシュ情報を保持している場合、MAC層より上位層のヘッダ(本例では、TCP/IPヘッダ)及びMACヘッダを生成するよう、動的ロードソフトウェア211によって制御される。一方、オフロード処理部106は、近傍エントリが有効なキャッシュ情報を保持していない場合、MAC層より上位層のヘッダ(本例では、TCP/IPヘッダ)を生成するよう、動的ロードソフトウェア211によって制御される。この場合、動的ロードソフトウェア211は、OSカーネル201(近傍エントリ処理部209)がMACヘッダを生成するよう制御する。
オフロード処理部106は、通信装置100において動作するOSカーネル201による通信プロトコル処理を、OSカーネル201の代わりに実行する。具体的には、オフロード処理部106は、送信対象の送信データをセグメントデータに分割するセグメント分割処理と、セグメント分割処理で分割された各セグメントデータに対してヘッダを生成して付与するヘッダ生成処理とを行う。オフロード処理部106は、近傍エントリが有効なキャッシュ情報を保持している場合、MAC層より上位層のヘッダ(本例では、TCP/IPヘッダ)及びMACヘッダを生成するよう、動的ロードソフトウェア211によって制御される。一方、オフロード処理部106は、近傍エントリが有効なキャッシュ情報を保持していない場合、MAC層より上位層のヘッダ(本例では、TCP/IPヘッダ)を生成するよう、動的ロードソフトウェア211によって制御される。この場合、動的ロードソフトウェア211は、OSカーネル201(近傍エントリ処理部209)がMACヘッダを生成するよう制御する。
図5は、オフロード処理部106によって実行される処理の手順を示すフローチャートである。オフロード処理部106は、動的ロードソフトウェア211からの実行指示(S309)に従って、オフロード処理を実行する。オフロード処理部106は、第一の管理データに対応する送信バッファに格納されたセグメントデータを分割し、分割後のセグメントデータを、第二の管理データに対応する送信バッファに格納する。オフロード処理部106は更に、第一の管理データに対応するTCP/IPヘッダから、第二の管理データに対応する(即ち、分割後のセグメントデータに付与されるべき)TCP/IPヘッダを生成する。
オフロード処理部106は、S501~S505の処理を、生成パケット数分、繰り返す。まずS501で、オフロード処理部106は、第二セグメント分割部218によってセグメント分割処理を行う。具体的には、第二セグメント分割部218は、第一の管理データによって管理されているセグメントデータのアドレスを読み出し元アドレスとして用いて、DMAC109によりセグメントデータを取得する。第二セグメント分割部218は、取得したセグメントデータを、MSS単位のセグメントデータに分割することで、セグメント分割処理を行う。より詳しくは、第二セグメント分割部218は、第二バッファ管理部216で確保した第二の管理データに対し、管理されるデータ領域を書き出し先としてMSS単位でセグメントデータをメモリコピーすることでセグメント分割処理を行う。
S502で、オフロード処理部106は、第二ヘッダ生成部219によってTCPヘッダの生成を行う。第二ヘッダ生成部219は、第一の管理データに対応するTCPヘッダを取得し、第二の管理データに対して、ポート番号情報及びコントロールフラグ等はそのまま使用し、シーケンス番号及びチェックサム等の計算を行う。
S503で、オフロード処理部106は、第二ヘッダ生成部219によってIPヘッダの生成を行う。第二ヘッダ生成部219は、第一の管理データに対応するIPヘッダを取得し、第二の管理データに対して、アドレス情報及びプロトコル情報等をそのまま使用し、第二の管理データごとに異なる値(パケット長、識別子、及びチェックサム等)の計算を行う。
S504で、オフロード処理部106は、動的ロードソフトウェア211から入力されるMACヘッダ生成フラグがONに設定されているか否かを判定する。オフロード処理部106は、MACヘッダ生成フラグがONに設定されている場合にはS505へ処理を進め、MACヘッダ生成フラグがOFFに設定されている場合にはMACヘッダの生成を行わずにS506へ処理を進める。
S505で、オフロード処理部106は、第二ヘッダ生成部219によってMACヘッダの生成を行う。オフロード処理部106は、動的ロードソフトウェア211から入力される、近傍エントリに含まれるMACヘッダのキャッシュ情報を用いてMACヘッダを生成する。具体的には、キャッシュ情報に含まれる、宛先MACアドレス及び送信元MACアドレス等を、第二の管理データに対応するMACヘッダ領域にコピーすることで、MACヘッダを生成する。
このようにして、S501による分割後のセグメントデータに対してTCPヘッダ、IPヘッダ及びMACヘッダが付与されたパケット(MACフレーム)が、送信データとして生成される。生成されたパケット(MACフレーム)は、第二の管理データによって管理される送信バッファに格納される。一方、S505におけるMACヘッダの生成が行われない場合には、S501による分割後のセグメントデータに対してTCPヘッダ及びIPヘッダが付与されたパケットが、送信データとして生成される。この場合、MACヘッダは、OSカーネル201の近傍エントリ処理部209によって生成され、送信データに対して付与されることでMACフレームが生成される。
S506で、オフロード処理部106は、S501~S505の処理について、生成パケット数分の繰り返しが完了したか否かを判定し、完了していなければS501へ処理を戻し、完了したらS507へ処理を進める。
S507で、オフロード処理部106は、パケット生成のためのオフロード処理が完了したことを通知する処理を行う。この完了通知は、種々の方法で実現可能である。例えば、オフロード処理部106の状態を示すレジスタに処理完了を示す値が書き込まれてもよいし、あるいは、CPU102に対して処理完了を示すハードウェア割り込み信号が出力されてもよい。また、CPU102に対して直接信号を出力せず、別途、割り込みコントローラを介して完了通知が行われてもよい。また、動的ロードソフトウェア211から入力されたアドレス領域(RAM104の記憶領域)の特定のビットに、処理完了を示す情報が書き込まれてもよい。
<データ送信処理>
図6は、本実施形態における、フック元(OSカーネル201)へ管理データ(第二の管理データ)を送信するデータ送信処理(S311)の手順を示すフローチャートである。動的ロードソフトウェア211のDL層入力部217は、MACヘッダ生成フラグがONに設定されている場合には、オフロード処理部106によって生成されたパケット(送信データ)に対応する第二の管理データを、転送処理部210に送信する。DL層入力部217は、MACヘッダ生成フラグがOFFに設定されている場合には、オフロード処理部106によって生成されたパケット(送信データ)に対応する第二の管理データを、近傍エントリ処理部209に送信する。
図6は、本実施形態における、フック元(OSカーネル201)へ管理データ(第二の管理データ)を送信するデータ送信処理(S311)の手順を示すフローチャートである。動的ロードソフトウェア211のDL層入力部217は、MACヘッダ生成フラグがONに設定されている場合には、オフロード処理部106によって生成されたパケット(送信データ)に対応する第二の管理データを、転送処理部210に送信する。DL層入力部217は、MACヘッダ生成フラグがOFFに設定されている場合には、オフロード処理部106によって生成されたパケット(送信データ)に対応する第二の管理データを、近傍エントリ処理部209に送信する。
S601で、DL層入力部217は、MACヘッダ生成フラグがONに設定されているか否かを判定する。DL層入力部217は、MACヘッダ生成フラグがONに設定されている場合にはS602へ処理を進め、MACヘッダ生成フラグがOFFに設定されている場合にはS605へ処理を進める。以下では、DL層入力部217は、S602~S603の処理又はS605~S606の処理を、オフロード処理部106によって生成されたパケット数分(第二の管理データ数分)、繰り返す。
S602で、DL層入力部217は、第二の管理データ内のチェックサム計算済フラグをONに設定する。これにより、第二の管理データ内のTCP/IPチェックサム値が計算済みであることを示す。次にS603で、DL層入力部217は、第二の管理データを転送処理部210に入力(送信)する。S603における第二の管理データの入力は、OSカーネル201の機能を用いて行われる。例えば、Linuxにおいては、転送処理部210への第二の管理データの入力は、dev_queue_xmit()を呼び出すことで実現されうる。このようにして、DL層入力部217は、オフロード処理部106によって生成された、上位層のヘッダ(TCP/IPヘッダ)及びMACヘッダを各セグメントデータに付与して得られたMACフレームを、転送処理部210へ送る。
その後、S604で、DL層入力部217は、S602~S603の処理について、オフロード処理部106によって生成されたパケット数分の繰り返しが完了したか否かを判定し、完了していなければS602へ処理を戻す。一方、DL層入力部217は、完了したら図6の手順による処理を終了する。
一方、S605で、DL層入力部217は、S602と同様、DL層入力部217は、第二の管理データ内のチェックサム計算済フラグをONに設定する。次にS606で、DL層入力部217は、第二の管理データを近傍エントリ処理部209に入力(送信)する。S606における第二の管理データの入力は、OSカーネル201の機能を用いて行われる。例えば、Linuxにおいては、近傍エントリ処理部209への第二の管理データの入力は、neigh_resolve_output()を呼び出すことで実現されうる。このようにして、DL層入力部217は、オフロード処理部106によって生成された、上位層のヘッダ(TCP/IPヘッダ)を各セグメントデータに付与して得られたパケットを、近傍エントリ処理部209へ送る。
その後、S607で、DL層入力部217は、S605~S606の処理について、オフロード処理部106によって生成されたパケット数分の繰り返しが完了したか否かを判定し、完了していなければS605へ処理を戻す。一方、DL層入力部217は、完了したら図6の手順による処理を終了する。
<セグメント分割及びヘッダ生成の例(近傍エントリが有効状態の場合)>
図7は、MACヘッダのキャッシュ情報が有効である場合(近傍エントリが有効状態である場合)の、オフロード処理部106によるセグメント分割及びヘッダ生成の例を示す図である。本実施形態のオフロード処理部106において、セグメント分割処理は第二セグメント分割部218によって行われ、ヘッダ生成処理は第二ヘッダ生成部219によって行われる。図7では、管理データ700~709によって管理される(RAM104の記憶領域に確保された)送信バッファの状態の例を示している。
図7は、MACヘッダのキャッシュ情報が有効である場合(近傍エントリが有効状態である場合)の、オフロード処理部106によるセグメント分割及びヘッダ生成の例を示す図である。本実施形態のオフロード処理部106において、セグメント分割処理は第二セグメント分割部218によって行われ、ヘッダ生成処理は第二ヘッダ生成部219によって行われる。図7では、管理データ700~709によって管理される(RAM104の記憶領域に確保された)送信バッファの状態の例を示している。
管理データ700は、プロトコルスタック202から通信プロトコル処理がフックされた際の第一の管理データの例である。管理データ700に対応する送信バッファに格納された送信データ(パケット)は、セグメントデータ701、TCPヘッダ702及びIPヘッダ703で構成されている。なお、送信バッファにおいて、MACヘッダを格納するためのMACヘッダ領域704が確保されている。
セグメントデータ701は、MSSより大きいセグメントサイズを有する場合に、オフロード処理部106によるオフロード処理の対象となる。TCPヘッダ702及びIPヘッダ703は、セグメントデータ701に対して第一ヘッダ生成部206によって生成されたヘッダである。なお、本実施形態では、第一ヘッダ生成部206がヘッダ生成処理を行っている途中でIP処理フック部208によるフック処理が行われることで、TCP/IPチェックサム値は未計算である状態を想定する。
MACヘッダ領域704は、送信データ(パケット)に付与されるMACヘッダを格納するための領域である。管理データ700に対応する送信データ(送信パケット)にはMACヘッダは付与されていない。キャッシュ情報705は、近傍エントリが保持しているMACヘッダのキャッシュ情報である。動的ロードソフトウェア211は、近傍エントリが保持しているキャッシュ情報705をMACヘッダ領域704にコピー(メモリコピー)し、当該キャッシュ情報についてのメモリアドレス情報をオフロード処理部106のレジスタに書き込む。これにより、オフロード処理部106が、キャッシュ情報705を参照することが可能となる。
管理データ706~709は、動的ロードソフトウェア211(第二バッファ管理部216)によって生成(確保)される管理データ(第二の管理データ)である。なお、図7には、セグメント分割処理において生成されるパケット数が4であり、それに応じて4つの管理データ706~709が生成される例を示している。管理データ706~709はそれぞれ、分割されたセグメントデータ(送信データ)を格納するための送信バッファを管理する。
オフロード処理部106では、第二セグメント分割部218は、セグメントデータ701を、MSS単位のセグメントデータ710~713に分割する。セグメントデータ710~713は、管理データ706~709によって管理されているセグメントデータ領域に格納される。
第二ヘッダ生成部219は、管理データ700によって示されるTCPヘッダ702に基づいて、TCPヘッダ714~717を生成し、それぞれセグメントデータ710~713に付与する。また、第二ヘッダ生成部219は、管理データ700によって示されるIPヘッダ703に基づいて、IPヘッダ718~721を生成し、それぞれTCPヘッダ714~717より前に付与する。第二ヘッダ生成部219は更に、キャッシュ情報705に含まれるMACヘッダを複製することによって、MACヘッダ722~725を生成し、それぞれIPヘッダ718~721より前に付与する。このように、オフロード処理部106(第二ヘッダ生成部219)は、セグメント分割処理で分割された各セグメントデータに対して付与するMACヘッダを、近傍エントリが保持しているキャッシュ情報705に基づいて生成する。
このようにして、セグメント分割処理により分割された各セグメントデータに対してTCPヘッダ、IPヘッダ及びMACヘッダを付与して得られたパケット(MACフレーム)が生成される。生成された各パケットは、管理データ806~809によって管理される、対応する送信バッファに格納される。
<セグメント分割及びヘッダ生成の例(近傍エントリが無効状態の場合)>
図8は、MACヘッダのキャッシュ情報が無効である場合(近傍エントリが無効状態である場合)の、オフロード処理部106によるセグメント分割及びヘッダ生成の例を示す図である。ここでは、図7に示される、MACヘッダのキャッシュ情報が有効である場合と異なる点について説明する。
図8は、MACヘッダのキャッシュ情報が無効である場合(近傍エントリが無効状態である場合)の、オフロード処理部106によるセグメント分割及びヘッダ生成の例を示す図である。ここでは、図7に示される、MACヘッダのキャッシュ情報が有効である場合と異なる点について説明する。
近傍エントリに保持されているMACヘッダのキャッシュ情報805が無効である場合、第二ヘッダ生成部219はキャッシュ情報805を使用してMACヘッダを生成することができない。このため、第二ヘッダ生成部219による、MACヘッダの生成及びMACヘッダ領域822~825へのMACヘッダの付与は行われない。この場合、MACヘッダは、OSカーネル201の近傍エントリ処理部209によって生成及び付与される。
<まとめ>
以上説明したように、本実施形態の通信装置100において、動的ロードソフトウェア211は、OSカーネル201による通信プロトコル処理をフックする。動的ロードソフトウェア211は、通信プロトコル処理がフックされると、送信データに付与されるMACヘッダのキャッシュ情報を保持する近傍エントリの状態を判定する。動的ロードソフトウェア211は、判定された近傍エントリの状態に基づいて、ヘッダ生成処理を制御する。動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持している場合、オフロード処理部106がMAC層より上位層のヘッダ及びMACヘッダを生成するよう制御する。一方、動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持していない場合、オフロード処理部106が上位層のヘッダを生成し、OSカーネル201がMACヘッダを生成するよう制御する。
以上説明したように、本実施形態の通信装置100において、動的ロードソフトウェア211は、OSカーネル201による通信プロトコル処理をフックする。動的ロードソフトウェア211は、通信プロトコル処理がフックされると、送信データに付与されるMACヘッダのキャッシュ情報を保持する近傍エントリの状態を判定する。動的ロードソフトウェア211は、判定された近傍エントリの状態に基づいて、ヘッダ生成処理を制御する。動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持している場合、オフロード処理部106がMAC層より上位層のヘッダ及びMACヘッダを生成するよう制御する。一方、動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持していない場合、オフロード処理部106が上位層のヘッダを生成し、OSカーネル201がMACヘッダを生成するよう制御する。
例えば、動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持している場合、オフロード処理部106がTCPヘッダ、IPヘッダ及びMACヘッダを生成するよう制御する。一方、動的ロードソフトウェア211は、近傍エントリが有効なキャッシュ情報を保持していない場合、オフロード処理部106がTCPヘッダ及びIPヘッダを生成し、OSカーネル201がMACヘッダを生成するよう制御する。
このように、OSカーネル201とは独立した動的ロードソフトウェア211により(即ち、OSカーネル201に対する変更を行うことなく)、送信パケットを生成するための通信プロトコル処理の一部をオフロード処理によって実現可能になる。また、MACヘッダのキャッシュ情報を使用可能な場合にはオフロード処理部106にヘッダ生成処理を行わせ、キャッシュ情報を使用不可能な場合にはOSカーネル201にヘッダ生成処理を行わせることで、適切に送信パケットを生成できる。即ち、MACヘッダのキャッシュ情報の使用可否によらず、送信パケットを生成するための通信プロトコル処理の一部をオフロード処理により実現可能になる。通信プロトコル処理に伴うCPU102(プロトコルスタック202)における処理負荷の軽減を、簡易な構成で実現できる。
なお、上述の実施形態は種々の変更が可能である。例えば、図4のS402で使用されるポート番号は、宛先/送信元ポート番号である。また、このポート番号の代わりに、宛先IPアドレスを使用して、宛先IPアドレスがオフロード処理対象の宛先IPアドレスであれば、S403に処理を進めるようにしてもよい。また、処理判定部213は、TCPウインドウスケールのシフトカウント(3ウェイシェイクハンド後)が、所定値(例えば、1)以上であれば、フックした通信プロトコル処理に関連する管理データのソケット情報を書き換えるという判定をしてもよい。また、S409の処理の実行完了時点で、チェックサム計算がオフになっているならば、プロトコル処理返付部214は、チェックサム計算を行った後に、管理データをプロトコルスタック202に戻してもよい。この場合、プロトコル処理返付部214は、管理データをIP層に戻す。
また、上述の実施形態では、動的ロードソフトウェア211によるコールバック処理内で、オフロード処理部106の処理完了を待つ例を説明したが、コールバック処理内で待たなくてもよい。例えば、図3のS309において、動的ロードソフトウェア211は、オフロード処理部106にオフロード処理の実行指示をした後に、S310及びS311の処理をスキップし、S312に処理を進める。更に、図5のS507において、オフロード処理部106は、処理完了をCPU102に対してハードウェア割り込み信号により通知する。動的ロードソフトウェア211は、予めハードウェア割り込み信号に対するハンドラ(Top Half)を登録しておき、ハンドラ内で遅延実行処理(Bottom Half)をスケジュールしておき、当該遅延実行処理としてデータ送信処理(S311)を実行する。遅延実行処理としては、例えば、Linuxにおいてはソフトウェア割り込み又はTasklet等により実現することができる。このような構成にすることで、オフロード処理部106がオフロード処理を行っている間に、CPU102が別の処理を実行することが可能となり、並列処理性能を高めることが可能になる。
[その他の実施形態]
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
100:通信装置、102:CPU、105:通信デバイス、106:オフロード処理部、201:OSカーネル、202:プロトコルスタック、211:動的ロードソフトウェア、213:処理判定部
Claims (11)
- 通信装置であって、
前記通信装置において動作するOSカーネルによる通信プロトコル処理を、前記OSカーネルの代わりに実行する処理手段であって、送信対象の送信データをセグメントデータに分割する分割処理と、前記分割処理で分割された各セグメントデータに対してヘッダを生成して付与するヘッダ生成処理とを行う、前記処理手段と、
前記OSカーネルによる前記通信プロトコル処理をフックするフック手段と、
前記フック手段によって前記通信プロトコル処理がフックされると、前記送信データに付与されるMACヘッダのキャッシュ情報を保持する近傍エントリの状態を判定する判定手段と、
前記判定手段によって判定された前記近傍エントリの状態に基づいて、前記ヘッダ生成処理を制御する制御手段と、を備え、
前記制御手段は、前記近傍エントリが有効なキャッシュ情報を保持している場合、前記処理手段がMAC層より上位層のヘッダ及び前記MACヘッダを生成するよう制御し、前記近傍エントリが有効なキャッシュ情報を保持していない場合、前記処理手段が前記上位層のヘッダを生成し、前記OSカーネルが前記MACヘッダを生成するよう制御する
ことを特徴とする通信装置。 - 前記制御手段は、前記近傍エントリが有効なキャッシュ情報を保持している場合、前記処理手段がTCPヘッダ、IPヘッダ及び前記MACヘッダを生成するよう制御し、前記近傍エントリが有効なキャッシュ情報を保持していない場合、前記処理手段が前記TCPヘッダ及び前記IPヘッダを生成し、前記OSカーネルが前記MACヘッダを生成するよう制御することを特徴とする請求項1に記載の通信装置。
- 前記制御手段は更に、前記送信データのサイズが所定サイズを超える場合に、前記送信データを前記所定サイズのセグメントデータに分割する分割処理を前記処理手段に実行させることを特徴とする請求項1又は2に記載の通信装置。
- 前記制御手段は更に、前記送信データのサイズが前記所定サイズを超えない場合には、前記フック手段によってフックされた前記通信プロトコル処理を前記OSカーネルに戻すことで、当該通信プロトコル処理を前記OSカーネルに実行させることを特徴とする請求項3に記載の通信装置。
- 前記制御手段は、前記送信データのサイズと前記所定サイズとに基づいて、前記分割処理で前記送信データから得られるセグメントデータの数を示すセグメント数を算出し、前記送信データを格納するための送信バッファとは別に、セグメントデータを格納するための、前記セグメント数に等しい数の送信バッファを管理する管理データを生成し、当該管理データを前記処理手段に送ることを特徴とする請求項3又は4に記載の通信装置。
- 前記所定サイズは、TCPにおける最大セグメントサイズであることを特徴とする請求項3乃至5のいずれか1項に記載の通信装置。
- ネットワークを介して通信相手装置との通信を行う通信手段を更に備え、
前記OSカーネルは、
前記送信データの送信先IPアドレスに対応するMACアドレスを、アドレス解決処理により取得し、取得したMACアドレスを含むMACヘッダを生成する生成手段と、
前記送信データを分割して得られた各セグメントデータに前記MACヘッダを付与して得られたMACフレームを、前記通信手段へ転送する転送手段と、を有し、
前記制御手段は、
前記近傍エントリが有効なキャッシュ情報を保持している場合、前記処理手段によって生成された、前記上位層のヘッダ及び前記MACヘッダを各セグメントデータに付与して得られたMACフレームを、前記転送手段へ送り、
前記近傍エントリが有効なキャッシュ情報を保持していない場合、前記処理手段によって生成された、前記上位層のヘッダを各セグメントデータに付与して得られたパケットを、前記生成手段へ送る
ことを特徴とする請求項1乃至6のいずれか1項に記載の通信装置。 - 前記処理手段は、前記分割処理で分割された各セグメントデータに対して付与するMACヘッダを、前記近傍エントリが保持している前記キャッシュ情報に基づいて生成することを特徴とする請求項1乃至7のいずれか1項に記載の通信装置。
- 前記近傍エントリは、前記OSカーネルによって管理されていることを特徴とする請求項1乃至8のいずれか1項に記載の通信装置。
- 通信装置において動作するOSカーネルによる通信プロトコル処理を、前記OSカーネルの代わりに実行する処理手段であって、送信対象の送信データをセグメントデータに分割する分割処理と、前記分割処理で分割された各セグメントデータに対してヘッダを生成して付与するヘッダ生成処理とを行う、前記処理手段を備える通信装置の制御方法であって、
前記OSカーネルによる前記通信プロトコル処理をフックするフック工程と、
前記フック工程で前記通信プロトコル処理がフックされると、前記送信データに付与されるMACヘッダのキャッシュ情報を保持する近傍エントリの状態を判定する判定工程と、
前記判定工程で判定された前記近傍エントリの状態に基づいて、前記ヘッダ生成処理を制御する制御工程と、を備え、
前記制御工程では、前記近傍エントリが有効なキャッシュ情報を保持している場合、前記処理手段がMAC層より上位層のヘッダ及び前記MACヘッダを生成するよう制御し、前記近傍エントリが有効なキャッシュ情報を保持していない場合、前記処理手段が前記上位層のヘッダを生成し、前記OSカーネルが前記MACヘッダを生成するよう制御する
ことを特徴とする通信装置の制御方法。 - 請求項10に記載の通信装置の制御方法の各工程をコンピュータに実行させるためのプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021137368A JP2023031710A (ja) | 2021-08-25 | 2021-08-25 | 通信装置及びその制御方法、並びにプログラム |
US17/872,088 US20230062831A1 (en) | 2021-08-25 | 2022-07-25 | Communication apparatus and control method thereof, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021137368A JP2023031710A (ja) | 2021-08-25 | 2021-08-25 | 通信装置及びその制御方法、並びにプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023031710A true JP2023031710A (ja) | 2023-03-09 |
Family
ID=85288723
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021137368A Pending JP2023031710A (ja) | 2021-08-25 | 2021-08-25 | 通信装置及びその制御方法、並びにプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230062831A1 (ja) |
JP (1) | JP2023031710A (ja) |
-
2021
- 2021-08-25 JP JP2021137368A patent/JP2023031710A/ja active Pending
-
2022
- 2022-07-25 US US17/872,088 patent/US20230062831A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230062831A1 (en) | 2023-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8660133B2 (en) | Techniques to utilize queues for network interface devices | |
US20140029617A1 (en) | Packet processing approach to improve performance and energy efficiency for software routers | |
CN1698337A (zh) | 利用卸载单元处理tcp连接数据 | |
US7822053B2 (en) | Apparatus and method for TCP buffer copy distributed parallel processing | |
JP2007109040A (ja) | 情報処理装置、情報処理システム、通信中継装置および通信制御方法 | |
JP5074872B2 (ja) | プロトコル処理装置及び制御方法 | |
US20180181421A1 (en) | Transferring packets between virtual machines via a direct memory access device | |
US7761587B2 (en) | Apparatus and method for transmitting packet IP offload | |
US11336297B2 (en) | DMA transfer apparatus, method of controlling the same, communication apparatus, method of controlling the same, and non-transitory computer-readable storage medium | |
JP2023031710A (ja) | 通信装置及びその制御方法、並びにプログラム | |
JP2002366427A (ja) | プロセッサ間通信システム及びそれに用いるプロセッサ間通信方法 | |
US8842547B2 (en) | Communication control apparatus and control method | |
US20020078118A1 (en) | Network interface application specific integrated circuit to allow direct attachment for an appliance,such as a printer device | |
JP2009301101A (ja) | プロセッサ間通信システム、プロセッサ、プロセッサ間通信方法、および、通信方法 | |
JP7387335B2 (ja) | 通信装置、制御方法およびプログラム | |
JP7321913B2 (ja) | 通信装置、制御方法およびプログラム | |
JP7423223B2 (ja) | 通信装置 | |
US20230179545A1 (en) | Packet forwarding apparatus with buffer recycling and associated packet forwarding method | |
JP7049140B2 (ja) | 通信装置およびその制御方法 | |
JP2019165423A (ja) | 通信装置、通信装置の制御方法およびプログラム | |
JP6891201B2 (ja) | 通信装置、通信装置の制御方法およびプログラム | |
JP6976786B2 (ja) | 通信装置および通信装置の制御方法 | |
WO2023238326A1 (ja) | スイッチ | |
JP6480747B2 (ja) | 通信装置、制御方法、及びプログラム | |
JP2021129162A (ja) | 通信装置、制御方法およびプログラム |