JP5144225B2 - 情報検索装置、及び情報検索装置へのエントリ情報の登録方法 - Google Patents

情報検索装置、及び情報検索装置へのエントリ情報の登録方法 Download PDF

Info

Publication number
JP5144225B2
JP5144225B2 JP2007297613A JP2007297613A JP5144225B2 JP 5144225 B2 JP5144225 B2 JP 5144225B2 JP 2007297613 A JP2007297613 A JP 2007297613A JP 2007297613 A JP2007297613 A JP 2007297613A JP 5144225 B2 JP5144225 B2 JP 5144225B2
Authority
JP
Japan
Prior art keywords
information
entry
value
hash
unit
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.)
Expired - Fee Related
Application number
JP2007297613A
Other languages
English (en)
Other versions
JP2009123050A (ja
Inventor
大彦 柴田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2007297613A priority Critical patent/JP5144225B2/ja
Publication of JP2009123050A publication Critical patent/JP2009123050A/ja
Application granted granted Critical
Publication of JP5144225B2 publication Critical patent/JP5144225B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、Bloomierフィルタ型の情報検索装に関し、特にBloomierフィルタと呼ばれる検索用のデータ構造の構築方法の改良に関する。
ネットワーク上を流れるパケットデータを他のネットワークに中継する機器であるルータは、ルーティングプロトコルに基づいて他のルータとの間で経路情報を相互に交換することによって経路情報を学習し、入力パケットに付与されたネットワーク層のアドレスを経路情報と照合することによって、入力パケットの転送先を決定する経路選択機能を有している。
インターネットに接続されるホスト数の増加していることに加え、最近の動画像ビデオ会議のような広帯域を要求するアプリケーションの普及によって、インターネットトラフィックが急激に増大している。これらの広帯域アプリケーションの十分な品質を確保するために、通信リンクはより高いデータレートへと高度化されつつある。しかし高速化されたリンクは、ルータによるIP(Internet Protocol)パケットの転送処理速度が高速化されている場合にのみ、端末相互間におけるエンド・ツー・エンドの品質向上に寄与し得るものである。
ルータにおいて重大なボトルネックとなる処理は、経路選択のためのアドレス検索処理である。アドレス検索処理とは、例えば、IPパケットヘッダから取得した32ビット幅を持つIPv4アドレスを入力し、入力アドレスに対応する経路情報(転送先アドレス、転送先ネットワーク、転送先ポート等)を決定する処理である。なお、以下では、入力情報に対応する関連情報を検索する装置を情報検索装置と呼び、特に、アドレス検索、つまり、入力アドレスに対応する転送先経路の検索を行う装置をネットワークサーチエンジンと呼ぶ。
アドレス検索処理を高速化するネットワークサーチエンジンとして、Bloomierフィルタと呼ばれるデータ構造に経路情報を格納し、当該データ構造に基づいてアドレス検索を実行するネットワークサーチエンジンが提案されている(非特許文献1を参照)。
Bloomierフィルタ型のネットワークサーチエンジン9の構成を図9に示す。図9において、ハッシュ演算部91は、入力パケットのヘッダに含まれている宛先アドレスに対し、K個のハッシュ関数によるハッシュ演算を行ってK個のハッシュ値を出力する。インデックステーブル92は、K個のハッシュ関数によって得られるハッシュ値によってアドレスされるメモリである。
論理演算部93は、インデックステーブル92に格納された値を読み出して排他的論理和演算を行う。フィルタリングテーブル94及びリザルトテーブル95は、論理演算部93の演算結果によってアドレスされるメモリである。フィルタリングテーブル94には、入力される宛先アドレスに対応する情報、具体的にはプリフィックス情報が格納される。リザルトテーブル95には、経路情報が格納される。
比較部96は、フィルタリングテーブル94に格納された値と入力ヘッダに含まれている宛先アドレスとを比較し、これらのプリフィックスが一致する場合に、valid信号を出力する。
ネットワークサーチエンジン9は、インデックステーブル92、フィルタリングテーブル94及びリザルトテーブル95に対する書き込みを後述する方法によって行うことにより、入力された宛先アドレスに対応する経路情報を一定の短い時間で出力することを可能としている。
次に、インデックステーブル92、フィルタリングテーブル94及びリザルトテーブル95に対する書き込みを行って、ネットワークサーチエンジン9をセットアップする方法を説明する前に、必要な用語の定義を行う。以下では、ネットワークサーチエンジン9に登録される入力アドレスと当該アドレスに対応する経路情報との対をエントリと呼ぶ。また、あるアドレスに対して演算されるK個のハッシュ値のうち、ネットワークサーチエンジン9に登録されたエントリの集合に含まれる他のエントリに対して演算されるハッシュ値と重複しないハッシュ値が存在する場合、この重複しないハッシュ値をシングルトンと呼ぶ。また、エントリに関する情報をインデックステーブル92に格納する際には、後述するような演算処理を実行した後に書き込みを行うため、エントリに関する情報をインデックステーブル92に格納することをエンコードすると表現する。
インデックステーブル92は、登録エントリの集合に含まれる各エントリtについて、エントリtの入力アドレスから算出されるK個のハッシュ値のうちの1つによって指定されるテーブルメモリアドレスに、エントリtの関連情報(例えば経路情報)を復元可能な形で書き込むことによってセットアップされる。ここで、テーブルメモリアドレスをτ(t)とする。なお、エントリtと異なる別のエントリt´の関連情報は、エントリtと同じテーブルメモリアドレスτ(t)に格納されることはない。つまり、エントリt´に対しては、ユニークなテーブルメモリアドレスτ(t´)が確保される。登録エントリ集合に含まれる全てのエントリtに対してτ(t)を算出する手順の一例を以下に示す。
インデックステーブル92は、エントリtの入力アドレスが与えられた際に、テーブルメモリアドレスτ(t)に書き込まれたエントリtの関連情報が回復できるようにセットアップされる必要がある。K個のハッシュ関数のうちで、エントリtの入力アドレスからハッシュ値、つまりテーブルメモリアドレスτ(t)を算出するハッシュ関数の識別子をhτ(t)とする。τ(t)はK個のハッシュ値のうちの1つではあるが、情報回復の過程ではhτ(t)は未知である。つまり、インデックステーブル92のセットアップの過程においてhτ(t)が特定されるが、hτ(t)それ自体はインデックステーブル92等に保存されたり、アドレス検索の過程で参照されたりする情報ではない。
τ(t)を算出するハッシュ関数の識別子hτ(t)を知ることなく、アドレス検索の過程で関連情報を回復するためには、例えば、あるエントリtの入力アドレスに対して得たK個のハッシュ値によって指定されるインデックステーブル92の全ての場所に格納された情報を用いた単純なブール演算を行うことによって関連情報が得られるように、これらの場所に何らかの情報を書き込んでおくことが必要とされる。実際には、インデックステーブ92のセットアップップ過程において、エントリtに対するhτ(t)を特定した後に、以下の(1)式に示すエンコード値V(t)をτ(t)に書き込む。
Figure 0005144225
(1)式において、"^"は、排他的論理和演算を表している。H(t)は、エントリtから算出されるi番目のハッシュ値を表している。D[H(t)]は、インデックステーブル92のアドレスH(t)に格納された情報である。Kは、ハッシュ演算部91に適用されるハッシュ関数の数である。I(t)は、エントリtに関連付けられた情報であり、インデックステーブルから回復したい情報である。また、上述したように、hτ(t)は、K個のハッシュ関数のうちでτ(t)を算出するハッシュ関数を示す識別子(番号)である。
Bloomierフィルタ型のネットワークサーチエンジン9が備えるインデックステーブル92を、上述した手順でセットアップすることにより、エントリtの入力アドレスが与えられた場合に、K個のハッシュ値によって指定される全ての場所に格納された情報に対する排他的論理和演算によって、所望の情報I(t)を取り出すことができる。つまり、情報I(t)を得るために以下の(2)式に示す演算を行う。
Figure 0005144225
インデックステーブル92のセットアップにおける他の重要な処理は、全ての登録エントリtに対してユニークな、つまりシングルトンであるτ(t)を決定することである。Bloomierフィルタ型のネットワークサーチエンジン9では、τ(t)の決定に非特許文献1に詳細に開示されているアルゴリズムを用いる。以下に、当該アルゴリズムの概略を示す。
まず始めに、ネットワークサーチエンジン9に登録エントリ集合をセットアップする際に参照される登録エントリtの順序Γを決定する。順序Γは、順序Γ中に含まれる各々のエントリtが、自身より前に位置する全てのエントリに対して算出さていないハッシュ値を持つことを特徴する順序である。ひとたび順序Γが得られれば、順序Γに従った順番で(1)式によるエントリtのエンコードを行っていけばよい。これが登録エントリtの各々に対してシングルトンであるτ(t)が与えられるための十分条件である。その理由は以下の通りである。
まず、順序Γで指定された最初のエントリt1は、K個のハッシュ値で指定されるK個のテーブルメモリアドレスのうちのどの位置にエンコードされても良い。エントリt1以前にエンコードされたエントリが存在しないためである。順序Γで2番目に位置するエントリt2は、順序Γの決定規則によれば、エントリt1とは共有しない少なくとも1つのハッシュ値を持っている。このため、エントリt2のエンコード時点においてエントリt1が既にエンコードされているが、エントリt2はエントリt1と共有していないハッシュ値によって指定される位置に、(2)式による情報I(t2)の回復が保証された状態でエンコードされる。なお、1つのエントリをエンコードする際には、(1)式に示したエンコード値V(t)によって、1つの格納場所のみを書き換えるのみであることに着目すれば、エントリt1に対応する情報I(t1)の回復に必要な情報は、エントリt2のエンコードによって破壊されないことが判る。エントリt2のシングルトンτ(t2)は、エントリt1に対するK個のハッシュ値に含まれていないためである。3番目以降のエントリに対しても、順序Γによって同様のことが保証される。
このような順序Γは、図10に示す手順に従って決定することができる。登録エントリの集合97の中からハッシュ値がシングルトンであるエントリt1を判定し、スタックメモリ(エントリスタック)98の底にエレメントt1を格納して、t1をエントリ集合97から削除する(ステップS902及びS903)。後は、この処理を、エントリ集合97が空になるまで、再帰的に繰り返せばよい(ステップS901)。最終的に得られるエントリスタック98は、エントリ集合97に含まれる全ての登録エレメントが順序Γで格納された状態となる。なお、図10のステップS904及びS905は、上述した順序Γ決定後に実行するエンコード手順を示している。
なお、上記のステップS901〜S903の繰り返し処理において、最初のエントリt1については、K個のハッシュ値の全てがシングルトンになり得る。しかし、以降のエントリについて処理を繰り返すうちに、K個のハッシュ値の全てが、過去に処理済みのエントリのシングルトン群と衝突するエントリが発生する場合がある。この場合は、処理済みのエントリに対するシングルトンの記憶をクリアした上で、図10の処理を繰り返し、最終的にエントリ集合97に含まれる全てのエントリがエントリスタック98に移動されることにより、順序Γを得ることができる。
上述したインデックステーブル92のセットアップ手順において、インデックステーブル92にエンコードする関連情報I(t)を、リザルトテーブル95に格納される経路情報を指定するためのテーブルメモリアドレスとすることによって、ネットワークサーチエンジン9によるアドレス検索が可能となる。これにより、ネットワークサーチエンジン9は、入力アドレスに対応する経路情報を決定するアドレス検索動作を一定のクロックサイクル数で行うことができる。
ところで、ハッシュ関数は、例えば32ビット幅の入力アドレスを、実際の登録エントリ数を表すビット幅(例えば20ビット)に圧縮している。このため、上述したセットアップ過程でのハッシュ値の衝突と同様の事象が、登録済みのエントリと未登録のエントリとの間でも発生し得る。これを、誤検出(false positive)と呼ぶ。このことは、インデックステーブル92にエンコードされたエントリ集合に含まれていないエントリが検索された場合に、上記の式(2)による演算によって、一見したところでは妥当なI(t)の値が得られる場合があることを意味し、未登録のエントリを示す入力アドレスに対して誤った経路情報を答えるという誤動作をもたらすことになる。
このような、誤検出(false positive)に伴うネットワークサーチエンジン9の誤動作を防止するために使用されるのが、フィルタリングテーブル94である。フィルタリングテーブル94には、リザルトテーブル95に登録される経路情報に対応する入力アドレスが、論理演算部93の出力I(t)によって指定されるリザルトテーブル95のテーブルメモリアドレスと同じアドレスに書き込まれている。誤検出(false positive)の判定は以下の手順により可能である。まず、入力アドレスに対応するリザルトテーブル94のテーブルメモリアドレスが論理演算部93の出力として得られたとき、比較部96において、入力アドレスとフィルタリングテーブル94に格納された値とが比較される。両者のプリフィックスが一致する場合は誤検出でないと判定でき、両者のプリフィックスが一致しない場合には誤検出(false positive)であることが判定できる、これにより、誤検出(false positive)と判定した入力パケットを経路情報が存在しないパケットとして廃棄するなど適切な処理を行うことができる。
B. Chazelle , J.Kilian, R.Rubinfeld, A. Tal、「The Bloomier Filter: An Efficient Data Structure for Static Support Lookup Tables」、ACM-SIAM Symposium on Discrete Algorithms (SODA) '04、2004年1月、p.30-39
上述したBloomierフィルタ型のネットワークサーチエンジン9では、登録エントリの集合が与えられた場合に、エントリ集合に含まれるエントリに対する順序Γを決定し、順序Γに従って順番にエントリのエンコードを行うことにより、ネットワークサーチエンジン9のセットアップを行うこととしている。
しかしながら、ネットワークサーチエンジンの適用先であるルータは、一般に、ルーティングプロトコルに従って動的に経路情報を保守している。このため、ルータは、新たに得られたエントリを逐次的に登録できること、つまり、逐次的にインデックステーブル92にエンコードできることが望ましい。したがって、順序Γを予め決定し、この順序Γに従ってエントリの登録を行わなければならない従来のエントリ登録処理は、機能的に不十分であるという問題がある。
なお、このような問題は、ネットワークサーチエンジンに限らず、Bloomierフィルタ型の情報検索装置が有する共通の問題である。
本発明にかかる情報検索装置は、入力データと出力データを対応付ける複数のエントリ情報を保持し、入力された入力データに対応する出力データを前記複数のエントリ情報から検索して出力するBloomierフィルタ型の第1の検索処理部と、新たなエントリ情報の登録要求に応じて、前記第1の検索処理部に新たなエントリ情報を登録するエントリ登録部とを備える。さらに、前記第1の情報検索部は、入力データを用いてK個のハッシュ値を生成するハッシュ演算部と、前記ハッシュ演算部が生成するハッシュ値によってアドレスされ、前記エントリ情報の関連情報がエンコードされたエンコード値を格納するための複数の格納領域を有するインデックステーブルと、前記ハッシュ演算部が生成したハッシュ値によってアドレスされる格納領域に格納された前記エンコード値を用いて前記関連情報を復元する第1演算部と、前記第1演算部が復元した前記関連情報によってアドレスされ、前記複数の出力データを格納するための格納領域を有するリザルトテーブルとを備える。またさらに、前記エントリ登録部は、前記インデックステーブルの複数の格納領域の各々についての更新履歴を記録した履歴情報を格納する記憶部を有しており、前記エントリ登録部は、前記新たなエントリ情報に対する新たなエンコード値を格納するための前記インデックステーブルの格納領域を、前記履歴情報に基づいて決定するとともに、過去に登録済みの前記エントリ情報に対する前記エンコード値の更新値を、前記履歴情報に基づいて生成し、前記新たなエンコード値及び前記エンコード値の更新値によって前記インデックステーブルを更新する。
このような構成によれば、インデックステーブルの更新履歴を記録した履歴情報を参照することによって、新たなエントリ情報のエンコード値を登録可能な前記インデックステーブルの格納領域を判定すること、新たなエントリ情報のエンコード値を登録する格納領域を指定するハッシュ値が過去のエントリ情報に対してシングルトンである否かを判定すること、及び、過去に登録済みのエントリ情報に対するエンコード値の更新値を生成することが可能となる。これによって、予め全てのエントリ情報のインデックステーブルへの登録順序を定め、これに従って登録を行う必要がなくなり、新たなエントリ情報のインデックステーブルへの登録を逐次的に行うことが可能となる。
一方、本発明にかかる情報検索装置へのエントリ情報の登録方法は、入力データと出力データを対応付ける複数のエントリ情報を保持し、入力された入力データに対応する出力データを前記複数のエントリ情報から検索して出力するBloomierフィルタ型の第1の検索処理部を備える情報検索装置に対して、新たなエントリ情報を登録する登録方法である、ここで、前記第1の情報検索部は、入力データを用いてK個のハッシュ値を生成するハッシュ演算部と、前記ハッシュ演算部が生成するハッシュ値によってアドレスされ、前記エントリ情報の関連情報をエンコードしたエンコード値を格納するための複数の格納領域を有するインデックステーブルとを備える。また、前記新たなエントリ情報の登録処理では、まず、前記新たなエントリ情報に対する新たなエンコード値を格納するための前記インデックステーブルの格納領域を、前記インデックステーブルの複数の格納領域の各々についての更新履歴を記録した履歴情報に基づいて決定する。次に、前記新たなエントリ情報に対する新たなエンコード値を生成する。さらに、過去に登録済みの前記エントリ情報に対する前記エンコード値の更新値を、前記履歴情報に基づいて生成する。最後に、前記新たなエンコード値及び前記エンコード値の更新値によって前記インデックステーブルを更新する。
このような方法によれば、インデックステーブルの更新履歴を記録した履歴情報を参照することによって、新たなエントリ情報のエンコード値を登録可能な前記インデックステーブルの格納領域を判定すること、新たなエントリ情報のエンコード値を登録する格納領域を指定するハッシュ値が過去のエントリ情報に対してシングルトンである否かを判定すること、及び、過去に登録済みのエントリ情報に対するエンコード値の更新値を生成することが可能となる。これによって、予め全てのエントリ情報のインデックステーブルへの登録順序を定め、これに従って登録を行う必要がなくなり、新たなエントリ情報のインデックステーブルへの登録を逐次的に行うことが可能となる。
本発明により、新たなエントリの登録を逐次的に行うことが可能な、Bloomierフィルタ型の情報検索装置を提供することができる。
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。なお、以下に示す実施の形態は、Bloomierフィルタ型のネットワークサーチエンジンに対して本発明を適用したものである。
発明の実施の形態1.
本実施の形態にかかるBloomierフィルタ型のネットワークサーチエンジン1の構成を図1に示す。図1において、ハッシュ演算部91、インデックステーブル92、論理演算部93、フィルタリングテーブル94、リザルトテーブル95、及び、比較部96は、上述した従来のネットワークサーチエンジン9が備える構成要素と同一である。
エントリ登録部11は、新たなエントリをインデックステーブル92にエンコードするとともに、フィルタリングテーブル94に新たなエントリのプリフィックスを格納し、リザルトテーブルに転送情報、つまり転送先アドレスを格納する。リンクリスト配列12は、インデックステーブル92のソフトウェアイメージに対応するものであり、インデックステーブル92の格納情報を保持している双方向リンクリストの配列である。
第2検索処理部13は、ハッシュ演算部91から比較部96によって構成される第1検索処理部10とは別に設けられ、入力パケットヘッダを入力し、入力パケットヘッダに含まれる宛先アドレスに対応する経路情報を決定するアドレス検索処理を実行する。第2検索処理部13は、通常のTCAM(Ternary Content Addressable Memory)又はこれをエミュレートするグルーロジックによって実現することができる。後述するように、本実施の形態のネットワークサーチエンジン1は、新たなエントリをインデックステーブル92に逐次的に登録可能であるため、第2検索処理部13の規模はハッシュ演算部91から比較部96で構成される第1の検索処理部10に比べて十分に小さくすることが可能である。
次に、リンクリスト配列12のデータ構造を図2乃至図4を用いて説明する。なお、以下では、ハッシュ演算部91に適用されるハッシュ関数の数が3つ(K=3)の場合について説明する。
図2は、リンクリスト配列12の全体のデータ構造を示す概念図である。図2において、list[i]が1つの双方向リンクリストに対応する。ここで、i=0〜(N−1)である。1つのリンクリストlist[i]は、インデックステーブル92の1つの情報格納領域、具体的には1つのエンコード値V(t)を格納可能な領域に対応する。つまり、リンクリストlist[i]の総数Nは、インデックステーブル92にエンコード可能なエントリの最大数に対応する。
1つのリンクリストlist[i]のリスト構造を図3に示す。以下では、list[i]を構成し、ポインタによって連結されるデータ単位をunitと呼ぶ。セットアップのためにインデックステーブル92のテーブルメモリアドレスがアクセスされるたびに、対応するlist[i]に新たなunitが連結される。なお、リンクリストlist[i]は双方向リストであるため、各unitは、prevポインタ及びnextポインタの2つのポインタを有している。prevポインタは、時間的に過去のアクセスされた際に生成されたunitを指すポインタである。また、nextポインタは、時間的に後のアクセス時に生成されたunitを指すポインタである。図3において、unit121は、list[i]の先頭ユニットであり、unit121のprevポインタの値はNULLに初期設定される。
図4は、1つのunitのデータ部に格納される内容を示している。具体的には、dataは、インデックステーブル92に格納されるデータ値である。singleton_flagは、このunitに対応するインデックステーブル92のアドレスがシングルトンとして選択された、つまり、あるエントリtに対するτ(t)として選択されたことを示すフラグである。access_countは、このunitに対応するインデックステーブル92のアドレスがアクセスされた回数を示す。neighbor_address0及び1は、同じ登録エントリから、このunitを指すハッシュ関数を除く、他の2つのハッシュ関数(一般的にはk−1個のハッシュ関数)が算出したハッシュ値がそれぞれ格納される。
続いて、エントリ登録部11が、インデックステーブル92に新たなエントリをエンコードする際の処理手順を、図5乃至図8のフローチャートを用いて説明する。図5及び図6は、新たなエントリをエンコードする際の全体処理を示すフローチャートである。ステップS101では、リンクリスト配列12を初期化する。具体的には、各リストに1つのunitを生成し、これらのunitのデータ部を、data=0、singleton_flag=faulse、access_count=0、neighbor_address0及び1=任意のテーブルメモリアドレスに設定する。
ステップS102において、新たなエントリtの登録要求があった場合、この登録要求から3つ(一般的にはK個)のハッシュ値H(t)、H(t)、及びH(t)を算出する(ステップS103)。これらのハッシュ値をアドレスとしてリンクリスト配列12にアクセスし、対応する3つのリストlist[H(t)]、list[H(t)]、及びlist[H(t)]の最後尾、つまり最新のアクセス時の状態が格納されたunitを読み出す(ステップS104)。そして、読み出した3つのunitから、以下に示す動作によって新しい3つのunitを作成する(ステップS105)。
具体的には、読み出したunitのdata及びsingleton_flagを新たなunitにコピーする。また、新たなunitのaccess_countは、読み出したunitのaccess_countを1だけインクリメントした値とする。また、新たなunitのneighbor_address0には、このunitを読み出したハッシュ関数の次の番号のハッシュ関数によって算出したハッシュ値、例えば、読み出したハッシュ関数がHであればハッシュ関数Hによって算出したハッシュ値H(t)を設定する。同様に、新たなunitのneighbor_address1には、このunitを読み出したハッシュ関数の2つ後の番号のハッシュ関数によって算出したハッシュ値、例えば、読み出したハッシュ関数がHであればハッシュ関数Hによって算出したハッシュ値H(t)を設定する。なお、ここでは、ハッシュ関数の番号は、ハッシュ関数の総数K=3の剰余系で循環するものとする。つまり、ハッシュ関数Hの次の番号のハッシュ関数はHとする。
次に、作成した3つのunitのsingleton_flagを参照して、未使用状態(false)にあるunitを1つ選択する(ステップS106)。ステップS107では、選択したunitのdataに対して、他の2つのunitのdata値と、登録エントリtに関連付けてエンコードされる情報I(t)とを用いて(1)式により算出したエンコード値V(t)を設定する。また、併せて、選択したunitのsingleton_flagに、シングルトンとして使用済みであることを示す値trueを設定する。
ステップS108では、以上の手順で作成した3つのunitを、3つのリストlist[H(t)]、list[H(t)]、及びlist[H(t)]の最後尾にそれぞれ連結する。
なお、上述したステップS106においてシングルトンとして選択したunitのaccess_countが1より大きい場合、このunitのdata値が過去に読み出されたうえ、(1)式によるエンコード値の算出に用いられて、他のいずれかのリンクリストに連結されたunitのdata値として書き込まれた履歴があることを示している(ステップS109)。この場合には、過去のアクセスでシングルトンとして選択されたunitのdata値を、今回の更新によって書き換えたunitのdata値の内容を反映した値に更新する必要がある。この更新処理は、図6に示すステップS110からS117のループ処理Aによって行うことができる。
ステップS110からS117のループ処理Aは、今回のアクセスでシングルトンとして選択したunitのprevポインタを順に辿りながらループ内の処理(ステップS111〜S116)を繰り返すものである。また、prevポインタの値がNULLでないことをループ条件としている。言い換えると、ループの終了条件は、prevポインタの値=NULLとなることである。ループ処理A内では、相互再帰的に定義された関数at0及びat1を繰り返し実行する。以下、ループ処理Aの内容を詳細に説明する。
ステップS111では、後述する関数at0及びat1のループ処理A内での呼び出し回数を示す変数Ncallを0に初期化する。ステップS112では関数at0を実行する。関数at0の呼び出し時に与えられる引数は、prevポインタの値、及び今回シングルトンとして選択したunitのdata値、つまりステップS107で書き込んだV(t)値である。
関数at0の処理内容を図7に示す。ステップS201では、関数の呼び出し回数を示す変数Ncallの値を1だけインクリメントする。ステップS202では、Ncallの値が所定の閾値より小さいか否か、つまり、ステップS112での関数at0の呼び出しに起因する関数at0及び後述する関数at1の再帰的な呼び出し回数が所定の回数に到達していないかを判定する。Ncallの値が所定の閾値より小さい場合、ステップS203において、引数として与えられたポインタによって指定されるunitのneighbor_address0をローカル変数bに指定し、ローカルポインタ変数LPをlist[b]とする。
ステップS204及びS205では、ポインタLPがNULLでなく、かつ、ポインタLPによって指定されるunitのsingleton_flagが"true"に設定されているかを判定する。当該判定が成立することは、過去のエントリ登録要求に対してこのnuitがシングルトンに選択されており、今回の更新対象となったunitの値を用いてエンコードが行われていることを示している。このため、ステップS206では、ポインタLPによって指定されるunitのdata値と、関数at0の引数として与えられている今回シングルトンとして選択したunitのdata値との排他的論理和を演算し、演算した値によってポインタLPに指定されるunitのdata値を更新する。
ステップS207では、ポインタLPによって指定されるunitのprevポインタがNULLかどうかを判定する。ここで、LPによって指定されるunitのprevポインタがNULLでないことは、このunitのdata値が過去に読み出されたうえ、(1)式によるエンコード値の算出に用いられて、他のいずれかのリンクリストに連結されたunitのdata値として書き込まれた履歴があることを示している。つまり、さらに遡って、他のunitのdata値を修正する必要があることを意味している。このため、ステップS208及びS209では、関数at0及び後述する関数at1を再帰的に呼び出して実行する。
なお、関数at0の終了条件は、(1)ステップS202でNcallが閾値以上となること、(2)ステップS204でポインタLPがNULLであると判定すること、(3)ステップS205でポインタLPによって指定されるunitのsingleton_flagが"false"であると判定すること、及び(4)ステップS207でポインタLPによって指定されるunitのprevポインタがNULLとなること、のうちのいずれか1つが成立することである。
図6に戻って、ステップS113では、Ncallの値が所定の閾値より小さいか否かを判定する。ステップS114では、再び、関数at0及びat1のループ処理A内での呼び出し回数を示す変数Ncallを0に初期化する。ステップS115では、関数at1を実行する。関数at1の呼び出し時に与えられる引数は、prevポインタの値、及び今回シングルトンとして選択したunitのdata値、つまりステップS107で書き込んだV(t)値である。関数at1の処理内容を図8に示す。
なお図7に示した関数at0の処理内容と、図8に示す関数at1の処理内容との相違点は、ステップS303において、引数として与えられたポインタによって指定されるunitのneighbor_address1をローカル変数bに指定する点である。つまり、対象とするneighbor_addressが異なることを除いて、関数at0と関数at1との処理内容は共通している。このため、図8のステップS303を除くほかの処理に対しては、図7のフローチャートの対応する処理と同じ符号を付して、詳細な説明を省略する。
図6に戻って、ステップS116では、Ncallの値が所定の閾値より小さいか否かを判定する。このようなループ処理Aを、今回のアクセスでシングルトンとして選択したunitのprevポインタを順に辿りながら、prevポインタがNULLとなるリストの先頭まで繰り返す。このような処理を行うことによって、ループ処理Aの終了後に得られるリンクリスト配列12は、最新のエントリ登録要求に基づいてシングルトンに選択したunitへの書き込みを、過去にエンコードされたエントリに対する書込み内容にまで遡って修正された状態となる。
ステップS118では、ループ処理Aによって更新済みのリンクリスト配列12の内容をインデックステーブル92に転送し、インデックステーブル92を更新する。
上述したように、本実施の形態にかかるBloomierフィルタ型のネットワークサーチエンジン1では、インデックステーブル92のソフトウェアイメージであるリンクリスト配列12を有している。また、リンクリスト配列12を構成する双方向リンクリストの各々は、ハッシュ演算部91が演算したハッシュ値によって指定されるインデックステーブル92の格納領域に対応している。また、双方向リンクリストでは、エントリの登録要求に応じてセットアップ時にインデックステーブル92の格納領域がアドレスされた履歴を保持している。さらに、新たなエントリの登録要求があった場合には、図5〜図8のフローチャートを用いて説明した手順によってリンクリスト配列12を更新し、リンクリスト配列12の更新結果をインデックステーブル92に反映することとしている。
従来のネットワークサーチエンジン9では、登録エントリ集合が与えられた場合に、集合に含まれるエントリに対する順序Γを決定し、順序Γに従って順番にエントリのエンコードを行う必要があった。これに対して、本実施の形態のネットワークサーチエンジン1は、上述した構成及び処理を採用することによって、順序Γに拘束されることなく、登録要求の発生順序に応じて逐次的に新たなエントリを登録することが可能である。
以下では、本実施の形態のネットワークサーチエンジン1によって新たなエントリの逐次登録が可能となる理由を詳細に説明する。従来のネットワークサーチエンジン9では、いわゆる欲張り法のアルゴリズムに従って、後から登録されるエントリのエンコード値V(t)の格納場所が、それより以前に登録されるエントリのK個のハッシュ値のいずれによっても指定されないように、つまり以前の登録エントリに対してシングルトンとなるように登録順序Γを決定している。
このような順序Γを決定することなく、登録要求のあったエントリを逐次登録するときの第1の問題は、過去の登録エントリに使用されていないエントリの格納場所(インデックステーブルメモリ)をどのように選択するかということである。本実施の形態では、過去に他のエントリの格納場所として選択されたか否かを示す識別情報、具体的にはsingleton_flagを保持し、これを参照することによって、過去のエントリのエンコード値V(t)の格納場所と新たな登録エントリの格納場所が衝突しないことを保証している。これにより、上記の第1の問題を解決している。
また、順序Γによらずにエントリを逐次登録するときの第2の問題は、新たなエントリに対するK個のハッシュ値の中に、過去の登録エントリに対してシングルトンとなるハッシュ値が含まれることは保証されていない点である。つまり、新たなエントリのエンコード値V(t)の格納場所として選択したハッシュ値がシングルトンでなければ、過去の登録エントリに遡って、インデックステーブル92の格納値(エンコード値)の更新が必要となる点が問題である。
本実施の形態では、過去に登録されたエントリに対するK個のハッシュ値によって参照されたかどうかを示す識別情報、具体的にはaccess_countを保持し、これを参照することによって、新たなエントリに対するハッシュ値が過去のエントリに対してシングルトンである否かを判定することができる。さらに、過去のエントリに対するハッシュ値に基づいてあるメモリアドレスがアクセスされたときの他の(K−1)個のハッシュ値を、neighbor_addressとしてリンクリストの中に保持しいている。これにより、neighbor_addressに記録されたハッシュ値、つまりメモリアドレスの値を参照することにより、過去の登録エントリに遡って、エンコード値の更新を行うことができる。これにより、上記の第2の問題を解決している。
つまり、本発明は、インデックステーブルの登録場所ごとの更新履歴を記録した履歴情報を有している。履歴情報には、インデックステーブルの登録場所ごとの格納値(data)、過去に他のエントリの格納場所として選択されたか否かを示す識別情報(singleton_flag)、過去のエントリに対するハッシュ値によって参照されたかを示す識別情報(access_count)、及び、登録エントリに対するハッシュ値に基づいてある登録場所がアクセスされたときの他の(K−1)個のハッシュ値(neighbor_address0/1/・・/(K−2))、が少なくとも含まれる。このような履歴情報をインデックステーブルの登録場所ごとに保持することによって、新たなエントリの逐次登録が可能となる。
なお、図6のフローチャートでは、ステップS113及びS116の判定、つまり、関数at0又はat1が終了したときのこれらの関数の繰り返し実行回数が所定の閾値以上となっている場合には、登録対象のエントリtを検索処理部112に登録することとしている(ステップS119)。
関数at0及びat1の再帰呼び出し回数が大きくなると、登録処理を行う際の作業領域として使用されるメモリ量が大きくなる。登録処理によって浪費されるメモリ量が大きくなると、エントリ登録部11において登録処理を実行するソフトウェアの暴走を招く原因となる。このため、本実施の形態では、関数at0及びat1の呼び出し回数の最大数に制限を加え、所定の制限回数を超えて呼び出された場合には、それまでのリンクリスト配列12の更新をキャンセルしたうえで、登録要求のあったエントリは別の検索処理部112に登録することとしている。
従来のネットワークサーチエンジン9では、順序Γを決定する手順において、ハッシュ値の衝突のためにシングルトンの記憶をクリアしたうえで順序Γの決定処理を繰り返す手順が何回発生するかが不確定であり、また、順序Γを決定する手順の終了が保証されていないという問題、つまりセットアップの収束性が保証されていないという問題があった。
これに対して、本実施の形態のネットワークサーチエンジン1は、関数at0及びat1の呼び出し回数を制限することによって、新たなエントリ登録要求に基づくセットアップ処理の収束性を保証することができる。
なお、従来のネットワークサーチエンジン9に対して、ハッシュ演算部91〜比較部96によるアドレス検索機構に並行して別のアドレス検索機構を設けることとし、ハッシュ演算部91〜比較部96によるアドレス検索機構をセットアップした後に得られた新たなエントリは、別のアドレス検索機構に格納していき、新たなエントリの数が大きくなった時点で、上述したセットアップ手順を実行し、新たなエントリも含めて全てのエントリをインデックステーブル92にエンコードすることが考えられている。しかしながら、この場合には、新たなエントリを全て別のアドレス検索機構に格納する必要があるため、別のアドレス検索機構の規模(エントリ数、アドレス検索速度)を十分大きくしておく必要があった。
これに対して、本実施の形態のネットワークサーチエンジン1が備える予備的な検索機構である第2検索処理部13の規模は、ハッシュ演算部91〜比較部96によって実現される第1検索処理部10に比べて十分小さい規模でよい。第2検索処理部13に登録されるエントリは、インデックステーブル92への登録に適さない特異なエントリのみであって、殆どのエントリはインデックステーブル92へ登録されるためである。
以上の説明は、ハッシュ演算部91に適用されるハッシュ関数の数K、言い換えると、1つのエントリに対して算出されるハッシュ値の数Kを3とした場合について行った。しかしながら、Kの値は任意の数を選択することが可能である。一般に、ハッシュ関数の数がKである場合は、neighbor_addressの数が(K−1)個であるから、関数at0及びat1の2つの関数の呼び出しに代えて、neighbor_addressの値を変更した(K−1)個の関数を呼び出すこととすればよい。
その他の実施の形態.
発明の実施の形態1では、インデックステーブル92のソフトウェアイメージを、双方向リンクリストの配列によって保持することとした。しかしながら、上述したエントリの登録処理を実行するためには、エントリの登録要求に応じてセットアップ時にインデックステーブル92の格納領域がアドレスされた履歴、その時のneighbor_address、インデックステーブル92の格納領域の格納値、及び、インデックステーブル92の格納領域の各々(つまり、これらの格納領域を指定するハッシュ値)がシングトンとして選択されていることを示す識別情報を保持可能であればよい。このため、他の配列構造などによってインデックステーブル92のソフトウェアイメージを保持してもよい。
また、発明の実施の形態1にかかるネットワークサーチエンジン1におけるインデックステーブル92は、ハッシュ関数毎に分割したK個のメモリ群として構成することも可能である。このような構成であれば、K個のハッシュ値によってインデックステーブル92を同時にアクセス可能であり、アドレス検索処理を高速化できる。なお、この場合には、リクリスト配列12を構成するリンクリストを、ハッシュ関数番号とハッシュ値によって指定することとすればよい。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
本発明にかかるBloomierフィルタ型ネットワークサーチエンジンの構成図である。 本発明にかかるネットワークサーチエンジンが有するリンクリスト配列を示す図である。 リンクリスト配列を構成する双方向リンクリストを示す図である。 双方向リンクリストを構成するunitのデータ部に格納されるデータの構造を示す図である。 本発明にかかるBloomierフィルタ型ネットワークサーチエンジンにおけるエントリ登録処理を示すフローチャートである。 本発明にかかるBloomierフィルタ型ネットワークサーチエンジンにおける、エントリ登録処理を示すフローチャートである。 本発明にかかるBloomierフィルタ型ネットワークサーチエンジンにおける、エントリ登録処理を示すフローチャートである。 本発明にかかるBloomierフィルタ型ネットワークサーチエンジンにおける、エントリ登録処理を示すフローチャートである。 従来のBloomierフィルタ型ネットワークサーチエンジンの構成図である。 従来のBloomierフィルタ型ネットワークサーチエンジンにおけるエントリ登録処理を示すフローチャートである。
符号の説明
1 ネットワークサーチエンジン
10 第1検索処理部
11 エントリ登録部
12 リンクリスト配列
13 第2検索処理部
91 ハッシュ演算部
92 インデックステーブル
93 論理演算部
94 フィルタリングテーブル
95 リザルトテーブル
96 比較部

Claims (10)

  1. 入力データと出力データを対応付ける複数のエントリ情報を保持し、入力された入力データに対応する出力データを前記複数のエントリ情報から検索して出力するBloomierフィルタ型の第1の検索処理部と、
    新たなエントリ情報の登録要求に応じて、前記第1の検索処理部に新たなエントリ情報を登録するエントリ登録部とを備える情報検索装置であって、
    前記第1の情報検索部は、
    入力データを用いてK個のハッシュ値を生成するハッシュ演算部と、
    前記ハッシュ演算部が生成するハッシュ値によってアドレスされ、前記エントリ情報の関連情報がエンコードされたエンコード値を格納するための複数の格納領域を有するインデックステーブルと、
    前記ハッシュ演算部が生成したハッシュ値によってアドレスされる格納領域に格納された前記エンコード値を用いて前記関連情報を復元する第1演算部と、
    前記第1演算部が復元した前記関連情報によってアドレスされ、前記複数の出力データを格納するための格納領域を有するリザルトテーブルとを備え、
    前記エントリ登録部は、
    前記インデックステーブルの複数の格納領域の各々についての更新履歴を記録した履歴情報を格納する記憶部を有し、
    前記新たなエントリ情報に対する新たなエンコード値を格納するための前記インデックステーブルの格納領域を、前記履歴情報に基づいて決定するとともに、
    過去に登録済みの前記エントリ情報に対する前記エンコード値の更新値を、前記履歴情報に基づいて生成し、
    前記新たなエンコード値及び前記エンコード値の更新値によって前記インデックステーブルを更新する、情報検索装置。
  2. 前記履歴情報は、
    前記インデックステーブルの格納領域ごとの格納値と、
    過去に登録済みの前記エントリ情報に対する前記エンコード値の格納場所として選択されたか否かを示す第1の識別情報と、
    過去に登録済みの前記エントリ情報に対する前記K個のハッシュ値によって参照されたかを示す第2の識別情報と、
    過去に登録済みの前記エントリ情報に対するハッシュ値に基づいて当該格納領域がアクセスされたときの他の(K−1)個のハッシュ値と、
    を含む請求項1に記載の情報検索装置。
  3. 前記エントリ登録部は、前記第2の識別情報に基づいて、過去に登録済みの前記エントリ情報に対する前記エンコード値の更新が必要であるか否かを判定する請求項2に記載の情報検索装置。
  4. 前記履歴情報は、前記インデックステーブルの格納領域毎に定義されたリンクリストによって保持され、
    前記エントリ登録部は、前記新たなエントリ情報に対するハッシュ値によってアドレスされるリンクリストに、前記新たなエントリ情報に関する履歴を格納したユニットを連結することによって、前記履歴情報を更新する請求項1又は2に記載の情報検索装置。
  5. 前記エントリ登録部による前記エンコード値の更新値の生成は、過去に登録済みの前記エントリ情報に対する前記エンコード値の更新が必要であるか否かを判定する処理と、前記判定処理の結果に応じて前記エンコード値の更新値を生成する処理とを実行する関数プログラムを再帰的に実行することにより行う請求項1に記載の情報検索装置。
  6. 前記第1の検索処理部と並列に設けられた第2の検索処理部をさらに備え、
    前記エントリ登録部は、前記エンコード値の更新値を生成する処理が所定の処理量で収束するか否かを判定し、所定の処理量で収束しない場合は、前記新たなエントリ情報を前記第2の検索処理部に登録する請求項1又はに記載の情報検索装置。
  7. 入力データと出力データを対応付ける複数のエントリ情報を保持し、入力された入力データに対応する出力データを前記複数のエントリ情報から検索して出力するBloomierフィルタ型の第1の検索処理部を備える情報検索装置に対して、新たなエントリ情報を登録する登録方法であって、
    前記第1の情報検索部は、
    入力データを用いてK個のハッシュ値を生成するハッシュ演算部と、
    前記ハッシュ演算部が生成するハッシュ値によってアドレスされ、前記エントリ情報の関連情報をエンコードしたエンコード値を格納するための複数の格納領域を有するインデックステーブルとを備えるものであり、
    前記新たなエントリ情報の登録は、
    前記情報検索装置が、前記新たなエントリ情報に対する新たなエンコード値を格納するための前記インデックステーブルの格納領域を、前記インデックステーブルの複数の格納領域の各々についての更新履歴を記録した履歴情報に基づいて決定し、
    前記情報検索装置が、前記新たなエントリ情報に対する新たなエンコード値を生成し、
    前記情報検索装置が、過去に登録済みの前記エントリ情報に対する前記エンコード値の更新値を、前記履歴情報に基づいて生成し、
    前記情報検索装置が、前記新たなエンコード値及び前記エンコード値の更新値によって前記インデックステーブルを更新することにより行う、エントリ情報登録方法。
  8. 前記履歴情報は、
    前記インデックステーブルの格納領域ごとの格納値と、
    過去に登録済みの前記エントリ情報に対する前記エンコード値の格納場所として選択されたか否かを示す第1の識別情報と、
    過去に登録済みの前記エントリ情報に対する前記K個のハッシュ値によって参照されたかを示す第2の識別情報と、
    過去に登録済みの前記エントリ情報に対するハッシュ値に基づいて当該格納領域がアクセスされたときの他の(K−1)個のハッシュ値と、
    を含む請求項に記載のエントリ情報登録方法。
  9. 前記情報検索装置が、前記エンコード値の更新値の生成の前に、前記第2の識別情報に基づいて、過去に登録済みの前記エントリ情報に対する前記エンコード値の更新が必要であるか否かを判定する請求項に記載のエントリ情報登録方法。
  10. 前記情報検索装置が、前記履歴情報を、前記インデックステーブルの格納領域毎に定義されたリンクリストによって保持し、
    前記情報検索装置が、前記新たなエントリ情報に対するハッシュ値によってアドレスされるリンクリストに、前記新たなエントリ情報に関する履歴を格納したユニットを連結することによって、前記履歴情報の更新を行う請求項又はに記載のエントリ情報登録方法。
JP2007297613A 2007-11-16 2007-11-16 情報検索装置、及び情報検索装置へのエントリ情報の登録方法 Expired - Fee Related JP5144225B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007297613A JP5144225B2 (ja) 2007-11-16 2007-11-16 情報検索装置、及び情報検索装置へのエントリ情報の登録方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007297613A JP5144225B2 (ja) 2007-11-16 2007-11-16 情報検索装置、及び情報検索装置へのエントリ情報の登録方法

Publications (2)

Publication Number Publication Date
JP2009123050A JP2009123050A (ja) 2009-06-04
JP5144225B2 true JP5144225B2 (ja) 2013-02-13

Family

ID=40815117

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007297613A Expired - Fee Related JP5144225B2 (ja) 2007-11-16 2007-11-16 情報検索装置、及び情報検索装置へのエントリ情報の登録方法

Country Status (1)

Country Link
JP (1) JP5144225B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111124312B (zh) * 2019-12-23 2023-10-31 第四范式(北京)技术有限公司 数据去重的方法及其装置
CN116028677B (zh) * 2023-03-14 2023-08-29 阿里云计算有限公司 数据操作方法以及系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060198379A1 (en) * 2005-03-04 2006-09-07 Nec Laboratories America, Inc. Prefix optimizations for a network search engine
US7653670B2 (en) * 2005-11-28 2010-01-26 Nec Laboratories America, Inc. Storage-efficient and collision-free hash-based packet processing architecture and method

Also Published As

Publication number Publication date
JP2009123050A (ja) 2009-06-04

Similar Documents

Publication Publication Date Title
US20210367887A1 (en) Flow classification apparatus, methods, and systems
US6434144B1 (en) Multi-level table lookup
US6526055B1 (en) Method and apparatus for longest prefix address lookup
US7281085B1 (en) Method and device for virtualization of multiple data sets on same associative memory
JP3299528B2 (ja) インターネット網等の高速通信網のノードのルーティング表構築のためのプレフィックス分析による情報探索用メモリ
US8750144B1 (en) System and method for reducing required memory updates
US20070171911A1 (en) Routing system and method for managing rule entry thereof
CN111937360B (zh) 最长前缀匹配
CN103368853A (zh) 网络分组的simd处理
US20050248970A1 (en) Distributed content addressable memory
CN110557337B (zh) 一种分段路由路径计算方法、装置及计算机存储介质
CN107431660B (zh) 检索装置、检索方法及记录介质
US6098157A (en) Method for storing and updating information describing data traffic on a network
JP5807676B2 (ja) パケット分類器、パケット分類方法、及びパケット分類プログラム
US7937495B2 (en) System and method for modifying data transferred from a source to a destination
US20170012874A1 (en) Software router and methods for looking up routing table and for updating routing entry of the software router
JP5144225B2 (ja) 情報検索装置、及び情報検索装置へのエントリ情報の登録方法
CN113411380A (zh) 基于fpga可编程会话表的处理方法、逻辑电路和设备
JP2006246488A (ja) ネットワーク・ルータ、アドレス処理方法及びコンピュータ・プログラム
EP1260065B1 (en) Method and apparatus for determining priority of network packets
JP6266445B2 (ja) パケット中継装置及びパケット中継方法
CN114285907A (zh) 数据传输方法、装置、电子设备及存储介质
WO2016183732A1 (zh) 一种数据包转发方法和网络设备
US11895005B1 (en) Network devices with hardware accelerated table updates
CN113872784A (zh) 网络配置的验证方法和装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100806

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120712

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120724

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120813

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121113

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121122

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151130

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees