(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023181694
(43)【公開日】2023-12-25
(54)【発明の名称】ストレージシステム
(51)【国際特許分類】
G06F 3/06 20060101AFI20231218BHJP
【FI】
G06F3/06 301W
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022094962
(22)【出願日】2022-06-13
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】井原 央翔
(72)【発明者】
【氏名】横井 伸浩
(72)【発明者】
【氏名】長尾 尚
(72)【発明者】
【氏名】吉井 義裕
(57)【要約】
【課題】ストレージシステム内で重複排除の負荷を分散する。
【解決手段】ストレージシステムは、中央処理装置と、メインメモリと、受信データのハッシュ値とボリューム内のアドレスとを関連付ける第1管理情報と、I/O処理パッケージとを含む。I/O処理パッケージは、I/Oプロセッサと、I/Oメモリとを含む。I/Oプロセッサは、プロトコル処理を実行する。I/Oプロセッサは、第1管理情報における、第1受信データのハッシュ値に関連付けられているアドレスの検索処理の少なくとも一部を実行する。中央処理装置は、第1受信データのハッシュ値に関連付けられているアドレスのデータに基づき、第1受信データの重複排除処理の実行を制御する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ストレージシステムであって、
中央処理装置と、
前記中央処理装置のプログラム領域及び作業領域を含むメインメモリと、
受信データのハッシュ値とボリューム内のアドレスとを関連付ける第1管理情報と、
I/O処理パッケージと、を含み、
前記I/O処理パッケージは、
I/Oプロセッサと、
前記I/Oプロセッサのプログラム領域及び作業領域を含むI/Oメモリと、を含み、
前記中央処理装置は、ユーザデータのリード処理及びライト処理を制御し、
前記I/Oプロセッサは、プロトコル処理を実行し、
前記I/Oプロセッサは、前記第1管理情報における、第1受信データのハッシュ値に関連付けられているアドレスの検索処理の少なくとも一部を実行し、
前記中央処理装置は、前記第1受信データのハッシュ値に関連付けられているアドレスのデータに基づき、前記第1受信データの重複排除処理の実行を制御する、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記I/Oプロセッサは、前記第1管理情報において前記第1受信データのハッシュ値に関連付けられているアドレスを検索し、見つけられたアドレスを前記中央処理装置に送信する、ストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
複数I/O処理パッケージを含み、
前記中央処理装置は、前記複数I/O処理パッケージの負荷に基づいて、前記複数I/O処理パッケージそれぞれに対して割り当てる前記第1管理情報の検索処理の量を決定する、ストレージシステム。
【請求項4】
請求項3に記載のストレージシステムであって、
前記中央処理装置は、前記複数I/O処理パッケージそれぞれのI/Oプロセッサ及びI/Oメモリの負荷に基づいて、前記複数I/O処理パッケージそれぞれに対して割り当てる前記第1管理情報の検索処理の量を決定する、ストレージシステム。
【請求項5】
請求項4に記載のストレージシステムであって、
前記複数I/O処理パッケージそれぞれは、DMAコントローラをさらに含み、
前記中央処理装置は、前記複数I/O処理パッケージそれぞれのI/Oプロセッサ、I/Oメモリ及びDMAコントローラの負荷に基づいて、前記複数I/O処理パッケージそれぞれに対して割り当てる前記第1管理情報の検索処理の量を決定する、ストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
複数I/O処理パッケージと、
受信データのハッシュ値の範囲と、前記第1管理情報における検索処理の少なくとも一部の割当先と、を関連付ける第2管理情報と、を含み、
前記中央処理装置は、前記第1受信データのハッシュ値及び前記第2管理情報に基づいて、前記検索処理の少なくとも一部を割り当てる前記I/Oプロセッサを決定する、ストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
受信データのハッシュ値の範囲と、前記第1管理情報における検索処理の少なくとも一部の割当先と、を関連付ける第2管理情報、を含み、
前記割当先は前記I/Oプロセッサ及び前記中央処理装置を含み、
前記中央処理装置は、第2受信データのハッシュ値及び前記第2管理情報に基づいて、前記第2受信データのための前記第1管理情報における検索処理の少なくとも一部の割当先を決定する、ストレージシステム。
【請求項8】
請求項1に記載のストレージシステムであって、
前記I/Oメモリは、前記第1管理情報内の第1部分情報を保持し、
前記第1部分情報は、受信データのハッシュ値を前記第1管理情報内の第2部分情報の前記メインメモリ内のアドレスと関連付け、
前記I/Oプロセッサは、
前記第1受信データのハッシュ値に基づいて、前記第1部分情報から前記メインメモリ内の第1アドレスを取得し、
前記メインメモリから、前記第1アドレスの第2部分情報を前記I/Oメモリに読み込む、ストレージシステム。
【請求項9】
請求項1に記載のストレージシステムであって、
前記I/O処理パッケージは、ホストとの通信におけるプロトコル処理を実行する、ストレージシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムに関する。
【背景技術】
【0002】
ストレージ装置は、主にストレージコントローラ(以降、コントローラ)とドライブから構成される。コントローラは、SAN経由で接続されたホストに対して、ストレージサービスを提供する。ストレージサービスとは、ホストからのデータ書き込み要求に応じて、データをドライブに格納し、ホストからのデータ読み出し要求に応じて、ドライブのデータを取り出すことを指す。
【0003】
有限のドライブ容量を最大限に活用し、ドライブコストを低く抑えるため、ホストからコントローラに対して同一のデータが複数回書き込まれたことを検出し、それらのデータをまとめて単一のデータとしてドライブに格納する機能を実装することがある。これを、重複排除機能と呼ぶ。
【0004】
重複排除機能は、ある種のハッシュ関数を用いて実装されることがある。ホストから書き込まれたデータを、固定長もしくは可変長のチャンクに分割し、各チャンクのデータをハッシュ関数に入力することで、データに対応するハッシュ値を得る。このハッシュ値のことを、特にFingerprint Key(以降、FPK)と呼ぶ。
【0005】
また、重複検出対象となるドライブ格納データの各チャンクに対応するFPKは、専用のハッシュテーブルに格納される。このテーブルを、特にFingerprint Table(以降、FPT)と呼ぶ。ホストからの書き込みデータから計算されたFPKをFPT中で検索し、一致するFPKが見つかった場合、それらのFPKが指すデータは互いに重複している可能性が高い。
【0006】
FPK一致したデータをドライブから読み出し、ホストからの書き込みデータと比較し、内容が一致していた場合は、これらを重複データとみなし、ホストからの書き込みデータをドライブに格納する代わりに、ドライブ格納済みデータへの参照が追加される。
【0007】
特許文献1では、重複排除方式と、それに基づくストレージ装置が開示されている。
【先行技術文献】
【特許文献】
【0008】
【発明の概要】
【発明が解決しようとする課題】
【0009】
特許文献1にて開示された重複排除方式では、FPT検索をコントローラ、特にコントローラ内の中央処理装置(CPU)が実施するため、ホストからの書き込みデータ流量によってはFPTの検索に係る処理負荷が増大しI/O性能が低下するという課題がある。
【課題を解決するための手段】
【0010】
本発明の代表的一例のストレージシステムは、中央処理装置と、前記中央処理装置のプログラム領域及び作業領域を含むメインメモリと、受信データのハッシュ値とボリューム内のアドレスとを関連付ける第1管理情報と、I/O処理パッケージと、を含む。前記I/O処理パッケージは、I/Oプロセッサと、前記I/Oプロセッサのプログラム領域及び作業領域を含むI/Oメモリと、を含む。前記中央処理装置は、ユーザデータのリード処理及びライト処理を制御する。前記I/Oプロセッサは、プロトコル処理を実行する。前記I/Oプロセッサは、前記第1管理情報における、第1受信データのハッシュ値に関連付けられているアドレスの検索処理の少なくとも一部を実行する。前記中央処理装置は、前記第1受信データのハッシュ値に関連付けられているアドレスのデータに基づき、前記第1受信データの重複排除処理の実行を制御する。
【発明の効果】
【0011】
本発明の一態様によって、ストレージシステムの性能を向上させることができる。
【0012】
前記した以外の課題、構成および効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0013】
【
図1】実施例における情報システムの構成例を示すブロック図
【
図2A】実施例に係るIPUプログラム領域内ブロック図
【
図2B】実施例に係るCPUプログラム領域内ブロック図
【
図4】実施例に係るCPU・IPU各I/O領域内ブロック図
【
図9A】実施例におけるFPRDTに基づく負荷分散におけるIPU負荷情報テーブルの構成例
【
図9B】実施例におけるFPRDTに基づく負荷分散におけるFPT検索負荷情報テーブルの構成例
【
図9C】実施例におけるFPRDTに基づく負荷分散における更新されたFPRDTの構成例
【発明を実施するための形態】
【0014】
以下、図面に基づいて、本発明の実施の形態を説明する。
【0015】
なお、以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされており、本発明は、他の種々の形態でも実施する事が可能であり、特に限定しない限り、各構成要素は単数でも複数でも構わない。
【0016】
また、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、実施例の中で説明されている要素の組み合わせの全てが、発明の解決手段に必須であるとは限らない。
【0017】
以降の説明における用語法について、以下に示す。
【0018】
第一に、キャッシュ機構を備えた周辺装置とのI/Oについて、当該装置から直接I/Oを要求するものとして言及することがあるが、そのような場合は、キャッシュ機構が適切に動作し、適宜キャッシュからのI/Oが実行されるものとする。ただし、キャッシュ機能の介在・非介在が明示された場合はその限りではない。
【0019】
第二に、メモリやストレージ装置上の領域を解放する処理について言及することがあるが、ストレージ装置がSSD(Solid State Drive)によって構成されている等、装置の構造や装置の制御ソフトウェアの実装によっては、実際の解放処理は保留され、論理的に当該領域が解放されたものとして記録されるのみに留まることもある。
【0020】
第三に、処理手順の説明において、処理で使用したメモリ領域を解放せずに終了するよう規定することがあるが、使用済みメモリ領域の解放については、GC(Garbage Collection)等の機構により適切に処理されるものとする。
【0021】
第四に、「プログラム」を主語として処理を説明することがあるが、そのような場合は、プログラムを実行するプロセッサが、プログラム内に定義された処理内容に応じて、適宜ストレージ等周辺装置に対してI/Oを発行するものとする。なお、プログラムを実行するプロセッサが指定されていない場合は、実行環境に応じて適切なプロセッサがプログラムを実行するものとする。
【0022】
以下において、ストレージシステムにおける重複排除のためのFPT(Fingerprint Table)検索を説明する。FPT検索によるコントローラ内のCPU処理負荷の増大は、I/O性能低下を引き起こし得る。CPUとは別にコントローラ内に検索専用ハードウェアを搭載し、これらに高負荷処理をオフロードすることで、CPUの負荷を低減し得る。例えば、FPT検索を専用に実行するためのコプロセッサやFPGAを搭載し、これらにFPT検索をオフロードする。
【0023】
FPT検索のオフロードのためだけに専用ハードウェアをコントローラ内部に搭載することは、コストや実装面積、電源容量、発熱等の面で課題が起こり得る。本明細書の一実施例は、FPT検索とは異なる目的でコントローラに搭載されたコプロセッサの余剰資源に着目し、ここにFPT検索処理の少なくとも一部をオフロードすることを提案する。
【0024】
FPT検索以外の目的でコントローラに搭載されるコプロセッサの例としては、SAN(Storage Area Network)における100ギガビットイーサネット(以降、100GbE)等の高速ネットワーク規格のサポートに伴い、ネットワークプロトコルの処理負荷をCPUからオフロードする目的でコントローラに搭載されるコプロセッサが挙げられる。このようなコプロセッサを、IPU(I/O Processing Unit)と呼ぶ。
【0025】
IPUには、ネットワークプロトコル処理のためのプロセッサと、プロトコルデータのバッファとして働くメモリ、ならびに、コントローラのメモリを読み書きするためのDMAエンジンが搭載されている。これらの資源は、当該IPUが接続されたホストインターフェースの負荷によっては十分に活用されず、余剰が生じることが考えられる。
【0026】
例として、100GbE等の高速ネットワーク規格をサポートしたIPUを同一コントローラに複数搭載した構成では、マイグレーション動作等で単一IPUがコントローラ全体のI/O帯域を飽和させることが十分可能であり、そのような場合、他のIPUは余剰資源となる。
【0027】
そうしたIPU余剰資源を活用してFPT検索をオフロードすることで、専用ハードウェアを搭載することなく、ストレージ装置の高性能化が可能となる。
【0028】
ただし、IPUは本来ホストとのI/O処理を受け持つためのコプロセッサであり、オフロードしたFPT検索の処理負荷によって、I/O処理性能に影響が出ることは避けることが求められる。また、ホストとのI/O処理負荷はホストアプリケーションの動作によって逐一変動するため、FPT検索に使用できる資源量も変動する。したがって、コントローラは、FPT検索を常時オフロードするのではなく、IPUのI/O処理負荷を逐一監視し、オフロード可否を適宜判断してもよ。
【0029】
また、IPUが複数搭載されている場合には、複数IPU間での負荷分散も課題となり得る。IPU間でI/O負荷が均等となることは考えにくい。例えばFPK毎にラウンドロビン方式でオフロード先を変更するなどして負荷分散を実装した場合は、I/O負荷が高いIPUにおいてI/O性能への影響が大きくなり得る。したがって、複数搭載されたIPUのうちI/O負荷が低いものに対して集中的にFPT検索をオフロードすることが考えられる。
【0030】
本明細書の実施例では、FPT検索オフロードに伴って生じる課題を解決すべく、FPKに基づく負荷分散を提案する。本明細書の一実施例では、FPK計算に特定のハッシュ関数を使用することを仮定しないが、同目的で使用されるハッシュ関数は、十分な一様性と無作為性を備えているものと仮定する。これはすなわち、入力データが特定のパターンに偏っていても、ハッシュ関数が出力するFPKは一様乱数とみなすことができるということを意味する。
【0031】
したがって、特定のFPK値範囲を各IPUに割り当て、各IPUに対して割当範囲内のFPKのみ検索を依頼する実装において、FPK割当範囲を調整することで各IPUの検索負荷を調整することが可能となる。
【0032】
本明細書の実施例では、一定の時間周期ごとに各IPUのプロセッサ負荷、メモリ負荷、DMA負荷を集計し、それらの負荷に基づいて、各IPUへのFPK値割当範囲を決定する。
【0033】
本明細書の実施例によって、ストレージ装置における重複データ検出処理を、IPUの余剰資源へオフロードすることが可能となり、専用ハードウェアを搭載することなくストレージ装置の性能を向上させることができる。なお、SANと異なるネットワークやホスト異なる装置と通信のためのプロトコル処理を行うIPUにFPT検索の少なくとも一部をオフロードできる。
【0034】
図1は、本明細書の一実施例に係る情報処理システムの構成例を示すブロック図を示す。
【0035】
本明細書の一実施例の情報処理システムは、ストレージシステム34とホストコンピュータ37を含み、両者はSAN111によって接続されている。
【0036】
ホストコンピュータ37は、CPU(Central Processing Unit)70やメモリ73のほか、アプリケーション40の実行に必要な周辺装置を備えたコンピュータ装置である。ホストコンピュータ37は、アプリケーション40の要求に応じ、接続されたストレージシステム34に対してデータの書き込みコマンドや読み出しコマンドを発行する。
【0037】
ストレージシステム34は、CPU64とメインメモリ76を備える。メインメモリ76はCPUプログラム領域47、作業領域45、及びI/O領域108を含む。CPU64は、CPUプログラム領域47内に配置された各種プログラムを実行する。CPU64は、CPUプログラム領域47内各種プログラムに基づき、ボリューム49のデータの読み書き(リード処理及びライト処理)を制御することでホストコンピュータ37に対してストレージサービスを提供するとともに、ストレージシステム34全体を制御する。ボリュームの物理記憶領域は、不図示の1以上の記憶ドライブにより与えられる。
【0038】
また、ストレージシステム34は、IPU(I/O Processing Unit)55とIPUメモリ79を搭載したIPUパッケージ(IPPK)104を備える。IPUパッケージ104は、例えば、PCI Express等のバス117を介してCPU64に接続され、相互に通信が可能である。IPUメモリ79は、IPUプログラム領域92、IPU作業領域95、及びIPU I/O領域84を含む。IPU55は、IPUプログラム領域92内に配置された各種プログラムに基づいて、ホストコンピュータ37とCPU64間の通信を中継することが主な役割である。
【0039】
IPU55にはDMA(Direct Memory Access)コントローラ114(DMA114)が搭載されており、IPU55からDMA114によってメインメモリ76空間を読み書きすることが可能である。
【0040】
図2Aは、本実施例に係るIPUプログラム領域92内ブロック図を示す。
図2Bは、CPUプログラム領43域内ブロック図を示す。
【0041】
IPUプログラム領域92には、VFPTD(Finger Print Table Directory)検索ルーチン18、VFPTD更新ルーチン24、IPU負荷取得ルーチン30が格納されている。VFPTD検索ルーチン18とVFPTD更新ルーチン24は、それぞれCPU64からのコマンドを待機する常時実行ルーチンである。また、IPU負荷取得ルーチン30は、一定周期でIPUの負荷情報を取得する定期実行ルーチンである。
【0042】
その他、IPUプログラム領域92には、上記ルーチンのサブルーチンとして、FPMQ(Finger Print Match Queue)検索ルーチン21が格納されている。このルーチンは、上記ルーチン以外から直接呼び出されることはない。
【0043】
CPUプログラム領域47には、FPT検索ルーチン42、FPT更新ルーチン48、FPRDT更新ルーチン54、VFPBL(Virtual Fingerprint Block List)解放ルーチン62が含まれる。FPT検索ルーチン42は、ホストコンピュータ37からデータが書き込まれ、重複排除が実行されるタイミングで、一致データを検索するために呼び出される。
【0044】
FPT更新ルーチン48は、重複排除処理が完了し、新規データのエントリをFPTに登録する、もしくはデータを削除する等の契機で呼び出される。FPRDT更新ルーチン54は、無限ループに基づく常時実行ルーチンである。VFPBL解放ルーチン62は、CPU作業領域45の容量が枯渇するなどの理由により、VFPBLならびにFPMQの解放が必要になった際に呼び出される。
【0045】
その他、CPUプログラム領域47には、上記ルーチンのサブルーチンとして、FPT検索依頼ルーチン44、VFPTD更新依頼ルーチン60が含まれる。これらのルーチンは、上記ルーチン以外から直接呼び出されることはない。
【0046】
図3Aは、IPU作業領域95内ブロック図を示す。IPU作業領域95は、VFPTD63を格納している。
図3Bは、CPU作業領域45内ブロック図を示す。CPU作業領域45は、VFPBL43、及びFPMQ46を格納している。IPU I/O領域84には、特にデータ構造は含まれない。
【0047】
図4は、CPU I/O領域108内ブロック図を示す。CPU I/O領域108には、各IPU55とコマンド・レスポンスを交換するためのSQ(Submission Queue)20、CQ(Completion Queue)23が、IPU55あたり一対ずつ格納されている。
【0048】
図5は、本実施例に係るFPT全体の構成例を示す。本実施例において、FPTは、VFPTD63、VFPBL43、FPMQ46の3種のテーブルを含む。
【0049】
VFPTD63は、IPU作業領域95に常時配置され、FPKの上位ビットを索引として、対応するVFPBL43のアドレスを与える。
図5では、FPKの上位12ビットから、32ビットのVFPBLアドレスを与えるVFPTD63の例を示しているが、FPKのうちVFPTD63の索引とするビット数に限りはなく、また、VFPBLアドレスのビット幅にも限りはない。
【0050】
IPUメモリ79の容量は、一般にメインメモリ76の容量より小さい。VFPTD63は、索引とするFPKのビット数によってはサイズが大きくなり、IPU作業領域95を圧迫する可能性がある。そのため、VFPTD63は、線形の配列ではなく、トライ木等の疎なデータ構造によって実装してもよい。VFPTD63のトライ木による実装方法は
図6で述べる。
【0051】
VFPTD63は、索引FPKに対応するVFPBL43がCPU作業領域45上に存在しないことを指示するために、無効なVFPBLアドレスとして特別な値を取ることができる。
図5では、無効アドレスとして-1を予約した例を示しているが、システムのメモリアドレス体系によっては、他の値を無効アドレスとしてもよい。
【0052】
IPU55がCPU64からのFPT検索要求に基づいて、FPKからVFPTD63を参照した結果、有効なVFPBLアドレスが得られた場合、IPU55は、DMA114を用いてCPU作業領域45から対応するVFPBL43をIPU作業領域95へ読み込む。必要なVFPBL43のみを読み込むことで、IPU作業領域95への圧迫を低減できる。
【0053】
一方、VFPTD63から得られたアドレスが無効なVFPBLアドレスであった場合、IPU55はCPU64に対してVFPBL43の確保を要求する。CPU64は、ボリューム49からFPMQ46を読み込み、読み込まれたFPMQ46のアドレスからVFPBL43を作成し、新しく作成したVFPBL43のアドレスを以ってIPU55に対してVFPTD63の更新と再検索を要求する。
【0054】
CPU作業領域45がデータキャッシュの増加等によって枯渇した場合は、VFPBL43やFPMQ46を解放し、領域を確保する必要に迫られる場合がある。その際は、全IPU55に対して各IPU作業領域95のVFPTD63から、該当するVFPBL43へのアドレスを削除し、無効アドレスに置き換えるよう要請する。その後、VFPBL43とFPMQ46を解放する。
【0055】
VFPBL43は、CPU作業領域45上に配置されたFPMQアドレスの配列である。ひとつのVFPBL43には、VFPTD63上で同一のエントリに対応する全FPMQ46のアドレスが格納されており、IPU55は、CPU作業領域45上のVFPBL43をDMA114によって参照することで、同じくCPU作業領域45上の各FPMQ46へのアドレスを取得することができる。
【0056】
なお、
図5では、32ビットのFPMQアドレスを格納する例を示しているが、FPMQアドレスのビット幅は32ビットに限らない。
【0057】
FPMQ46は、CPU作業領域45上に配置された配列であり、FPMQ46の各エントリは、FPKとLAの組で構成される。IPU55は、VFPBL43の参照によって取得したFPMQアドレスに基づいて、CPU作業領域45からIPU作業領域95へFPMQ46を読み込み、検索対象FPKと一致するFPKを含むFPMQエントリを検索する。FPK一致が検出された場合、IPU55はCPU64に対して、一致検出したエントリに格納されたLAを通知する。なお、一度の検索で複数のエントリに対して一致検出する可能性もあり、その場合は、一致検出した全エントリのLAをCPU64に対して通知する。
【0058】
先述の通り、FPMQ46は、CPU作業領域45の容量が枯渇した場合、メインメモリ76から解放されることがある。その後、改めて当該FPMQ46へのアクセスが要求された場合は、CPU64がボリューム49からの読み込みアクセスによってメインメモリ76上に再確保する。
【0059】
図5では、FPKとLAとしてそれぞれ32ビットの値を使用した例を示しているが、これらの値のビット幅は32ビットに限らない。
【0060】
図6は、本実施例に係るVFPTD63のトライ木による構成例を示す。
【0061】
先述の通り、VFPTD63を線形配列等として構成した場合、IPU作業領域95の容量が逼迫する可能性がある。そのため、VFPTD63は、一つ以上のルートノード53、任意個の中間ノード52、ならびに任意個のリーフノード55から構成されるトライ木として構成してもよい。このとき、VFPTD63の各ノードは、対応する桁の各値に対応する子ノードアドレスをテーブル61として持つ。
【0062】
リーフノード55のテーブル61は、VFPTD63内のノードを指す代わりに、VFPBL43を指す。
【0063】
例えば、
図6において、FPKの上位12ビット(16進トライ木における上位3桁)が245であった場合、まずルートノード53において最上位桁の値2に対応する子ノードアドレス0x25E27E6Dを参照することで、中間ノード52を読み込む。次に、読み込んだ中間ノード52のテーブル61で第2桁の値4に対応する子ノードアドレス0x5B74E72Bを参照してリーフノード55を読み込む。最後に、第3桁の値5に対応するVFPBL43アドレス0x1C34062Cを参照することで、245に対応するVFPBL43を読み込む。リーフノード55に格納されたアドレスは、IPU作業領域95ではなく、CPU作業領域45上のメモリ位置を指す点に注意されたい。
【0064】
なお、
図6では、16進かつ最大深さ3のトライ木としてVFPTD63を構成した例を示しているが、トライ木の基数は16でなくともよく、トライ木の深さは3でなくともよい。
【0065】
図7Aは、本実施例に係るSQ20の構成例を示す。
図7Bは、本実施例に係るCQ23の構成例を示す。
【0066】
SQ20は、CPU I/O領域108上に配置され、CPU64からIPU55に対して、コマンド23を受け渡す領域として機能する。
【0067】
SQ20はFIFO形式のリングバッファとして実装され、CPU64からIPU55に対して送信されるコマンド23はSQ20の先頭に追加され、SQの先頭位置を示すP-index32がインクリメントされる。IPU55はSQ20末尾からコマンド23を取り出し、SQ末尾位置を示すC-index29をインクリメントすることで、CPU64に対してコマンド23の受領を通知する。
【0068】
CQ23は、CPU I/O領域108上に配置され、IPU55からCPU64に対して、レスポンス59を受け渡す領域として機能する。
【0069】
CQ23はSQ20と同様にFIFO形式のリングバッファとして実装される。IPU55からCPU64に対して送信されるレスポンス59はCQ23の先頭に追加され、CQの先頭位置を示すP-index32がインクリメントされる。CPU64はCQ末尾からレスポンス59を取り出し、CQ末尾位置を示すC-index29をインクリメントすることで、IPU55に対してレスポンス59の受領を通知する。
【0070】
図8は、本実施例に係るFPRDT(Fingerprint Range Dispatch Table)15の構成例を示す。
【0071】
FPRDT15は、FPK範囲9と割当先ID12の2つのカラムを含むテーブルである。FPK範囲9にはFPKの区間が、割当先ID12には各FPK区間内のFPKに対するFPT検索の割り当て先IPU番号が格納されている。
【0072】
例えば
図8において、FPKの上位4ビットが0x2456であった場合には、当該FPKは0x2000-0x2FFFの区間内であるため、検索依頼先は0番のIPUとなる。
【0073】
また、割当先ID12カラムでは、特別な値として-1を格納することで、いずれのIPUに対しても検索を依頼せず、CPU64での検索を指定する。これにより、CPU64を含めて負荷分散が可能である。CPU64は、本明細書で説明するIPU55によるFPT検索処理と同法の方法で、FPT検索処理を実行できる。
【0074】
なお、
図8では、16ビットのFPKを16の区間に均等に分割した例を示しているが、FPKのサイズは16ビットとは限らず、FPKの分割数は16に限らない。また、FPKの区間分割は均等である必要はない。
【0075】
FPKの区間分割によってFTP検索処理の割り当て量を決定することで、IPUパッケージ104にキャッシュされている検索処理のための参照データを再利用可能な確率が増加し、FTP検索処理の全体効率を高めることができる。
【0076】
図9Aから9Cは、本実施例に係るFPRDT15に基づく負荷分散の例を示す。
【0077】
本実施例では、例えば、各時刻における各IPU55の負荷情報を、IPU負荷情報テーブル31に格納する。
図9AはIPU負荷情報テーブル31の構成例を示す。IPU負荷情報テーブル31は、複数のIPUそれぞれについて、最大処理能力、現在のIPU負荷率、現在のメモリ負荷率、及び現在のDMA負荷率を示す。負荷率は、各構成要素の性能の使用率を示す。例えば、IPU負荷率は時間当たりの演算量に基づき決定され、メモリ負荷率は、時間当たりのアクセス量に基づき決定され、DMA負荷率は時間当たりのデータ転送量に基づき決定され得る。
【0078】
IPUの処理能力と構成要素の処理能力及び負荷率とは、次のような関係を有する。CPU、メモリ及びDMAの最大処理能力は、IPUの最大処理能力と一致する。
図9Aの例においては、全てのIPUの最大処理能力は5であり、それらの各構成要素の最大処理能力も5である。各構成要素が発揮している(使用されている)処理能力は、その負荷率と最大処理能力の積である。余剰処理性能は、最大処理性能から現在の使用処理性能を現在した値である。なお、IPU間で最大処理能力が異なってもよい。
【0079】
CPU64は、後述のIPU負荷取得ルーチン30が送信するレスポンスの情報に基づき、各IPU55のIPU負荷率、メモリ負荷率、DMA負荷率を取得し、IPU負荷情報テーブル31の対応したカラムにそれぞれ格納する。IPU負荷情報テーブル31は、CPU作業領域45に格納され得る。
【0080】
一方で、CPU64は、各時刻におけるFPT検索負荷を取得し、FPT検索負荷情報テーブル28に記録する。
図9BはFPT検索負荷情報テーブル28の構成例を示す。FPT検索負荷情報テーブル28は、CPU作業領域45に格納され得る。
【0081】
FPT検索負荷情報テーブル28は、各時刻においてこれらから行うべきFPT検索処理の負荷と、FPT検索処理におけるCPU、メモリ及びDMAの負荷比を示す。
図9Bの例において、現在時刻においてこれから実行すべきFPT検索処理負荷は10である。この処理に必要なIPU処理能力は、10である。また、FPT検索処理において、CPU、メモリ及びDMAに係る負荷の比は、100:150:75である。つまり、メモリの負荷が最も高く、DMAの負荷が最も小さい。本例においては、全てのIPUに対して、負荷比が共通であるとするが、IPU間で負荷比が異なってもよい。
【0082】
CPU64は、IPU負荷情報テーブル31の情報と、FPT検索負荷情報テーブル28の情報を照合することで、各時刻でIPU資源の利用効率を最大化するよう、FPRDT15を更新する。
図9Cは、更新されたFPRDT15の構成例を示す。
【0083】
例えば、
図9Aから9Cに示した例では、0番のIPUは最大処理能力5を備えており、現時点のIPU負荷率は60%、メモリ負荷率は70%、DMA負荷率は50%である。したがって、FPT検索に利用可能な余剰処理能力は、CPUが2(5*0.4)、メモリが1.5(5*0.3)、DMAが2.5(5*0.5)となる。
【0084】
この例では、
図9Bに示すように、FPT検索はメモリが最も負荷が高くなる。そのため、0番のIPUにオフロード可能なFPT検索処理量は全体10のうち1となる。なお、FPT検索処理量は、1の単位でオフロードされるものとする。このとき、FPRDT15には、FPT検索処理全体の10分の1以下の処理量が、0番のIPUに割り当てられる。
【0085】
CPU64は、同様にIPU1番から3番までへのオフロード量を決定する。残った処理については、FPRDT15に無効なIPU番号として-1などを設定し、CPU64で処理させることで、IPU55のI/O処理性能には影響を及ぼすことなく、同時にIPU55の余剰資源を最大限有効活用してFPT検索性能を向上させることができる。
【0086】
【0087】
ステップS0101で、FPT検索ルーチン42は、FPT検索依頼ルーチン44を呼び出す。
【0088】
ステップS0102で、FPT検索ルーチン42は、CQ23からFPT検索依頼ルーチン44の検索結果を受信する。
【0089】
ステップS0103で、FPT検索ルーチン42は、ステップS0102で受信したFPT検索依頼ルーチン44の検索結果が、VFPTD63に無効アドレスが設定されていたことによる、VFPBL43の読み込み要求レスポンスであるかどうか確認する。
【0090】
ステップS0103で、受信したFPT検索依頼ルーチン44の検索結果がVFPBLの要求レスポンスであった場合、ステップS0105で、FPT検索ルーチン42は、VFPBL更新ルーチン56を呼び出し、VFPBL43ならびにVFPBLによって指示される全FPMQ46をボリューム49からCPU作業領域45上にロードし、結果をIPU55に通知する。その後、ステップS0101に戻り、FPT検索を再度IPU55に依頼する。
【0091】
ステップS0104で、FPT検索ルーチン42は、ステップS0102でIPU55から受信した検索結果でFPK一致が検出されていたかどうか判定する。
【0092】
ステップS0104で、FPK一致が検出されていた場合、ステップS0106で、FPT検索ルーチン42は、重複排除処理等を呼び出し、IPU55から受信した1以上のLAを渡して、処理を実施させる。重複排除処理の内容は、任意の方法を採用することができ、本稿ではその詳細を省略する。
【0093】
図11は、本実施例に係るFPT検索依頼フローを示す。
【0094】
ステップS0201で、FPT検索依頼ルーチン44は、FPT検索対象データのFPKを計算する。FPKは、データに対してハッシュ関数を適用することで計算される。ここで使用されるハッシュ関数の種別については本実施例で規定しないが、負荷が正しく分散されるために十分な一様性と無作為性を備えたハッシュ関数を使用できる。
【0095】
なお、FPKにハッシュ関数を適用し、FPKを計算する際は、CPU64もしくはIPU55に搭載されたアクセラレータを使用してもよい。
【0096】
ステップS0202で、FPT検索依頼ルーチン44は、FPT割当範囲テーブル15をメモリ上に読み込む。
【0097】
ステップS0203で、FPT検索依頼ルーチン44は、ステップS0101で計算したFPKの値を用いて、ステップS0202で読み込んだFPT割当範囲テーブル15をルックアップし、検索依頼対象となるIPU番号を決定する。
【0098】
ステップS0204で、FPT検索依頼ルーチン44は、ステップS0203でFPT割当範囲テーブル15から読み込んだIPU検索依頼先IDによって、FPT検索依頼先を決定する。
【0099】
ステップS0204で、FPT検索依頼先IDがいずれかのIPUに該当する場合、ステップS0205で、FPT検索依頼ルーチン44はIPU55にFPT検索を依頼するコマンドを作成する。
【0100】
ステップS0206で、FPT検索依頼ルーチン44は、ステップS0205で作成したFPT検索依頼コマンドを依頼先IPUのSQ20に格納することで、コマンドを送信する。FPT検索依頼コマンドを受信したIPU55は、VFPTD検索ルーチン18を起動する。
【0101】
一方、ステップS0204で、FPT検索依頼先IDがいずれのIPUにも該当しなかった場合、ステップS0207で、FPT検索依頼ルーチン44はIPU55にFPT検索を依頼する代わりに、CPU64でFPT検索を実行するためのルーチンを呼び出す。なお、当該ルーチンの詳細は、本稿では省略する。
【0102】
図12は、本実施例に係るVFPTD検索フローを示す。
【0103】
ステップS0300で、VFPTD検索ルーチン18は、CPU64からFPT検索依頼コマンドを受信する。
【0104】
ステップS0301で、VFPTD検索ルーチン18は、FPKの上位ビットを用いてVFPTD63を参照し、VFPBLアドレスを取得する。
【0105】
ステップS0302で、VFPTD検索ルーチン18は、ステップS0301で読み込まれたVFPBLアドレスが、CPU作業領域45内のメモリ位置を指す有効なアドレスかどうかを判定する。本例において、VFPBLアドレスが「-1」である場合、そのアドレスは無効なアドレスである。
【0106】
ステップS0302で判定結果が有効なVFPBLアドレスでない場合、CPU64によるVFPBL43の確保が必要であるため、ステップS0303で、VFPTD検索ルーチン18は、CPU64に対してVFPBL43の確保を求めるVFPBL要求レスポンスを作成する。
【0107】
ステップS0304で、VFPTD検索ルーチン18は、ステップS0303で作成したVFPBL要求レスポンスをCQ23に格納し、レスポンスをCPU64に対して送信する。その後、ステップS0300に戻り、次のコマンドを待機する。
【0108】
ステップS0302で判定結果が有効なVFPBLアドレスであった場合には、ステップS0305で、VFPTD検索ルーチン18は当該アドレスをパラメータとしてFPMQ検索ルーチン21を呼び出す。その後、ステップS0300に戻り、次のコマンドを待機する。
【0109】
図13は、本実施例に係るFPMQ検索フローを示す。
【0110】
ステップS0400で、FPMQ検索ルーチン21は、CPU作業領域45に配置されたVFPBL43を、DMA114によってIPU作業領域95に読み込む。
【0111】
ステップS0401で、FPMQ検索ルーチン21は、ステップS0400で読み込まれたVFPBL43の内容に基づいて、CPU作業領域45に配置されたFPMQ46を、DMA114によってIPU作業領域95に読み込む。例えば、VFPBL43が示す全てのアドレスのFPMQ46が読み込まれる。なお、VFPBL43が示すFPMQ46が順次読み込まれて、以下に説明する処理がFPMQ46毎に実行されてもよい。
なお、FPMQ46がCPU作業領域45上で複数の不連続領域に分割されて配置されている場合は、それらすべての領域をひとつのFPMQ46として取り扱うものとする。これら不連続領域に分散したCPU作業領域45上のFPMQ46をDMA114によってIPU作業領域95に読み込む際、DMAのギャザー機能等、複数領域に分割されたデータの転送を高速化する機能を用いてもよい。
【0112】
ステップS0402で、FPMQ検索ルーチン21は、ステップS0401でIPU作業領域95に読み込まれたFPMQ46の先頭エントリを取り出す。
【0113】
ステップS0403で、FPMQ検索ルーチン21は、取り出されたFPMQエントリのFPKと、検索対象FPKを比較する。
【0114】
ステップS0403で、FPMQエントリのFPKと検索対象FPKが一致しなかった場合、ステップS0404で、FPMQ検索ルーチン21は、現在のFPMQエントリがFPMQ中の最終エントリであるかどうかを判定する。それが最終エントリであった場合は、ルーチンの処理を終了する。
【0115】
ステップS0404で、現在のFPMQエントリがFPMQ中の最終エントリでなかった場合、ステップS0405で、FPMQ検索ルーチン21は、FPMQ46中で次のFPMQエントリを読み込み、ステップS0403に戻る。
【0116】
ステップS0403で、FPMQエントリ中のFPKと、検索対象FPKが一致した場合、ステップS0406で、FPMQ検索ルーチン21は、FPK検出をCPU64に通知するためのFPK一致検出レスポンスを作成する。FPK一致検出レスポンスは、一致する1以上のFPKそれぞれに関連付けられているLAを含む。
【0117】
ステップS0で、FPMQ検索ルーチン21は、ステップS0406で作成したFPK一致検出レスポンスをCQ23に格納し、CPU64に送信する。その後、ステップS0404に進む。なお、例えば、VFPTD検索がIPU55にオフロードされ、FPMQ検索はCPU64により実行されてもよい。検索されたVFPBLアドレスは、IPU55からCPU64に渡される。
【0118】
図14は、本実施例に係るVFPBL更新フローを示す。
【0119】
ステップS0501で、VFPBL更新ルーチン56は、呼び出し元から指示されたFPKに基づき、ボリューム49(ドライブ)からVFPBL43をCPU作業領域45へ読み込む。VFPBL43は、ボリューム49上で複数の不連続領域に分散して格納されている場合、それらすべての領域をまとめてひとつのVFPBL43として取り扱う。
【0120】
ステップS0502で、VFPBL更新ルーチン56は、ステップS0501でCPU作業領域45に読み込まれたVFPBL43に基づき、FPMQ46をCPU作業領域45に読み込む。
【0121】
ステップS0503で、VFPBL更新ルーチン56は、VFPTD更新依頼ルーチン60を呼び出し、各IPU55に対して、ステップS0501でCPU作業領域45上に読み込まれたVFPBL43のアドレスをVFPTD63へ追加するよう要求する。
【0122】
図15は、本実施例に係るVFPTD更新依頼フローを示す。
【0123】
ステップS0601で、VFPTD更新依頼ルーチン60は、FPT更新対象データのFPKを計算する。FPK計算には、FPT検索依頼ルーチン44と同様の方式を用いるものとする。
【0124】
ステップS0602で、VFPTD更新依頼ルーチン60は、ステップS0601で計算したFPKを用いて、FPT更新依頼コマンドを作成する。
【0125】
ステップS0603で、VFPTD更新依頼ルーチン60は、IPU IDカウンターを0でリセットする。
【0126】
ステップS0604で、VFPTD更新依頼ルーチン60は、IPU IDカウンターの値がIPU IDの最大値を上回っているかどうか判定する。
【0127】
ステップS0604で、IPU IDカウンターの値がIPU IDの最大値を上回っていなかった場合、ステップS0605で、VFPTD更新依頼ルーチン60は、IPU IDカウンターの値が指し示すIPU55に対して、VFPTD更新依頼コマンドを送信する。VFPTD更新依頼コマンドを受けたIPU55は、IPU作業領域95内のVFPTD63内で当該FPKに対応するエントリに、対象となるVFPBL43のアドレスを設定する。
【0128】
ステップS0606で、VFPTD更新依頼ルーチン60は、IPU IDカウンターの値をインクリメントしてステップS0604に戻る。
【0129】
ステップS0604で、IPU IDカウンターの値がIPU IDの最大値を上回っていた場合、VFPTD更新依頼ルーチン60は処理を終了する。
【0130】
【0131】
ステップS0701で、FPT更新ルーチン48は、FPT更新対象データのFPKを計算する。なお、FPKの計算はFPT検索ルーチン42と同様とする。
【0132】
ステップS0702で、FPT更新ルーチン48は、VFPTD更新依頼ルーチン60を呼び出し、ステップS0701で計算されたFPKに対応するVFPTDエントリを無効化するよう各IPU55に要求する。これは、以降のFPMQ46ならびにVFPBL43の更新操作中に、IPU55がこれらのデータ構造を参照し、無効なデータがIPU55へ読み出されてしまうのを防ぐための措置である。
【0133】
ステップS0703で、FPT更新ルーチン48は、ステップS0701で計算されたFPKをもとにして、FPMQ46を更新する。なお、FPMQ46の更新は、例えばCPU64が独自で管理するテーブルを参照するものとし、本稿では詳細を省略する。
【0134】
ステップS0704で、FPT更新ルーチン48は、ステップS0701で計算されたFPKをもとにして、VFPBL43を更新する。
【0135】
ステップS0705で、FPT更新ルーチン48は、更新後のVFPBLアドレスを用いて、再度VFPTD更新依頼ルーチン60を呼び出し、各IPU55が作業領域95に保持するVFPTD63に対して、更新後のVFPBLアドレスを反映させる。
【0136】
図17は、本実施例に係るIPU負荷取得フローを示す。
【0137】
ステップS0801で、IPU負荷取得ルーチン30は、IPU55のプロセッサ負荷を取得する。
【0138】
ステップS0802で、IPU負荷取得ルーチン30は、IPU55のメモリ負荷を取得する。
【0139】
ステップS0803で、IPU負荷取得ルーチン30は、IPU55のDMA負荷を取得する。
【0140】
ステップS0804で、IPU負荷取得ルーチン30は、ステップS0801、ステップS0802、ステップS0803で取得した負荷の情報に基づき、IPU負荷をCPU64に通知するIPU負荷通知レスポンスを作成する。
【0141】
ステップS0805で、IPU負荷取得ルーチン30は、ステップS0804で作成したIPU負荷通知レスポンスをCQ23に格納し、CPU64に送信する。
【0142】
ステップS0806で、IPU負荷取得ルーチン30は、一定期間ウェイトし、ステップS0801に戻る。
【0143】
図18は、本実施例に係るFPRDT更新フローを示す。
【0144】
ステップS0901で、FPRDT更新ルーチン54は、いずれかのIPU55からIPU負荷通知レスポンスを受信する。このレスポンスには、IPU負荷取得ルーチン30が取得したプロセッサ負荷、メモリ負荷、DMA負荷の情報が含まれている。
【0145】
ステップS0902で、FPRDT更新ルーチン54は、ステップS0901でIPU55から受信したレスポンスの情報に基づき、FPRDT15を更新する。FPRDT15の更新は、
図9Aから9Cを参照して説明した通りである。その後、FPRDT更新ルーチンは、ステップS0901に戻り、次のレスポンスを待機する。
【0146】
図19は、本実施例に係るVFPBL解放フローを示す。
【0147】
ステップS1001で、VFPBL解放ルーチン62は、VFPTD更新依頼ルーチン60を呼び出し、各IPU55に対して、FPTD中で当該FPKに対応するVFPBL43への参照を削除し、無効アドレスに置き換えるよう要求する。
【0148】
ステップS1002で、VFPBL解放ルーチン62は、CPU作業領域45からVFPBL43を解放する。
【0149】
ステップS1003で、VFPBL解放ルーチン62は、CPU作業領域45からFPMQ46を解放する。
【0150】
図20に、本実施例に係るVFPTD更新フローを示す。
【0151】
ステップS1101で、VFPTD更新ルーチン24は、CPU64からVFPTD更新依頼コマンドを受信する。
【0152】
ステップS1102で、VFPTD更新ルーチン24は、ステップS1101でCPU64から受信したVFPTD更新依頼コマンドに含まれるFPKと、それに対応するVFPBLアドレスに基づき、IPU作業領域95に配置されたVFPTD63を更新する。その後、次のVFPTD更新依頼コマンドを待機するため、ステップS1101に戻る。
【0153】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0154】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。
【0155】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0156】
55 I/Oプロセッサ
64 CPU
76 メインメモリ
79 IPUメモリ
84 ストレージシステム
104 IPUパッケージ
114 DMA