(57)【特許請求の範囲】
【請求項１】
三値連想メモリ（ＴＣＡＭ）における複数のクラスタに、レコードを動的に配分する方法であって、
ある数のレコードを第１のタイプの複数のクラスタのそれぞれに配分するステップと、
ある数の空レコードを第２のタイプのクラスタに配分するステップと、
第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数をモニタするステップと、
第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数と、それぞれの第１のしきい値とを比較するステップと、
第１のタイプの所与のクラスタに配分されているレコードのそれぞれの個数を、そのクラスタの空でないレコードのそれぞれの個数がそのクラスタのそれぞれの第１のしきい値よりも大きいときには、第２のタイプのクラスタに配分されているレコードの個数を、第１の個数だけデクリメントすることにより、および、第１のタイプの所与のクラスタに配分されているレコードのそれぞれの個数を、第１の個数だけインクリメントすることにより、繰り返し空でないレコードを漸進的にロールダウンすることにより、増加させるステップと、
を含む、方法。
【請求項２】
ある数のレコードを第１のタイプの複数のクラスタのそれぞれに配分するステップが、各前記クラスタを、それぞれのインターネットアドレスのプレフィックス長と関連させるステップを更に含む、請求項１に記載の方法。
【請求項３】
ある数の空レコードを第２のタイプのクラスタに配分するステップが、第２のタイプの前記クラスタを、それに配分されているレコードが空のままである自由空間クラスタと関連させるステップを更に含む、請求項１から２のいずれか一項に記載の方法。
【請求項４】
比較するステップが、空でないレコードのそれぞれの個数と、第１のタイプのクラスタのそれぞれの容量のそれぞれの第１のパーセンテージであるそれぞれの第１のしきい値とを比較するステップを更に含む、請求項２に記載の方法。
【請求項５】
比較するステップが、第１のタイプのクラスタと関連するそれぞれのインターネットアドレスのプレフィックス長に従ってそれぞれの第１のパーセンテージを決定するステップを更に含む、請求項４に記載の方法。
【請求項６】
第２のタイプのクラスタに配分されている空レコードの個数をモニタするステップと、
空レコードの個数と第２のしきい値とを比較するステップと、
空レコードの個数が第２のしきい値よりも小さい場合には、第２のタイプのクラスタに配分されている空レコードの個数を増加させるステップと、
を更に含む、請求項１から５のいずれか一項に記載の方法。
【請求項７】
第２のタイプのクラスタに配分されている空レコードの個数を増加させるステップが、
第１のタイプの１つまたは複数のクラスタに対して、空でないレコードのそれぞれの個数と、それぞれの第３のしきい値とを比較するステップと、
第１のタイプの特定のクラスタに配分されているレコードのそれぞれの個数を、そのクラスタの空でないレコードのそれぞれの個数がそのクラスタのそれぞれの第３のしきい値よりも小さい場合には、第２の個数だけ減少させるステップと、
第２のタイプのクラスタに配分されている空レコードの個数を、第２の個数だけ増加させるステップと、
を更に含む、請求項６に記載の方法。
【請求項８】
第２のタイプのクラスタに配分されている空レコードの個数をモニタするステップと、
空レコードの個数と、第２のしきい値とを比較するステップと、
第２のタイプのクラスタに配分されている空レコードの個数が第２のしきい値よりも大きいまたは第２のしきい値と等しくなるまで、第２のタイプのクラスタに配分されている空レコードの個数を増加させるステップと、
を反復するステップを更に含む、請求項７に記載の方法。
【請求項９】
三値連想メモリ（ＴＣＡＭ）における複数のクラスタに、レコードを動的に配分するように構成されている装置であって、
ＴＣＡＭと、
メモリと、
ＴＣＡＭおよびメモリと通信するプロセッサと、
を備えており、プロセッサによって実行されると、この装置を、
ある数のレコードを第１のタイプの複数のクラスタのそれぞれに配分し、
ある数の空レコードを第２のタイプのクラスタに配分し、
第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数をモニタし、
第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数と、それぞれの第１のしきい値とを比較し、
第１のタイプの所与のクラスタに配分されているレコードのそれぞれの個数を、そのクラスタの空でないレコードのそれぞれの個数がそのクラスタのそれぞれの第１のしきい値よりも大きいときには、第２のタイプのクラスタに配分されているレコードの個数を、第１の個数だけデクリメントすることにより、および、第１のタイプの所与のクラスタに配分されているレコードのそれぞれの個数を、第１の個数だけインクリメントすることにより、繰り返し空でないレコードを漸進的にロールダウンすることにより、増加させる、
ように構成する命令を含むソフトウェアプログラムと共にメモリが構成されている、装置。
【請求項１０】
各前記クラスタを、それぞれのインターネットアドレスのプレフィックス長と関連させることにより、ある数のレコードを第１のタイプの複数のクラスタのそれぞれに配分するように更に構成された装置であって、装置は、空でないレコードのそれぞれの個数と、第１のタイプのクラスタのそれぞれの容量のそれぞれの第１のパーセンテージであるそれぞれの第１のしきい値とを比較するように、更に構成され、装置は、第１のタイプのクラスタと関連するそれぞれのインターネットアドレスのプレフィックス長に従ってそれぞれの第１のパーセンテージを決定するように更に構成された、請求項９に記載の装置。
【請求項１１】
第２のタイプの前記クラスタを、それに配分されているレコードが空のままである自由クラスタと関連させることにより、ある数の空レコードを第２のタイプのクラスタに配分するように更に構成された、請求項９に記載の装置。
【請求項１２】
第２のタイプのクラスタに配分されている空レコードの個数をモニタし、
空レコードの個数と第２のしきい値とを比較し、
空レコードの個数が第２のしきい値よりも小さい場合には、第２のタイプのクラスタに配分されている空レコードの個数を増加させるように更に構成された、請求項９から１１のいずれか一項に記載の装置。
【請求項１３】
第１のタイプの１つまたは複数のクラスタに対して、空でないレコードのそれぞれの個数と、それぞれの第３のしきい値とを比較し、
第１のタイプの特定のクラスタに配分されているレコードのそれぞれの個数を、そのクラスタの空でないレコードのそれぞれの個数がそのクラスタのそれぞれの第３のしきい値よりも小さい場合には、第２の個数だけ減少させ、
第２のタイプのクラスタに配分されている空レコードの個数を、第２の個数だけ増加させるように更に構成された、請求項１２に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、三値連想メモリ（ＴＣＡＭ）におけるレコードの配分に関し、詳しくは、クラスタにおけるそのようなレコードの動的配分に関する。
【背景技術】
【０００２】
ＴＣＡＭハードウェアデバイスは、今日の高性能通信システムにおいて、高速ルーティングルックアップおよびパケット分類のために、普通に用いられている。ＴＣＡＭサーチは、入ってくるパケットのヘッダと、転送テーブルまたは分類データベースにおけるすべてのエントリとを並列的に比較する。ルックアップの結果は、ＴＣＡＭにおけるレコード位置およびレコードの個数とは無関係に、一定のレイテンシと共に戻される。
【０００３】
ＩＰｖ４／ｖ６でのルーティングルックアップの場合、エントリは、最長プレフィックス一致（ＬＰＭ）を保証するために、転送テーブルにおけるアドレスプレフィックス長に基づいて、ソートされる。ルーティングルックアップエントリの追加および削除の下で、ＴＣＡＭにおいてエントリをソートされた状態に維持することは時間を消費する動作であり、最悪の場合には、Ｎを、例えばＩＰｖ４では３２でありＩＰｖ６では１２８である、転送テーブルにおけるプレフィックスの個数とすると、Ｎ回のメモリシフト（削除および再書き込み）動作を必要とし得る。ＴＣＡＭのエントリをそのようにソートされた状態に維持することは、通信トラフィックのデータ経路転送を遅延させる可能性があり、システムのＣＰＵ資源に対する持続的な負荷の原因となる可能性もあり、これは、システム性能低下などの問題を生じさせる潜在性を有する。性能低下の危険性は、バルクルーティング更新の間に特に高い。
【０００４】
ＴＣＡＭにおけるレコードを固定サイズのクラスタに配分することが、知られている。なお、以後本明細書では、クラスタをブロックとも称する。しかし、適切な初期のデフォルトのブロックサイズを選択するのは、困難な場合があり得る。例えば、初期ブロックサイズが特定のアプリケーションにとって小さすぎると、あるブロックがいっぱいになってしまった後でそのブロックにすべての新たなエントリを追加することは、それぞれの新たなエントリを挿入するために移動動作が必要になるために、ＣＰＵ資源に過剰な負担をかけることになり得る。更に、複数の異なるマーケットおよびアプリケーションに向けて設計されているシステムは、ＩＰルート分布に関する要件が異なることがあり得るのであって、これは、ルートのプレフィックス長ごとに、適切な「１サイズですべてに適合する」デフォルトのブロックサイズを決めるのは困難であることを意味し得る。更に、例えば、多くのルーティングテーブルがネットワークにおける大きな変更に起因して追加／削除を行うように、バルクルーティング更新が存在する期間の間には、結果的に生じる余分な処理は、ルートテーブルが大きくなり、それぞれのＩＰアドレスのプレフィックス長と関連する複数のブロックが容量に近づき容量に達する場合には、ＣＰＵ資源および時間を要するものとなり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従って、ＴＣＡＭにおけるブロックの中にレコードを動的に配分するための効率的なアプローチが求められている。
【課題を解決するための手段】
【０００６】
本発明の一態様によると、最長のプレフィックス一致のためのＴＣＡＭが提供される。このＴＣＡＭは：複数のレコードを含んでおり、それら複数のレコードの一部は、各クラスタがそれぞれのＩＰアドレスのプレフィックス長に対応する１つまたは複数のアドレスクラスタとなるように構成されており、別の一部は、どのＩＰアドレスのプレフィックス長にも対応しない自由空間クラスタとなるように構成されている。
【０００７】
本発明の別の態様によると、ＴＣＡＭにおけるクラスタに、レコードを動的に配分する方法が提供される。この方法は：それぞれの数のレコードを第１のタイプの複数のクラスタのそれぞれに配分するステップと、ある数の空レコードを第２のタイプのクラスタに配分するステップと、第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数をモニタするステップと、第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数と、それぞれの第１のしきい値とを比較するステップと、第１のタイプの所与のクラスタに配分されているレコードのそれぞれの個数を、そのクラスタの空でないレコードのそれぞれの個数がそのクラスタのそれぞれの第１のしきい値よりも大きい場合には、増加させるステップと、を含む。
【０００８】
本発明の更に別の態様によると、ＴＣＡＭにおけるクラスタに、レコードを動的に配分するように構成されている装置が提供される。この装置は：ＴＣＡＭと、メモリと、ＴＣＡＭおよびメモリと通信するプロセッサとを含む。このメモリは、ソフトウェアプログラムを用いて構成されており、このソフトウェアプログラムは、プロセッサによって実行されると、この装置に：それぞれの数のレコードを第１のタイプの複数のクラスタのそれぞれに配分すること、ある数の空レコードを第２のタイプのクラスタに配分し、第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数をモニタすること、第１のタイプの各クラスタに対して、空でないレコードのそれぞれの個数と、それぞれの第１のしきい値とを比較すること、および、第１のタイプの所与のクラスタに配分されているレコードのそれぞれの個数を、そのクラスタの空でないレコードのそれぞれの個数がそのクラスタのそれぞれの第１のしきい値よりも大きい場合には、増加させること、という動作をさせることが可能な命令を含む。
【０００９】
追加的にまたは代替的には、本発明のいくつかの実施形態では、それぞれの数のレコードを第１のタイプの複数のクラスタのそれぞれに配分するステップが、各前記クラスタを、それぞれのインターネットアドレスのプレフィックス長と関連させるステップを含む。
【００１０】
追加的にまたは代替的には、本発明のいくつかの実施形態では、ある数の空レコードを第２のタイプのクラスタに配分するステップが、第２のタイプの前記クラスタを、それに配分されているレコードが空のままである自由クラスタと関連させるステップを含む。
【００１１】
追加的にまたは代替的には、本発明のいくつかの実施形態では、比較するステップが、空でないレコードのそれぞれの個数と、第１のタイプのクラスタに配分されているレコードのそれぞれの個数のそれぞれの第１のパーセンテージであるそれぞれの第１のしきい値とを比較するステップを含む。更に、いくつかの実施形態では、比較するステップが、第１のタイプのクラスタと関連するそれぞれのインターネットアドレスのプレフィックス長に従ってそれぞれの第１のパーセンテージを決定するステップを更に含む。
【００１２】
追加的にまたは代替的には、本発明のいくつかの実施形態では、増加させるステップが：第２のタイプのクラスタに配分されているレコードの個数を、レコードの第１の個数だけデクリメントするステップと、第１のタイプの所与のクラスタに配分されているレコードのそれぞれの個数を、レコードの第１の個数だけインクリメントするステップとを含む。
【００１３】
追加的にまたは代替的に、本発明のいくつかの実施形態は：第２のタイプのクラスタに配分されている空レコードの個数をモニタするステップと、空レコードの個数と第２のしきい値とを比較するステップと、空レコードの個数が第２のしきい値よりも小さい場合には、第２のタイプのクラスタに配分されている空レコードの個数を増加させるステップとを更に含む。更に、本発明のいくつかの実施形態において、第２のタイプのクラスタに配分されている空レコードの個数を増加させるステップが：第１のタイプの１つまたは複数のクラスタに対して、空でないレコードのそれぞれの個数と、それぞれの第３のしきい値とを比較するステップと、第１のタイプの特定のクラスタに配分されているレコードのそれぞれの個数を、そのクラスタの空でないレコードのそれぞれの個数がそのクラスタのそれぞれの第３のしきい値よりも小さい場合には、レコードの第２の個数だけ減少させるステップと、第２のタイプのクラスタに配分されている空レコードの個数を、レコードの第２の個数だけ増加させるステップとを含む。更に、本発明のいくつかの実施形態は：第２のタイプのクラスタに配分されている空レコードの個数をモニタするステップと、空レコードの個数と、第２のしきい値とを比較するステップと、第２のタイプのクラスタに配分されている空レコードの個数が第２のしきい値よりも大きいまたは第２のしきい値と等しくなるまで、第２のタイプのクラスタに配分されている空レコードの個数を増加させるステップとを反復するステップを更に含む。
【００１４】
有利であることに、本発明のいくつかの実施形態は、大容量でありスケーリングされたＩＰルーティングネットワーキング製品に対して、改善されたパフォーマンスを提供する。
【００１５】
有利であることに、本発明のいくつかの実施形態は、これらの実施形態が、特定の要件に基づく要求がある場合にＴＣＡＭのクラスタを成長／縮小することを可能にするという点で、ルートのプレフィックス長ごとに、適切な「１サイズですべてに適合する」デフォルトのブロックサイズを決めるのは困難であるという問題を改善する。いくつかの場合には、新たなルートが認識されたときには、新たなレコードを、どのような移動動作も伴わずに、ＴＣＡＭの中に挿入することができる場合がある。
【００１６】
有利であることに、本発明のいくつかの実施形態は、この実施形態を用いるルーティングシステムによって新たなルーティングエントリが認識される時点でＴＣＡＭのエントリを更新されソートされた状態に維持しよう試みるのとは対照的に、上述した方法のステップのいくつかまたはすべてをバックグラウンドのプロセスで実行することにより、アイドル状態の中央演算装置（ＣＰＵ）資源を用いることがあり得る。
【００１７】
有利であることに、本発明のいくつかの実施形態は、ルーティングシステムにおいて用いられるときに、全体的な平均ルート追加時間を縮小することによって、例えば主要なネットワーク変更に起因するバルクルート更新の間に決定的に必要とされ得る処理資源を解放する。
【００１８】
本発明の上述したおよび他の目的、特徴および効果は、次の添付の図面において図解されている好適な実施形態に関する以下のより詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施形態による、ＴＣＡＭにおけるクラスタにレコードを動的に配分する方法を示す図である。
【図２】図１に示されている方法の実装の結果として得られるＴＣＡＭにおけるクラスタへのレコードの配分を示す図である。
【図３】本発明の第１の実施形態により図２のＴＣＡＭ上で実行されている動的なクラスタ成長動作を示す図である。
【図４】本発明の第１の実施形態により図２のＴＣＡＭ上で実行されている動的なクラスタ縮小動作を示す図である。
【図５】本発明の第２の実施形態による図１に示されている方法を実行するための装置を示す図である。
【発明を実施するための形態】
【００２０】
図においては、同様の特徴は同様の参照記号によって示されている。
【００２１】
本発明の実施形態は、ソフトウェアプロセスをサイズ変更するＴＣＡＭのＩＰｖ４／ＩＰｖ６のＬＰＭ動的クラスタにおいて、用いられ得る。よって、プレフィックス長に基づくＩＰｖ４／ｖ６のレコードクラスタは、ＴＣＡＭのメモリ空間の一部にわたるパーティションとして作製される。クラスタ自体のデフォルトのサイズは、いくつかのサンプルルータ配備に関する情報データベースを転送する際の典型的なルート分布に基づいて画定される。このデフォルトのサイズ画定は、クラスタがいっぱいになる可能性を、減少させるが、ゼロにすることはない。なお、クラスタがいっぱいになるとは、すなわち、新たなレコードを追加／挿入する空間が全く残っていない、ということである。クラスタは、クラスタの端部に、空レコードという形態で自由空間を有するように維持される。プレフィックス長のクラスタではレコードに関する順序従属性が存在しないから、クラスタに自由空間が存在する限り、新たなレコードエントリを、どのような移動動作もなしで、単純かつ瞬時にプログラムすることが可能であり、よって、そのレコードのための高速な挿入時間が提供される。
【００２２】
クラスタの動的なサイズ変更プロセスは、通信ネットワークに配備されるルーティングシステムの定常状態動作の間にかなりの数が存在し得るＣＰＵのアイドル期間の間に、バックグラウンドでのソフトウェアプロセスとして、実行され得る。アイドル期間の間のこの利用可能なＣＰＵ時間の一部を奪い返し、ＴＣＡＭのＬＰＭソーティングおよび動的サイズ変更動作のためにそれを用いることにより、ＣＰＵ資源を効率的に用いることになる。利用可能なＣＰＵのアイドル時間の例外は、典型的には、通信サービスの高度な利用可能性のためにトラフィックフローのルーティングを変更するバルクルート更新など大規模なネットワークイベントの間に加えて、システムのブートアップおよび初期設定の間に生じる。
【００２３】
ＴＣＡＭにおける配備とそれに関連するルート分布とは異なるのが典型的であるから、どのクラスタがいっぱいになり得るのかを予測し、余分の空間を要求するのは、困難である。ＴＣＡＭのアドレス空間の端部に、本明細書で「自由空間」クラスタと称される（自由クラスタおよび空のクラスタとも称される）ものを取っておくことにより、そのフォルトのクラスタサイズの限度に近づいているどのようなクラスタでも成長させるための余地が存在することになる。自由空間クラスタのサイズは、ＴＣＡＭの全容量の例えば１０％であり得る。逆に、サイズが大きすぎるためにＴＣＡＭの空間を非効率的に用いている可能性があるクラスタを、空のクラスタ空間（すなわち、空のまたは用いられていないレコード）の一部を自由空間クラスタに移動させることによって、縮小させることが可能であり、それによって、他のクラスタを成長させる際に用いるための空間を必要に応じて取り戻すことができる。
【００２４】
動的クラスタサイズ変更プロセスの一部として、バックグラウンドでのソフトウェアプロセスが周期的に動作して、容量に近づいているクラスタを検出し、必要に応じてサイズを動的に増加させ、十分に用いられていない大きなクラスタについてはサイズを減少させるプロセスを呼び出す。このプロセスは、バックグラウンドで、いっぱいになりつつある（例えば、配分されているそのレコードサイズの７５％を超えている）クラスタを検出して、例えば新たなルート更新を行わなければならないときには、そのようなクラスタのサイズを動的に増加させ、それらのクラスタが新たなエントリを追加する十分な自由空間を有することを保証するプロセスを始動し得る。
【００２５】
ルートテーブルがいっぱいに満たされているときは別にして、新たなルートを認識／計算するプロセスは、それらのルートがダウンロードされる前に高速の挿入が可能になるようにＴＣＡＭを再編成する機会をソフトウェアに与えるようなペースであることが多い。ルーティング更新のバッチがすべて一度に到来することにより、アイドル状態のＣＰＵサイクルが利用可能になる前にクラスタを満たしてしまう場合には、ソフトウェアプロセスは、いつかしばらく後にクラスタに空間を追加して、このクラスタへの将来の追加がエントリの移動を必要としなくなるようにすることによって、いっぱいであるクラスタの状況を救済するであろう。このプロセスは、自由空間に空いている場所を請求し、サイズを増加させる必要があるクラスタに到達するまで、すべてのレコードのシフトダウンを開始させる。最悪の場合のシナリオは、最大回数の移動動作を結果的に生じ得る／３２または／１２８（それぞれ、ＩＰｖ４またはＩＰｖ６）クラスタを成長させてしまうことであろう。しかし、バルク更新期間の外では、利用可能な多くの自由ＣＰＵサイクルが存在するのが典型的である。必要な場合には、ＴＣＡＭを再編成する作業を、そうでなければアイドル状態であり得るＣＰＵ処理サイクルを利用することで、小さな動作に分割することが可能である。
【００２６】
動的クラスタサイズ変更プロセスの別の機能は、そのサイズがＴＣＡＭサイズ全体の一定の予め選択されたパーセンテージ（例えば、１０％）に留まることを保証するために、自由空間クラスタにおける空レコードの個数（自由空間）をモニタすることである。従って、クラスタ成長動作が生じると直ちに、用いられていないクラスタ空間の返還を求め、必要に応じて他のクラスタの成長に用いるための自由空間クラスタにそれを取り戻すために、１つまたは複数の縮小動作が呼び出され得る。そのようなクラスタ縮小動作のための例示的な規準には：クラスタの用いられていない空間が５１２個のレコードよりも大きいこと、２５％よりも少ないクラスタが用いられていること、または、クラスタが、他のクラスタと比較して、最小の回数の先行する縮小動作に関係していること（ただし、自由空間クラスタは除外する）が含まれる。後者の規準は、サイズが大きすぎるすべてのクラスタの均一な縮小を提供することを目的としている。
【００２７】
いくつかのＴＣＡＭアプリケーションにおいては、クラスタ成長／縮小動作は、特に、特定の配備のルート分布が時間経過と共に劇的に変化する可能性がないときに、数回生じ得るだけである。動的クラスタサイズ変更プロセスは、ＴＣＡＭレコード配分を顧客のルートテーブル分布に調整するために、バックグラウンドで働くので、重要なネットワーク更新の期間の間に時間のかかるＴＣＡＭエントリ移動動作が生じる可能性が、低下する。更に、動的クラスタサイズ変更プロセスは、データ経路の中への可能性のある最速の（すなわち、レコードの移動のない）更新を保証することにより、ＴＣＡＭのパフォーマンス向上を助け、ルータの動作を通じてＴＣＡＭデバイスの中への全体的な平均ルートレコード挿入時間を短縮するはずである。
【００２８】
動的クラスタサイズ変更プロセスの実装は、２つの別個の機能を含み得るのであって、これらは、すなわち、ＴＣＡＭにおけるクラスタのサイズを成長させるまたは増加させるのに用いられる第１の機能と、ＴＣＡＭにおけるクラスタのサイズを縮小させるまたは減少させるのに用いられる第２の機能とである。第１の機能は、本明細書において「ＧｒｏｗＩＰＣｌｕｓｔｅｒＵｐＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅ」と称され、他方で、第２の機能は、本明細書において「ＧｒｏｗＩＰＣｌｕｓｔｅｒＤｏｗｎＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅ」と称される。
【００２９】
次の例では、これらの機能がどのように用いられるかを、例証する。動的クラスタサイズ変更プロセスによって、プレフィックス長＝Ｎを有するクラスタのための量Ｘのレコードの動的クラスタ成長動作が要求されている、と仮定する。このプロセスは、以下のステップを実行し得る：
【００３０】
１）自由空間クラスタのＴＣＡＭアドレス空間のトップ（すなわち、最高アドレス）における自由空間クラスタの中に、／０プレフィックスクラスタをＸ個のレコードだけ低い方へ成長させる。
【００３１】
２）次に、ＴＣＡＭアドレス空間におけるクラスタ１，２，・・・，Ｎの上で、一度に１つのクラスタだけ高い方向（プレフィックス長において１つ高い位置）に連続的に移動させ、ＧｒｏｗＩＰＣｌｕｓｔｅｒＤｏｗｎＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅを用いて、そのクラスタをＸ個のレコードだけ低い方向に成長させる。なお、クラスタを下方向に成長させることは、所与のクラスタのトップにおいてエントリを下方向にロールすることにより、次に高いクラスタ（プレフィックス長において１つ高い）において自由空間を生成することを含む。移動されるエントリの個数を減少させるには、エントリがシフトダウンされるのではなく、もっとも、これには、たとえ１つのレコードだけシフトするためであっても、すべてのエントリを１つの位置だけ移動させることが要求されるのであるが、その代わりに、所望の量の自由空間を生じさせるのに必要であるだけの個数のエントリが、所与のクラスタのトップ（最高アドレス）におけるそれらの位置から、そのクラスタのボトム（最低アドレス）におけるエントリと隣接する位置まで、直接に移動されることに注意すべきである。アドレスプレフィックスはクラスタの内部でソートされていないため、より低い効率となり得る単なるエントリのシフトではなく、このような態様でエントリをロールすることを、必要に応じてエントリを移動させるために、用いることが可能である。
【００３２】
この最終的な結果は、ＴＣＡＭのクラスタ全体にわたりＬＰＭ編成を維持しながら、自由空間のＸ個のレコードが、いまでは、クラスタＮに転送されているということである。
【００３３】
次の例では、これらの機能がどのように用いられるか、更に例証している。動的クラスタサイズ変更プロセスにより、プレフィックス長＝Ｎを有するクラスタのための量Ｘのレコードの動的クラスタ縮小動作が要求されている、と仮定する。このプロセスは、次のステップを実行し得る：
【００３４】
１）クラスタ＝Ｎで開始し、そのクラスタを、ＧｒｏｗＩＰＣｌｕｓｔｅｒＵｐＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅを用いて、上方向にＸ個のレコードだけ成長させる。
【００３５】
２）次に、ＴＣＡＭのアドレス空間において、一度に１つのクラスタだけ下方向に連続的に移動させ（すなわち、プレフィックス長を減少させる）、／０クラスタに到達するまで、ＧｒｏｗＩＰＣｌｕｓｔｅｒＵｐＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅを用いて、そのクラスタをＸ個のレコードだけ上方向に成長させる。なお、クラスタを上方向に成長させることには、エントリを、クラスタのボトム（すなわち、最低アドレス）からクラスタのトップ（すなわち、最高アドレス）までロールすることが含まれ、これにより、現在のクラスタよりも下にあるクラスタにおける空間が解放される。
【００３６】
３）最後に、自由空間クラスタを／０クラスタの中へ上方向に成長させることにより、空間Ｘのブロックを、自由空間の中に転送して戻す。
【００３７】
この最終的な結果は、クラスタＮからの自由空間のＸ個のレコードが、自由空間クラスタに転送して戻されたということであり、これが、必要に応じて他のクラスタのサイズを増加させるために、将来において用いられ得る。
【００３８】
図１は、本発明の第１の実施形態により、ＴＣＡＭにおいてレコードをクラスタに動的に配分する方法１００を示している。一般に、ＴＣＡＭは、それぞれがＩＰアドレスのプレフィックス長に対応する複数のアドレスクラスタと、１つの自由クラスタとに区分される。この方法は、ＴＣＡＭにおいて、それぞれの数のレコードをアドレスクラスタ（１からＮ）のそれぞれに配分する（１０２）ことによって、開始する。方法１００の実行は、ある数のレコードを自由クラスタに配分する（１０４）ことによって、継続する。なお、自由クラスタは、アドレスクラスタの１つではない。これら最初の２つの配分ステップ１０２、１０４は、上述した区分けを生じさせるように、任意の順序で行うことが可能である。典型的には、各アドレスクラスタに配分されるレコードの個数は、ＴＣＡＭが用いられるアプリケーションに応じて変動する。自由クラスタに配分されるレコードの個数は、典型的には、ＴＣＡＭ上のレコードにおける容量の１０％であり得るが、この量もまた、ＴＣＡＭの意図されている使用に応じて変動し得る。ＴＣＡＭの例示的な構成は、図２を参照しながら、より詳細に、後述する。
【００３９】
方法１００は、アドレスクラスタ（例えば、１からＮの範囲にあるＸ）を選択して（１０６）、一連のステップを開始することにより、継続する。なお、これら一連のステップは、実際はＴＣＡＭにおけるクラスタへのレコードの再配分および調整である動的配分を達成するために、反復的に実行される。この方法は、選択されたアドレスクラスタＸにおける空ではないレコードの個数を判断する（１０８）ことによって、継続する。空でないレコードとは、その中に、ＩＰアドレスプレフィックスなどのエントリを有しているものである。方法１００は、選択されたアドレスクラスタＸにおける空でないレコードの個数が、選択されたアドレスクラスタＸの上限しきい値よりも大きいかどうかを判断する（１１０）ことに進み、大きい場合には、選択されたアドレスクラスタＸに配分されているレコードの個数を、増加させる（１１０）。例示的な上限しきい値は、選択されているアドレスクラスタＸに配分されているレコードの７５％である。方法１００は、自由クラスタにおける空レコードの個数を判断する（１１２）ことによって、継続する。空レコードとは、その中にエントリを全く含まないレコードである。方法１００は、自由クラスタにおける空レコードの個数が自由しきい値よりも小さいかどうかを判断する（１１４）ことに進み、小さい場合には、余分な配分を有するアドレスクラスタに配分されているレコードの個数を、ある量（Ｙ）だけ減少させ（１１４）、自由クラスタへのレコードの配分を同じ量Ｙだけ増加（１１４）させる。例示的な自由しきい値は、ＴＣＡＭにおけるレコードの１０％、すなわち、ＴＣＡＭの全体のサイズの１０％である。例示的な量Ｙのレコードは５１２個のレコードであるが、この量は、ＴＣＡＭが配備されることになる意図されているアプリケーションに応じて変動し得る。方法１００は、Ｘの代わりに新たな値を設定することによって別のアドレスクラスタを選択し（１１６）、選択されたアドレスクラスタＸにおける空でないレコードの個数を判断する（１０８）ことで開始する上述のステップを反復することによって、継続する。
【００４０】
図２は、図１に示されている方法の実装例の結果として生じる、ＴＣＡＭ２００におけるレコードのクラスタへの配分を示している。ＴＣＡＭのアドレスクラスタは、降順のプレフィックス長によって、ソートされている。これ以後は、アドレスクラスタの命名は、／＃というパターンに従う。なお、ここで、＃は、そのアドレスクラスタに格納されることになるアドレスプレフィックスにおけるビット数を示す。ＩＰｖ４の場合の最大プレフィックス長は３２ビットであり、その長さのプレフィックスが／３２のアドレスクラスタ２０２に格納されるのであるが、このアドレスクラスタ２０２には、４Ｋ（４０９６）個のレコードが配分されている。同様に、３１ビットのＩＰアドレスプレフィックスを格納するための／３１のアドレスクラスタ２０４には、４Ｋ個のレコードが配分されている。／３０のアドレスクラスタにも、４Ｋ個のレコードが割り当てられているが、以下を含むものとして、更に詳細に示されている：すなわち、ＴＣＡＭサーチキー（レコードＭ）２０６、ＴＣＡＭサーチキー（レコードＭ＋１）２０８、ＴＣＡＭサーチキー（レコードＭ＋２）２１０、ＴＣＡＭの空レコード（レコードＭ＋３）２１２、自由空間（空レコード）２１４、およびＴＣＡＭの空レコード（レコードＭ＋４Ｋ）２１６が含まれる。ＴＣＡＭ２００は、また、以下を含む：すなわち、１クラスタ当たり４Ｋ個のレコードを有する／２９から／２５のアドレスクラスタ２１８、８Ｋ（８１９２）個のレコードを有する／２４のアドレスクラスタ２２０、４Ｋ個のレコードを有する／２３のアドレスクラスタ２２２、４Ｋ個のレコードを有する／２２のアドレスクラスタ２２４、１クラスタ当たり１Ｋ個から４Ｋ個までのいずれかのレコードを有する／２１から／１７のアドレスクラスタ２２６、４Ｋ個のレコードを有する／１６のアドレスクラスタ２２８、２５６個のレコードを有する／１５のアドレスクラスタ２３０、１クラスタ当たり４個から２５６個の範囲のレコードが配分されている／１４から／２クラスタ２３２、４個のレコードを有する／１のアドレスクラスタ２３４、および２５６個のレコードを有する／０のアドレスクラスタ２３６が含まれる。ＴＣＡＭ２００はまた、配分されているＴＣＡＭレコード全体の１０％を有する自由空間クラスタ２３８を含み、これは、必要に応じてアドレスクラスタ２０２から２３６を動的に成長させるために用いられる。
【００４１】
図３は、本発明の第１の実施形態によって図２のＴＣＡＭ２００の／２４アドレスクラスタ２２０上で実行されている動的クラスタ成長動作３００を示している。成長動作３００は、５００個の空レコードを／２４アドレスクラスタ２２０に追加することにより、そのクラスタに配分されているレコードの総数を増加させる。／２４アドレスクラスタ２２０は、より詳細には、使用中の（すなわち、空ではない）レコード２２０ａと空レコード２２０ｂとを含むものとして示されており、後者は、１００個のレコードが存在している。同様に、／１アドレスクラスタ２３４が、より詳細に、使用中のレコード２３４ａと空レコード２３４ｂとを含むものとして示されており、後者は、１０個のレコードが存在している。同じように、／０アドレスクラスタ２３６が、より詳細に、使用中のレコード２３６ａと空レコード２３６ｂとを含むものとして示されており、後者は、１０個のレコードが存在している。自由空間クラスタ２３８は、それに配分されているＴＣＡＭレコード全体の１０％を有するが、ここでは、転送情報ベース（ＦＩＢ）の１０％として示されている。
【００４２】
動的クラスタ成長動作３００の第１のステップは、／０アドレスクラスタ２３６に配分されているレコードの個数を、５００個の空レコードだけ増加させ（３０２）、それにより、そのクラスタにおける空レコード２３６ｂの総数を、５１０個とすることである。これらの５００個のレコードは、自由空間クラスタ２３８のトップ（最高アドレス）における自由空間クラスタ２３８から得られる。／０アドレスクラスタ２３６における空でない（すなわち、使用中の／占有中の）レコード２３６ａは、「ＧｒｏｗＩＰＣｌｕｓｔｅｒＤｏｗｎＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅ」機能に関する説明との関係で既に述べた態様で、／０アドレスクラスタ２３６のトップからロールダウンされ（３０４）、それによって、／１アドレスクラスタ２３４における空レコード２３４ｂの個数を、５１０個に増加させる（３０６）。／１アドレスクラスタ２３４における空でないレコード２３４ａは、／０アドレスクラスタ２３６における空でないレコード２３６ａに関してなされたのと同じ態様で、／１アドレスクラスタ２３６のトップからロールダウンされる（３０８）。／０および／１アドレスクラスタ２３６、２３４に対して実行されたばかりの動作と同様のロールダウン動作３１２が、／２から／２３クラスタ２３２−２２２に対して実行され、それにより、５００個の空レコードが、／２４アドレスクラスタ２２０の空レコード２２０ｂに追加される。最終的な結果は、／２４アドレスクラスタ２２０における空レコード２２０ｂの個数が、１００個のレコードから６００個のレコードに増加したということであり、これは、／２４アドレスクラスタ２２０に配分されているレコードが５００個増加したことを表す。
【００４３】
図４は、本発明の第１の実施形態によって図２のＴＣＡＭ２００の／１６アドレスクラスタ２２８上で実行されている動的クラスタ縮小動作４００を示している。縮小動作４００は、１２８個の空レコードを／１６アドレスクラスタ２２８から除去することにより、そのクラスタに配分されているレコードの総数を減少させる。／１６アドレスクラスタ２２８は、より詳細に、使用中のレコード２２８ａと空レコード２２８ｂとを含むものとして示されており、後者は、３１２８個のレコードが存在している。同様に、／１アドレスクラスタ２３４が、より詳細に、使用中のレコード２３４ａと空レコード２３４ｂとを含むものとして示されており、後者は、１０個のレコードが存在している。同じように、／０アドレスクラスタ２３６が、より詳細に、使用中のレコード２３６ａと空レコード２３６ｂとを含むものとして示されており、後者は、１０個のレコードが存在している。自由空間クラスタ２３８は、それに配分されているＴＣＡＭレコード全体の１０％よりもわずかに少ないものを有するが、ここでは、転送情報ベース（ＦＩＢ）の１０％未満として示されている。
【００４４】
動的クラスタ縮小動作４００の第１のステップは、／１６アドレスクラスタ２２８に配分されているレコードの個数を、１２８個の空レコードだけ減少させる（４０２）ことであり、それによって、そのクラスタにおける空レコード２２８ｂの総数が３０００個となる。これは、「ＧｒｏｗＩＰＣｌｕｓｔｅｒＵｐＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅ」機能に関する説明との関係で既に述べた態様で、／１５から／２までのアドレスクラスタ２３０−２３２において、一度に１クラスタについて、１２８個のＴＣＡＭレコード位置だけ、空でないレコードを連続的にロールアップすることによって行われ、それによって、／１アドレスクラスタ２３４における空レコード２３４ｂの個数を、１３８個のレコードに増加させる（４０４）。／０アドレスクラスタ２３６における空でないレコード２３６ａは、「ＧｒｏｗＩＰＣｌｕｓｔｅｒＵｐＩｎｔｏＡｄｊａｃｅｎｔＦｒｅｅＳｐａｃｅ」機能に関する説明との関係で既に述べた態様で、／０アドレスクラスタ２３６のトップからロールアップされ（４０８）、それによって、／１アドレスクラスタ２３４における空レコード２３４ｂの個数を、１０個のレコードまで減少させる（４０６）。／０アドレスクラスタ２３６における空レコード２３６ｂは、この時点では、１３８個のレコードである。最後に、自由空間クラスタ２３８に配分されているレコードの個数が、／０アドレスクラスタ２３６のボトム（最低アドレス）から得られた１２８個の空レコードだけ増加され、それによって、自由空間クラスタ２３８に、ＴＣＡＭ２００におけるレコードの総数の約１０％に等しい個数のレコードが、配分されることになる。
【００４５】
図５は、本発明の第２の実施形態による、図１に示されている方法を実行するための装置５００を示している。例えば、装置５００は、ルータであり得る。この装置は、プロセッサ５０２と、プロセッサ５０２と通信するメモリ５０４と、プロセッサ５０２と通信する入力／出力（Ｉ／Ｏ）ポート５０６と、プロセッサ５０２とやはり通信するＴＣＡＭ５０８とを含む。メモリは、命令を有するプログラム５１０を含んでおり、この命令は、プロセッサによって実行されると、方法２００と、上述した関連の動的クラスタ成長および縮小動作３００、４００とをＴＣＡＭ５０８上で実行させる。プロセッサ５０２は、ＴＣＡＭ５０８と共に、装置５００がＩ／Ｏポート５０６を経由して通信されるデータパケットトラフィック５１２に対してＬＰＭ動作を行うことを可能にする。
【００４６】
本発明の範囲から逸脱することなく、多数の修正、変更および改変を、以上に記載されている本発明の実施形態に対して、行うことができる。なお、本発明の範囲は、特許請求の範囲において定義されている。
【図１】
0005948494.tif 000002
【図２】
0005948494.tif 000003
【図３】
0005948494.tif 000004
【図４】
0005948494.tif 000005
【図５】
0005948494.tif 000006