(57)【要約】【課題】キャッシュメモリを効率的にヒットさせる。【解決手段】通信装置１は、処理対象のデータが新規である場合に、処理対象のデータをメモリ１１に記憶し、メモリ１１に記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する。そして、通信装置１は、新規のデータを処理する際、メモリ１１に記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、重複履歴で管理された削除対象のデータの重複回数および継続重複長に応じて、削除対象のデータを、ディスク１２およびＳＳＤ１３のいずれかのキャッシュに移動する。【選択図】図１
2015201050.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
処理対象のデータが新規である場合に、前記処理対象のデータを第１のキャッシュメモリに記憶し、
前記第１のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理し、
新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する
処理を実行させることを特徴とするキャッシュ保存プログラム。
【請求項２】
前記移動する処理は、前記削除対象のデータの継続重複長が第１の閾値より大きい場合に、前記削除対象のデータを第２のキャッシュメモリおよび第３のキャッシュメモリのうち低速の第２のキャッシュメモリに移動する
処理を実行させることを特徴とする請求項１に記載のキャッシュ保存プログラム。
【請求項３】
前記移動する処理は、前記削除対象のデータの継続重複長が第１の閾値以下である場合、且つ前記削除対象のデータの重複回数が第２の閾値より大きい場合に、前記削除対象のデータを第２のキャッシュメモリおよび第３のキャッシュメモリのうち高速の第３のキャッシュメモリに移動する
処理を実行させることを特徴とする請求項１に記載のキャッシュ保存プログラム。
【請求項４】
前記移動する処理は、前記削除対象のデータの継続重複長が第１の閾値以下である場合、且つ前記削除対象のデータの重複回数が第２の閾値以下である場合に、前記削除対象のデータを破棄する
処理を実行させることを特徴とする請求項１に記載のキャッシュ保存プログラム。
【請求項５】
前記第１のキャッシュメモリが、１次キャッシュメモリと２次キャッシュメモリを有する場合に、前記処理対象のデータを前記第１のキャッシュメモリに記憶する際、前記１次キャッシュメモリの利用比率に応じて、前記処理対象のデータを、前記１次キャッシュメモリおよび前記２次キャッシュメモリのいずれかのキャッシュメモリに記憶する
処理を実行させることを特徴とする請求項１に記載のキャッシュ保存プログラム。
【請求項６】
コンピュータが、
処理対象のデータが新規である場合に、前記処理対象のデータを第１のキャッシュメモリに記憶し、
前記第１のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理し、
新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する
各処理を実行することを特徴とするキャッシュ保存方法。
【請求項７】
処理対象のデータが新規である場合に、前記処理対象のデータを第１のキャッシュメモリに登録する登録部と、
前記第１のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する管理部と、
新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出する抽出部と、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する移動部と、
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュ保存プログラムなどに関する。
【背景技術】
【０００２】
データのグローバル化およびクラウドやモバイルの利用が進む中、通信の高速化の要望が増大している。通信の高速化の要望に対して、通信装置は、データを転送する際、転送するデータを最適化することで、転送するデータ量を削減する。すなわち、通信装置は、過去に転送したデータを重複データとして転送するデータから除去し、転送するデータのデータ量を削減する。
【０００３】
ここで、従来の重複データの除去技術について、図１１を参照して説明する。図１１は、従来の重複データの除去技術を示す図である。図１１に示すように、送信側の通信装置は、入力データをチャンクと呼ばれる可変長ブロックに分割し、チャンク単位で、キャッシュメモリに記憶された過去の入力データとの重複判定を行う。ここで、チャンクとは、データがバウンダリで分割されることにより得られる可変長ブロックのことをいう。そして、送信側の通信装置は、重複判定によって、チャンクに対応するデータがキャッシュメモリになければ、データ（生データ）をキャッシュメモリに保存するとともに、生データを、ネットワークを介して受信側の通信装置へ転送する。一方、送信側の通信装置は、重複判定によって、チャンクに対応するデータがキャッシュメモリにあれば、データのインデックス（ＩＤ：identification）のみを、ネットワークを介して受信側の通信装置へ転送する。
【０００４】
受信側の通信装置では、生データを受信した場合、受信した生データをキャッシュメモリに保存するとともに、生データを受信データとする。一方、受信側の通信装置では、データのインデックスを受信した場合、キャッシュメモリを用いてデータを復元し、復元したデータを受信データとする。
【０００５】
送信側の通信装置のキャッシュメモリが満杯になった場合には、使われていない一番古いデータ（ＬＲＵ：Least  Recently  Used）から順番に、キャッシュメモリに記憶されたデータを削除する。
【０００６】
また、データをキャッシュメモリに保存する技術が開示されている。かかる技術では、複数のキャッシュを有するプロキシサーバが、ウェブサーバから送信されたデータの大きさに応じて、当該データを記憶させるキャッシュを決定し、決定されたキャッシュにそのデータを記憶する技術が開示されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−２５６０９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、通信装置は、キャッシュメモリを効率的にヒットさせることができないという問題がある。例えば、通信装置は、転送するデータの重複の特性を考慮しないで、キャッシュメモリにデータを保存するので、キャッシュメモリを効率的にヒットさせることができない。ここで、データの重複の特性の一例について、図１２Ａ、図１２Ｂを参照して説明する。
【０００９】
図１２Ａは、重複データの一例を示す図である。図１２Ａでは、転送するデータの流れを示し、Ｘが、重複データであるとする。図１２Ａが示す送信データでは、重複データＸの継続する長さは短いが、重複データＸは頻繁に発生している。このような転送するデータの重複の特性は、ＦＳＣ（frequent  and  short  chunk  series）と呼ばれる。
【００１０】
図１２Ｂは、重複データの別の例を示す図である。図１２Ｂでは、転送するデータの流れを示し、Ｘが、重複データであるとする。図１２Ｂが示す送信データでは、重複データＸの継続する長さは長いが、重複データＸは稀に発生している。このような転送するデータの重複の特性は、ＲＬＣ（rare  and  long  chunk  series）と呼ばれる。
【００１１】
このように、データには、重複の特性があるにもかかわらず、通信装置は、転送するデータの重複の特性を考慮しないで、キャッシュメモリにデータを保存しているので、キャッシュメモリを効率的にヒットさせることができない。
【００１２】
なお、上記課題は、データを転送する通信装置の場合だけではなく、データを処理する情報処理装置の場合にも同様に生じる課題である。
【００１３】
１つの側面では、キャッシュメモリを効率的にヒットさせることを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示するキャッシュ保存プログラムは、コンピュータに、処理対象のデータが新規である場合に、前記処理対象のデータを第１のキャッシュメモリに記憶し、前記第１のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理し、新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する処理を実行させる。
【発明の効果】
【００１５】
本願の開示するキャッシュ保存プログラムの１つの態様によれば、キャッシュメモリを効率的にヒットさせることが可能となる。
【図面の簡単な説明】
【００１６】
【図１】図１は、実施例１に係る通信装置の構成を示す機能ブロック図である。
【図２】図２は、実施例１に係る通信装置のキャッシュ保存処理の一例を示す図である。
【図３】図３は、入力データと送信するデータのデータ構造を示す図である。
【図４】図４は、実施例１に係る重複管理情報のデータ構造の一例を示す図である。
【図５Ａ】図５Ａは、実施例１に係るキャッシュ保存処理のフローチャートを示す図（１）である。
【図５Ｂ】図５Ｂは、実施例１に係るキャッシュ保存処理のフローチャートを示す図（２）である。
【図５Ｃ】図５Ｃは、実施例１に係るキャッシュ保存処理のフローチャートを示す図（３）である。
【図６】図６は、実施例２に係る通信装置の構成を示す機能ブロック図である。
【図７】図７は、実施例２に係る通信装置のキャッシュ保存処理の一例を示す図である。
【図８】図８は、実施例２に係る重複管理情報のデータ構造の一例を示す図である。
【図９Ａ】図９Ａは、実施例２に係るキャッシュ保存処理のフローチャートを示す図（１）である。
【図９Ｂ】図９Ｂは、実施例２に係るキャッシュ保存処理のフローチャートを示す図（２）である。
【図９Ｃ】図９Ｃは、実施例２に係るキャッシュ保存処理のフローチャートを示す図（３）である。
【図９Ｄ】図９Ｄは、実施例２に係るキャッシュ保存処理のフローチャートを示す図（４）である。
【図１０】図１０は、キャッシュ保存プログラムを実行するコンピュータの一例を示す図である。
【図１１】図１１は、従来の重複データの除去技術を示す図である。
【図１２Ａ】図１２Ａは、重複データの一例を示す図である。
【図１２Ｂ】図１２Ｂは、重複データの別の例を示す図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示するキャッシュ保存プログラム、情報処理装置およびキャッシュ保存方法の実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
【実施例１】
【００１８】
［通信装置の構成］
図１は、実施例１に係る通信装置の構成を示す機能ブロック図である。通信装置１は、通信装置間で送受信されるデータを送信する通信装置である。通信装置１は、過去に送信したデータを記憶するキャッシュ保存領域を階層化し、上位のキャッシュが満杯であるタイミングで、データの重複の特性に応じて、データを所定の下位のキャッシュに移動する。
【００１９】
通信装置１は、記憶部１０および制御部２０を有する。記憶部１０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部１０は、キャッシュメモリとしての役割を担うキャッシュ保存領域を含む。キャッシュ保存領域は、メモリ１１と、ディスク１２と、ＳＳＤ（Solid  State  Drive）１３とを有し、メモリ１１の配下にディスク１２およびＳＳＤ１３を配置する。
【００２０】
ここで、実施例１に係る通信装置１のキャッシュ保存処理の一例を、図２を参照して説明する。図２は、実施例１に係る通信装置のキャッシュ保存処理の一例を示す図である。図２に示すように、通信装置１は、入力データをチャンクと呼ばれる可変長ブロックに分割し、チャンク単位で、メモリ１１に記憶された過去の入力データとの重複判定を行う。
通信装置１は、重複判定によって、チャンクに対応するデータがメモリ１１にあれば、重複したデータを除去すべく、データのインデックス（ＩＤ：identification）のみを、ネットワークを介して受信側の通信装置へ転送する。
【００２１】
一方、通信装置１は、重複判定によって、チャンクに対応するデータがメモリ１１になければ、データ（生データ）をメモリ１１に保存するとともに、生データを、ネットワークを介して受信側の通信装置へ送信する。通信装置１は、データをメモリ１１に保存する際にメモリ１１が満杯になった場合には、メモリ１１に記憶されたチャンクのうち、使われていない一番古いチャンク（ＬＲＵ：Least  Recently  Used）を抽出する。そして、通信装置１は、抽出したチャンクを削除対象とする。
【００２２】
通信装置１は、削除対象のデータについて、重複が稀にあり、重複が長い間継続すると判定する場合には、削除対象のデータをキャッシュ保存領域のメモリ１１からディスク１２に移動する。すなわち、データの重複の特性が、ＲＬＣ（rare  and  long  chunk  series）である場合には、通信装置１は、当該データを、階層化されたキャッシュの低速のディスク１２に移動する。
【００２３】
また、通信装置１は、削除対象のデータについて、重複が頻繁にあり、重複が短い間継続すると判定する場合には、削除対象のデータをキャッシュ保存領域のメモリ１１からＳＳＤ１３に移動する。すなわち、データの重複の特性が、ＦＳＣ（frequent  and  short  chunk  series）である場合には、通信装置１は、当該データを、階層化されたキャッシュの高速のＳＳＤ１３に移動する。
【００２４】
これにより、通信装置１は、データの重複の特性を考慮して、キャッシュ保存領域にデータを保存するので、キャッシュ保存領域を効率的にヒットさせることが可能となる。
【００２５】
図３は、入力データと送信するデータのデータ構造を示す図である。なお、図３で示すＡ、Ｂ、Ｃ、Ｄは、それぞれチャンクを表すものとする。すなわち、入力データは、Ａ、Ｂ、Ｃ、Ｂ、Ｄの各チャンクに分割されている。図３に示すように、入力データの各チャンクの出現位置は、継続している。ここでいう「出現位置」は、新規のチャンクが出現する都度増大し、チャンクが重複する時には増大しない一種のアドレスのことをいう。入力データのデータ量は、チャンクＡの１２００、チャンクＢの１０００、チャンクＣの１１００、チャンクＢの１０００、チャンクＤの９００の総数５２００となる。ところが、チャンクＢが重複しているので、送信するデータのデータ量は、チャンクＡの１２００、チャンクＢの１０００、チャンクＣの１１００、チャンクＤの９００の総数４２００となる。すなわち、チャンクＢは重複しているため、ＩＤを除いてデータ量が０となるとともに、出現位置は０となる。
【００２６】
図１に戻って、メモリ１１は、重複管理情報１１１を記憶する。重複管理情報１１１は、既に記憶したチャンクについて、入力データとの重複の履歴を管理する。すなわち、重複管理情報１１１は、既に送信したデータを分割した複数のチャンク毎に、入力したデータとの重複時のデータ長および重複の回数を重複履歴として管理する。なお、重複管理情報１１１のデータ構造については、後述する。
【００２７】
制御部２０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部２０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路の電子回路に対応する。または、制御部２０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路に対応する。さらに、制御部２０は、チャンク分割部２１、ハッシュ計算部２２、重複判定部２３、新規登録部２４、重複管理部２５、キャッシュ移動部２６および送信部２７を有する。
【００２８】
チャンク分割部２１は、入力データを複数のチャンクに分割する。ここで、チャンクとは、データがバウンダリで区別されることにより得られる可変長ブロックのことをいう。入力データを複数のチャンクに分割する方法は、以下のように実行される。
【００２９】
例えば、チャンク分割部２１は、入力データを固定長のウィンドウサイズでスキャンする。また、チャンク分割部２１は、ウィンドウデータのハッシュ値をラビン（Ｒａｂｉｎ）のフィンガープリント（ｆｉｎｇｅｒｐｒｉｎｔ）と呼ばれる方法（「ｆｐ」と略記）で計算する。一例として、ウィンドウサイズをｎ、ウィンドウ内のデータをｗ０、ｗ１、・・・、ｗｎ−１とすると、ｆｐは、以下の式（１）で表わされる。なお、式（１）で示されるｐは、比較的大きな素数である。
【数１】
2015201050.tif 000003
【００３０】
また、チャンク分割部２１は、式（１）の結果および式（２）を用いて、１バイトずつ延長したｆｐをそれぞれ計算する。
【数２】
2015201050.tif 000004
【００３１】
また、チャンク分割部２１は、計算で得られた複数のｆｐのうち、後方（あるいは前方）のｍビットが予め定められたビットパターンと一致するｆｐを探索する。探索できたｆｐによってデータのバウンダリが得られる。ｆｐのｍビットが一致する確率は、１／２ｍの確率であるので、例えばｍが「１０」であれば平均して２１０（１ＫＢ）に１回の割合でデータのバウンダリが得られる。チャンク分割部２１は、探索できたｆｐのデータを１つのチャンクとして分割する。なお、入力データを複数のチャンクに分割する方法は、これに限定されず、公知のいかなる技術を用いても良い。
【００３２】
ハッシュ計算部２２は、チャンク分割部２１によって分割されたチャンクに対して、ハッシュ値を算出する。例えば、チャンク算出部２２は、チャンク分割部２１によって分割されたチャンクを順次選択する。チャンク算出部２２は、ＳＨＡ１（Secure  Hash  Algorithm  １）を用いて、選択したチャンクに対して、ハッシュ値を算出する。
【００３３】
重複判定部２３は、選択されたチャンクが、メモリ１１に記憶された複数のチャンクのうちいずれかのチャンクと重複するか否かを判定する。例えば、重複判定部２３は、重複管理情報１１１を用いて、選択されたチャンクの算出されたハッシュ値が既にメモリ１１に記憶されたチャンクのハッシュ値と一致するか否かを判定する。
【００３４】
新規登録部２４は、選択されたチャンクが、メモリ１１に記憶された複数のチャンクのうちいずれのチャンクとも重複しないと判定された場合に、選択されたチャンクをメモリ１１に新規登録する。例えば、新規登録部２４は、重複判定部２３によって、選択されたチャンクの算出されたハッシュ値が既にメモリ１１に記憶されたチャンクのいずれのハッシュ値とも一致しないと判定された場合に、チャンクをメモリ１１に保存する。また、新規登録部２４は、選択されたチャンクの情報を重複管理情報１１１に登録する。
【００３５】
ここで、重複管理情報１１１のデータ構造について、図４を参照して説明する。図４は、実施例１に係る重複管理情報のデータ構造の一例を示す図である。図４に示すように、重複管理情報１１１は、出現位置１１１ｂ、長さ１１１ｃ、出現回数１１１ｄおよび継続１１１ｅを、ハッシュ値（ＳＨＡ１）１１１ａに対応付けて記憶する。ハッシュ値（ＳＨＡ１）１１１ａは、チャンクのＳＨＡ１によって算出されたハッシュ値を示す。出現位置１１１ｂは、チャンクの出現位置を示す。長さ１１１ｃは、チャンクの長さを示す。出現回数１１１ｄは、チャンクが既に出現した回数を示す。継続１１１ｅは、入力データが分割された複数のチャンクで重複が継続するチャンクの数を示す。継続１１１ｅには、入力データの先頭のチャンクに対応する部分に設定される。なお、出現回数１１１ｄおよび継続１１１ｅは、後述する重複管理部２５によって設定される。また、出現回数１１１ｄ、継続１１１ｅは、一例として、それぞれ、継続重複長、重複回数に対応する。
【００３６】
一例として、チャンクａ、ｂ、ｃが含まれる入力データが入力され、後続してチャンクａ、ｂが含まれる入力データが入力された場合の各チャンクの情報が記憶されている。ハッシュ値（ＳＨＡ１）１１１ａが「ａａａ」である情報は、チャンクａの情報である。ハッシュ値（ＳＨＡ１）１１１ａが「ｂｂｂ」である情報は、チャンクｂの情報である。ハッシュ値（ＳＨＡ１）１１１ａが「ｃｃｃ」である情報は、チャンクｃの情報である。チャンクａが入力データの先頭である。ハッシュ値（ＳＨＡ１）１１１ａが「ａａａ」である場合に、出現位置１１１ｂとして「０」、長さ１１１ｃとして「１２００」、出現回数１１１ｄとして「２」と記憶している。そして、継続１１１ｅとして「２」と記憶している。これは、重複が継続するチャンクの数がａ、ｂの２つであるからである。
【００３７】
図１に戻って、新規登録部２４は、選択されたチャンクについて、ハッシュ値（ＳＨＡ１）１１１ａとしてハッシュ計算部２２によって算出されたハッシュ値、出現位置１１１ｂとして新規のチャンクのデータ量を加算して得られたオフセット値を設定する。新規登録部２４は、長さ１１１ｃとして当該チャンクの長さ、出現回数１１１ｄとして「１」、継続１１１ｅとして「０」を設定する。
【００３８】
重複管理部２５は、選択されたチャンクが、メモリ１１に記憶された複数のチャンクのうちいずれかのチャンクと重複すると判定された場合に、選択されたチャンクの重複を管理する。例えば、重複管理部２５は、重複判定部２３によって、選択されたチャンクの算出されたハッシュ値が既にメモリ１１に記憶されたチャンクのいずれかのハッシュ値と一致すると判定された場合に、以下の処理を行う。重複管理部２５は、入力データの先頭のチャンクが認識されていない場合に、選択されたチャンクを入力データの先頭のチャンクとして認識し、選択されたチャンクに対応する継続１１１ｅに１を加算する。重複管理部２５は、入力データの先頭のチャンクが既に認識されている場合に、選択されたチャンクが直前に重複したチャンクと継続していれば、先頭のチャンクに対応する継続１１１ｅに１を加算する。重複管理部２５は、入力データの先頭のチャンクが既に認識されている場合に、選択されたチャンクが直近に重複したチャンクと継続していなければ、選択されたチャンクを入力データの先頭のチャンクとして認識し、選択されたチャンクに対応する継続１１１ｅに１を加算する。また、重複管理部２５は、選択されたチャンクの出現回数１１１ｄに１を加算する。また、重複管理部２５は、選択されたチャンクの情報を重複管理情報１１１の先頭に設定する。
【００３９】
キャッシュ移動部２６は、新規のチャンクをメモリ１１に登録する際、メモリ１１に記憶されたチャンクの数が上限である場合に、メモリ１１に記憶されたチャンクのうちＬＲＵのチャンクを抽出する。抽出されたチャンクは、削除対象となる。キャッシュ移動部２６は、削除対象のチャンクにおける重複時の予測継続長および重複の出現回数に応じて、削除対象のチャンクを含むデータを、ディスク１２およびＳＳＤ１３のいずれかのキャッシュに移動する。例えば、キャッシュ移動部２６は、重複管理情報１１１の末尾のチャンクを削除対象とする。また、キャッシュ移動部２６は、削除対象のチャンクの継続１１１ｅが所定の継続閾値より大きい場合に、当該チャンクから継続する継続１１１ｅ分のチャンクのデータをディスク１２に移動する。すなわち、チャンクの重複の特性が、ＲＬＣ（rare  and  long  chunk  series）である場合に、キャッシュ移動部２６は、該当するデータを、階層化されたキャッシュの低速のディスク１２に移動する。また、キャッシュ移動部２６は、削除対象のチャンクの継続１１１ｅが所定の継続閾値以下である場合に、削除対象のチャンクの出現回数１１１ｄが所定の出現回数閾値より大きい場合に、削除対象のチャンクを含むデータをＳＳＤ１３に移動する。すなわち、チャンクの重複の特性が、ＦＳＣ（frequent  and  short  chunk  series）である場合に、キャッシュ移動部２６は、該当するデータを、階層化されたキャッシュの高速のＳＳＤ１３に移動する。また、キャッシュ移動部２６は、移動したチャンクをメモリ１１から削除するとともに、移動したチャンクの情報を重複管理情報１１１から削除する。
【００４０】
送信部２７は、選択したチャンクについて、重複している場合には、内容が重複しているチャンクのＩＤのみを送信する。また、送信部２７は、選択したチャンクについて、重複していない場合には、チャンクに対応するデータ（生データ）を送信する。
【００４１】
［キャッシュ保存処理の手順］
次に、実施例１に係るキャッシュ保存処理の手順を、図５Ａ〜図５Ｃを参照して説明する。図５Ａ〜図５Ｃは、実施例１に係るキャッシュ保存処理のフローチャートを示す図である。なお、重複中の先頭のチャンクは「重複先頭チャンク」といい、「ＨＥＡＤＣＨＵＮＫ」で表わすものとする。重複チャンクの直前の重複チャンクは「直前重複チャンク」といい、「ＰＲＥＣＨＵＮＫ」で表わすものとする。現在の出現位置は、「現出現位置」といい、「ＯＦＦＳＥＴ」で表わすものとする。メモリ１１に記憶されたチャンクの数は、「ｄａｔａｎｕｍ」で表わすものとする。ＨＥＡＤＣＨＵＮＫ、ＰＲＥＣＨＵＮＫ、ＯＦＦＳＥＴおよびｄａｔａｎｕｍは、記憶部１０に一時的に記憶されるローカルエリアである。
【００４２】
図５Ａに示すように、チャンク分割部２１は、ＨＥＡＤＣＨＵＮＫおよびＰＲＥＣＨＵＮＫにｎｕｌｌを設定し、ＯＦＦＳＥＴおよびｄａｔａｎｕｍに０を設定する（ステップＳ１１）。チャンク分割部２１は、データの受信を待つ（ステップＳ１２）。
【００４３】
チャンク分割部２１は、データが終了であるか否かを判定する（ステップＳ１３）。データが終了である場合には（ステップＳ１３；Ｙｅｓ）、チャンク分割部２１は、キャッシュ保存処理を終了する。
【００４４】
一方、データが終了でない場合には（ステップＳ１３；Ｎｏ）、チャンク分割部２１は、データ（入力データ）を受信する（ステップＳ１４）。チャンク分割部２１は、受信した入力データを複数のチャンクに分割する（ステップＳ１５）。そして、チャンク分割部２１は、分割したチャンクのうち、１つのチャンクを選択する（ステップＳ１６）。
【００４５】
続いて、制御部２０は、選択したチャンクに対して、キャッシュ保存処理を行う（ステップＳ１７）。なお、キャッシュ保存処理のフローチャートについては、図５Ｂおよび図５Ｃで説明する。そして、制御部２０は、全てのチャンクにおける処理が終了したか否かを判定する（ステップＳ１８）。全てのチャンクにおける処理が終了していない場合には（ステップＳ１８；Ｎｏ）、制御部２０は、次のチャンクを選択させるべく、ステップＳ１６に移行する。
【００４６】
一方、全てのチャンクにおける処理が終了した場合には（ステップＳ１８；Ｙｅｓ）、制御部２０は、次のデータの受信待ちをさせるべく、ステップＳ１２に移行する。
【００４７】
図５Ｂに示すように、ハッシュ計算部２２は、選択したチャンクに対して、ＳＨＡ１を用いてハッシュ値を算出する（ステップＳ２１）。ハッシュ計算部２２は、算出したハッシュ値をローカルエリアであるＳＨＡＶＡＬに設定する。そして、重複判定部２３は、選択したチャンクの重複を探索する（ステップＳ２２）。
【００４８】
そして、重複判定部２３は、選択したチャンクが新規であるか否かを判定する（ステップＳ２３）。例えば、重複判定部２３は、選択したチャンクのハッシュ値が重複管理情報１１１に記憶されたいずれのハッシュ値（ＳＨＡ１）１１１ａとも一致しないかどうかを判定する。
【００４９】
そして、選択したチャンクが新規である場合には（ステップＳ２３；Ｙｅｓ）、新規登録部２４は、新規のチャンクの情報を重複管理情報１１１に登録する（ステップＳ２４）。例えば、ハッシュ値（ＳＨＡ１）１１１ａに、ＳＨＡＶＡＬに設定された値が設定される。出現位置１１１ｂに、ＯＦＦＳＥＴに設定された値が設定される。長さ１１１ｃに、チャンクの長さが設定される。出現回数１１１ｄに、「１」が設定される。継続１１１ｅに、「０」が設定される。
【００５０】
そして、新規登録部２４は、ローカルエリアであるＨＥＡＤＣＨＵＮＫ（重複先頭チャンク）、ＯＦＦＳＥＴ（現出現位置）およびｄａｔａｎｕｍ（メモリ１１に記憶されたチャンクの数）を調整する（ステップＳ２５）。例えば、ＨＥＡＤＣＨＵＮＫに、ｎｕｌｌが設定される。ＯＦＦＳＥＴに、選択したチャンクの長さを加算して得られた値が設定される。ｄａｔａｎｕｍに、選択したチャンク分の１を加算して得られた値が設定される。
【００５１】
そして、新規登録部２４は、新規のチャンクの情報を重複管理情報１１１の先頭に設定する（ステップＳ２６）。この新規のチャンクが最新で使われたからである。そして、新規登録部２４は、キャッシュ保存処理におけるキャッシュ移動処理をさせるべく、ステップＳ４１に移行する。なお、キャッシュ保存処理におけるキャッシュ移動処理のフローチャートについては、図５Ｃで説明する。
【００５２】
ステップＳ２３において、選択したチャンクが新規でない場合には（ステップＳ２３；Ｎｏ）、重複管理部２５は、重複管理情報１１１に登録済みの、選択したチャンク（以降、登録済チャンク）の情報を取得する（ステップＳ２７）。続いて、重複管理部２５は、ＨＥＡＤＣＨＵＮＫ（重複先頭チャンク）がｎｕｌｌであるか否かを判定する（ステップＳ２８）。すなわち、重複管理部２５は、入力データの先頭のチャンクが認識されていないか否かを判定する。
【００５３】
ＨＥＡＤＣＨＵＮＫ（重複先頭チャンク）がｎｕｌｌである場合には（ステップＳ２８；Ｙｅｓ）、重複管理部２５は、ＨＥＡＤＣＨＵＮＫに登録済チャンクのハッシュ値を設定（ステップＳ２９）する。すなわち、重複管理部２５は、登録済チャンクを重複の先頭のチャンクとして認識する。そして、重複管理部２５は、ステップＳ３２に移行する。
【００５４】
一方、ＨＥＡＤＣＨＵＮＫ（重複先頭チャンク）がｎｕｌｌでない場合には（ステップＳ２８；Ｎｏ）、重複管理部２５は、ＰＲＥＣＨＮＫ（直前重複チャンク）の出現位置と長さを加算して得た値が登録済チャンクの出現位置であるか否かを判定する（ステップＳ３０）。すなわち、重複管理部２５は、登録済チャンクが直前に重複したチャンクと継続しているか否かを判定する。
【００５５】
ＰＲＥＣＨＵＮＫ（直前重複チャンク）の出現位置と長さを加算して得た値が登録済チャンクの出現位置でない場合には（ステップＳ３０；Ｎｏ）、重複管理部２５は、ＨＥＡＤＣＨＵＮＫに登録済チャンクのハッシュ値を設定する（ステップＳ３１）。すなわち、重複管理部２５は、登録済チャンクが直前に重複したチャンクと継続していないので、登録済チャンクを重複の先頭のチャンクとして認識する。そして、重複管理部２５は、ステップＳ３２に移行する。
【００５６】
ＰＲＥＣＨＮＫ（直前重複チャンク）の出現位置と長さを加算して得た値が登録済チャンクの出現位置である場合には（ステップＳ３０；Ｙｅｓ）、重複管理部２５は、重複の先頭のチャンクが既に認識されているので、ステップＳ３２に移行する。
【００５７】
ステップＳ３２において、重複管理部２５は、ＨＥＡＤＣＨＵＮＫの継続１１１ｅに１を加算する（ステップＳ３２）。すなわち、重複管理部２５は、重複の先頭のチャンクに対応する継続１１１ｅに１を加算する。そして、重複管理部２５は、登録済チャンクの出現回数１１１ｄに１を加算する（ステップＳ３３）。重複管理部２５は、ＰＲＥＣＨＵＮＫ（直前重複チャンク）に登録済チャンクのハッシュ値を設定する（ステップＳ３４）。
【００５８】
そして、重複管理部２５は、登録済チャンクの情報を重複管理情報１１１の先頭に設定する（ステップＳ３５）。この登録済チャンクが最新で使われたからである。そして、重複管理部２５は、次のチャンクを選択すべく、ステップＳ１８に戻る。
【００５９】
図５Ｃに示すように、キャッシュ移動部２６は、以下のように、キャッシュ移動処理を実行する。キャッシュ移動部２６は、ｄａｔａｎｕｍ（メモリ１１に記憶されたチャンクの数）が上限値を超えたか否かを判定する（ステップＳ４１）。ｄａｔａｎｕｍが上限値を超えていない場合には（ステップＳ４１；Ｎｏ）、キャッシュ移動部２６は、キャッシュ移動処理を終了し、ステップＳ１８に戻る。
【００６０】
一方、ｄａｔａｎｕｍが上限値を超えた場合には（ステップＳ４１；Ｙｅｓ）、キャッシュ移動部２６は、重複管理情報１１１の末尾のチャンクを削除チャンクとする（ステップＳ４２）。すなわち、キャッシュ移動部２６は、重複管理情報１１１の末尾のチャンクを削除対象とする。
【００６１】
そして、キャッシュ移動部２６は、削除チャンクの継続１１１ｅが継続閾値より大きいか否かを判定する（ステップＳ４３）。削除チャンクの継続１１１ｅが継続閾値より大きい場合には（ステップＳ４３；Ｙｅｓ）、キャッシュ移動部２６は、削除チャンクを含むデータをディスク１２に退避する（ステップＳ４４）。例えば、キャッシュ移動部２６は、削除チャンクから継続する継続１１１ｅ分のチャンクのデータをディスク１２に移動する。すなわち、チャンクの重複の特性が、ＲＬＣ（rare  and  long  chunk  series）である場合に、キャッシュ移動部２６は、該当するデータを、階層化されたキャッシュの低速のディスク１２に移動する。そして、キャッシュ移動部２６は、ステップＳ４８に移行する。
【００６２】
削除チャンクの継続１１１ｅが継続閾値以下である場合には（ステップＳ４３；Ｎｏ）、キャッシュ移動部２６は、削除チャンクの出現回数１１１ｄが出現回数閾値より大きいか否かを判定する（ステップＳ４５）。削除チャンクの出現回数１１１ｄが出現回数閾値より大きい場合には（ステップＳ４５；Ｙｅｓ）、キャッシュ移動部２６は、削除チャンクを含むデータをＳＳＤ１３に退避する（ステップＳ４６）。例えば、キャッシュ移動部２６は、削除チャンクから継続する継続１１１ｅ分のチャンクのデータをＳＳＤ１３に移動する。すなわち、チャンクの重複の特性が、ＦＳＣ（frequent  and  short  chunk  series）である場合に、キャッシュ移動部２６は、該当するデータを、階層化されたキャッシュの高速のＳＳＤ１３に移動する。そして、キャッシュ移動部２６は、ステップＳ４８に移行する。
【００６３】
一方、削除チャンクの出現回数１１１ｄが出現回数閾値以下である場合には（ステップＳ４５；Ｎｏ）、キャッシュ移動部２６は、削除チャンクを破棄する（ステップＳ４７）。そして、キャッシュ移動部２６は、ステップＳ４８に移行する。
【００６４】
ステップＳ４８において、キャッシュ移動部２６は、ｄａｔａｎｕｍ（メモリ１１に記憶されたチャンクの数）から１を減算する（ステップＳ４８）。そして、キャッシュ移動部２６は、キャッシュ移動処理を終了し、ステップＳ１８に戻る。
【００６５】
［実施例１の効果］
上記実施例１によれば、通信装置１は、処理対象のデータが新規である場合に、処理対象のデータをメモリ１１に記憶する。通信装置１は、メモリ１１に記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する。通信装置１は、新規のデータを処理する際、メモリ１１に記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出する。そして、通信装置１は、削除対象のデータを、ディスク１２およびＳＳＤ１３のいずれかのキャッシュに移動する。かかる構成によれば、通信装置１は、メモリ１１のデータ数が上限である場合に、削除対象のデータをディスク１２およびＳＳＤ１３のいずれかのキャッシュに移動するので、以降の処理対象のデータについて、キャッシュを効率的にヒットさせることが可能となる。
【００６６】
また、上記実施例１によれば、通信装置１は、削除対象のデータの継続重複長が第１の閾値より大きい場合に、削除対象のデータをディスク１２およびＳＳＤ１３のうち低速のディスク１２に移動する。かかる構成によれば、通信装置１は、削除対象のデータの重複の特性（ＲＬＣ）に合わせて、削除対象のデータを最適なキャッシュに保存することができる。
【００６７】
また、上記実施例１によれば、通信装置１は、削除対象のデータの継続重複長が第１の閾値以下である場合、且つ削除対象のデータの重複回数が第２の閾値より大きい場合に、削除対象のデータをディスク１２およびＳＳＤ１３のうち高速のＳＳＤ１３に移動する。かかる構成によれば、通信装置１は、削除対象のデータの重複の特性（ＦＳＣ）に合わせて、削除対象のデータを最適なキャッシュに保存することができる。
【００６８】
また、上記実施例１によれば、通信装置１は、削除対象のデータの継続重複長が第１の閾値以下である場合、且つ削除対象のデータの重複回数が第２の閾値以下である場合に、削除対象のデータを破棄する。かかる構成によれば、通信装置１は、キャッシュから不要なデータを破棄することで、重要なデータを記憶する容量を増加させることができる。
【実施例２】
【００６９】
ところで、実施例１では、通信装置１は、過去に送信したデータを記憶するキャッシュ保存領域を階層化する場合を説明した。すなわち、通信装置１は、メモリ１１に記憶されたデータが満杯になった場合に、メモリ１１に記憶された所定のデータの重複の特性に応じて、階層化されたキャッシュに所定のデータを移動する。しかしながら、通信装置１は、これに限定されず、さらに、キャッシュとして使用可能なメモリ１１の容量が小さい場合に、過去に送信したデータを間引きながらメモリ１１に記憶するようにしても良い。
【００７０】
そこで、実施例２では、通信装置１は、さらに、キャッシュとして使用可能なメモリ１１の容量が小さい場合に、過去に送信したデータを間引きながらメモリ１１に記憶する場合について説明する。
【００７１】
［通信装置の構成］
図６は、実施例２に係る通信装置の構成を示す機能ブロック図である。なお、図１に示す通信装置１と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、重複判定部２３を重複判定部３１に変更した点にある。実施例１と実施例２とが異なるところは、新規登録部２４をサンプリングチャンク登録部３２に変更した点にある。実施例１と実施例２とが異なるところは、ディスク１４を追加した点にある。ディスク１４は、重複管理情報２１１を記憶する。
【００７２】
ここで、実施例２に係る通信装置１のキャッシュ保存処理の一例を、図７を参照して説明する。図７は、実施例２に係る通信装置のキャッシュ保存処理の一例を示す図である。図７に示すように、通信装置１は、入力データＡをチャンクと呼ばれる可変長ブロックに分割する。そして、通信装置１は、分割した各チャンクを、メモリ１１の利用比率に応じて、メモリ１１およびディスク１４に保存する。例えば、メモリ１１の利用比率が１／２である場合に、通信装置１は、新規のチャンクが出現するたびに、カウンタを１増やし、このカウンタをメモリ１１の利用比率の分母である２で割った余りでチャンクの保存先を変更する。一例として、余りが０であるチャンクの保存先をメモリ１１（またはディスク１４）とし、余りが１であるチャンクの保存先をディスク１４（またはメモリ１１）とする。
【００７３】
図７では、通信装置１は、入力データＡのキャッシュ１回目で、入力データＡの分割された各チャンクについて、偶数番目のチャンクを１次キャッシュであるメモリ１１に保存し、奇数番目のチャンクを２次キャッシュであるディスク１４に保存する。なお、メモリ１１の利用比率が１／２の場合について説明したが、これに限定されず、メモリ１１の容量に応じてメモリ１１の利用比率が決定されれば良い。一例として、メモリ１１の利用比率が３／１０の場合には、１０で割った余りが０〜２であるチャンクの保存先をメモリ１１とし、１０で割った余りが３〜９であるチャンクの保存先をディスク１４とすれば良い。
【００７４】
そして、通信装置１は、データをメモリ１１に保存する際にメモリ１１が満杯になった場合には、メモリ１１に記憶されたチャンクのうち、使われていない一番古いチャンク（ＬＲＵ：Least  Recently  Used）を抽出する。そして、通信装置１は、抽出したチャンクを削除対象とする。
【００７５】
ここでは、削除対象のチャンクが入力データＡのチャンクｃ１であるとする。すると、通信装置１は、削除対象のチャンクｃ１から継続する継続分のチャンクｃ１〜ｃ７のデータをディスク１２またはＳＳＤ１３に移動する。通信装置１は、継続分のチャンクの数が継続閾値より大きい場合には、データを、階層化されたキャッシュの低速のディスク１２に移動する。通信装置１は、削除対象のチャンクｃ１のデータをメモリ１１から削除する。
【００７６】
この後、通信装置１は、入力データＡのキャッシュ２回目において、キャッシュ保存領域に入力データＡのチャンクｃ１〜ｃ７が全て記憶されているので、キャッシュヒットする。そして、通信装置１は、重複する入力データＡの重複したチャンクｃ１〜ｃ７を除去して送信することができる。
【００７７】
これにより、通信装置１は、１次キャッシュのメモリ１１の容量が小さい場合であっても、２次キャッシュのディスク１４をともに用いてデータを記憶する。したがって、通信装置１は、データの重複の特性がＲＬＣ（rare  and  long  chunk  series）であるデータの一部を失わないで、データ送信の重複除去を実現することができる。
【００７８】
図６に戻って、重複判定部３１は、選択されたチャンクが、メモリ１１に記憶された複数のチャンクのうちいずれかのチャンクと重複するか否かを判定する。例えば、重複判定部３１は、重複管理情報１１１を用いて、選択されたチャンクの算出されたハッシュ値が既にメモリ１１に記憶されたチャンクのハッシュ値と一致するか否かを判定する。
【００７９】
また、重複判定部３１は、メモリ１１に記憶された複数のチャンクのうちいずれかのチャンクと重複する場合には、選択されたチャンクが見つかったと判断する。そして、重複判定部３１は、選択されたチャンクを間引きチャンク探索用のチャンクとする。
【００８０】
また、重複判定部３１は、メモリ１１に記憶された複数のチャンクのいずれのチャンクとも重複しない場合には、選択されたチャンクが、ディスク１４に記憶された複数のチャンクのうちいずれかのチャンクと重複するか否かを判定する。例えば、重複判定部３１は、重複管理情報１１１に記憶された間引きチャンク探索用のチャンクの間引きチャンク位置および重複管理情報２１１を用いて、選択されたチャンクの算出されたハッシュ値がディスク１４に記憶されたチャンクのハッシュ値と一致するか否かを判定する。
【００８１】
また、重複判定部３１は、選択されたチャンクが、ディスク１４に記憶された複数のチャンクのうちいずれかのチャンクと重複する場合には、選択されたチャンクが見つかったと判断する。また、重複判定部３１は、選択されたチャンクが、ディスク１４に記憶された複数のチャンクのいずれのチャンクとも重複しない場合には、選択されたチャンクが見つからなかったと判断する。
【００８２】
ここで、メモリ１１に記憶された重複管理情報１１１、ディスク１４に記憶された重複管理情報２１１のデータ構造について、図８を参照して説明する。図８は、実施例２に係る重複管理情報のデータ構造の一例を示す図である。
【００８３】
図８上図は、メモリ１１に記憶される重複管理情報１１１のデータ構造の一例を示す図である。メモリ１１に記憶される重複管理情報１１１に関し、図４に示す重複管理情報１１１と同一の構成については同一符号を示すことで、その重複する構成の説明については省略する。図８上図に示す重複管理情報１１１が、図４に示す重複管理情報１１１と異なるところは、間引きチャンク位置１１１ｆを追加した点にある。図８下図は、ディスク１４に記憶される重複管理情報２１１のデータ構造の一例を示す図である。図８下図に示すディスク１４に記憶される重複管理情報１１１は、図４に示す重複管理情報１１１と同一の構成であるので、その重複する構成の説明については省略する。
【００８４】
間引きチャンク位置１１１ｆは、間引きしたチャンクの情報について、ディスク１４の重複管理情報２１１に記憶された位置を示す。すなわち、間引きチャンク位置１１１ｆは、間引きしたチャンクの情報への位置を示す。図８には、入力データに含まれるチャンクｘ、ｙの各チャンクの情報が記憶されている。ハッシュ値（ＳＨＡ１）１１１ａが「ｘｘｘ」である情報は、チャンクｘの情報である。ハッシュ値（ＳＨＡ１）２１１ａが「ｙｙｙ」である情報は、チャンクｙの情報である。チャンクｘの間引きチャンク位置１１１ｆには、チャンクｙの情報への位置が設定されている。重複判定部３１は、チャンクｘのハッシュ値がメモリ１１上の重複管理情報１１１で見つかったので、チャンクｘを間引きチャンク探索用のチャンクとする。重複判定部３１は、チャンクｙのハッシュ値がメモリ１１上の重複管理情報１１１で見つからなかったので、間引きチャンク探索用のチャンクｘの間引きチャンク位置１１１ｆからディスク１４に記憶されたチャンクの情報を辿る。そして、重複判定部３１は、チャンクｙの算出されたハッシュ値がディスク１４上の重複管理情報２１１のハッシュ値と一致するか否かを判定し、チャンクｙの情報を見つける。
【００８５】
図６に戻って、サンプリングチャンク登録部３２は、選択されたチャンクが重複判定部３１によって見つからなかった場合には、選択されたチャンクの保存先を決定する。例えば、サンプリングチャンク登録部３２は、新規のチャンクが出現するたびに１ずつ加算されるカウンタの値を、予め定められたメモリ１１の利用比率の分母の値で割った余りを算出する。また、サンプリングチャンク登録部３２は、余りが０以上であって予め定められたメモリ１１の利用比率の分子の値より小さい場合には、選択されたチャンクをメモリ１１に保存する。また、サンプリングチャンク登録部３２は、余りが予め定められたメモリ１１の利用比率の分子の値以上である場合には、選択されたチャンクをディスク１４に保存する。
【００８６】
［キャッシュ保存処理の手順］
次に、実施例２に係るキャッシュ保存処理の手順を、図９Ａ〜図９Ｄを参照して説明する。図９Ａ〜図９Ｄは、実施例２に係るキャッシュ保存処理のフローチャートを示す図である。図９Ａおよび図９Ｂに示すフローチャートに関し、図５Ａおよび図５Ｂに示すフローチャートと同一の動作については同一符号を示すことで、その重複する動作の説明については略記する。なお、重複中の先頭のチャンクは「重複先頭チャンク」といい、「ＨＥＡＤＣＨＵＮＫ」で表わすものとする。重複チャンクの直前の重複チャンクは「直前重複チャンク」といい、「ＰＲＥＣＨＵＮＫ」で表わすものとする。現在の出現位置は、「現出現位置」といい、「ＯＦＦＳＥＴ」で表わすものとする。メモリ１１に記憶されたチャンクの数は、「ｄａｔａｎｕｍ」で表わすものとする。新規のチャンクの数は、「チャンクカウンタ」といい、「ｃｏｕｎｔｅｒ」で表わすものとする。ＨＥＡＤＣＨＵＮＫ、ＰＲＥＣＨＵＮＫ、ＯＦＦＳＥＴ、ｄａｔａｎｕｍおよびｃｏｕｎｔｅｒは、記憶部１０に一時的に記憶されるローカルエリアである。また、メモリ１１の利用比率は、ｎ／ｍ（ｎ，ｍ：正の整数）であるとする。
【００８７】
図９Ａに示すように、チャンク分割部２１は、ＨＥＡＤＣＨＵＮＫおよびＰＲＥＣＨＵＮＫにｎｕｌｌを設定し、ＯＦＦＳＥＴ、ｄａｔａｎｕｍおよびｃｏｕｎｔｅｒに０を設定する（ステップＳ１１Ａ）。チャンク分割部２１は、データの受信を待つ（ステップＳ１２）。
【００８８】
チャンク分割部２１は、データが終了であるか否かを判定する（ステップＳ１３）。データが終了である場合には（ステップＳ１３；Ｙｅｓ）、チャンク分割部２１は、キャッシュ保存処理を終了する。
【００８９】
一方、データが終了でない場合には（ステップＳ１３；Ｎｏ）、チャンク分割部２１は、データ（入力データ）を受信する（ステップＳ１４）。チャンク分割部２１は、受信した入力データを複数のチャンクに分割する（ステップＳ１５）。そして、チャンク分割部２１は、分割したチャンクのうち、１つのチャンクを選択する（ステップＳ１６）。
【００９０】
続いて、制御部２０は、選択したチャンクに対して、キャッシュ保存処理を行う（ステップＳ１７）。なお、キャッシュ保存処理のフローチャートについては、図９Ｂ〜図９Ｄで説明する。そして、制御部２０は、全てのチャンクにおける処理が終了したか否かを判定する（ステップＳ１８）。全てのチャンクにおける処理が終了していない場合には（ステップＳ１８；Ｎｏ）、制御部２０は、次のチャンクを選択させるべく、ステップＳ１６に移行する。
【００９１】
一方、全てのチャンクにおける処理が終了した場合には（ステップＳ１８；Ｙｅｓ）、制御部２０は、次のデータの受信待ちをさせるべく、ステップＳ１２に移行する。
【００９２】
図９Ｂに示すように、ハッシュ計算部２２は、選択したチャンクに対して、ＳＨＡ１を用いてハッシュ値を算出する（ステップＳ２１）。ハッシュ計算部２２は、算出したハッシュ値をローカルエリアであるＳＨＡＶＡＬに設定する。
【００９３】
そして、重複判定部３１は、選択したチャンクの重複を探索する（ステップＳ２２Ａ）。なお、チャンクの重複探索処理のフローチャートについては、図９Ｄで説明する。
【００９４】
そして、重複判定部３１は、チャンクの重複探索処理に基づいて、選択したチャンクが新規であるか否かを判定する（ステップＳ２３）。例えば、重複判定部３１は、チャンクの重複探索処理により、選択したチャンクが見つからなかったか否かを判定する。選択したチャンクが見つからなかった場合には、選択したチャンクは新規である。選択したチャンクがみつかった場合には、選択したチャンクは新規でない。
【００９５】
そして、選択したチャンクが新規である場合には（ステップＳ２３；Ｙｅｓ）、サンプリングチャンク登録部３２は、サンプリングチャンク登録処理を実行する（ステップＳ２４Ａ）。すなわち、サンプリングチャンク登録処理は、選択したチャンクをサンプリングし、サンプリングに応じてメモリ１１またはディスク１４へ登録する。なお、サンプリングチャンク登録処理のフローチャートについては、図９Ｃで説明する。
【００９６】
そして、サンプリングチャンク登録部３２は、ローカルエリアであるＨＥＡＤＣＨＵＮＫ（重複先頭チャンク）、ＯＦＦＳＥＴ（現出現位置）、ｄａｔａｎｕｍ（メモリ１１に記憶されたチャンクの数）およびｃｏｕｎｔｅｒ（チャンクカウンタ）を調整する（ステップＳ２５Ａ）。例えば、ＨＥＡＤＣＨＵＮＫに、ｎｕｌｌが設定される。ＯＦＦＳＥＴに、選択したチャンクの長さを加算して得られた値が設定される。ｄａｔａｎｕｍに、選択したチャンク分の１を加算して得られた値が設定される。ｃｏｕｎｔｅｒに、選択したチャンク分の１を加算して得られた値が設定される。
【００９７】
そして、新規登録部２４は、新規のチャンクの情報を重複管理情報１１１の先頭に設定する（ステップＳ２６）。この新規のチャンクが最新で使われたからである。そして、新規登録部２４は、キャッシュ保存処理におけるキャッシュ移動処理をさせる。なお、キャッシュ保存処理におけるキャッシュ移動処理のフローチャートについては、図５Ｃで説明したので、その重複する動作の説明については省略する。
【００９８】
ステップＳ２３において、選択したチャンクが新規でない場合には（ステップＳ２３；Ｎｏ）、重複管理部２５は、重複管理処理を実行する。なお、重複管理処理のフローチャート（ステップＳ２７〜Ｓ３５）については、図５Ｂで説明したので、その重複する動作の説明については省略する。
【００９９】
図９Ｃに示すように、サンプリングチャンク登録部３２は、以下のように、サンプリングチャンク登録処理を実行する。サンプリングチャンク登録部３２は、選択したチャンクの保存先を決定すべく、ｃｏｕｎｔｅｒ（チャンクカウンタ）をメモリ１１の利用比率の分母の値ｍで割った余りを算出する（ステップＳ５１）。
【０１００】
そして、サンプリングチャンク登録部３２は、余りが０以上且つメモリ１１の利用比率の分子の値であるｎより小さいか否かを判定する（ステップＳ５２）。余りが０以上且つメモリ１１の利用比率の分子の値であるｎより小さい場合には（ステップＳ５２；Ｙｅｓ）、サンプリングチャンク登録部３２は、選択したチャンクをメモリ１１に保存する（ステップＳ５３）。
【０１０１】
そして、サンプリングチャンク登録部３２は、選択したチャンクの情報をメモリ１１上の重複管理情報１１１に登録する（ステップＳ５４）。例えば、ハッシュ値（ＳＨＡ１）１１１ａに、ＳＨＡＶＡＬに設定された値が設定される。出現位置１１１ｂに、ＯＦＦＳＥＴに設定された値が設定される。長さ１１１ｃに、チャンクの長さが設定される。出現回数１１１ｄに、「１」が設定される。継続１１１ｅに、「０」が設定される。
【０１０２】
そして、サンプリングチャンク登録部３２は、余りがメモリ１１の利用比率の分子の値であるｎを１減じた値であるか否かを判定する（ステップＳ５５）。すなわち、サンプリングチャンク登録部３２は、今回受信した入力データの複数チャンクの中でメモリ１１に記憶される最後のチャンクであるか否かを判定する。一例として、メモリ１１の利用比率が２／５である場合とする。分割されたチャンクａ，ｂ，ｃの余りが０，１，２であるとする。すると、チャンクｂの余りは１であり、チャンクｂの余りが、メモリ１１の利用比率の分子の値である２を１減じた値１である。したがって、今回受信した入力データの複数チャンクの中でチャンクｂがメモリ１１に記憶される最後のチャンクである。
【０１０３】
そして、余りがメモリ１１の利用比率の分子の値であるｎを１減じた値である場合には（ステップＳ５５；Ｙｅｓ）、サンプリングチャンク登録部３２は、選択したチャンクを、間引きチャンク位置保存用のチャンクとする（ステップＳ５６）。すなわち、サンプリングチャンク登録部３２は、選択したチャンクを、後続するチャンクの間引き位置を更新するチャンクとする。そして、サンプリングチャンク登録部３２は、サンプリングチャンク登録処理し、ステップＳ２５Ａに戻る。
【０１０４】
一方、余りがメモリ１１の利用比率の分子の値であるｎを１減じた値でない場合には（ステップＳ５５；Ｎｏ）、サンプリングチャンク登録部３２は、選択したチャンクを、間引きチャンク位置保存用のチャンクとしない。そして、サンプリングチャンク登録部３２は、サンプリングチャンク登録処理を終了し、ステップＳ２５Ａに戻る。
【０１０５】
ステップＳ５２において、余りが０以上且つメモリ１１の利用比率の分子の値であるｎより小さくない場合には（ステップＳ５２；Ｎｏ）、サンプリングチャンク登録部３２は、選択したチャンクをディスク１４に保存する（ステップＳ５７）。
【０１０６】
そして、サンプリングチャンク登録部３２は、選択したチャンクの情報をディスク１４上の重複管理情報２１１に登録する（ステップＳ５８）。例えば、ハッシュ値（ＳＨＡ１）２１１ａに、ＳＨＡＶＡＬに設定された値が設定される。出現位置２１１ｂに、ＯＦＦＳＥＴに設定された値が設定される。長さ２１１ｃに、チャンクの長さが設定される。出現回数２１１ｄに、「１」が設定される。継続２１１ｅに、「０」が設定される。
【０１０７】
そして、サンプリングチャンク登録部３２は、間引きチャンク位置保存用のチャンクの間引き位置を更新する（ステップＳ５９）。例えば、重複管理情報１１１の、間引きチャンク位置保存用のチャンクに対する間引きチャンク位置１１１ｆに、選択したチャンクの重複管理情報２１１への位置が設定される。そして、サンプリングチャンク登録部３２は、サンプリングチャンク登録処理を終了し、ステップＳ２５Ａに戻る。
【０１０８】
図９Ｄに示すように、重複判定部３１は、以下のように、チャンクの重複探索処理を実行する。重複判定部３１は、メモリ１１で、選択したチャンクの重複を探索する（ステップＳ６１）。例えば、重複判定部３１は、メモリ１１上の重複管理情報１１１と、選択したチャンクのハッシュ値とを用いて、選択したチャンクの重複を探索する。
【０１０９】
そして、重複判定部３１は、メモリ１１で、選択したチャンクが見つかったか否かを判定する（ステップＳ６２）。選択したチャンクが見つかった場合には（ステップＳ６２；Ｙｅｓ）、重複判定部３１は、選択したチャンクを間引きチャンク探索用のチャンクとする（ステップＳ６３）。そして、重複判定部３１は、選択したチャンクが見つかったことをパラメータとしてステップＳ２３に戻る。
【０１１０】
一方、選択したチャンクが見つからなかった場合には（ステップＳ６２；Ｎｏ）、重複判定部３１は、間引きチャンク探索用のチャンクの間引きチャンク位置を探索する（ステップＳ６４）。すなわち、重複判定部３１は、ディスク１４で、選択したチャンクの重複を探索する。例えば、重複判定部３１は、重複管理情報１１１に記憶された間引きチャンク探索用のチャンクの間引きチャンク位置１１１ｆと、ディスク１４上の重複管理情報２１１とを用いて、選択したチャンクの重複を探索する。
【０１１１】
そして、重複判定部３１は、ディスク１４で、選択したチャンクが見つかったか否かを判定する（ステップＳ６５）。選択したチャンクが見つからなかった場合には（ステップＳ６５；Ｎｏ）、重複判定部３１は、選択したチャンクが見つからなかったことをパラメータとしてステップＳ２３に戻る。選択したチャンクが見つかった場合には（ステップＳ６５；Ｙｅｓ）、重複判定部３１は、選択したチャンクが見つかったことをパラメータとしてステップＳ２３に戻る。
【０１１２】
［実施例２の効果］
上記実施例２によれば、通信装置１は、メモリ１１およびディスク１４を有する。通信装置１は、メモリ１１の利用比率に応じて、処理対象のデータを、メモリ１１およびディスク１４のいずれかのキャッシュに記憶する。かかる構成によれば、通信装置１は、メモリ１１の容量が小さい場合であっても、ディスク１４をともに用いてデータを記憶する。したがって、通信装置１は、データの重複の特性がＲＬＣ（rare  and  long  chunk  series）であるデータの一部を失わないで、重複除去を実現することができる。
【０１１３】
［その他］
なお、通信装置１は、既知のパーソナルコンピュータ、ワークステーション等の情報処理装置に、上記した重複判定部２３、新規登録部２４、重複管理部２５、キャッシュ移動部２６などの各機能を搭載することによって実現することができる。
【０１１４】
また、上記実施例１，２では、通信装置１は、過去に送信したデータを記憶するキャッシュ保存領域を階層化する。そして、通信装置１が、上位のキャッシュ（例えばメモリ１１）が満杯であるタイミングで、データの重複の特性に応じて、データを所定の下位のキャッシュ（例えば、ディスク１２、ＳＳＤ１３）に移動する場合を説明した。しかしながら、通信装置１の場合に限定されず、情報処理装置が、過去に処理したデータを記憶するキャッシュ保存領域を階層化する。そして、情報処理装置が、上位のキャッシュ（例えばメモリ１１）が満杯であるタイミングで、データの重複の特性に応じて、データを所定の下位のキャッシュ（例えば、ディスク１２、ＳＳＤ１３）に移動する場合であっても良い。例えば、情報処理装置内の、ＣＰＵと主記憶装置との間にあるキャッシュメモリに適用しても良い。このキャッシュメモリをキャッシュ保存領域とすれば良い。
【０１１５】
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、チャンク分割部２１とハッシュ計算部２２とを１個の部として統合しても良い。一方、キャッシュ移動部２６を、キャッシュが満杯であるか否かを判定する判定部と、キャッシュが満杯である場合に該当データを移動する移動部とに分散しても良い。また、記憶部１０を通信装置１の外部装置に記憶するようにしても良いし、記憶部１０を記憶した外部装置を通信装置１とネットワーク経由で接続するようにしても良い。
【０１１６】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することによって実現することができる。そこで、以下では、図１に示した通信装置１と同様の機能を実現するキャッシュ保存プログラムを実行するコンピュータの一例を説明する。図１０は、キャッシュ保存プログラムを実行するコンピュータの一例を示す図である。
【０１１７】
図１０に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０３と、ユーザからのデータの入力を受け付ける入力装置２１５と、表示装置２０９を制御する表示制御部２０７とを有する。また、コンピュータ２００は、記憶媒体からプログラムなどを読取るドライブ装置２１３と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部２１７とを有する。また、コンピュータ２００は、各種情報を一時記憶するメモリ２０１と、ＨＤＤ２０５を有する。そして、メモリ２０１、ＣＰＵ２０３、ＨＤＤ２０５、表示制御部２０７、ドライブ装置２１３、入力装置２１５、通信制御部２１７は、バス２１９で接続されている。
【０１１８】
ドライブ装置２１３は、例えばリムーバブルディスク１４１用の装置である。ＨＤＤ２０５は、キャッシュ保存プログラム２０５ａおよびキャッシュ保存関連情報２０５ｂを記憶する。
【０１１９】
ＣＰＵ２０３は、キャッシュ保存プログラム２０５ａを読み出して、メモリ２０１に展開し、プロセスとして実行する。かかるプロセスは、通信装置１の各機能部に対応する。キャッシュ保存関連情報２０５ｂは、重複管理情報１１１に対応する。そして、例えばリムーバブルディスク１４１が、重複管理情報１１１などの各情報を記憶する。
【０１２０】
なお、キャッシュ保存プログラム２０５ａについては、必ずしも最初からＨＤＤ２０５に記憶させておかなくても良い。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ２００がこれらからキャッシュ保存プログラム２０５ａを読み出して実行するようにしても良い。
【０１２１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２２】
（付記１）コンピュータに、
処理対象のデータが新規である場合に、前記処理対象のデータを第１のキャッシュメモリに記憶し、
前記第１のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理し、
新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する
処理を実行させることを特徴とするキャッシュ保存プログラム。
【０１２３】
（付記２）前記移動する処理は、前記削除対象のデータの継続重複長が第１の閾値より大きい場合に、前記削除対象のデータを第２のキャッシュメモリおよび第３のキャッシュメモリのうち低速の第２のキャッシュメモリに移動する
処理を実行させることを特徴とする付記１に記載のキャッシュ保存プログラム。
【０１２４】
（付記３）前記移動する処理は、前記削除対象のデータの継続重複長が第１の閾値以下である場合、且つ前記削除対象のデータの重複回数が第２の閾値より大きい場合に、前記削除対象のデータを第２のキャッシュメモリおよび第３のキャッシュメモリのうち高速の第３のキャッシュメモリに移動する
処理を実行させることを特徴とする付記１に記載のキャッシュ保存プログラム。
【０１２５】
（付記４）前記移動する処理は、前記削除対象のデータの継続重複長が第１の閾値以下である場合、且つ前記削除対象のデータの重複回数が第２の閾値以下である場合に、前記削除対象のデータを破棄する
処理を実行させることを特徴とする付記１に記載のキャッシュ保存プログラム。
【０１２６】
（付記５）前記第１のキャッシュメモリが、１次キャッシュメモリと２次キャッシュメモリを有する場合に、前記処理対象のデータを前記第１のキャッシュメモリに記憶する際、前記１次キャッシュメモリの利用比率に応じて、前記処理対象のデータを、前記１次キャッシュメモリおよび前記２次キャッシュメモリのいずれかのキャッシュメモリに記憶する
処理を実行させることを特徴とする付記１に記載のキャッシュ保存プログラム。
【０１２７】
（付記６）コンピュータが、
処理対象のデータが新規である場合に、前記処理対象のデータを第１のキャッシュメモリに記憶し、
前記第１のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理し、
新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出し、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する
各処理を実行することを特徴とするキャッシュ保存方法。
【０１２８】
（付記７）処理対象のデータが新規である場合に、前記処理対象のデータを第１のキャッシュメモリに登録する登録部と、
前記第１のキャッシュメモリに記憶されたデータ毎に、処理対象のデータと重複する重複回数および処理対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する管理部と、
新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出する抽出部と、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する移動部と、
を有することを特徴とする情報処理装置。
【０１２９】
（付記８）送信対象のデータが新規である場合に、前記送信対象のデータを第１のキャッシュメモリに登録する登録部と、
前記第１のキャッシュメモリに記憶されたデータ毎に、送信対象のデータと重複する重複回数および送信対象のデータと重複する際に継続して重複する長さを示す継続重複長を重複履歴として管理する管理部と、
新規のデータを処理する際、前記第１のキャッシュメモリに記憶されたデータの数が上限である場合に、所定の削除対象のデータを抽出する抽出部と、
前記重複履歴で管理された前記削除対象のデータの重複回数および継続重複長に応じて、前記削除対象のデータを、第２のキャッシュメモリおよび第３のキャッシュメモリのいずれかのキャッシュメモリに移動する移動部と、
を有することを特徴とする通信装置。
【符号の説明】
【０１３０】
１  通信装置
１０  記憶部
１１  メモリ
１１１，２１１  重複管理情報
１２  ディスク
１３  ＳＳＤ
２０  制御部
２１  チャンク分割部
２２  ハッシュ計算部
２３，３１  重複判定部
２４  新規登録部
２５  重複管理部
２６  キャッシュ移動部
２７  送信部
３２  サンプリングチャンク登録部
【図１】
2015201050.tif 000005
【図２】
2015201050.tif 000006
【図３】
2015201050.tif 000007
【図４】
2015201050.tif 000008
【図５Ａ】
2015201050.tif 000009
【図５Ｂ】
2015201050.tif 000010
【図５Ｃ】
2015201050.tif 000011
【図６】
2015201050.tif 000012
【図７】
2015201050.tif 000013
【図８】
2015201050.tif 000014
【図９Ａ】
2015201050.tif 000015
【図９Ｂ】
2015201050.tif 000016
【図９Ｃ】
2015201050.tif 000017
【図９Ｄ】
2015201050.tif 000018
【図１０】
2015201050.tif 000019
【図１１】
2015201050.tif 000020
【図１２Ａ】
2015201050.tif 000021
【図１２Ｂ】
2015201050.tif 000022