(57)【要約】【課題】プロセッサを介さずに記憶装置から通信部にデータを直接転送する場合、記憶装置から通信部への転送レートが低いシステムでも、大量のデータを高速に配信することができる負荷軽減装置、サーバ装置及び負荷軽減方法を提供することである。【解決手段】負荷軽減装置は、バッファメモリ部と、データ制御部と、パケット生成部と、通信インタフェース部と、データ解放部とを備える。記憶装置インタフェース部は、プロセッサを介さずに記憶装置からデータを取得する。バッファメモリ部は、データを記憶する。データ制御部は、データを領域毎にバッファメモリ部に記憶させる。パケット生成部は、バッファメモリ部から読み出されたデータを含むパケットを領域毎に生成する。通信インタフェース部は、パケットを外部装置に送信する。データ解放部は、外部装置に受信されたパケットに含まれていたデータが読み出された領域からデータを解放する。【選択図】図２
2015055933.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサを介さずに記憶装置からデータを取得する記憶装置インタフェース部と、
前記記憶装置から取得されたデータを記憶可能であるバッファメモリ部と、
前記記憶装置から取得されたデータを、前記バッファメモリ部に定められた領域毎に、前記バッファメモリ部に書き込んで記憶させるデータ制御部と、
前記バッファメモリ部から前記領域毎にデータを読み出し、前記バッファメモリ部から読み出されたデータを含むパケットを、前記領域毎に生成するパケット生成部と、
生成されたパケットをクライアント装置に送信する通信インタフェース部と、
前記クライアント装置にパケットが受信されたか否かを判定し、前記クライアント装置に受信されたパケットに含まれていたデータが読み出された前記領域から、前記記憶装置から取得されたデータを解放するデータ解放部と、
を備えることを特徴とする負荷軽減装置。
【請求項２】
前記データ制御部は、前記記憶装置から取得されたデータを、前記バッファメモリ部に定められた領域毎に前記バッファメモリ部に記憶させ、前記記憶装置から取得されたデータが記憶された前記領域を示す書込領域カウンタを更新し、
前記パケット生成部は、更新された前記書込領域カウンタが示す前記領域からデータを読み出し、読み出されたデータを含むパケットを生成することを特徴とする請求項１に記載の負荷軽減装置。
【請求項３】
前記データ解放部は、パケットに含まれているデータが読み出された前記領域を示す読出領域カウンタを、前記通信インタフェース部から当該パケットが送信される際に更新し、送信済みのパケットが前記クライアント装置に受信されていない場合には、前記クライアント装置に受信されていない当該送信済みのパケットに含まれていたデータが読み出された前記領域を示すまで、前記読出領域カウンタを戻すことを特徴とする請求項１又は請求項２に記載の負荷軽減装置。
【請求項４】
データを記憶する記憶装置と、
請求項１から請求項３のいずれか一項に記載の負荷軽減装置と、
を備えることを特徴とするサーバ装置。
【請求項５】
負荷軽減装置における負荷軽減方法であって、
記憶装置インタフェース部が、プロセッサを介さずに記憶装置からデータを取得するステップと、
データ制御部が、前記記憶装置から取得されたデータを、バッファメモリ部に定められた領域毎に、前記バッファメモリ部に書き込んで記憶させるステップと、
パケット生成部が、前記バッファメモリ部から前記領域毎にデータを読み出し、前記バッファメモリ部から読み出されたデータを含むパケットを、前記領域毎に生成するステップと、
通信インタフェース部が、生成されたパケットをクライアント装置に送信するステップと、
データ解放部が、前記クライアント装置にパケットが受信されたか否かを判定し、前記クライアント装置に受信されたパケットに含まれていたデータが読み出された前記領域から、前記記憶装置から取得されたデータを解放するステップと、
を有することを特徴とする負荷軽減方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、負荷軽減装置、サーバ装置及び負荷軽減方法に関する。
【背景技術】
【０００２】
サーバ装置は、記憶装置に記憶されたデータからパケットを生成し、生成したパケットを、クライアント装置に向けて通信部から送信する。ここで、サーバ装置では、記憶装置に記憶されたデータがプロセッサにより通信部に転送されているため、プロセッサへの負荷は、大きいものとなっている。そこで、プロセッサへの負荷を軽減（オフロード）することを目的とした負荷軽減装置がある（例えば、特許文献１〜４を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−１９２２１６号公報
【特許文献２】特開２００１−２３０８１２号公報
【特許文献３】特開２０１０−１３６４１４号公報
【特許文献４】特開２０１０−１４８０９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
プロセッサへの負荷を軽減するため、プロセッサを介さずに記憶装置から通信部にデータを直接転送する場合、記憶装置から通信部への転送レートが低いシステムでは、大量のデータを高速にはクライアント装置に配信することができない、という問題がある。
【０００５】
本発明が解決しようとする課題は、プロセッサを介さずに記憶装置から通信部にデータを直接転送する場合、記憶装置から通信部への転送レートが低いシステムでも、大量のデータを高速にクライアント装置に配信することができる負荷軽減装置、サーバ装置及び負荷軽減方法を提供することである。
【課題を解決するための手段】
【０００６】
実施形態の負荷軽減装置は、記憶装置インタフェース部と、バッファメモリ部と、データ制御部と、パケット生成部と、通信インタフェース部と、データ解放部とを備える。記憶装置インタフェース部は、プロセッサを介さずに記憶装置からデータを取得する。バッファメモリ部は、前記記憶装置から取得されたデータを記憶可能である。データ制御部は、前記記憶装置から取得されたデータを、前記バッファメモリ部に定められた領域毎に、前記バッファメモリ部に書き込んで記憶させる。パケット生成部は、前記バッファメモリ部から前記領域毎にデータを読み出し、前記バッファメモリ部から読み出されたデータを含むパケットを、前記領域毎に生成する。通信インタフェース部は、生成されたパケットをクライアント装置に送信する。データ解放部は、前記クライアント装置にパケットが受信されたか否かを判定し、前記クライアント装置に受信されたパケットに含まれていたデータが読み出された前記領域から、前記記憶装置から取得されたデータを解放する。
【０００７】
実施形態のサーバ装置は、記憶装置と、実施形態の負荷軽減装置とを備える。記憶装置は、データを記憶する。実施形態の負荷軽減装置は、記憶装置インタフェース部と、バッファメモリ部と、データ制御部と、パケット生成部と、通信インタフェース部と、データ解放部とを備える。記憶装置インタフェース部は、プロセッサを介さずに記憶装置からデータを取得する。バッファメモリ部は、前記記憶装置から取得されたデータを記憶可能である。データ制御部は、前記記憶装置から取得されたデータを、前記バッファメモリ部に定められた領域毎に、前記バッファメモリ部に書き込んで記憶させる。パケット生成部は、前記バッファメモリ部から前記領域毎にデータを読み出し、前記バッファメモリ部から読み出されたデータを含むパケットを、前記領域毎に生成する。通信インタフェース部は、生成されたパケットをクライアント装置に送信する。データ解放部は、前記クライアント装置にパケットが受信されたか否かを判定し、前記クライアント装置に受信されたパケットに含まれていたデータが読み出された前記領域から、前記記憶装置から取得されたデータを解放する。
【図面の簡単な説明】
【０００８】
【図１】実施形態における、サーバ装置の構成例を示すブロック図である。
【図２】実施形態における、負荷軽減装置の構成例を示すブロック図である。
【図３】実施形態における、パケットを通信メモリ部に書き込むまでの動作手順を示すフローチャートである。
【図４】実施形態における、パケットを通信インタフェース部から送信するまでの動作手順を示すフローチャートである。
【図５】実施形態における、パケットを再送するか否かを判定する動作手順を示すフローチャートである。
【図６】実施形態における、負荷軽減装置の動作例を分割して示す表である。
【図７】実施形態における、負荷軽減装置の動作例を分割して示す表である。
【図８】実施形態における、負荷軽減装置の動作例を分割して示す表である。
【図９】実施形態における、負荷軽減装置の動作例を分割して示す表である。
【図１０】実施形態における、負荷軽減装置の動作例を分割して示す表である。
【図１１】実施形態における、負荷軽減装置の動作例を分割して示す表である。
【図１２】実施形態における、負荷軽減装置の動作例を分割して示す表である。
【発明を実施するための形態】
【０００９】
実施形態について図面を参照して詳細に説明する。実施形態の負荷軽減装置、サーバ装置及び負荷軽減方法は、プロセッサを介さずに記憶装置から通信部にデータを直接転送する場合、記憶装置から通信部への転送レートが低いシステムでも、大量のデータを高速に配信することができる。
【００１０】
まず、サーバ装置の構成例について説明する。
図１には、サーバ装置の構成例がブロック図により示されている。サーバ装置１０は、データを含むパケットを生成し、生成したパケットを、通信回線２０（ネットワーク）を介してクライアント装置３０に送信（配信）する。パケットに含められるデータには、例えば、画像データ（動画像データ、静止画像データ）、音声データ、及び、テキストデータがある。
【００１１】
サーバ装置１０は、バス１０１と、プロセッサ１０２と、記憶部１０３と、記憶装置１０６と、負荷軽減装置１１０とを備える。プロセッサ１０２（中央演算処理装置（ＣＰＵ：Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ））は、記憶部１０３に記憶されているプログラムに基づいて、バス１０１を介して、サーバ装置１０の各部を制御する。
【００１２】
記憶部１０３は、各種データを記憶する。この各種データは、例えば、プロセッサ１０２が動作する際に生成されたパラメータデータでもよい。また、記憶部１０３は、プロセッサ１０２を動作させるためのプログラムを記憶してもよい。記憶部１０３は、半導体メモリでもよい。
【００１３】
記憶装置１０６は、クライアント装置３０に送信されるパケットに含まれるデータを、ファイル単位で記憶する。これらのファイルは、ファイル（データ）を識別するための情報（以下、「ファイル識別情報」という。）に基づいて識別される。記憶装置１０６は、例えば、ハードディスクドライブを有していてもよい。記憶装置１０６は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ Ａｒｒａｙ ｏｆ Ｉｎｅｘｐｅｎｓｉｖｅ Ｄｉｓｋｓ）に基づいて、データを記憶してもよい。
【００１４】
負荷軽減装置１１０（ハードウェア）は、プロセッサ１０２を介さずに、記憶装置１０６からデータを取得する。例えば、負荷軽減装置１１０は、ＤＭＡ（Ｄｉｒｅｃｔ Ｍｅｍｏｒｙ Ａｃｃｅｓｓ：ダイレクト・メモリ・アクセス）により、記憶装置１０６からデータを取得してもよい。負荷軽減装置１１０は、記憶装置制御部１０５と、通信部１０４と、接続部１０７とを備える。負荷軽減装置１１０のこれらの各部の間でも、データは、ＤＭＡにより転送されてよい。
【００１５】
次に、負荷軽減装置１１０の構成例について説明する。
図２には、負荷軽減装置の構成例がブロック図により示されている。負荷軽減装置１１０は、より詳細には、バスインタフェース部１１１と、記憶装置制御部１０５と、通信部１０４と、接続部１０７とを備える。
【００１６】
記憶装置制御部１０５は、記憶装置インタフェース部１１５と、データ制御部１１４とを備える。データ制御部１１４は、書込領域カウンタＣ２０２を備える。
接続部１０７は、バッファメモリ部１１６と、制御用通信線Ｓ３０１と、書き込み用通信線Ｓ３０２と、読み出し用通信線Ｓ３０３とを備える。制御用通信線Ｓ３０１は、通信部１０４と記憶装置制御部１０５との間の通信線である。書き込み用通信線Ｓ３０２は、バッファメモリ部１１６と記憶装置制御部１０５との間の通信線である。読み出し用通信線Ｓ３０３は、バッファメモリ部１１６と通信部１０４との間の通信線である。
【００１７】
通信部１０４は、制御部１１２と、通信インタフェース部１１３と、通信メモリ部１１８とを備える。制御部１１２（ＴＯＥ：ＴＣＰ／ＩＰ Ｏｆｆｌｏａｄ Ｅｎｇｉｎｅ）は、パケット生成部１１２１と、データ解放部１１２２と、インデックスメモリ部１１７と、ＡＣＫ受信領域カウンタＣ２０１と、読出領域カウンタＣ２０３とを備える。なお、制御部１１２は、データ制御部１１４が書込領域カウンタＣ２０２を備える代わりに、書込領域カウンタＣ２０２をさらに備えてもよい。
【００１８】
バスインタフェース部１１１には、バス１０１（図１を参照）を介して、各種情報が入力される。この各種情報には、例えば、ファイル識別情報が含まれていてもよい。ファイル識別情報は、バス１０１を介して、プロセッサ１０２から入力される。バスインタフェース部１１１は、ファイル識別情報を、記憶装置制御部１０５及び通信部１０４に転送する。
【００１９】
なお、バスインタフェース部１１１には、記憶装置制御部１０５及び通信部１０４の少なくとも一方から、動作状態情報が入力されてもよい。この動作状態情報は、例えば、記憶装置制御部１０５及び通信部１０４の少なくとも一方の動作状態を示す情報でもよい。バスインタフェース部１１１は、記憶装置制御部１０５及び通信部１０４の少なくとも一方から入力された動作状態情報を、バス１０１を介してプロセッサ１０２に転送してもよい。
【００２０】
バッファメモリ部１１６には、通信部１０４により生成されるパケットのサイズ（長さ）に応じて、領域が定められる。以下では、一例として、バッファメモリ部１１６には、領域１〜領域６が定められるものとして説明を続ける。バッファメモリ部１１６は、データ制御部１１４から書き込み用通信線Ｓ３０２を介して各領域に書き込まれたデータを、記憶可能である。バッファメモリ部１１６は、半導体メモリでもよい。
【００２１】
書込領域カウンタＣ２０２は、データ制御部１１４が記憶装置インタフェース部１１５から取得したデータが書き込まれる領域を示すカウンタである。図２では、書込領域カウンタＣ２０２は、領域１〜領域６のいずれかを示すインデックス番号を示すカウンタである。
データ制御部１１４には、パケット生成部１１２１から、制御用通信線Ｓ３０１を介してファイル識別情報が入力される。データ制御部１１４は、ファイル識別情報を、記憶装置インタフェース部１１５に転送する。この転送の応答として、データ制御部１１４には、記憶装置インタフェース部１１５がファイル識別情報に基づいて記憶装置１０６から取得したデータが、記憶装置インタフェース部１１５から入力される。
【００２２】
なお、データ制御部１１４には、バスインタフェース部１１１から、ファイル識別情報が入力されてもよい。また、データ制御部１１４は、ＲＡＩＤに基づいて、記憶装置インタフェース部１１５を制御してもよい。
【００２３】
データ制御部１１４は、書込領域カウンタＣ２０２を更新し、更新した書込領域カウンタＣ２０２が示すバッファメモリ部１１６に定められた領域に、書き込み用通信線Ｓ３０２を介して、記憶装置インタフェース部１１５から取得したデータを書き込んで記憶させる。
【００２４】
記憶装置インタフェース部１１５には、ファイル識別情報が、データ制御部１１４から入力される。記憶装置インタフェース部１１５は、記憶装置１０６にアクセスし、ファイル識別情報により識別されるファイルを参照する。記憶装置インタフェース部１１５は、参照したファイルからデータをパケットサイズ以内で取得する。記憶装置インタフェース部１１５は、取得したデータを、データ制御部１１４に転送する。
【００２５】
なお、記憶装置インタフェース部１１５は、ＳＡＴＡ（Ｓｅｒｉａｌ Ａｄｖａｎｃｅｄ Ｔｅｃｈｎｏｌｏｇｙ Ａｔｔａｃｈｍｅｎｔ）規格、又は、ＳＣＳＩ（Ｓｍａｌｌ Ｃｏｍｐｕｔｅｒ Ｓｙｓｔｅｍ Ｉｎｔｅｒｆａｃｅ）規格に基づいて、記憶装置１０６にアクセスし、データを取得してもよい。
【００２６】
通信インタフェース部１１３は、通信回線２０（図１を参照）を介して、クライアント装置３０（図１を参照）との通信を実行する。通信インタフェース部１１３は、ＭＡＣアドレス（Ｍｅｄｉａ Ａｃｃｅｓｓ Ｃｏｎｔｒｏｌ ａｄｄｒｅｓｓ）に基づいて、通信回線２０上で識別されてもよい。通信インタフェース部１１３には、読出領域カウンタＣ２０３の値が、パケット生成部１１２１から入力される。通信インタフェース部１１３は、読出領域カウンタＣ２０３の値に基づいて通信メモリ部１１８からパケットを取得し、取得したパケットをクライアント装置３０に送信する。
【００２７】
通信インタフェース部１１３は、ＡＣＫ信号をクライアント装置３０から受信する。このＡＣＫ信号（肯定応答）は、サーバ装置１０から送信されたパケット（送信済みのパケット）を受信したクライアント装置３０から、応答としてサーバ装置１０に送信される信号である。ＡＣＫ信号は、通信インタフェース部１１３からクライアント装置３０に送信されたパケットに、対応付けられている。例えば、ＡＣＫ信号には、サーバ装置１０から送信されたパケットを識別するための情報（パケット識別情報）が含まれていてもよい。通信インタフェース部１１３は、受信したＡＣＫ信号を、通信メモリ部１１８に記憶させる。通信インタフェース部１１３は、クライアント装置３０から受信したＡＣＫ信号以外の信号を、通信メモリ部１１８に記憶させてもよい。
【００２８】
通信メモリ部１１８は、制御部１１２と通信インタフェース部１１３との間で、動作するタイミングや速度に差があることを吸収するために設けられたバッファである。通信メモリ部１１８は、パケット生成部１１２１により生成されたパケットと、パケット生成部１１２１から入力された書込領域カウンタＣ２０２の値とを対応付けて記憶する。また、通信メモリ部１１８は、通信インタフェース部１１３が受信した信号（例えば、ＡＣＫ信号）を記憶する。
【００２９】
インデックスメモリ部１１７は、バッファメモリ部１１６に定められた領域を示すインデックスを記憶する。インデックスの項目には、領域の先頭アドレスと、領域サイズ（領域の長さ）と、「次の領域のインデックス番号」とがある。領域サイズは、パケットサイズに応じて定められる。インデックスの例については、図６〜図１２を用いて後述する。
【００３０】
なお、インデックスの項目「次の領域のインデックス番号」には、連続する次のインデックス番号が割り当てられるとは限らない。これは、サーバ装置１０が複数の通信接続（コネクション）を並列に実行している場合には、他の通信接続によりインデックス番号が使用されることがあるためである。以下では、インデックスの項目「次の領域のインデックス番号」は、連続する次のインデックス番号が割り当てられるものとして説明を続ける。
【００３１】
パケット生成部１１２１には、書込領域カウンタＣ２０２の値が、制御用通信線Ｓ３０１を介してデータ制御部１１４から入力される。パケット生成部１１２１は、書込領域カウンタＣ２０２が示すバッファメモリ部１１６に定められた領域から、データを読み出す。パケット生成部１１２１は、読み出したデータを含むパケットを生成する。パケット生成部１１２１は、生成したパケットと、書込領域カウンタＣ２０２の値とを対応付けて、通信メモリ部１１８に記憶させる。したがって、この生成されたパケットは、対応付けられた書込領域カウンタＣ２０２が示すバッファメモリ部１１６に定められた領域から読み出されたデータを含む。
【００３２】
パケット生成部１１２１は、パケットを通信インタフェース部１１３から送信させる際、送信する当該パケットに含まれているデータが読み出された領域を示すよう、インデックスメモリ部１１７に記憶されたインデックス（次の領域のインデックス番号）に基づいて、読出領域カウンタＣ２０３を更新する。パケット生成部１１２１は、読出領域カウンタＣ２０３の値を、通信インタフェース部１１３に出力する。
【００３３】
パケット生成部１１２１は、ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信する時刻が過ぎてタイムアウトした場合、タイムアウトしたＡＣＫ信号に対応付けられた送信済みのパケットに含まれていたデータの読み出された領域を示すまで、読出領域カウンタＣ２０３を戻す。
【００３４】
データ解放部１１２２は、ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信した場合、受信したＡＣＫ信号に対応付けられた送信済みのパケットに含まれていたデータの読み出された領域を示すまで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
【００３５】
データ解放部１１２２は、ＡＣＫ受信領域カウンタＣ２０１が示すバッファメモリ部１１６の各領域から、データを解放する。ここで、データ解放部１１２２は、ＡＣＫ受信領域カウンタＣ２０１が示すバッファメモリ部１１６の各領域を示すインデックスを無効にすることにより、データを解放する。例えば、データ解放部１１２２は、ＡＣＫ受信領域カウンタＣ２０１が示すバッファメモリ部１１６の各領域を示すインデックスの項目「次の領域のインデックス番号」に「無効（例えば、値０）」を登録することにより、データを解放する。
【００３６】
読出領域カウンタＣ２０３は、送信されるパケットに含まれるデータが記憶されている領域を示すカウンタである。図２では、領域１〜領域６のいずれかを示すインデックス番号を示すカウンタである。
ＡＣＫ受信領域カウンタＣ２０１は、受信されたＡＣＫ信号により識別されるパケットに含まれていたデータが記憶されている領域を示すカウンタである。図２では、領域１〜領域６のいずれかを示すインデックス番号を示すカウンタである。
【００３７】
次に、動作手順例を説明する。
図３は、パケットを通信メモリ部に書き込むまでの動作手順を示すフローチャートである。
【００３８】
（ステップＳ１）データ制御部１１４及び制御部１１２は、バスインタフェース部１１１を介して、ファイル識別情報を取得する。制御部１１２は、ファイル識別情報を、制御用通信線Ｓ３０１を介してデータ制御部１１４に出力する。データ制御部１１４は、ファイル識別情報を、記憶装置インタフェース部１１５に転送する。記憶装置インタフェース部１１５は、記憶装置１０６に記憶されているファイルを、ファイル識別情報に基づいて参照する。
【００３９】
（ステップＳ２）記憶装置インタフェース部１１５は、参照したファイルから、データをパケットサイズ以内で取得する。記憶装置インタフェース部１１５は、取得したデータを、データ制御部１１４に転送する。
【００４０】
（ステップＳ３）データ制御部１１４は、書込領域カウンタＣ２０２を更新し、更新した書込領域カウンタＣ２０２が示すバッファメモリ部１１６に定められた領域に、取得したデータを書き込んで記憶させる。
【００４１】
（ステップＳ４）パケット生成部１１２１は、書込領域カウンタＣ２０２が示すバッファメモリ部１１６に定められた領域から、データを読み出す。
（ステップＳ５）パケット生成部１１２１は、読み出したデータを含むパケットを生成する。
（ステップＳ６）パケット生成部１１２１は、生成したパケットを、通信メモリ部１１８に記憶させる。
【００４２】
（ステップＳ６）パケット生成部１１２１は、ファイル識別情報により識別されたファイルの終端までデータを読み出したか否か、を判定する。ファイルの終端までデータを読み出した場合（ステップＳ６：Ｙｅｓ）、パケット生成部１１２１は、処理を終了する。一方、ファイルの終端まではデータを読み出していない場合（ステップＳ６：Ｎｏ）、パケット生成部１１２１は、ステップＳ３に処理を戻す。
【００４３】
図４は、パケットを通信インタフェース部から送信するまでの動作手順を示すフローチャートである。
（ステップＳａ１）パケット生成部１１２１は、パケットを通信インタフェース部１１３から送信させる際、送信する当該パケットに含まれているデータが読み出された領域を示すよう、読出領域カウンタＣ２０３を更新する。パケット生成部１１２１は、読出領域カウンタＣ２０３の値を、通信インタフェース部１１３に出力する。
【００４４】
（ステップＳａ２）通信インタフェース部１１３は、読出領域カウンタＣ２０３が示すバッファメモリ部１１６に定められた領域から読み出されたデータを含むパケットを、通信メモリ部１１８から読み出す。
【００４５】
（ステップＳａ３）通信インタフェース部１１３は、通信メモリ部１１８から読み出したパケットを送信可能であるか否かを、所定条件（例えば、ＴＣＰ／ＩＰプロトコル）に基づいて判定する。通信メモリ部１１８から読み出したパケットを送信可能である場合（ステップＳａ３：Ｙｅｓ）通信インタフェース部１１３は、ステップＳａ３に処理を進める。一方、通信メモリ部１１８から読み出したパケットを送信可能でない場合（ステップＳａ３：Ｎｏ）通信インタフェース部１１３は、ステップＳａ３を再実行する。
（ステップＳａ４）通信インタフェース部１１３は、通信メモリ部１１８から読み出したパケットを、通信回線２０を介してクライアント装置３０に送信し、処理を終了する。
【００４６】
図５は、パケットを再送するか否かを判定する動作手順を示すフローチャートである。
（ステップＳｂ１）パケット生成部１１２１は、ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信したか否か、を判定する。ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信した場合（ステップＳｂ１：Ｙｅｓ）、パケット生成部１１２１は、ステップＳｂ４に処理を進める。一方、ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信していない場合（ステップＳｂ１：Ｎｏ）、パケット生成部１１２１は、ステップＳｂ２に処理を進める。
【００４７】
（ステップＳｂ２）パケット生成部１１２１は、ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信する時刻が過ぎてタイムアウトしたか否か、を判定する。ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信する時刻が過ぎてタイムアウトした場合（ステップＳｂ２：Ｙｅｓ）、パケット生成部１１２１は、ステップＳｂ３に処理を進める。一方、ＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信する時刻が過ぎておらずタイムアウトしていない場合（ステップＳｂ２：Ｎｏ）、パケット生成部１１２１は、ステップＳｂ１に処理を戻す。
【００４８】
（ステップＳｂ３）パケット生成部１１２１は、タイムアウトしたＡＣＫ信号に対応付けられた送信済みのパケットに含まれていたデータの読み出された領域を示すまで、読出領域カウンタＣ２０３を戻す。パケット生成部１１２１は、処理を終了する。
【００４９】
（ステップＳｂ４）データ解放部１１２２は、受信したＡＣＫ信号に対応付けられた送信済みのパケットに含まれていたデータの読み出された領域を示すまで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
【００５０】
（ステップＳｂ５）データ解放部１１２２は、ＡＣＫ受信領域カウンタＣ２０１が示すバッファメモリ部１１６の各領域から、データを解放する。ここで、データ解放部１１２２は、ＡＣＫ受信領域カウンタＣ２０１が示すバッファメモリ部１１６の各領域を示すインデックスを無効にすることにより、データを解放する。
【００５１】
次に、負荷軽減装置１１０の動作例を説明する。
図６、図７、図８、図９、図１０、図１１及び図１２には、負荷軽減装置の動作例が、分割された表により示されている。つまり、図６〜図１２には、これらの図の順に連続する動作が示されている。また、図６〜図１２に示された表では、動作順は、最上段から最下段に向かう順である。また、図６〜図１２に示された表の各段の説明については、直近の動作からの相違点（差分）についてのみ説明する。
【００５２】
＜図６に示す、動作「コネクション時に初期化」＞
パケット生成部１１２１は、インデックスメモリ部１１７に記憶されたインデックスを初期化する。ここで、パケット生成部１１２１は、インデックスの一部のみを初期化してもよい。図６では、パケット生成部１１２１は、インデックスのうち、インデックス番号１が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（無効，無効，無効）と初期化する。したがって、インデックス番号２〜インデックス番号６がそれぞれ示す領域のインデックスは、初期化されておらず「不定」である。
【００５３】
書込領域カウンタＣ２０２の値は、インデックス番号０（無効）となっている。読出領域カウンタＣ２０３の値は、インデックス番号０（無効）となっている。ＡＣＫ受信領域カウンタＣ２０１の値は、インデックス番号０（無効）となっている。
バッファメモリ部１１６に定められた領域１〜領域６は、いずれもデータを記憶しておらず、データが不定となっている。
【００５４】
＜図６に示す、動作「第１パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域１に、第１パケットに含まれることになるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号０）を、インデックス番号１に更新する。
パケット生成部１１２１は、インデックス番号１が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域１の先頭，領域１サイズ，終端）と更新する。ここで、終端とは、パケットとして送信される最後のデータが記憶されている領域であることを示す。パケット生成部１１２１は、書込領域カウンタＣ２０２の値（インデックス番号１）が示す領域１からデータを取得し、第１パケットを生成する。
本動作例では、バッファメモリ部１１６には、パケットに含まれることになるデータが書き込まれているが、生成されたパケット又はその一部が書き込まれてもよい。
【００５５】
＜図６に示す、動作「第１パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号０）を、インデックス番号１に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号１）と同じ書込領域カウンタＣ２０２の値（インデックス番号１）に対応付けられて記憶されている第１パケットを、通信メモリ部１１８から取得し、取得した第１パケットをクライアント装置３０に送信する。
【００５６】
＜図６に示す、動作「第１パケットに対応付けられたＡＣＫ信号を受信」＞
通信インタフェース部１１３は、第１パケットに対応付けられたＡＣＫ信号を受信したとする。
データ解放部１１２２は、受信したＡＣＫ信号に対応付けられた送信済みの第１パケットに含まれていたデータの読み出された領域１を示すインデックス番号１まで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
データ解放部１１２２は、インデックス番号１が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域１の先頭，領域１サイズ，無効）と更新する。これにより、バッファメモリ部１１６に定められた領域１に記憶されていたデータは、解放される。
【００５７】
＜図７に示す、動作「第２パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域２に、第２パケットに含まれることになるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号１）を、インデックス番号２に更新する。
パケット生成部１１２１は、インデックス番号２が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域２の先頭，領域２サイズ，終端）と更新する。パケット生成部１１２１は、書込領域カウンタＣ２０２の値（インデックス番号２）が示す領域２からデータを取得し、第２パケットを生成する。
【００５８】
＜図７に示す、動作「第３パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域３に、第３パケットに含まれることになるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号２）を、インデックス番号３に更新する。
パケット生成部１１２１は、インデックス番号２が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域２の先頭，領域２サイズ，インデックス番号３）と更新する。これにより、インデックス番号３が示す領域３に含まれることになるデータは、インデックス番号２が示す領域２に含まれることになるデータに続くことになる。
パケット生成部１１２１は、インデックス番号３が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域３の先頭，領域３サイズ，終端）と更新する。パケット生成部１１２１は、書込領域カウンタＣ２０３の値（インデックス番号３）が示す領域３からデータを取得し、第３パケットを生成する。
【００５９】
＜図７に示す、動作「第４パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域４に、第４パケットに含まれることになるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号３）を、インデックス番号４に更新する。
パケット生成部１１２１は、インデックス番号３が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域３の先頭，領域３サイズ，インデックス番号４）と更新する。これにより、インデックス番号４が示す領域４に含まれることになるデータは、インデックス番号３が示す領域３に含まれることになるデータに続くことになる。
パケット生成部１１２１は、インデックス番号４が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域４の先頭，領域４サイズ，終端）と更新する。パケット生成部１１２１は、書込領域カウンタＣ２０３の値（インデックス番号４）が示す領域４からデータを取得し、第４パケットを生成する。
本動作例では、データ制御部１１４は、第２〜第４パケットに含まれることになるデータを、パケット毎に（３回に分けて）バッファメモリ部１１６に記憶させているが、送信するデータ量が多いために複数のパケットを生成する場合には、インデックス処理を連続して実行し、データの読み込みを連続して実行してもよい。
【００６０】
＜図８に示す、動作「第２パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号１）を、インデックス番号２に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号２）と同じ書込領域カウンタＣ２０２の値（インデックス番号２）に対応付けられて記憶されている第２パケットを、通信メモリ部１１８から取得し、取得した第２パケットをクライアント装置３０に送信する。
【００６１】
＜図８に示す、動作「第３パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号２）を、インデックス番号３に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号３）と同じ書込領域カウンタＣ２０２の値（インデックス番号３）に対応付けられて記憶されている第３パケットを、通信メモリ部１１８から取得し、取得した第３パケットをクライアント装置３０に送信する。
【００６２】
＜図８に示す、動作「第４パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号３）を、インデックス番号４に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号４）と同じ書込領域カウンタＣ２０２の値（インデックス番号４）に対応付けられて記憶されている第４パケットを、通信メモリ部１１８から取得し、取得した第４パケットをクライアント装置３０に送信する。
【００６３】
＜図８に示す、動作「第３パケットに対応付けられたＡＣＫ信号を受信」＞
通信インタフェース部１１３は、第３パケットに対応付けられたＡＣＫ信号を受信したとする。
データ解放部１１２２は、受信したＡＣＫ信号に対応付けられた送信済みの第３パケットに含まれていたデータの読み出された領域３を示すインデックス番号３まで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
【００６４】
データ解放部１１２２は、インデックス番号３より前のインデックス番号２が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域２の先頭，領域２サイズ，無効）と更新する。これにより、バッファメモリ部１１６に定められた領域２に記憶されていたデータは、解放される。また、データ解放部１１２２は、インデックス番号３が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域３の先頭，領域３サイズ，無効）と更新する。これにより、バッファメモリ部１１６に定められた領域３に記憶されていたデータは、解放される。
【００６５】
＜図９に示す、動作「第５パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域５に、第５パケットに含まれるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号４）を、インデックス番号５に更新する。
パケット生成部１１２１は、インデックス番号４が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域４の先頭，領域４サイズ，インデックス番号５）と更新する。これにより、インデックス番号５が示す領域５に含まれることになるデータは、インデックス番号４が示す領域４に含まれることになるデータに続くことになる。
パケット生成部１１２１は、インデックス番号５が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域５の先頭，領域５サイズ，終端）と更新する。パケット生成部１１２１は、書込領域カウンタＣ２０３の値（インデックス番号５）が示す領域５からデータを取得し、第５パケットを生成する。
【００６６】
＜図９に示す、動作「第５パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号４）を、インデックス番号５に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号５）と同じ書込領域カウンタＣ２０２の値（インデックス番号５）に対応付けられて記憶されている第５パケットを、通信メモリ部１１８から取得し、取得した第５パケットをクライアント装置３０に送信する。
【００６７】
＜図９に示す、動作「第５パケットに対応付けられたＡＣＫ信号を受信」＞
通信インタフェース部１１３は、第５パケットに対応付けられたＡＣＫ信号を受信したとする。
データ解放部１１２２は、受信したＡＣＫ信号に対応付けられた送信済みの第５パケットに含まれていたデータの読み出された領域５を示すインデックス番号５まで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
【００６８】
データ解放部１１２２は、インデックス番号５が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域５の先頭，領域５サイズ，無効）と更新する。これにより、バッファメモリ部１１６に定められた領域５に記憶されていたデータは、解放される。
【００６９】
＜図１０に示す、動作「第６パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域６に、第６パケットに含まれるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号５）を、インデックス番号６に更新する。
パケット生成部１１２１は、インデックス番号５が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域５の先頭，領域５サイズ，インデックス番号６）と更新する。これにより、インデックス番号６が示す領域６に含まれることになるデータは、インデックス番号５が示す領域５に含まれることになるデータに続くことになる。
パケット生成部１１２１は、インデックス番号６が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域６の先頭，領域６サイズ，終端）と更新する。パケット生成部１１２１は、書込領域カウンタＣ２０３の値（インデックス番号６）が示す領域６からデータを取得し、第６パケットを生成する。
【００７０】
＜図１０に示す、動作「第７パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域１に、第７パケットに含まれるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号６）を、インデックス番号１に更新する。
パケット生成部１１２１は、インデックス番号１が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域１の先頭，領域１サイズ，終端）と更新する。パケット生成部１１２１は、書込領域カウンタＣ２０３の値（インデックス番号１）が示す領域１からデータを取得し、第７パケットを生成する。
なお、インデックスは、繰り返し使用される。したがって、第７パケットを生成する際に更新されたインデックスのうち、領域１の先頭と、領域１サイズとは、第１パケットを生成した際と同じインデックス値になるとは限らない。
【００７１】
＜図１０に示す、動作「第６パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号５）を、インデックス番号６に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号６）と同じ書込領域カウンタＣ２０２の値（インデックス番号６）に対応付けられて記憶されている第６パケットを、通信メモリ部１１８から取得し、取得した第６パケットをクライアント装置３０に送信する。
【００７２】
＜図１０に示す、動作「第７パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号６）を、インデックス番号１に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号１）と同じ書込領域カウンタＣ２０２の値（インデックス番号１）に対応付けられて記憶されている第７パケットを、通信メモリ部１１８から取得し、取得した第７パケットをクライアント装置３０に送信する。
【００７３】
＜図１１に示す、動作「第８パケットを生成」＞
データ制御部１１４は、バッファメモリ部１１６に定められた領域２に、第８パケットに含まれるデータを記憶させる。データ制御部１１４は、書込領域カウンタＣ２０２の値（インデックス番号１）を、インデックス番号２に更新する。
パケット生成部１１２１は、インデックス番号２が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域２の先頭，領域２サイズ，終端）と更新する。パケット生成部１１２１は、書込領域カウンタＣ２０３の値（インデックス番号２）が示す領域２からデータを取得し、第８パケットを生成する。
【００７４】
＜図１１に示す、動作「第６パケットのタイムアウト」＞
第６パケットに対応付けられたＡＣＫ信号を通信インタフェース部１１３がクライアント装置３０から受信する時刻が過ぎて、第６パケットに対応付けられたＡＣＫ信号が、タイムアウトしたとする。
パケット生成部１１２１は、クライアント装置３０に正常に受信されたパケットに含まれていたデータの読み出された領域を示すＡＣＫ受信領域カウンタの値まで、読出領域カウンタＣ２０３を戻す。より具体的には、パケット生成部１１２１は、タイムアウトしていないＡＣＫ信号に対応付けられた送信済みの第５パケットに含まれていたデータの読み出された領域５を示すインデックス番号５まで、読出領域カウンタＣ２０３を戻す。
【００７５】
＜図１１に示す、動作「第６パケットの再送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号５）を、インデックス番号６に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号６）と同じ書込領域カウンタＣ２０２の値（インデックス番号６）に対応付けられて記憶されている第６パケットを、通信メモリ部１１８から取得し、取得した第６パケットをクライアント装置３０に再送信する。
【００７６】
＜図１１に示す、動作「第６パケットに対応付けられたＡＣＫ信号を受信」＞
通信インタフェース部１１３は、再送信済みの第６パケットに対応付けられたＡＣＫ信号を受信したとする。
データ解放部１１２２は、受信したＡＣＫ信号に対応付けられた再送信済みの第６パケットに含まれていたデータの読み出された領域６を示すインデックス番号６まで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
データ解放部１１２２は、インデックス番号６が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域６の先頭，領域６サイズ，無効）と更新する。これにより、バッファメモリ部１１６に定められた領域６に記憶されていたデータは、解放される。
【００７７】
＜図１２に示す、動作「第７パケットの再送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号６）を、インデックス番号１に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号１）と同じ書込領域カウンタＣ２０２の値（インデックス番号１）に対応付けられて記憶されている第７パケットを、通信メモリ部１１８から取得し、取得した第７パケットをクライアント装置３０に再送信する。
【００７８】
＜図１２に示す、動作「第８パケットを送信」＞
パケット生成部１１２１は、読出領域カウンタＣ２０３の値（インデックス番号１）を、インデックス番号２に更新する。
通信インタフェース部１１３は、読出領域カウンタＣ２０３の値（インデックス番号１）と同じ書込領域カウンタＣ２０２の値（インデックス番号１）に対応付けられて記憶されている第７パケットを、通信メモリ部１１８から取得し、取得した第７パケットをクライアント装置３０に送信する。
【００７９】
＜図１２に示す、動作「第７パケットに対応付けられたＡＣＫ信号を受信」＞
通信インタフェース部１１３は、再送信済みの第７パケットに対応付けられたＡＣＫ信号を受信したとする。
データ解放部１１２２は、受信したＡＣＫ信号に対応付けられた再送信済みの第７パケットに含まれていたデータの読み出された領域１を示すインデックス番号１まで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
データ解放部１１２２は、インデックス番号１が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域１の先頭，領域１サイズ，無効）と更新する。これにより、バッファメモリ部１１６に定められた領域１に記憶されていたデータは、解放される。
【００８０】
＜図１２に示す、動作「第８パケットに対応付けられたＡＣＫ信号を受信」＞
通信インタフェース部１１３は、送信済みの第８パケットに対応付けられたＡＣＫ信号を受信したとする。
データ解放部１１２２は、受信したＡＣＫ信号に対応付けられた送信済みの第８パケットに含まれていたデータの読み出された領域２を示すインデックス番号２まで、ＡＣＫ受信領域カウンタＣ２０１を更新する。
データ解放部１１２２は、インデックス番号２が示す領域のインデックスを、（領域の先頭アドレス，領域サイズ，次の領域のインデックス番号）＝（領域２の先頭，領域２サイズ，無効）と更新する。これにより、バッファメモリ部１１６に定められた領域２に記憶されていたデータは、解放される。
【００８１】
＜図１２に示す、動作「ディスコネクト」＞
通信インタフェース部１１３は、クライアント装置３０との通信を切断（ディスコネクト）する。
【００８２】
以上のように、負荷軽減装置１１０は、記憶装置インタフェース部１１５と、バッファメモリ部１１６と、データ制御部１１４と、パケット生成部１１２１と、通信インタフェース部１１３と、データ解放部１１２２とを備える。記憶装置インタフェース部１１５は、プロセッサ１０２を介さずに記憶装置１０６からデータを取得する。バッファメモリ部１１６は、記憶装置１０６から取得されたデータを記憶可能である。データ制御部１１４は、記憶装置１０６から取得されたデータを、バッファメモリ部１１６に定められた領域毎に、バッファメモリ部１１６に書き込んで記憶させる。パケット生成部１１２１は、バッファメモリ部１１６から領域毎にデータを読み出し、バッファメモリ部１１６から読み出されたデータを含むパケットを、領域毎に生成する。通信インタフェース部１１３は、生成されたパケットをクライアント装置３０に送信する。データ解放部１１２２は、クライアント装置３０にパケットが受信されたか否か（通信インタフェース部がクライアント装置３０からＡＣＫ信号を受信したか否か）を判定し、クライアント装置３０に受信されたパケットに含まれていたデータが読み出された領域から、記憶装置１０６から取得されたデータを解放する（インデックスを無効にする）。
サーバ装置１０は、記憶装置１０６と、負荷軽減装置１１０とを備える。記憶装置１０６は、データを記憶する。
【００８３】
負荷軽減方法は、負荷軽減装置１１０における負荷軽減方法であって、記憶装置インタフェース部１１５が実行するステップと、データ制御部１１４が実行するステップと、パケット生成部１１２１が実行するステップと、通信インタフェース部１１３が実行するステップと、データ解放部１１２２が実行するステップとを有する。記憶装置インタフェース部１１５が実行するステップでは、記憶装置インタフェース部１１５が、プロセッサを介さずに記憶装置１０６からデータを取得する。データ制御部１１４が実行するステップでは、データ制御部１１４が、記憶装置１０６から取得されたデータを、バッファメモリ部１１６に定められた領域毎に、バッファメモリ部１１６に書き込んで記憶させる。パケット生成部１１２１が実行するステップでは、パケット生成部１１２１が、バッファメモリ部１１６から領域毎にデータを読み出し、バッファメモリ部１１６から読み出されたデータを含むパケットを、領域毎に生成する。通信インタフェース部１１３が実行するステップでは、生成されたパケットをクライアント装置３０に送信する。データ解放部１１２２が実行するステップでは、データ解放部１１２２が、クライアント装置３０にパケットが受信されたか否か（通信インタフェース部がクライアント装置３０からＡＣＫ信号を受信したか否か）を判定し、クライアント装置３０に受信されたパケットに含まれていたデータが読み出された領域から、記憶装置１０６から取得されたデータを解放する（インデックスを無効にする）。
【００８４】
この構成により、記憶装置インタフェース部１１５は、プロセッサ１０２を介さずに記憶装置１０６からデータを取得する。データ制御部１１４は、記憶装置１０６から取得されたデータを、バッファメモリ部１１６に定められた領域毎に、バッファメモリ部１１６に書き込んで記憶させる。データ解放部１１２２は、クライアント装置３０にパケットが受信されたか否かを判定し、クライアント装置３０に受信されたパケットに含まれていたデータが読み出された領域から、記憶装置１０６から取得されたデータを解放する。
【００８５】
これにより、負荷軽減装置１１０、サーバ装置１０及び負荷軽減方法は、プロセッサを介さずに記憶装置から通信部にデータを直接転送する（例えば、ＤＭＡ転送を実行する）場合、記憶装置１０６から通信部１０４への転送レートが低いシステムでも、大量のデータを高速にクライアント装置３０に配信することができる。
【００８６】
つまり、負荷軽減装置１１０、サーバ装置１０及び負荷軽減方法は、コネクション毎に確保する記憶領域がインデックスを記憶するための領域のみであり、パケットに含められるデータについてはバッファメモリ部１１６（共通部分）に記憶されている。これにより、負荷軽減装置１１０、サーバ装置１０及び負荷軽減方法は、メモリを効率良く使うので、大容量のメモリを使用しなくても（転送レートが低いシステムでも）、大量のデータを高速にクライアント装置３０に配信することができる。
【００８７】
データ制御部１１４は、記憶装置１０６から取得されたデータを、バッファメモリ部１１６に定められた領域毎にバッファメモリ部１１６に記憶させ、記憶装置１０６から取得されたデータが記憶された領域を示す書込領域カウンタＣ２０２を更新してもよい。パケット生成部１１２１は、更新された書込領域カウンタＣ２０２が示す領域からデータを読み出し、読み出されたデータを含むパケットを生成してもよい。
【００８８】
データ解放部１１２２は、パケットに含まれているデータが読み出された領域を示す読出領域カウンタＣ２０３を、通信インタフェース部１１３から当該パケットが送信される際に更新してもよい。データ解放部１１２２は、送信済みのパケットがクライアント装置３０に受信されていない（通信インタフェース部がクライアント装置３０からＡＣＫ信号を受信していない）場合には、クライアント装置３０に受信されていない当該送信済みのパケットに含まれていたデータが読み出された領域を示すまで、読出領域カウンタＣ２０３を戻してもよい。
【００８９】
以上述べた少なくともひとつの実施形態の負荷軽減装置によれば、プロセッサを介さずに記憶装置から通信部にデータを直接転送する場合、記憶装置から通信部への転送レートが低いシステムでも、大量のデータを高速に配信することが可能となる。
【００９０】
以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【００９１】
例えば、実施形態のサーバ装置は、少なくともその一部が、クラウドサーバ装置により構成されていてもよい。すなわち、実施形態のサーバ装置が実行する処理の少なくとも一部は、クラウド・コンピューティングにより実行されてもよい。
【００９２】
このクラウド・コンピューティングには、アプリケーション（ソフトウェア）をサービスとして提供するＳａａＳ（Ｓｏｆｔｗａｒｅ ａｓ ａ Ｓｅｒｖｉｃｅ）と、アプリケーションを稼働させるための基盤（プラットフォーム）をサービスとして提供するＰａａＳ（Ｐｌａｔｆｏｒｍ ａｓ ａ Ｓｅｒｖｉｃｅ）と、サーバ装置、中央演算処理装置及びストレージなどのリソースをサービス（パブリッククラウド）として提供するＩａａＳ（Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ ａｓ ａ Ｓｅｒｖｉｃｅ）とのうち、少なくとも一つが含まれていてもよい。例えば、このクラウド・コンピューティングには、クラウド・サービス提供層（ＰａａＳ）により、インターネットを介した遠隔操作が含まれていてもよい。
【００９３】
実施形態のサーバ装置は、その監視、障害対応及び運用のうち少なくとも一つが、代行サービスにより行われていてもよい。例えば、ＡＳＰ（Ａｐｐｌｉｃａｔｉｏｎ Ｓｅｒｖｉｃｅ Ｐｒｏｖｉｄｅｒ）が代行して、実施形態のサーバ装置を監視、障害対応及び運用してもよい。また、実施形態のサーバ装置は、その監視、障害対応及び運用が、複数の主体によりされてもよい。
【符号の説明】
【００９４】
１…領域、２…領域、３…領域、４…領域、５…領域、６…領域、１０…サーバ装置、２０…通信回線、３０…クライアント装置、１０１…バス、１０２…プロセッサ、１０３…記憶部、１０４…通信部、１０５…記憶装置制御部、１０６…記憶装置、１０７…接続部、１１０…負荷軽減装置、１１１…バスインタフェース部、１１２…負荷軽減部、１１３…通信インタフェース部、１１４…データ制御部、１１５…記憶装置インタフェース部、１１６…バッファメモリ部、１１７…インデックスメモリ部、１１８…通信メモリ部、１１２１…パケット生成部、１１２２…データ解放部、Ｃ２０１…ＡＣＫ受信領域カウンタ、Ｃ２０２…書込領域カウンタ、Ｃ２０３…読出領域カウンタ、Ｓ３０１…制御用通信線、Ｓ３０２…書き込み用通信線、Ｓ３０３…読み出し用通信線
【図１】
2015055933.tif 000003
【図２】
2015055933.tif 000004
【図３】
2015055933.tif 000005
【図４】
2015055933.tif 000006
【図５】
2015055933.tif 000007
【図６】
2015055933.tif 000008
【図７】
2015055933.tif 000009
【図８】
2015055933.tif 000010
【図９】
2015055933.tif 000011
【図１０】
2015055933.tif 000012
【図１１】
2015055933.tif 000013
【図１２】
2015055933.tif 000014