以下に、本願の開示するキャッシュ保存プログラム、情報処理装置およびキャッシュ保存方法の実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
[通信装置の構成]
図1は、実施例1に係る通信装置の構成を示す機能ブロック図である。通信装置1は、通信装置間で送受信されるデータを送信する通信装置である。通信装置1は、過去に送信したデータを記憶するキャッシュ保存領域を階層化し、上位のキャッシュが満杯であるタイミングで、データの重複の特性に応じて、データを所定の下位のキャッシュに移動する。
通信装置1は、記憶部10および制御部20を有する。記憶部10は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部10は、キャッシュメモリとしての役割を担うキャッシュ保存領域を含む。キャッシュ保存領域は、メモリ11と、ディスク12と、SSD(Solid State Drive)13とを有し、メモリ11の配下にディスク12およびSSD13を配置する。
ここで、実施例1に係る通信装置1のキャッシュ保存処理の一例を、図2を参照して説明する。図2は、実施例1に係る通信装置のキャッシュ保存処理の一例を示す図である。図2に示すように、通信装置1は、入力データをチャンクと呼ばれる可変長ブロックに分割し、チャンク単位で、メモリ11に記憶された過去の入力データとの重複判定を行う。
通信装置1は、重複判定によって、チャンクに対応するデータがメモリ11にあれば、重複したデータを除去すべく、データのインデックス(ID:identification)のみを、ネットワークを介して受信側の通信装置へ転送する。
一方、通信装置1は、重複判定によって、チャンクに対応するデータがメモリ11になければ、データ(生データ)をメモリ11に保存するとともに、生データを、ネットワークを介して受信側の通信装置へ送信する。通信装置1は、データをメモリ11に保存する際にメモリ11が満杯になった場合には、メモリ11に記憶されたチャンクのうち、使われていない一番古いチャンク(LRU:Least Recently Used)を抽出する。そして、通信装置1は、抽出したチャンクを削除対象とする。
通信装置1は、削除対象のデータについて、重複が稀にあり、重複が長い間継続すると判定する場合には、削除対象のデータをキャッシュ保存領域のメモリ11からディスク12に移動する。すなわち、データの重複の特性が、RLC(rare and long chunk series)である場合には、通信装置1は、当該データを、階層化されたキャッシュの低速のディスク12に移動する。
また、通信装置1は、削除対象のデータについて、重複が頻繁にあり、重複が短い間継続すると判定する場合には、削除対象のデータをキャッシュ保存領域のメモリ11からSSD13に移動する。すなわち、データの重複の特性が、FSC(frequent and short chunk series)である場合には、通信装置1は、当該データを、階層化されたキャッシュの高速のSSD13に移動する。
これにより、通信装置1は、データの重複の特性を考慮して、キャッシュ保存領域にデータを保存するので、キャッシュ保存領域を効率的にヒットさせることが可能となる。
図3は、入力データと送信するデータのデータ構造を示す図である。なお、図3で示すA、B、C、Dは、それぞれチャンクを表すものとする。すなわち、入力データは、A、B、C、B、Dの各チャンクに分割されている。図3に示すように、入力データの各チャンクの出現位置は、継続している。ここでいう「出現位置」は、新規のチャンクが出現する都度増大し、チャンクが重複する時には増大しない一種のアドレスのことをいう。入力データのデータ量は、チャンクAの1200、チャンクBの1000、チャンクCの1100、チャンクBの1000、チャンクDの900の総数5200となる。ところが、チャンクBが重複しているので、送信するデータのデータ量は、チャンクAの1200、チャンクBの1000、チャンクCの1100、チャンクDの900の総数4200となる。すなわち、チャンクBは重複しているため、IDを除いてデータ量が0となるとともに、出現位置は0となる。
図1に戻って、メモリ11は、重複管理情報111を記憶する。重複管理情報111は、既に記憶したチャンクについて、入力データとの重複の履歴を管理する。すなわち、重複管理情報111は、既に送信したデータを分割した複数のチャンク毎に、入力したデータとの重複時のデータ長および重複の回数を重複履歴として管理する。なお、重複管理情報111のデータ構造については、後述する。
制御部20は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部20は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路の電子回路に対応する。または、制御部20は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路に対応する。さらに、制御部20は、チャンク分割部21、ハッシュ計算部22、重複判定部23、新規登録部24、重複管理部25、キャッシュ移動部26および送信部27を有する。
チャンク分割部21は、入力データを複数のチャンクに分割する。ここで、チャンクとは、データがバウンダリで区別されることにより得られる可変長ブロックのことをいう。入力データを複数のチャンクに分割する方法は、以下のように実行される。
例えば、チャンク分割部21は、入力データを固定長のウィンドウサイズでスキャンする。また、チャンク分割部21は、ウィンドウデータのハッシュ値をラビン(Rabin)のフィンガープリント(fingerprint)と呼ばれる方法(「fp」と略記)で計算する。一例として、ウィンドウサイズをn、ウィンドウ内のデータをw
0、w
1、・・・、w
n−1とすると、fpは、以下の式(1)で表わされる。なお、式(1)で示されるpは、比較的大きな素数である。
また、チャンク分割部21は、式(1)の結果および式(2)を用いて、1バイトずつ延長したfpをそれぞれ計算する。
また、チャンク分割部21は、計算で得られた複数のfpのうち、後方(あるいは前方)のmビットが予め定められたビットパターンと一致するfpを探索する。探索できたfpによってデータのバウンダリが得られる。fpのmビットが一致する確率は、1/2mの確率であるので、例えばmが「10」であれば平均して210(1KB)に1回の割合でデータのバウンダリが得られる。チャンク分割部21は、探索できたfpのデータを1つのチャンクとして分割する。なお、入力データを複数のチャンクに分割する方法は、これに限定されず、公知のいかなる技術を用いても良い。
ハッシュ計算部22は、チャンク分割部21によって分割されたチャンクに対して、ハッシュ値を算出する。例えば、チャンク算出部22は、チャンク分割部21によって分割されたチャンクを順次選択する。チャンク算出部22は、SHA1(Secure Hash Algorithm 1)を用いて、選択したチャンクに対して、ハッシュ値を算出する。
重複判定部23は、選択されたチャンクが、メモリ11に記憶された複数のチャンクのうちいずれかのチャンクと重複するか否かを判定する。例えば、重複判定部23は、重複管理情報111を用いて、選択されたチャンクの算出されたハッシュ値が既にメモリ11に記憶されたチャンクのハッシュ値と一致するか否かを判定する。
新規登録部24は、選択されたチャンクが、メモリ11に記憶された複数のチャンクのうちいずれのチャンクとも重複しないと判定された場合に、選択されたチャンクをメモリ11に新規登録する。例えば、新規登録部24は、重複判定部23によって、選択されたチャンクの算出されたハッシュ値が既にメモリ11に記憶されたチャンクのいずれのハッシュ値とも一致しないと判定された場合に、チャンクをメモリ11に保存する。また、新規登録部24は、選択されたチャンクの情報を重複管理情報111に登録する。
ここで、重複管理情報111のデータ構造について、図4を参照して説明する。図4は、実施例1に係る重複管理情報のデータ構造の一例を示す図である。図4に示すように、重複管理情報111は、出現位置111b、長さ111c、出現回数111dおよび継続111eを、ハッシュ値(SHA1)111aに対応付けて記憶する。ハッシュ値(SHA1)111aは、チャンクのSHA1によって算出されたハッシュ値を示す。出現位置111bは、チャンクの出現位置を示す。長さ111cは、チャンクの長さを示す。出現回数111dは、チャンクが既に出現した回数を示す。継続111eは、入力データが分割された複数のチャンクで重複が継続するチャンクの数を示す。継続111eには、入力データの先頭のチャンクに対応する部分に設定される。なお、出現回数111dおよび継続111eは、後述する重複管理部25によって設定される。また、出現回数111d、継続111eは、一例として、それぞれ、継続重複長、重複回数に対応する。
一例として、チャンクa、b、cが含まれる入力データが入力され、後続してチャンクa、bが含まれる入力データが入力された場合の各チャンクの情報が記憶されている。ハッシュ値(SHA1)111aが「aaa」である情報は、チャンクaの情報である。ハッシュ値(SHA1)111aが「bbb」である情報は、チャンクbの情報である。ハッシュ値(SHA1)111aが「ccc」である情報は、チャンクcの情報である。チャンクaが入力データの先頭である。ハッシュ値(SHA1)111aが「aaa」である場合に、出現位置111bとして「0」、長さ111cとして「1200」、出現回数111dとして「2」と記憶している。そして、継続111eとして「2」と記憶している。これは、重複が継続するチャンクの数がa、bの2つであるからである。
図1に戻って、新規登録部24は、選択されたチャンクについて、ハッシュ値(SHA1)111aとしてハッシュ計算部22によって算出されたハッシュ値、出現位置111bとして新規のチャンクのデータ量を加算して得られたオフセット値を設定する。新規登録部24は、長さ111cとして当該チャンクの長さ、出現回数111dとして「1」、継続111eとして「0」を設定する。
重複管理部25は、選択されたチャンクが、メモリ11に記憶された複数のチャンクのうちいずれかのチャンクと重複すると判定された場合に、選択されたチャンクの重複を管理する。例えば、重複管理部25は、重複判定部23によって、選択されたチャンクの算出されたハッシュ値が既にメモリ11に記憶されたチャンクのいずれかのハッシュ値と一致すると判定された場合に、以下の処理を行う。重複管理部25は、入力データの先頭のチャンクが認識されていない場合に、選択されたチャンクを入力データの先頭のチャンクとして認識し、選択されたチャンクに対応する継続111eに1を加算する。重複管理部25は、入力データの先頭のチャンクが既に認識されている場合に、選択されたチャンクが直前に重複したチャンクと継続していれば、先頭のチャンクに対応する継続111eに1を加算する。重複管理部25は、入力データの先頭のチャンクが既に認識されている場合に、選択されたチャンクが直近に重複したチャンクと継続していなければ、選択されたチャンクを入力データの先頭のチャンクとして認識し、選択されたチャンクに対応する継続111eに1を加算する。また、重複管理部25は、選択されたチャンクの出現回数111dに1を加算する。また、重複管理部25は、選択されたチャンクの情報を重複管理情報111の先頭に設定する。
キャッシュ移動部26は、新規のチャンクをメモリ11に登録する際、メモリ11に記憶されたチャンクの数が上限である場合に、メモリ11に記憶されたチャンクのうちLRUのチャンクを抽出する。抽出されたチャンクは、削除対象となる。キャッシュ移動部26は、削除対象のチャンクにおける重複時の予測継続長および重複の出現回数に応じて、削除対象のチャンクを含むデータを、ディスク12およびSSD13のいずれかのキャッシュに移動する。例えば、キャッシュ移動部26は、重複管理情報111の末尾のチャンクを削除対象とする。また、キャッシュ移動部26は、削除対象のチャンクの継続111eが所定の継続閾値より大きい場合に、当該チャンクから継続する継続111e分のチャンクのデータをディスク12に移動する。すなわち、チャンクの重複の特性が、RLC(rare and long chunk series)である場合に、キャッシュ移動部26は、該当するデータを、階層化されたキャッシュの低速のディスク12に移動する。また、キャッシュ移動部26は、削除対象のチャンクの継続111eが所定の継続閾値以下である場合に、削除対象のチャンクの出現回数111dが所定の出現回数閾値より大きい場合に、削除対象のチャンクを含むデータをSSD13に移動する。すなわち、チャンクの重複の特性が、FSC(frequent and short chunk series)である場合に、キャッシュ移動部26は、該当するデータを、階層化されたキャッシュの高速のSSD13に移動する。また、キャッシュ移動部26は、移動したチャンクをメモリ11から削除するとともに、移動したチャンクの情報を重複管理情報111から削除する。
送信部27は、選択したチャンクについて、重複している場合には、内容が重複しているチャンクのIDのみを送信する。また、送信部27は、選択したチャンクについて、重複していない場合には、チャンクに対応するデータ(生データ)を送信する。
[キャッシュ保存処理の手順]
次に、実施例1に係るキャッシュ保存処理の手順を、図5A〜図5Cを参照して説明する。図5A〜図5Cは、実施例1に係るキャッシュ保存処理のフローチャートを示す図である。なお、重複中の先頭のチャンクは「重複先頭チャンク」といい、「HEADCHUNK」で表わすものとする。重複チャンクの直前の重複チャンクは「直前重複チャンク」といい、「PRECHUNK」で表わすものとする。現在の出現位置は、「現出現位置」といい、「OFFSET」で表わすものとする。メモリ11に記憶されたチャンクの数は、「datanum」で表わすものとする。HEADCHUNK、PRECHUNK、OFFSETおよびdatanumは、記憶部10に一時的に記憶されるローカルエリアである。
図5Aに示すように、チャンク分割部21は、HEADCHUNKおよびPRECHUNKにnullを設定し、OFFSETおよびdatanumに0を設定する(ステップS11)。チャンク分割部21は、データの受信を待つ(ステップS12)。
チャンク分割部21は、データが終了であるか否かを判定する(ステップS13)。データが終了である場合には(ステップS13;Yes)、チャンク分割部21は、キャッシュ保存処理を終了する。
一方、データが終了でない場合には(ステップS13;No)、チャンク分割部21は、データ(入力データ)を受信する(ステップS14)。チャンク分割部21は、受信した入力データを複数のチャンクに分割する(ステップS15)。そして、チャンク分割部21は、分割したチャンクのうち、1つのチャンクを選択する(ステップS16)。
続いて、制御部20は、選択したチャンクに対して、キャッシュ保存処理を行う(ステップS17)。なお、キャッシュ保存処理のフローチャートについては、図5Bおよび図5Cで説明する。そして、制御部20は、全てのチャンクにおける処理が終了したか否かを判定する(ステップS18)。全てのチャンクにおける処理が終了していない場合には(ステップS18;No)、制御部20は、次のチャンクを選択させるべく、ステップS16に移行する。
一方、全てのチャンクにおける処理が終了した場合には(ステップS18;Yes)、制御部20は、次のデータの受信待ちをさせるべく、ステップS12に移行する。
図5Bに示すように、ハッシュ計算部22は、選択したチャンクに対して、SHA1を用いてハッシュ値を算出する(ステップS21)。ハッシュ計算部22は、算出したハッシュ値をローカルエリアであるSHAVALに設定する。そして、重複判定部23は、選択したチャンクの重複を探索する(ステップS22)。
そして、重複判定部23は、選択したチャンクが新規であるか否かを判定する(ステップS23)。例えば、重複判定部23は、選択したチャンクのハッシュ値が重複管理情報111に記憶されたいずれのハッシュ値(SHA1)111aとも一致しないかどうかを判定する。
そして、選択したチャンクが新規である場合には(ステップS23;Yes)、新規登録部24は、新規のチャンクの情報を重複管理情報111に登録する(ステップS24)。例えば、ハッシュ値(SHA1)111aに、SHAVALに設定された値が設定される。出現位置111bに、OFFSETに設定された値が設定される。長さ111cに、チャンクの長さが設定される。出現回数111dに、「1」が設定される。継続111eに、「0」が設定される。
そして、新規登録部24は、ローカルエリアであるHEADCHUNK(重複先頭チャンク)、OFFSET(現出現位置)およびdatanum(メモリ11に記憶されたチャンクの数)を調整する(ステップS25)。例えば、HEADCHUNKに、nullが設定される。OFFSETに、選択したチャンクの長さを加算して得られた値が設定される。datanumに、選択したチャンク分の1を加算して得られた値が設定される。
そして、新規登録部24は、新規のチャンクの情報を重複管理情報111の先頭に設定する(ステップS26)。この新規のチャンクが最新で使われたからである。そして、新規登録部24は、キャッシュ保存処理におけるキャッシュ移動処理をさせるべく、ステップS41に移行する。なお、キャッシュ保存処理におけるキャッシュ移動処理のフローチャートについては、図5Cで説明する。
ステップS23において、選択したチャンクが新規でない場合には(ステップS23;No)、重複管理部25は、重複管理情報111に登録済みの、選択したチャンク(以降、登録済チャンク)の情報を取得する(ステップS27)。続いて、重複管理部25は、HEADCHUNK(重複先頭チャンク)がnullであるか否かを判定する(ステップS28)。すなわち、重複管理部25は、入力データの先頭のチャンクが認識されていないか否かを判定する。
HEADCHUNK(重複先頭チャンク)がnullである場合には(ステップS28;Yes)、重複管理部25は、HEADCHUNKに登録済チャンクのハッシュ値を設定(ステップS29)する。すなわち、重複管理部25は、登録済チャンクを重複の先頭のチャンクとして認識する。そして、重複管理部25は、ステップS32に移行する。
一方、HEADCHUNK(重複先頭チャンク)がnullでない場合には(ステップS28;No)、重複管理部25は、PRECHNK(直前重複チャンク)の出現位置と長さを加算して得た値が登録済チャンクの出現位置であるか否かを判定する(ステップS30)。すなわち、重複管理部25は、登録済チャンクが直前に重複したチャンクと継続しているか否かを判定する。
PRECHUNK(直前重複チャンク)の出現位置と長さを加算して得た値が登録済チャンクの出現位置でない場合には(ステップS30;No)、重複管理部25は、HEADCHUNKに登録済チャンクのハッシュ値を設定する(ステップS31)。すなわち、重複管理部25は、登録済チャンクが直前に重複したチャンクと継続していないので、登録済チャンクを重複の先頭のチャンクとして認識する。そして、重複管理部25は、ステップS32に移行する。
PRECHNK(直前重複チャンク)の出現位置と長さを加算して得た値が登録済チャンクの出現位置である場合には(ステップS30;Yes)、重複管理部25は、重複の先頭のチャンクが既に認識されているので、ステップS32に移行する。
ステップS32において、重複管理部25は、HEADCHUNKの継続111eに1を加算する(ステップS32)。すなわち、重複管理部25は、重複の先頭のチャンクに対応する継続111eに1を加算する。そして、重複管理部25は、登録済チャンクの出現回数111dに1を加算する(ステップS33)。重複管理部25は、PRECHUNK(直前重複チャンク)に登録済チャンクのハッシュ値を設定する(ステップS34)。
そして、重複管理部25は、登録済チャンクの情報を重複管理情報111の先頭に設定する(ステップS35)。この登録済チャンクが最新で使われたからである。そして、重複管理部25は、次のチャンクを選択すべく、ステップS18に戻る。
図5Cに示すように、キャッシュ移動部26は、以下のように、キャッシュ移動処理を実行する。キャッシュ移動部26は、datanum(メモリ11に記憶されたチャンクの数)が上限値を超えたか否かを判定する(ステップS41)。datanumが上限値を超えていない場合には(ステップS41;No)、キャッシュ移動部26は、キャッシュ移動処理を終了し、ステップS18に戻る。
一方、datanumが上限値を超えた場合には(ステップS41;Yes)、キャッシュ移動部26は、重複管理情報111の末尾のチャンクを削除チャンクとする(ステップS42)。すなわち、キャッシュ移動部26は、重複管理情報111の末尾のチャンクを削除対象とする。
そして、キャッシュ移動部26は、削除チャンクの継続111eが継続閾値より大きいか否かを判定する(ステップS43)。削除チャンクの継続111eが継続閾値より大きい場合には(ステップS43;Yes)、キャッシュ移動部26は、削除チャンクを含むデータをディスク12に退避する(ステップS44)。例えば、キャッシュ移動部26は、削除チャンクから継続する継続111e分のチャンクのデータをディスク12に移動する。すなわち、チャンクの重複の特性が、RLC(rare and long chunk series)である場合に、キャッシュ移動部26は、該当するデータを、階層化されたキャッシュの低速のディスク12に移動する。そして、キャッシュ移動部26は、ステップS48に移行する。
削除チャンクの継続111eが継続閾値以下である場合には(ステップS43;No)、キャッシュ移動部26は、削除チャンクの出現回数111dが出現回数閾値より大きいか否かを判定する(ステップS45)。削除チャンクの出現回数111dが出現回数閾値より大きい場合には(ステップS45;Yes)、キャッシュ移動部26は、削除チャンクを含むデータをSSD13に退避する(ステップS46)。例えば、キャッシュ移動部26は、削除チャンクから継続する継続111e分のチャンクのデータをSSD13に移動する。すなわち、チャンクの重複の特性が、FSC(frequent and short chunk series)である場合に、キャッシュ移動部26は、該当するデータを、階層化されたキャッシュの高速のSSD13に移動する。そして、キャッシュ移動部26は、ステップS48に移行する。
一方、削除チャンクの出現回数111dが出現回数閾値以下である場合には(ステップS45;No)、キャッシュ移動部26は、削除チャンクを破棄する(ステップS47)。そして、キャッシュ移動部26は、ステップS48に移行する。
ステップS48において、キャッシュ移動部26は、datanum(メモリ11に記憶されたチャンクの数)から1を減算する(ステップS48)。そして、キャッシュ移動部26は、キャッシュ移動処理を終了し、ステップS18に戻る。
[実施例1の効果]
上記実施例1によれば、通信装置1は、処理対象のデータが新規である場合に、処理対象のデータをメモリ11に記憶する。通信装置1は、メモリ11に記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する。通信装置1は、新規のデータを処理する際、メモリ11に記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出する。そして、通信装置1は、削除対象のデータを、ディスク12およびSSD13のいずれかのキャッシュに移動する。かかる構成によれば、通信装置1は、メモリ11のデータ数が上限である場合に、削除対象のデータをディスク12およびSSD13のいずれかのキャッシュに移動するので、以降の処理対象のデータについて、キャッシュを効率的にヒットさせることが可能となる。
また、上記実施例1によれば、通信装置1は、削除対象のデータの継続重複長が第1の閾値より大きい場合に、削除対象のデータをディスク12およびSSD13のうち低速のディスク12に移動する。かかる構成によれば、通信装置1は、削除対象のデータの重複の特性(RLC)に合わせて、削除対象のデータを最適なキャッシュに保存することができる。
また、上記実施例1によれば、通信装置1は、削除対象のデータの継続重複長が第1の閾値以下である場合、且つ削除対象のデータの重複回数が第2の閾値より大きい場合に、削除対象のデータをディスク12およびSSD13のうち高速のSSD13に移動する。かかる構成によれば、通信装置1は、削除対象のデータの重複の特性(FSC)に合わせて、削除対象のデータを最適なキャッシュに保存することができる。
また、上記実施例1によれば、通信装置1は、削除対象のデータの継続重複長が第1の閾値以下である場合、且つ削除対象のデータの重複回数が第2の閾値以下である場合に、削除対象のデータを破棄する。かかる構成によれば、通信装置1は、キャッシュから不要なデータを破棄することで、重要なデータを記憶する容量を増加させることができる。
ところで、実施例1では、通信装置1は、過去に送信したデータを記憶するキャッシュ保存領域を階層化する場合を説明した。すなわち、通信装置1は、メモリ11に記憶されたデータが満杯になった場合に、メモリ11に記憶された所定のデータの重複の特性に応じて、階層化されたキャッシュに所定のデータを移動する。しかしながら、通信装置1は、これに限定されず、さらに、キャッシュとして使用可能なメモリ11の容量が小さい場合に、過去に送信したデータを間引きながらメモリ11に記憶するようにしても良い。
そこで、実施例2では、通信装置1は、さらに、キャッシュとして使用可能なメモリ11の容量が小さい場合に、過去に送信したデータを間引きながらメモリ11に記憶する場合について説明する。
[通信装置の構成]
図6は、実施例2に係る通信装置の構成を示す機能ブロック図である。なお、図1に示す通信装置1と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例1と実施例2とが異なるところは、重複判定部23を重複判定部31に変更した点にある。実施例1と実施例2とが異なるところは、新規登録部24をサンプリングチャンク登録部32に変更した点にある。実施例1と実施例2とが異なるところは、ディスク14を追加した点にある。ディスク14は、重複管理情報211を記憶する。
ここで、実施例2に係る通信装置1のキャッシュ保存処理の一例を、図7を参照して説明する。図7は、実施例2に係る通信装置のキャッシュ保存処理の一例を示す図である。図7に示すように、通信装置1は、入力データAをチャンクと呼ばれる可変長ブロックに分割する。そして、通信装置1は、分割した各チャンクを、メモリ11の利用比率に応じて、メモリ11およびディスク14に保存する。例えば、メモリ11の利用比率が1/2である場合に、通信装置1は、新規のチャンクが出現するたびに、カウンタを1増やし、このカウンタをメモリ11の利用比率の分母である2で割った余りでチャンクの保存先を変更する。一例として、余りが0であるチャンクの保存先をメモリ11(またはディスク14)とし、余りが1であるチャンクの保存先をディスク14(またはメモリ11)とする。
図7では、通信装置1は、入力データAのキャッシュ1回目で、入力データAの分割された各チャンクについて、偶数番目のチャンクを1次キャッシュであるメモリ11に保存し、奇数番目のチャンクを2次キャッシュであるディスク14に保存する。なお、メモリ11の利用比率が1/2の場合について説明したが、これに限定されず、メモリ11の容量に応じてメモリ11の利用比率が決定されれば良い。一例として、メモリ11の利用比率が3/10の場合には、10で割った余りが0〜2であるチャンクの保存先をメモリ11とし、10で割った余りが3〜9であるチャンクの保存先をディスク14とすれば良い。
そして、通信装置1は、データをメモリ11に保存する際にメモリ11が満杯になった場合には、メモリ11に記憶されたチャンクのうち、使われていない一番古いチャンク(LRU:Least Recently Used)を抽出する。そして、通信装置1は、抽出したチャンクを削除対象とする。
ここでは、削除対象のチャンクが入力データAのチャンクc1であるとする。すると、通信装置1は、削除対象のチャンクc1から継続する継続分のチャンクc1〜c7のデータをディスク12またはSSD13に移動する。通信装置1は、継続分のチャンクの数が継続閾値より大きい場合には、データを、階層化されたキャッシュの低速のディスク12に移動する。通信装置1は、削除対象のチャンクc1のデータをメモリ11から削除する。
この後、通信装置1は、入力データAのキャッシュ2回目において、キャッシュ保存領域に入力データAのチャンクc1〜c7が全て記憶されているので、キャッシュヒットする。そして、通信装置1は、重複する入力データAの重複したチャンクc1〜c7を除去して送信することができる。
これにより、通信装置1は、1次キャッシュのメモリ11の容量が小さい場合であっても、2次キャッシュのディスク14をともに用いてデータを記憶する。したがって、通信装置1は、データの重複の特性がRLC(rare and long chunk series)であるデータの一部を失わないで、データ送信の重複除去を実現することができる。
図6に戻って、重複判定部31は、選択されたチャンクが、メモリ11に記憶された複数のチャンクのうちいずれかのチャンクと重複するか否かを判定する。例えば、重複判定部31は、重複管理情報111を用いて、選択されたチャンクの算出されたハッシュ値が既にメモリ11に記憶されたチャンクのハッシュ値と一致するか否かを判定する。
また、重複判定部31は、メモリ11に記憶された複数のチャンクのうちいずれかのチャンクと重複する場合には、選択されたチャンクが見つかったと判断する。そして、重複判定部31は、選択されたチャンクを間引きチャンク探索用のチャンクとする。
また、重複判定部31は、メモリ11に記憶された複数のチャンクのいずれのチャンクとも重複しない場合には、選択されたチャンクが、ディスク14に記憶された複数のチャンクのうちいずれかのチャンクと重複するか否かを判定する。例えば、重複判定部31は、重複管理情報111に記憶された間引きチャンク探索用のチャンクの間引きチャンク位置および重複管理情報211を用いて、選択されたチャンクの算出されたハッシュ値がディスク14に記憶されたチャンクのハッシュ値と一致するか否かを判定する。
また、重複判定部31は、選択されたチャンクが、ディスク14に記憶された複数のチャンクのうちいずれかのチャンクと重複する場合には、選択されたチャンクが見つかったと判断する。また、重複判定部31は、選択されたチャンクが、ディスク14に記憶された複数のチャンクのいずれのチャンクとも重複しない場合には、選択されたチャンクが見つからなかったと判断する。
ここで、メモリ11に記憶された重複管理情報111、ディスク14に記憶された重複管理情報211のデータ構造について、図8を参照して説明する。図8は、実施例2に係る重複管理情報のデータ構造の一例を示す図である。
図8上図は、メモリ11に記憶される重複管理情報111のデータ構造の一例を示す図である。メモリ11に記憶される重複管理情報111に関し、図4に示す重複管理情報111と同一の構成については同一符号を示すことで、その重複する構成の説明については省略する。図8上図に示す重複管理情報111が、図4に示す重複管理情報111と異なるところは、間引きチャンク位置111fを追加した点にある。図8下図は、ディスク14に記憶される重複管理情報211のデータ構造の一例を示す図である。図8下図に示すディスク14に記憶される重複管理情報111は、図4に示す重複管理情報111と同一の構成であるので、その重複する構成の説明については省略する。
間引きチャンク位置111fは、間引きしたチャンクの情報について、ディスク14の重複管理情報211に記憶された位置を示す。すなわち、間引きチャンク位置111fは、間引きしたチャンクの情報への位置を示す。図8には、入力データに含まれるチャンクx、yの各チャンクの情報が記憶されている。ハッシュ値(SHA1)111aが「xxx」である情報は、チャンクxの情報である。ハッシュ値(SHA1)211aが「yyy」である情報は、チャンクyの情報である。チャンクxの間引きチャンク位置111fには、チャンクyの情報への位置が設定されている。重複判定部31は、チャンクxのハッシュ値がメモリ11上の重複管理情報111で見つかったので、チャンクxを間引きチャンク探索用のチャンクとする。重複判定部31は、チャンクyのハッシュ値がメモリ11上の重複管理情報111で見つからなかったので、間引きチャンク探索用のチャンクxの間引きチャンク位置111fからディスク14に記憶されたチャンクの情報を辿る。そして、重複判定部31は、チャンクyの算出されたハッシュ値がディスク14上の重複管理情報211のハッシュ値と一致するか否かを判定し、チャンクyの情報を見つける。
図6に戻って、サンプリングチャンク登録部32は、選択されたチャンクが重複判定部31によって見つからなかった場合には、選択されたチャンクの保存先を決定する。例えば、サンプリングチャンク登録部32は、新規のチャンクが出現するたびに1ずつ加算されるカウンタの値を、予め定められたメモリ11の利用比率の分母の値で割った余りを算出する。また、サンプリングチャンク登録部32は、余りが0以上であって予め定められたメモリ11の利用比率の分子の値より小さい場合には、選択されたチャンクをメモリ11に保存する。また、サンプリングチャンク登録部32は、余りが予め定められたメモリ11の利用比率の分子の値以上である場合には、選択されたチャンクをディスク14に保存する。
[キャッシュ保存処理の手順]
次に、実施例2に係るキャッシュ保存処理の手順を、図9A〜図9Dを参照して説明する。図9A〜図9Dは、実施例2に係るキャッシュ保存処理のフローチャートを示す図である。図9Aおよび図9Bに示すフローチャートに関し、図5Aおよび図5Bに示すフローチャートと同一の動作については同一符号を示すことで、その重複する動作の説明については略記する。なお、重複中の先頭のチャンクは「重複先頭チャンク」といい、「HEADCHUNK」で表わすものとする。重複チャンクの直前の重複チャンクは「直前重複チャンク」といい、「PRECHUNK」で表わすものとする。現在の出現位置は、「現出現位置」といい、「OFFSET」で表わすものとする。メモリ11に記憶されたチャンクの数は、「datanum」で表わすものとする。新規のチャンクの数は、「チャンクカウンタ」といい、「counter」で表わすものとする。HEADCHUNK、PRECHUNK、OFFSET、datanumおよびcounterは、記憶部10に一時的に記憶されるローカルエリアである。また、メモリ11の利用比率は、n/m(n,m:正の整数)であるとする。
図9Aに示すように、チャンク分割部21は、HEADCHUNKおよびPRECHUNKにnullを設定し、OFFSET、datanumおよびcounterに0を設定する(ステップS11A)。チャンク分割部21は、データの受信を待つ(ステップS12)。
チャンク分割部21は、データが終了であるか否かを判定する(ステップS13)。データが終了である場合には(ステップS13;Yes)、チャンク分割部21は、キャッシュ保存処理を終了する。
一方、データが終了でない場合には(ステップS13;No)、チャンク分割部21は、データ(入力データ)を受信する(ステップS14)。チャンク分割部21は、受信した入力データを複数のチャンクに分割する(ステップS15)。そして、チャンク分割部21は、分割したチャンクのうち、1つのチャンクを選択する(ステップS16)。
続いて、制御部20は、選択したチャンクに対して、キャッシュ保存処理を行う(ステップS17)。なお、キャッシュ保存処理のフローチャートについては、図9B〜図9Dで説明する。そして、制御部20は、全てのチャンクにおける処理が終了したか否かを判定する(ステップS18)。全てのチャンクにおける処理が終了していない場合には(ステップS18;No)、制御部20は、次のチャンクを選択させるべく、ステップS16に移行する。
一方、全てのチャンクにおける処理が終了した場合には(ステップS18;Yes)、制御部20は、次のデータの受信待ちをさせるべく、ステップS12に移行する。
図9Bに示すように、ハッシュ計算部22は、選択したチャンクに対して、SHA1を用いてハッシュ値を算出する(ステップS21)。ハッシュ計算部22は、算出したハッシュ値をローカルエリアであるSHAVALに設定する。
そして、重複判定部31は、選択したチャンクの重複を探索する(ステップS22A)。なお、チャンクの重複探索処理のフローチャートについては、図9Dで説明する。
そして、重複判定部31は、チャンクの重複探索処理に基づいて、選択したチャンクが新規であるか否かを判定する(ステップS23)。例えば、重複判定部31は、チャンクの重複探索処理により、選択したチャンクが見つからなかったか否かを判定する。選択したチャンクが見つからなかった場合には、選択したチャンクは新規である。選択したチャンクがみつかった場合には、選択したチャンクは新規でない。
そして、選択したチャンクが新規である場合には(ステップS23;Yes)、サンプリングチャンク登録部32は、サンプリングチャンク登録処理を実行する(ステップS24A)。すなわち、サンプリングチャンク登録処理は、選択したチャンクをサンプリングし、サンプリングに応じてメモリ11またはディスク14へ登録する。なお、サンプリングチャンク登録処理のフローチャートについては、図9Cで説明する。
そして、サンプリングチャンク登録部32は、ローカルエリアであるHEADCHUNK(重複先頭チャンク)、OFFSET(現出現位置)、datanum(メモリ11に記憶されたチャンクの数)およびcounter(チャンクカウンタ)を調整する(ステップS25A)。例えば、HEADCHUNKに、nullが設定される。OFFSETに、選択したチャンクの長さを加算して得られた値が設定される。datanumに、選択したチャンク分の1を加算して得られた値が設定される。counterに、選択したチャンク分の1を加算して得られた値が設定される。
そして、新規登録部24は、新規のチャンクの情報を重複管理情報111の先頭に設定する(ステップS26)。この新規のチャンクが最新で使われたからである。そして、新規登録部24は、キャッシュ保存処理におけるキャッシュ移動処理をさせる。なお、キャッシュ保存処理におけるキャッシュ移動処理のフローチャートについては、図5Cで説明したので、その重複する動作の説明については省略する。
ステップS23において、選択したチャンクが新規でない場合には(ステップS23;No)、重複管理部25は、重複管理処理を実行する。なお、重複管理処理のフローチャート(ステップS27〜S35)については、図5Bで説明したので、その重複する動作の説明については省略する。
図9Cに示すように、サンプリングチャンク登録部32は、以下のように、サンプリングチャンク登録処理を実行する。サンプリングチャンク登録部32は、選択したチャンクの保存先を決定すべく、counter(チャンクカウンタ)をメモリ11の利用比率の分母の値mで割った余りを算出する(ステップS51)。
そして、サンプリングチャンク登録部32は、余りが0以上且つメモリ11の利用比率の分子の値であるnより小さいか否かを判定する(ステップS52)。余りが0以上且つメモリ11の利用比率の分子の値であるnより小さい場合には(ステップS52;Yes)、サンプリングチャンク登録部32は、選択したチャンクをメモリ11に保存する(ステップS53)。
そして、サンプリングチャンク登録部32は、選択したチャンクの情報をメモリ11上の重複管理情報111に登録する(ステップS54)。例えば、ハッシュ値(SHA1)111aに、SHAVALに設定された値が設定される。出現位置111bに、OFFSETに設定された値が設定される。長さ111cに、チャンクの長さが設定される。出現回数111dに、「1」が設定される。継続111eに、「0」が設定される。
そして、サンプリングチャンク登録部32は、余りがメモリ11の利用比率の分子の値であるnを1減じた値であるか否かを判定する(ステップS55)。すなわち、サンプリングチャンク登録部32は、今回受信した入力データの複数チャンクの中でメモリ11に記憶される最後のチャンクであるか否かを判定する。一例として、メモリ11の利用比率が2/5である場合とする。分割されたチャンクa,b,cの余りが0,1,2であるとする。すると、チャンクbの余りは1であり、チャンクbの余りが、メモリ11の利用比率の分子の値である2を1減じた値1である。したがって、今回受信した入力データの複数チャンクの中でチャンクbがメモリ11に記憶される最後のチャンクである。
そして、余りがメモリ11の利用比率の分子の値であるnを1減じた値である場合には(ステップS55;Yes)、サンプリングチャンク登録部32は、選択したチャンクを、間引きチャンク位置保存用のチャンクとする(ステップS56)。すなわち、サンプリングチャンク登録部32は、選択したチャンクを、後続するチャンクの間引き位置を更新するチャンクとする。そして、サンプリングチャンク登録部32は、サンプリングチャンク登録処理し、ステップS25Aに戻る。
一方、余りがメモリ11の利用比率の分子の値であるnを1減じた値でない場合には(ステップS55;No)、サンプリングチャンク登録部32は、選択したチャンクを、間引きチャンク位置保存用のチャンクとしない。そして、サンプリングチャンク登録部32は、サンプリングチャンク登録処理を終了し、ステップS25Aに戻る。
ステップS52において、余りが0以上且つメモリ11の利用比率の分子の値であるnより小さくない場合には(ステップS52;No)、サンプリングチャンク登録部32は、選択したチャンクをディスク14に保存する(ステップS57)。
そして、サンプリングチャンク登録部32は、選択したチャンクの情報をディスク14上の重複管理情報211に登録する(ステップS58)。例えば、ハッシュ値(SHA1)211aに、SHAVALに設定された値が設定される。出現位置211bに、OFFSETに設定された値が設定される。長さ211cに、チャンクの長さが設定される。出現回数211dに、「1」が設定される。継続211eに、「0」が設定される。
そして、サンプリングチャンク登録部32は、間引きチャンク位置保存用のチャンクの間引き位置を更新する(ステップS59)。例えば、重複管理情報111の、間引きチャンク位置保存用のチャンクに対する間引きチャンク位置111fに、選択したチャンクの重複管理情報211への位置が設定される。そして、サンプリングチャンク登録部32は、サンプリングチャンク登録処理を終了し、ステップS25Aに戻る。
図9Dに示すように、重複判定部31は、以下のように、チャンクの重複探索処理を実行する。重複判定部31は、メモリ11で、選択したチャンクの重複を探索する(ステップS61)。例えば、重複判定部31は、メモリ11上の重複管理情報111と、選択したチャンクのハッシュ値とを用いて、選択したチャンクの重複を探索する。
そして、重複判定部31は、メモリ11で、選択したチャンクが見つかったか否かを判定する(ステップS62)。選択したチャンクが見つかった場合には(ステップS62;Yes)、重複判定部31は、選択したチャンクを間引きチャンク探索用のチャンクとする(ステップS63)。そして、重複判定部31は、選択したチャンクが見つかったことをパラメータとしてステップS23に戻る。
一方、選択したチャンクが見つからなかった場合には(ステップS62;No)、重複判定部31は、間引きチャンク探索用のチャンクの間引きチャンク位置を探索する(ステップS64)。すなわち、重複判定部31は、ディスク14で、選択したチャンクの重複を探索する。例えば、重複判定部31は、重複管理情報111に記憶された間引きチャンク探索用のチャンクの間引きチャンク位置111fと、ディスク14上の重複管理情報211とを用いて、選択したチャンクの重複を探索する。
そして、重複判定部31は、ディスク14で、選択したチャンクが見つかったか否かを判定する(ステップS65)。選択したチャンクが見つからなかった場合には(ステップS65;No)、重複判定部31は、選択したチャンクが見つからなかったことをパラメータとしてステップS23に戻る。選択したチャンクが見つかった場合には(ステップS65;Yes)、重複判定部31は、選択したチャンクが見つかったことをパラメータとしてステップS23に戻る。
[実施例2の効果]
上記実施例2によれば、通信装置1は、メモリ11およびディスク14を有する。通信装置1は、メモリ11の利用比率に応じて、処理対象のデータを、メモリ11およびディスク14のいずれかのキャッシュに記憶する。かかる構成によれば、通信装置1は、メモリ11の容量が小さい場合であっても、ディスク14をともに用いてデータを記憶する。したがって、通信装置1は、データの重複の特性がRLC(rare and long chunk series)であるデータの一部を失わないで、重複除去を実現することができる。
[その他]
なお、通信装置1は、既知のパーソナルコンピュータ、ワークステーション等の情報処理装置に、上記した重複判定部23、新規登録部24、重複管理部25、キャッシュ移動部26などの各機能を搭載することによって実現することができる。
また、上記実施例1,2では、通信装置1は、過去に送信したデータを記憶するキャッシュ保存領域を階層化する。そして、通信装置1が、上位のキャッシュ(例えばメモリ11)が満杯であるタイミングで、データの重複の特性に応じて、データを所定の下位のキャッシュ(例えば、ディスク12、SSD13)に移動する場合を説明した。しかしながら、通信装置1の場合に限定されず、情報処理装置が、過去に処理したデータを記憶するキャッシュ保存領域を階層化する。そして、情報処理装置が、上位のキャッシュ(例えばメモリ11)が満杯であるタイミングで、データの重複の特性に応じて、データを所定の下位のキャッシュ(例えば、ディスク12、SSD13)に移動する場合であっても良い。例えば、情報処理装置内の、CPUと主記憶装置との間にあるキャッシュメモリに適用しても良い。このキャッシュメモリをキャッシュ保存領域とすれば良い。
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、チャンク分割部21とハッシュ計算部22とを1個の部として統合しても良い。一方、キャッシュ移動部26を、キャッシュが満杯であるか否かを判定する判定部と、キャッシュが満杯である場合に該当データを移動する移動部とに分散しても良い。また、記憶部10を通信装置1の外部装置に記憶するようにしても良いし、記憶部10を記憶した外部装置を通信装置1とネットワーク経由で接続するようにしても良い。
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することによって実現することができる。そこで、以下では、図1に示した通信装置1と同様の機能を実現するキャッシュ保存プログラムを実行するコンピュータの一例を説明する。図10は、キャッシュ保存プログラムを実行するコンピュータの一例を示す図である。
図10に示すように、コンピュータ200は、各種演算処理を実行するCPU203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209を制御する表示制御部207とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD205を有する。そして、メモリ201、CPU203、HDD205、表示制御部207、ドライブ装置213、入力装置215、通信制御部217は、バス219で接続されている。
ドライブ装置213は、例えばリムーバブルディスク141用の装置である。HDD205は、キャッシュ保存プログラム205aおよびキャッシュ保存関連情報205bを記憶する。
CPU203は、キャッシュ保存プログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスは、通信装置1の各機能部に対応する。キャッシュ保存関連情報205bは、重複管理情報111に対応する。そして、例えばリムーバブルディスク141が、重複管理情報111などの各情報を記憶する。
なお、キャッシュ保存プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカード等の「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらからキャッシュ保存プログラム205aを読み出して実行するようにしても良い。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
処理対象のデータが新規である場合に、前記処理対象のデータを第1のキャッシュメモリに記憶し、
前記第1のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理し、
新規のデータを処理する際、前記第1のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第2のキャッシュメモリおよび第3のキャッシュメモリのいずれかのキャッシュメモリに移動する
処理を実行させることを特徴とするキャッシュ保存プログラム。
(付記2)前記移動する処理は、前記削除対象のデータの継続重複長が第1の閾値より大きい場合に、前記削除対象のデータを第2のキャッシュメモリおよび第3のキャッシュメモリのうち低速の第2のキャッシュメモリに移動する
処理を実行させることを特徴とする付記1に記載のキャッシュ保存プログラム。
(付記3)前記移動する処理は、前記削除対象のデータの継続重複長が第1の閾値以下である場合、且つ前記削除対象のデータの重複回数が第2の閾値より大きい場合に、前記削除対象のデータを第2のキャッシュメモリおよび第3のキャッシュメモリのうち高速の第3のキャッシュメモリに移動する
処理を実行させることを特徴とする付記1に記載のキャッシュ保存プログラム。
(付記4)前記移動する処理は、前記削除対象のデータの継続重複長が第1の閾値以下である場合、且つ前記削除対象のデータの重複回数が第2の閾値以下である場合に、前記削除対象のデータを破棄する
処理を実行させることを特徴とする付記1に記載のキャッシュ保存プログラム。
(付記5)前記第1のキャッシュメモリが、1次キャッシュメモリと2次キャッシュメモリを有する場合に、前記処理対象のデータを前記第1のキャッシュメモリに記憶する際、前記1次キャッシュメモリの利用比率に応じて、前記処理対象のデータを、前記1次キャッシュメモリおよび前記2次キャッシュメモリのいずれかのキャッシュメモリに記憶する
処理を実行させることを特徴とする付記1に記載のキャッシュ保存プログラム。
(付記6)コンピュータが、
処理対象のデータが新規である場合に、前記処理対象のデータを第1のキャッシュメモリに記憶し、
前記第1のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理し、
新規のデータを処理する際、前記第1のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第2のキャッシュメモリおよび第3のキャッシュメモリのいずれかのキャッシュメモリに移動する
各処理を実行することを特徴とするキャッシュ保存方法。
(付記7)処理対象のデータが新規である場合に、前記処理対象のデータを第1のキャッシュメモリに登録する登録部と、
前記第1のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する管理部と、
新規のデータを処理する際、前記第1のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出する抽出部と、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第2のキャッシュメモリおよび第3のキャッシュメモリのいずれかのキャッシュメモリに移動する移動部と、
を有することを特徴とする情報処理装置。
(付記8)送信対象のデータが新規である場合に、前記送信対象のデータを第1のキャッシュメモリに登録する登録部と、
前記第1のキャッシュメモリに記憶されたデータ毎に、送信対象のデータと重複する重複回数および送信対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する管理部と、
新規のデータを処理する際、前記第1のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出する抽出部と、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第2のキャッシュメモリおよび第3のキャッシュメモリのいずれかのキャッシュメモリに移動する移動部と、
を有することを特徴とする通信装置。