特許第5722225号(P5722225)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エルエスアイ コーポレーションの特許一覧

特許5722225性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合
<>
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000002
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000003
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000004
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000005
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000006
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000007
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000008
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000009
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000010
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000011
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000012
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000013
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000014
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000015
  • 特許5722225-性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合 図000016
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5722225
(24)【登録日】2015年4月3日
(45)【発行日】2015年5月20日
(54)【発明の名称】性能改善のためのRAIDボリュームとドライブ・グループとの間の疎結合
(51)【国際特許分類】
   G06F 3/06 20060101AFI20150430BHJP
【FI】
   G06F3/06 306Z
   G06F3/06 540
【請求項の数】6
【全頁数】20
(21)【出願番号】特願2011-534483(P2011-534483)
(86)(22)【出願日】2009年3月31日
(65)【公表番号】特表2012-507786(P2012-507786A)
(43)【公表日】2012年3月29日
(86)【国際出願番号】US2009001997
(87)【国際公開番号】WO2010051002
(87)【国際公開日】20100506
【審査請求日】2012年2月28日
【審判番号】不服2013-25866(P2013-25866/J1)
【審判請求日】2013年12月27日
(31)【優先権主張番号】12/290,590
(32)【優先日】2008年10月31日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】508243639
【氏名又は名称】エルエスアイ コーポレーション
(74)【代理人】
【識別番号】100087642
【弁理士】
【氏名又は名称】古谷 聡
(74)【代理人】
【識別番号】100082946
【弁理士】
【氏名又は名称】大西 昭広
(74)【代理人】
【識別番号】100121061
【弁理士】
【氏名又は名称】西山 清春
(74)【代理人】
【識別番号】100195693
【弁理士】
【氏名又は名称】細井 玲
(72)【発明者】
【氏名】ジェス,マーチン
【合議体】
【審判長】 小曳 満昭
【審判官】 白石 圭吾
【審判官】 乾 雅浩
(56)【参考文献】
【文献】 特開平10−133826(JP,A)
【文献】 特開平7−261945(JP,A)
【文献】 米国特許出願公開第2003/0088803(US,A1)
【文献】 特開平10−260789(JP,A)
【文献】 特開平11−085410(JP,A)
【文献】 特開2008−40687(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
(57)【特許請求の範囲】
【請求項1】
第1論理ボリューム(B)の複数のボリューム・ピースをドライブ・グループのドライブの第1セットに関連付けることと、
2論理ボリューム(A)の複数のボリューム・ピースを前記ドライブ・グループのドライブの第2セットに関連付けることと、前記ドライブの第1セットは、前記ドライブの第2セットと異なり、すべてのボリューム・ピースは、各ドライブが前記ドライブ・グループにおけるいずれ他のドライブと異なる組み合わせのボリューム・ピースを含むように分配され、前記ドライブ・グループにおけるドライブの前記第1セット及び前記ドライブ・グループにおけるドライブの前記第2セットが、少なくとも1つの共通ドライブ(2)を有することと、及び、
前記少なくとも1つの共通ドライブの何れかが故障したときに、前記故障した共通ドライブ上にあった前記第1論理ボリューム(B)のボリューム・ピース(B-2)を前記ドライブ・グループ内の前記第2論理ボリューム(A)のボリューム・ピースのみを含むドライブ(0, 1)のいずれか(1)に再構築することを含む方法。
【請求項2】
第1論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループのドライブの第1セットに関連付けることは、
ドライブの前記第1セット上のストレージ・スペースを前記第1論理ボリュームに割り振ること
をさらに含む、請求項1に記載の方法。
【請求項3】
ドライブの前記第1セット上のストレージ・スペースを前記第1論理ボリュームに割り振ることは、
ボリューム・ピース・サイズを前記第1論理ボリュームの前記1つまたは複数のボリューム・ピースに割り当てることと、
物理ドライブ・オフセットを前記第1論理ボリュームの前記1つまたは複数のボリューム・ピースに割り当てることと
をさらに含む、請求項2に記載の方法。
【請求項4】
前記第1論理ボリュームの前記1つまたは複数のボリューム・ピースの第1ボリューム・ピースの物理ドライブ・オフセットは、前記第1論理ボリュームの前記1つまたは複数のボリューム・ピースの第2ボリューム・ピースの物理ドライブ・オフセットとは異なる、請求項3に記載の方法。
【請求項5】
第1論理ボリューム(B)の複数のボリューム・ピースをドライブ・グループのドライブの第1セットに関連付けることと、
2論理ボリューム(A)の複数のボリューム・ピースを前記ドライブ・グループのドライブの第2セットに関連付けることと、前記ドライブの第1セットは、前記ドライブの第2セットと異なり、すべてのボリューム・ピースは、各ドライブが前記ドライブ・グループにおけるいずれ他のドライブと異なる組み合わせのボリューム・ピースを含むように分配され、前記ドライブ・グループにおけるドライブの前記第1セット及び前記ドライブ・グループにおけるドライブの前記第2セットが、少なくとも1つの共通ドライブ(2)を有することと、及び、
前記少なくとも1つの共通ドライブの何れかが故障したときに、前記故障した共通ドライブ上にあった前記第1論理ボリューム(B)のボリューム・ピース(B-2)をドライブの前記第1セット(2,3,4)またはドライブの前記第2セット(0,1,2)に含まれない前記ドライブ・グループ内のドライブ(5,6)のいずか(6)に再構築することとを含む方法。
【請求項6】
第1論理ボリューム(B)の複数のボリューム・ピースをドライブ・グループのドライブの第1セットに関連付ける手段と、
2論理ボリューム(A)の複数のボリューム・ピースを前記ドライブ・グループのドライブの第2セットに関連付ける手段とを含み、前記ドライブの第1セットは、前記ドライブの第2セットと異なり、
すべてのボリューム・ピースは、各ドライブが前記ドライブ・グループにおけるいずれ他のドライブと異なる組み合わせのボリューム・ピースを含むように分配され、前記ドライブ・グループにおけるドライブの前記第1セット及び前記ドライブ・グループにおけるドライブの前記第2セットが、少なくとも1つの共通ドライブ(2)を有し、及び、
前記少なくとも1つの共通ドライブの何れかが故障したときに、前記故障した共通ドライブ上にあった前記第1論理ボリューム(B)のボリューム・ピース(B-2)を前記ドライブ・グループ内の前記第2論理ボリューム(A)のボリューム・ピースのみを含むドライブ(0,1)のいずれか(1)に再構築するための手段、又は
前記少なくとも1つの共通ドライブの何れかが故障したときに、前記故障した共通ドライブ上にあった前記第1論理ボリューム(B)のボリューム・ピース(B-2)をドライブの前記第1セット(2,3,4)またはドライブの前記第2セット(0,1,2)に含まれない前記ドライブ・グループ内のドライブ(5,6)のいずれか(6)に再構築するための手段をさらに含むシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、RAIDおよびRAIDにまたがってボリューム・ピースを割り振る方法に関する。
【背景技術】
【0002】
ドライブ・グループは、ボリューム・データを格納するのに使用される関連するドライブの集まりとすることができる。ドライブ・グループに、RAIDレベルを割り当てることができ、RAIDレベルは、データ編成および冗長性モデルを定義する。RAIDボリュームは、データI/Oのターゲットにされる、ホストがアクセス可能な論理ユニットとすることができる。1つのドライブ・グループが、複数のボリュームを含むことができる。ドライブ・グループ内のすべてのボリュームは、物理ドライブの同一のセットを使用し、同一のRAIDレベルで機能する。
【0003】
ドライブ・グループのドライブが、異なる容量を含む場合がある。ボリューム・グループの使用可能容量は、ストレージ・アレイ構成データに予約された領域を除く、グループ内の最小のドライブに基づくRAIDファクタ容量(RAID factor capacity)とすることができる。ドライブ・グループの空き容量は、使用可能容量からすべての定義されたボリュームの容量を引いたものとすることができる。空きドライブ・グループ容量は、追加ボリュームの作成または既存ボリュームの容量の拡大に使用することができる。
【0004】
RAIDボリュームは、ドライブ・グループ内の各ドライブ上で1つの領域を占めることができる。RAIDボリュームの領域は、すべてが、ドライブの先頭からの論理ブロック・アドレス(LBA)単位の同一のオフセットおよびLBA単位の同一の長さを有することができる。所与のボリュームの一部とすることができる各そのような領域を、ピース(piece)と呼ぶ場合がある。あるボリュームのピースの集まりを、ボリューム・エクステントと呼ぶ場合がある。ドライブ・グループは、それぞれが同一のオフセットおよび長さを有するドライブ上の未使用容量の領域からなる1つまたは複数の空きエクステントを有することもできる。
【0005】
ドライブ・グループ内の物理ドライブの個数を、ドライブ・グループ幅と呼ぶ場合がある。幅は、ドライブ・グループ内のRAIDボリュームの性能とアクセシビリティとの両方に影響する。ドライブ・グループの幅が広ければ広いほど、より多くの物理スピンドルを並列に使用できるようになり、これは、ある種のホストI/Oプロファイルに関する性能を高める。しかし、ドライブ・グループの幅が広ければ広いほど、その物理ドライブのうちの1つが故障する危険性が高くなる可能性がある。
【0006】
セグメント・サイズは、ドライブ・グループの次のドライブにデータを書き込む前にコントローラが単一のドライブに書き込むデータの量とすることができる。ストライプは、ドライブ・グループの各ドライブ上に1つの、すべてがそのドライブの先頭からの同一オフセットを有する、セグメントの集まりとすることができる。その結果、1つのボリュームを、ストライプの集まりとみなすこともできる。
【0007】
図1および2に、n+1個のドライブからなるドライブ・グループを示す。ボリュームBは、n+1個のピース、B−0、B−1…B−nからなるものとすることができる。各ピースは、複数のセグメントを含む。たとえば、ピースB−0は、Seg−B0、Seg−B0…Seg−B0を含むことができる。ストライプは、ドライブにまたがり、たとえば、セグメントSeg−B0、Seg−B1…SegBnが、ストライプBを形成する。ボリュームBは、k+1個のストライプからなるものとすることができる。
【0008】
そのようなRAIDレイアウトは、ドライブ・グループ内のどのドライブ上のどの物理ドライブLBAが特定のRAIDボリューム仮想LBAに対応するのかを判定することが単純な計算になり得るという意味で、アルゴリズム的とすることができる。RAIDボリュームは、ドライブ・グループの幅がRAIDボリュームの幅を定義するので、ドライブ・グループに密に結合されると言うこともできる。
【0009】
ドライブ・グループ内の物理ドライブが、完全に故障し、したがって、そのドライブ上のデータがもはやアクセス可能ではなくなる場合がある。ドライブ・グループが、冗長性を有するRAIDレベルを含む(すなわち非RAID 0ドライブ・グループ)場合には、ホストがまだそのデータにアクセスできるのに十分なデータが、残りのドライブに残されている可能性がある。しかし、RAID 6および一部の固有のRAID 1/10の事例を除いて、ドライブ・グループは、故障したドライブが交換され、データが再構築されるまでは、もはや冗長性を含まない可能性がある。
【0010】
RAID 1/10について、再構築は、すべてのデータをミラー・ドライブから交換ドライブにコピーすることからなるものとすることができる。RAID 5について、この再構築は、ドライブ・グループ内の生き残っているドライブから各ストライプを読み取ること(すなわち、ドライブ・グループ幅−1個のセグメント)、パリティを使用して欠けているセグメントを計算すること、および回復されたセグメントを交換ドライブに書き込むことからなるものとすることができる。
【0011】
二重冗長性情報に起因して、欠けているセグメントをドライブ・グループ幅−2個のセグメントから計算できることを除いて、RAID 6 P+Qドライブ・グループでの単一ドライブ故障について、同一の手法に従うことができる。
【0012】
故障したドライブが交換され、再構築が完了するまでは、第2のドライブ故障は、ドライブ・グループが複数のドライブ故障を許容するように構成(たとえば、RAID 6)されない限り、ドライブ・グループ内のデータの完全な消失をもたらす。
【0013】
ストレージ・アレイは、ストレージ・アレイ内の未使用物理ドライブのプールをホット・スペアとして取り分けることができる。物理ドライブが、冗長RAIDレベル(すなわち、非RAID 0)を有するドライブ・グループ内で故障する時には、ストレージ・アレイは、ホット・スペア・ドライブのプールから交換ドライブを自動的に割り振り、ホット・スペア・ドライブ上で失われたデータの再構築を実行することができる。
【0014】
故障したドライブが交換された後に、ホット・スペア・ドライブの内容を、単純に交換ドライブにコピーすることができ、これは、コピーバックと呼ばれるプロセスである。コピーバックが完了した時に、ホット・スペアをホット・スペア・プールに戻すことができる。
【0015】
再構築を受けつつあるドライブに向けられたすべての書込は、そのプロセスの性能ボトルネックを生じる。その結果、影響を受けるドライブ・グループ内のすべてのRAIDボリュームに関するドライブ再構築中に、顕著な性能劣化がある可能性がある。
【0016】
さらに、物理ドライブ・サイズが増加し続けるので、単一のドライブの再構築時間は、劇的に増える。SATAドライブは、現在、1TBを超える容量を有する場合があり、そのデータのすべてが、再構築され、単一のホット・スペア/交換ドライブに書き込まれなければならない。これは、ホストが、影響を受けるドライブ・グループ内のRAIDボリュームについて経験する性能劣化を長くし、ドライブ・グループが冗長性を有しない可能性がある時間(たとえば、RAID 5ドライブ・グループについて)をも長くする。
【発明の概要】
【課題を解決するための手段】
【0017】
本開示は、RAID(redundant array of inexpensive discs)にまたがってボリューム・ピースを割り振るシステムおよび方法を説明する。
【0018】
RAID(redundant array of inexpensive discs)にまたがってボリューム・ピースを割り振る方法は、(a)第1論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループ内のドライブの第1セットに関連付けることと、(b)第2論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループ内のドライブの第2セットに関連付けることとを含むことができ、ドライブ・グループ内のドライブの第1セットは、ドライブ・グループ内のドライブの第2セットのメンバではない少なくとも1つのドライブを含む。
【0019】
RAID(redundant array of inexpensive discs)にまたがってボリューム・ピースを割り振るシステムは、(a)第1論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループ内のドライブの第1セットに関連付ける手段と、(b)第2論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループ内のドライブの第2セットに関連付ける手段とを含むことができ、ドライブ・グループ内のドライブの第1セットは、ドライブ・グループ内のドライブの第2セットのメンバではない少なくとも1つのドライブを含む。
【0020】
前述の全般的な説明と後続の詳細な説明との両方が、例示的かつ説明的であるのみであって、必ずしも特許請求の範囲について制限的ではない可能性があることを理解されたい。本明細書に組み込まれ、その一部を構成することができる添付図面は、例を示し、この全般的な説明と一緒に、本開示の原理を説明するように働く。
【0021】
本開示の多数の利益は、添付図面を参照することによって当業者によってよりよく理解され得る。
【図面の簡単な説明】
【0022】
図1】RAIDを示す高水準システム図である。
図2】RAIDを示す高水準システム図である。
図3】RAIDへのボリューム・ピースの割振りを示す高水準システム図である。
図4】RAIDを示す高水準システム図である。
図5】RAIDを示す高水準システム図である。
図6】RAIDを示す高水準システム図である。
図7】高水準動作流れ図である。
図8】高水準動作流れ図である。
図9】高水準動作流れ図である。
図10】高水準動作流れ図である。
図11】高水準動作流れ図である。
図12】高水準動作流れ図である。
図13】高水準動作流れ図である。
図14】高水準動作流れ図である。
図15】高水準動作流れ図である。
【発明を実施するための形態】
【0023】
次の詳細な説明では、その一部を形成する添付図面を参照する場合がある。図面では、文脈がそうではないと規定しない限り、同様の記号が、通常は同様のコンポーネントを識別する。詳細な説明、図面、および特許請求の範囲で説明される例示的実施形態は、限定的であることを意図されていない場合がある。本明細書で提示される主題の趣旨または範囲から逸脱せずに、他の実施形態を利用することができ、他の変更を行うことができる。
【0024】
図3を参照すると、コンピューティング・デバイス301、RAIDコントローラ302、およびRAID 303を含むマス・ストレージ・システム300の例示的表現が示されている。RAIDコントローラ302は、ボリューム管理回路網/ソフトウェアを含むことができ、これによって、RAIDコントローラ302は、RAID 303上で構成されたさまざまな論理ボリュームにアクセスするコンピューティング・デバイス301の読取要求/書込要求を処理することができる。RAID 303は、n個のドライブを有するドライブ・グループを含むことができる。
【0025】
RAID 303のRAIDボリューム・ピースを、前に説明した1:1結合ではなく、ドライブ・グループに疎結合することができる。これを、下の例で例示することができる。
【0026】
図4を参照すると、3つのRAIDボリューム(たとえば、ボリュームA、B、およびC)を、6つのドライブのドライブ・グループ上に配置することができる。各RAIDボリュームは、3つのボリューム・ピース(たとえば、それぞれボリューム・ピースA−0、A−1、およびA−2、ボリューム・ピースB−0、B−1、およびB−2、ならびにボリューム・ピースC−0、C−1、およびC−2)を含むことができる。
【0027】
各RAIDボリュームは、関連するRAIDボリューム幅を有することができる。RAIDボリューム幅は、ドライブ・グループ内のドライブの個数に関わりなく、RAIDボリューム内のピースの個数として定義することができる。
幅(RAIDボリューム)≦幅(ドライブ・グループ)
である場合がある。
【0028】
たとえば、図3に示されているように、RAID 303は、6のドライブ・グループ幅(たとえば、ドライブ0から6まで)および3のボリューム幅を有することができる。
【0029】
RAID 303は、アルゴリズム的レイアウトとすることができる。伝統的なドライブ・グループ関連付けのほかに、RAIDボリュームを、そのRAIDボリュームがその上でピースを含むことのできる各物理ドライブに関連付けることができる。たとえば、図3に示されているように、RAIDボリュームAを、ドライブ0、ドライブ1、およびドライブ2に関連付けることができ、ボリュームBを、ドライブ2、ドライブ3、およびドライブ4に関連付けることができる。
【0030】
各ピースを、そのそれぞれの物理ドライブの先頭からのそれ自体のオフセットに関連付けることもできる。RAIDボリューム内のさまざまな異なるピースは、RAIDボリューム・サイズの増分で、それに関連する物理ドライブの先頭からの異なるオフセットを有することができる。たとえば、図3に示されているように、1Mbなどの所与のボリューム・ピース・サイズを有するボリューム・ピースB−0、ボリューム・ピースB−1、およびボリューム・ピースB−2は、それぞれドライブ3、4、および2内で0、0、および1Mbのオフセットを有することができる。
【0031】
さらに、同一ドライブ・グループ内のさまざまなボリュームは、異なるピース・サイズを有することができる。たとえば、ボリュームAは、サイズが1Mbのボリューム・ピースを含むことができ、ボリュームBは、サイズが2Mbのボリューム・ピースを含むことができる。したがって、ボリューム・ピースC−1は、1Mbのオフセットを有することができ、ボリューム・ピースC−2は、2Mbのオフセットを有することができる。
【0032】
このオフセット情報から、特定のRAIDボリューム仮想LBAに対応する特定の物理ドライブ上の物理LBAを計算することができる。
【0033】
そのようなピース分配は、ユーザが、ドライブ・グループ幅以下の可変幅のRAIDボリュームをサポートできる所与のRAIDレベルを有するより幅広いドライブ・グループを定義することを可能にすることができる。RAIDボリューム幅とドライブ・グループ幅との間の差が大きければ大きいほど、ドライブ・グループにわたるRAIDボリューム・ピースの分配をよりよいものにすることができる。
【0034】
RAIDボリュームが作成される時に、各物理ドライブがドライブ・グループ内の任意の他のドライブとは異なるピースの組合せを含むことができるように、ピースを分配することができる。より形式的には、あるドライブ上の各ピースを、そのRAIDボリューム内の残りのピースを含むドライブのセットとすることができるその再構築セット(RS)に関連付けることができる。ドライブ内のピースのすべての再構築セットが互いに素である場合には、対象のドライブ内の各ピースを、そのドライブ上の他のピースとは独立に再構築することができる(すなわち、ドライブ再構築を並列に行うことができる)。
【0035】
ドライブ・グループ内の各ドライブ上のすべてのピースが、互いに素の再構築セットを有する場合には、そのドライブ・グループは再構築に関して完全に互いに素であると言うことができる。これは、どのドライブが故障するかに関わりなく、そのピースのすべてを、ドライブの互いに素のセットから再構築できることを意味する。
【0036】
もう一度図4を参照すると、ピースの理想的な分配が提示されている。そのような分配では、物理ドライブは、ドライブ・グループ内のすべての他のドライブと同一のピースの組合せを含まないものとすることができる。そのような構成でドライブが故障する場合には、ピースを再構築するために読み取られるドライブの個数は、RAIDボリューム幅よりはるかに多い。たとえば、ドライブ2が故障する場合に、ドライブ0およびドライブ1は、ピースA−2を再構築するためのピース(すなわち、ピースA−0およびA−1)を含むことができ、ドライブ3およびドライブ4は、ピースB−2を再構築するためのピース(すなわち、ピースB−0およびB−1)を含むことができる。したがって、ストレージ・アレイは、再構築を実行している間に2つではなく4つのドライブから読み取ることができる。
【0037】
そのような構成は、ドライブ2上で維持されるピースA−2およびB−2のそれぞれの再構築セット(RS)によって定義することができる。
RS(A−2)={ドライブ0,ドライブ1}
RS(B−2)={ドライブ3,ドライブ4}
【0038】
さらなる実施形態では、前に提示した専用のホット・スペア手法の使用を変更することができる。たとえば、あるドライブ・グループ内のドライブが故障する時に、そのピースを、単一の専用ホット・スペアではなくそのドライブ・グループ内の残りのドライブにまたがって再分配することができる。これは、複数のボリュームからのピースが同一のホット・スペア上で再構築される必要がある専用のホット・スペアに関連するボトルネックを回避するように働くことができる。本発明を用いると、可能なときに、ピースを別々のドライブ上で再構築することができる。さらに、そのような再分配は、同一のRAIDボリュームからの2つのピースが同一の物理ドライブ上に行き着かないことを保証する。
【0039】
ドライブ・グループは、そのドライブ・グループ内の任意のドライブが故障し、それでも、そのドライブ・グループ内のいずれかのドライブに故障したドライブのピースを保持するのに十分な空きエクステントがあるものとすることができるのに十分な空き容量がそのドライブ・グループにあるものとすることができるときに、1のホット・スペア・カバレージを有すると言うことができる。言い換えると、最大の使用済み容量を有するドライブが故障する場合に、システムは、それでもドライブ・グループ内の残りのドライブ上でそのピースを再構築することができる(すなわち、そのドライブ上のすべてのピースを保持するのに十分な空きエクステントが、ドライブ・グループ内のドライブにある)。さらに、ドライブ・グループ内の最大のピースを保持するのに十分に大きい空きエクステント(そのピースがある可能性があるドライブには関わりなく)が、維持されなければならない。
【0040】
ドライブ・グループは、そのドライブ・グループ内のn個のドライブが故障し、それでも、故障したドライブ内のすべてのピースをそのドライブ・グループ内の空きエクステント内で再構築できるのに十分な容量がそのドライブ・グループにあるときに、nのホット・スペア・カバレージを有すると言うことができる。これが、必ずしも、データ消失なしでn個のドライブが同時に故障し得ることを意味しないことに留意されたい。たとえば、RAID 5ドライブ・グループが、2のホット・スペア・カバレージを含むが、2つの最も負荷の重いドライブが、同一RAIDボリュームからのピースを含み、両方のドライブが故障する場合には、そのRAIDボリュームは、そのドライブ・グループがどれほどの空き容量を有するかに関わりなく、もはやアクセス可能ではなくなる可能性がある。
【0041】
ユーザは、ドライブ・グループの所望のホット・スペア・カバレージ、すなわち1、2…nを定義することができる。あるボリュームを作成できるときに、ストレージ・アレイは、構成されたホット・スペア・カバレージを維持できるという制約を伴ってではあるが、分配ができる限り理想に近くなることができるように、ピースを分配することができる。RAIDボリュームの作成が、ホット・スペア・カバレージを減らす場合には、ユーザに警告し、RAIDボリューム作成を進めることに付随する結果を明示的に確認するように要求することができる。
【0042】
さらに、再構築がRAIDボリュームに課す性能劣化は、再構築を実行することからの負荷を伝統的な手法よりも多数のドライブにまたがって分散させることができ、その結果、再構築を並列の形で実行できるようになるので、かなり減らされる。
【0043】
ドライブ再構築は、そのすべてのピースの再構築がドライブ・グループ内の別々のドライブで発生し得る場合に、並列であると言うことができる。ドライブ再構築は、それを並列にすることができ、ピースがその上で再構築されるドライブのどれもがそのドライブのピースの再構築セットに含まれるドライブとオーバーラップしない場合に、完全に並列と言うことができる。これは、ドライブが故障する場合に、各ピースを、読取と書込との両方に関してドライブ上の他のすべてのピースと独立に再構築できることを意味する。
【0044】
たとえば、図5を参照すると、完全に並列の分配の例が提示されている。ドライブ2の故障の場合には、ピースA−2を、すべての他の進行中のピース再構築に参加しないドライブ5上でピースA−0およびA−2(それぞれドライブ0およびドライブ1に常駐する)から再構築することができる。同様に、ピースB−2を、ドライブ6上でピースB−0およびB−1(それぞれドライブ3および4に常駐する)から再構築することができる。そのような構成では、所与のドライブは、読取動作または書込動作のいずれかだけの対象になる。
【0045】
図6を参照すると、部分的に並列の分配の例が提示されている。ドライブ2の故障の場合には、ピースA−2を、すべての他の進行中のピース再構築に参加しないドライブ5上で、ピースA−0およびA−1(それぞれドライブ0およびドライブ1に常駐する)から再構築することができる。同様に、ピースB−2を、ドライブ1上でピースB−0およびB−1(それぞれドライブ3およびドライブ4に常駐する)から再構築することができる。しかし、ドライブ1は、ピースA−2を再構築するために読み取られつつもあり、したがって、この分配での再構築は、部分的に並列であるに過ぎない。
【0046】
RAIDボリューム幅とドライブ・グループ幅との間の差が大きければ大きいほど、完全に並列のドライブ再構築を可能にする構成がある可能性がより高くなる。余分のドライブをドライブ・グループに追加して、容量および幅を増やすことができ、したがって、再構築をできる限り速く発生させることができる。
【0047】
あるドライブがドライブ・グループに追加される時には、必ず、ストレージ・アレイは、ユーザ定義のホット・スぺア・カバレージを維持しながら完全に並列の特性を示すピースの理想的分配により近くなるために、既存ドライブからピースを選択し、それらを新しいドライブに移動することができる。
【0048】
そのレイアウトがオリジナルの密結合されたRAIDレイアウトに戻って劣化するようにRAIDボリュームを定義することが可能である場合があることに留意されたい。たとえば、RAID 5ドライブ・グループが、3つの未使用の1TBドライブを含むことができ、ユーザが、幅3および容量=3×1TB−3×構成データ用に予約される容量のRAIDボリュームを定義する場合である。この場合には、ストレージ・アレイは、1つのボリューム・ピースを各1TBドライブに割り振ることができ、すべての再構築は、伝統的なレイアウトと正確に同様に発生する。その結果、発明的特徴を十分に利用するために、ユーザは、各ピースが他のボリュームからの他のピースとドライブを共有するのに十分に小さくなることができるようになる幅を有するボリュームを定義しなければならない。
【0049】
図7に、RAIDにまたがってボリューム・ピースを割り振ることに関連する例の動作を表す動作フロー700を示す。図7および動作フローのさまざまな例を含む後続の図では、議論および説明が、図3〜6の上で説明した例に関しておよび/または他の例および文脈に関して提供される場合がある。しかし、動作フローを、複数の他の環境および文脈で、ならびに/または図3〜6の変更された版で実行できることを理解されたい。また、さまざまな動作フローが、図示のシーケンス(1つまたは複数)で提示されるが、さまざまな動作を、図示された順序とは異なる順序で実行することができ、あるいは、同時に実行できることを理解されたい。
【0050】
開始動作の後に、動作710は、第1論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループ内のドライブの第1セットに関連付けることを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースA−0、A−1、およびA−2)をドライブの第1セット(たとえば、それぞれドライブ0、ドライブ1、およびドライブ2)に関連付けさせることができる。
【0051】
動作720は、第2論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループ内のドライブの第2セットに関連付けることを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースB−0、B−1、およびB−2)をドライブの第2セット(たとえば、それぞれドライブ3、ドライブ4、およびドライブ2)に関連付けさせることができる。
【0052】
ドライブの第1セット(たとえば、ボリュームBに関連するドライブ0、ドライブ1、およびドライブ2)は、ドライブ・グループ内のドライブの第2セット(たとえば、ボリュームBに関連するドライブ3、ドライブ4、およびドライブ2)のメンバではない少なくとも1つのドライブ(たとえば、ドライブ0)を含むことができる。
【0053】
図8に、図7の例の動作フロー700の代替実施形態を示す。図8は、関連付ける動作710が少なくとも1つの追加の動作を含むことができる例の実施形態を示す。追加の動作は、動作802、動作804、および/または動作806を含むことができる。
【0054】
動作802は、ドライブの第1セット上のストレージ・スペースを第1論理ボリュームに割り振ることを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、ドライブの第1セット(たとえば、ドライブ0、ドライブ1、およびドライブ2)上のストレージ・スペースを、所与の論理ボリューム(たとえば、ボリュームA)に関連するデータを格納するために割り振らせることができる。RAIDコントローラ302は、さまざまなメモリ・アドレスを所与のボリュームのメンバ・アドレスとして割り当てることができる。
【0055】
動作804は、第1論理ボリュームの1つまたは複数のボリューム・ピースにボリューム・ピース・サイズを割り当てることを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、ボリューム・ピース(たとえば、ボリューム・ピースB−2)にメモリ・サイズ(たとえば、1Mb)を割り当てさせることができる。特定のボリューム内の1つまたは複数のボリューム・ピースのボリューム・ピース・サイズは、共通のサイズ(たとえば、1Mb)を有することができる。すべてのボリューム(たとえば、ボリュームA、ボリュームB、およびボリュームC)のボリューム・ピース・サイズは、すべてが共通のサイズ(たとえば、1Mb)を有することができる。
【0056】
その代わりに、同一ドライブ・グループ内の異なるボリュームが、異なるサイズを与えられたピースを有することができる(たとえば、ボリュームAが1Mbのサイズのボリューム・ピースを有することができ、ボリュームBが2Mbのサイズのボリューム・ピースを有することができる)。RAIDコントローラ302は、ボリュームのそれぞれのピースを追跡するボリュームごとのメタデータと、各ピースのサイズおよびドライブの先頭からのオフセット(セクタ/論理ブロック単位)とを維持することができる。
【0057】
動作806は、第1論理ボリュームの1つまたは複数のボリューム・ピースに物理ドライブ・オフセットを割り当てることを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、ボリューム・ピースに物理ドライブ・オフセットを割り当てさせることができる。オフセットは、ドライブの物理的先頭からのボリューム・ピースの最初のアドレスのオフセットを定義することができる。オフセットは、ボリューム・ピースの最初のアドレスが物理ドライブの先頭からそれだけオフセットされる、複数のボリューム・ピースのサイズの増分を含むことができる。たとえば、図3に示されているように、ボリューム・ピースB−2は、ドライブ2の先頭に関して1Mbのオフセットを有することができる。
【0058】
所与の論理ボリュームの第1ボリューム・ピースの物理ドライブ・オフセット(たとえば、ボリューム・ピースB−0は、0の物理ドライブ・オフセットを有することができる)は、その論理ボリュームの第2ボリューム・ピースの物理ドライブ・オフセットと異なるものとすることができる(たとえば、ボリューム・ピースB−2は、1の物理ドライブ・オフセットを有することができる)。
【0059】
図9に、図7の例の動作フロー700の代替実施形態を示す。図9は、動作フロー700が少なくとも1つの追加の動作を含むことができる例の実施形態を示す。追加の動作は、動作910を含むことができる。
【0060】
動作910は、ドライブ・グループ内のドライブの第2セットの1つまたは複数のドライブに第1論理ボリュームの1つまたは複数のボリューム・ピースを再構築することを示す。たとえば、図3〜6に示されているように、1つまたは複数のボリューム(たとえば、ボリュームB)のボリューム・ピースを含むドライブ(たとえば、ドライブ2)故障時に、RAIDコントローラ302は、RAID 303に、1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースB−2)を対象ボリュームの別のピースを含まないドライブ(たとえば、ボリュームAのピースだけを含むドライブ1)に再構築させることができる。
【0061】
図10に、図7の例の動作フロー700の代替実施形態を示す。図10は、動作フロー700が少なくとも1つの追加の動作を含むことができる例の実施形態を示す。追加の動作は、動作1010を含むことができる。
【0062】
動作1010は、第1論理ボリュームの1つまたは複数のボリューム・ピースをドライブの第1セットまたはドライブの第2セットに含まれない1つまたは複数のドライブに再構築することを示す。たとえば、図3〜6に示されているように、1つまたは複数のボリューム(たとえば、ボリュームAおよびボリュームB)のボリューム・ピースを含むドライブ(たとえば、ドライブ2)故障時に、RAIDコントローラ302は、RAID 303に、故障したドライブの1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースA−2およびボリューム・ピースB−2)を、故障したドライブのボリュームの別のピースを含まないドライブに再構築させることができる(たとえば、1つまたは複数のボリューム・ピースA−2およびボリューム・ピースB−2を、ボリュームCのピースだけを含むドライブ5に再構築することができる)。
【0063】
図11に、図7の例の動作フロー700の代替実施形態を示す。図11は、動作フロー700が少なくとも1つの追加の動作を含むことができる例の実施形態を示す。追加の動作は、動作1110を含むことができる。
【0064】
動作1110は、ホット・スペア・カバレージ値を定義することを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、コンピューティング・デバイス301から入力(たとえば、ユーザ入力)を受け取ることができ、あるいは、ホット・スペア・カバレージ値を自動的に定義する内部回路網を含むことができる。ドライブ・グループは、そのドライブ・グループ内のn個のドライブが故障し、それでも、故障したドライブのすべてのピースをそのドライブ・グループ内の空きエクステント内で再構築できるのに十分な容量がそのドライブ・グループにあるときに、nのホット・スペア・カバレージを有すると言うことができる。たとえば、図3〜6に示されているように、RAID 303は、最大の使用済み容量を有するドライブ(たとえば、ドライブ0、ドライブ2、およびドライブ3)が残りのドライブに再構築されるのに十分なドライブ・スペースが存在する時に、1のホット・スペア・カバレージ値を有することができる(たとえば、ドライブ1、ドライブ4、またはドライブ5は、ドライブ0、ドライブ2、またはドライブ3の再構築に対処するのに十分なストレージ・スペースを有しなければならない)。さらに、ドライブ・グループ内で最大のピースを保持するのに十分に大きい空きエクステントを維持することができる(たとえば、ボリューム・ピースA−0がボリューム・ピースC−1より大きい場合に、少なくともボリューム・ピースAと同程度に大きい空きエクステントが必要である可能性がある)。ドライブ・グループは、そのドライブ・グループ内のn個のドライブが故障し、それでも、故障したドライブのすべてのピースをそのドライブ・グループ内の空きエクステント内で再構築できるのに十分な容量がそのドライブ・グループにあるときに、nのホット・スペア・カバレージを有すると言うことができる。
【0065】
図12に、RAIDにまたがってボリューム・ピースを割り振ることに関連する例の動作を表す動作流れ図1200を示す。図12および動作フローのさまざまな例を含む後続の図では、議論および説明が、図3〜6の上で説明した例に関してならびに/または他の例および文脈に関して提供される場合がある。しかし、動作フローを、複数の他の環境および文脈で、ならびに/または図3〜6の変更された版で実行できることを理解されたい。また、さまざまな動作フローが、図示のシーケンス(1つまたは複数)で提示されるが、さまざまな動作を、図示された順序とは異なる順序で実行することができ、あるいは、同時に実行できることを理解されたい。
【0066】
開始動作の後に、動作1210は、第1論理ボリュームの第1ボリューム・ピースについて再構築セットを定義することを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、第1論理ボリュームの第1ボリューム・ピースについて再構築セットを定義させることができる。再構築セットは、そのRAIDボリューム内の残りのピースを含むドライブのセットを含むことができる。たとえば、ボリューム・ピースA−2の再構築セットを、ドライブ0およびドライブ1とすることができる。
【0067】
動作1220は、第1論理ボリュームのボリューム・ピースに関する再構築セットに従って、第2論理ボリュームのボリューム・ピースをドライブ・グループ内のドライブに割り当てることを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、第1論理ボリュームの1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースA−0、ボリューム・ピースA−1、およびボリューム・ピースA−2)を1つまたは複数のドライブ(たとえば、それぞれドライブ0、ドライブ1、およびドライブ2)に割り当てさせることができる。RAIDコントローラ302は、RAID 303に、第1論理ボリュームのボリューム・ピースと第2論理ボリュームのボリューム・ピースとのオーバーラップが最小化されるように、第2論理ボリュームの1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースB−0、ボリューム・ピースB−1、および/またはボリューム・ピースB−2)を1つまたは複数のドライブに割り当てさせることができる。
【0068】
図13に、図12の例の動作フロー1200の代替実施形態を示す。図13は、定義する動作1210が少なくとも1つの追加の動作を含むことができる例の実施形態を示す。追加の動作は、動作1302を含むことができる。
【0069】
動作1302は、第1論理ボリュームの第1ボリューム・ピースとは別個の第1論理ボリュームの1つまたは複数のボリューム・ピースを含むドライブ・グループ内のドライブのセットを定義することを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、RAID 303に、第1論理ボリュームの第1ボリューム・ピースに関する再構築セットを定義させることができる。再構築セットは、そのRAIDボリューム内の残りのピースを含むドライブのセットを含むことができる。たとえば、ボリューム・ピースA−2の再構築セットを、ドライブ0およびドライブ1とすることができる。
【0070】
さらに、あるドライブ・グループ内の複数のボリュームのボリューム・ピースに関する再構築セットを、互いに素とすることができる(たとえば、そのドライブ・グループ内のすべてのドライブが、特定のボリュームからの多くとも1つのボリューム・ピースを含む)。
【0071】
図14は、図12の例の動作フロー1200の代替実施形態を示す。図14は、動作フロー1200が少なくとも1つの追加の動作を含むことができる例の実施形態を示す。追加の動作は、動作1410、動作1412、および/または動作1414を含むことができる。
【0072】
動作1410は、第1論理ボリュームのボリューム・ピースの再構築セットに従って第1論理ボリュームのボリューム・ピースを再構築することを示す。たとえば、図3〜6に示されているように、1つまたは複数のボリューム(たとえば、ボリュームB)のボリューム・ピースを含むドライブ(たとえば、ドライブ2)故障時に、RAIDコントローラ302は、RAID 303に、1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースB−2)を対象ボリュームの別のピースを含まないドライブ(たとえば、その再構築セットに含まれないドライブ)に再構築させることができる。
【0073】
動作1412は、第1論理ボリュームの1つまたは複数のボリューム・ピースをドライブ・グループ内のドライブの第2セットの1つまたは複数のドライブに再構築することを示す。たとえば、図3〜6に示されているように、1つまたは複数のボリューム(たとえば、ボリュームB)のボリューム・ピースを含むドライブ(たとえば、ドライブ2)故障時に、RAIDコントローラ302は、RAID 303に、1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースB−2)を対象ボリュームの別のピースを含まないドライブ(たとえば、ボリュームAのピースだけを含むドライブ1)に再構築させることができる。
【0074】
動作1414は、第1論理ボリュームの1つまたは複数のボリューム・ピースをドライブの第1セットまたはドライブの第2セットに含まれない1つまたは複数のドライブに再構築することを示す。たとえば、図3〜6に示されているように、1つまたは複数のボリューム(たとえば、ボリュームAおよびボリュームB)のボリューム・ピースを含むドライブ(たとえば、ドライブ2)故障時に、RAIDコントローラ302は、RAID 303に、故障したドライブの1つまたは複数のボリューム・ピース(たとえば、ボリューム・ピースA−2およびボリューム・ピースB−2)を、故障したドライブのボリュームの別のピースを含まないドライブに再構築させることができる(たとえば、1つまたは複数のボリューム・ピースA−2およびボリューム・ピースB−2を、ボリュームCのピースだけを含むドライブ5に再構築することができる)。
【0075】
図15は、図12の例の動作フロー1200の代替実施形態を示す。図15は、動作フロー1200が少なくとも1つの追加の動作を含むことができる例の実施形態を示す。追加の動作は、動作1510を含むことができる。
【0076】
動作1510は、ホット・スペア・カバレージ値を定義することを示す。たとえば、図3〜6に示されているように、RAIDコントローラ302は、コンピューティング・デバイス301から入力(たとえば、ユーザ入力)を受け取ることができ、あるいは、ホット・スペア・カバレージ値を自動的に定義する内部回路網を含むことができる。ドライブ・グループは、そのドライブ・グループ内のn個のドライブが故障し、それでも、故障したドライブのすべてのピースをそのドライブ・グループ内の空きエクステント内で再構築できるのに十分な容量がそのドライブ・グループにあるときに、nのホット・スペア・カバレージを有すると言うことができる。たとえば、図3〜6に示されているように、RAID 303は、最大の使用済み容量を有するドライブ(たとえば、ドライブ0、ドライブ2、およびドライブ3)が残りのドライブに再構築されるのに十分なドライブ・スペースが存在する時に、1のホット・スペア・カバレージ値を有することができる(たとえば、ドライブ1、ドライブ4、またはドライブ5は、ドライブ0、ドライブ2、またはドライブ3の再構築に対処するのに十分なストレージ・スペースを有しなければならない)。さらに、ドライブ・グループ内で最大のピースを保持するのに十分に大きい空きエクステントを維持することができる(たとえば、ボリューム・ピースA−0がボリューム・ピースC−1より大きい場合に、少なくともボリューム・ピースAと同程度に大きい空きエクステントが必要である可能性がある)。ドライブ・グループは、そのドライブ・グループ内のn個のドライブが故障し、それでも、故障したドライブのすべてのピースをそのドライブ・グループ内の空きエクステント内で再構築できるのに十分な容量がそのドライブ・グループにあるときに、nのホット・スペア・カバレージを有すると言うことができる。
【0077】
本発明およびそれに付随する利益の多くが、前述の説明によって理解されると思われる。また、本発明の趣旨および範囲から逸脱せずに、あるいはその本質的利益のすべてを犠牲にすることなく、さまざまな変更を、本発明のコンポーネントの形態、構成、および配置において行えることが明白であると思われる。本明細書で前に説明された形態は、単にその例示的実施形態である。そのような変更を包含し、含むことを、後続の特許請求の範囲の意図とすることができる。
【0078】
前述の詳細な説明は、ブロック図、流れ図、および/または例の使用を介するデバイスおよび/またはプロセスのさまざまな実施形態を含む場合がある。そのようなブロック図、流れ図、および/または例が、1つまたは複数の機能および/または動作を含む限り、当業者は、そのようなブロック図、流れ図、または例の中の各機能および/または動作を、個別におよび/または集合的に、さまざまなハードウェア、ソフトウェア、ファームウェア、または事実上すべてのその組合せによって実施できることを理解するであろう。一実施形態では、本明細書で説明される主題の複数の部分を、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、ディジタル信号プロセッサ(DSP)、または他の集積フォーマットを介して実施することができる。しかし、当業者は、本明細書で開示される実施形態のいくつかの態様を、全体的にまたは部分的に、集積回路内で、1つまたは複数のコンピュータ上で動作する1つまたは複数のコンピュータ・プログラムとして(たとえば、1つまたは複数のコンピュータ・システム上で動作する1つまたは複数のプログラムとして)、1つまたは複数のプロセッサ上で動作する1つまたは複数のプログラムとして(たとえば、1つまたは複数のマイクロプロセッサ上で動作する1つまたは複数のプログラムとして)、ファームウェアとして、あるいは事実上すべてのその組合せとして、同等に実施できることと、回路を設計することならびに/あるいはソフトウェアおよび/またはファームウェアのコードを記述することが、本開示に照らして、十分に当業者の技量に含まれることとを認めるであろう。
【0079】
さらに、当業者は、本明細書で説明される主題の機構を、さまざまな形のプログラム製品として配布され得るものとすることができることと、本明細書で説明される主題の例示的実施形態が、配布を実際に実行するのに使用される信号担持媒体の特定のタイプに関わりなく適用されることとを了解するであろう。信号担持媒体の例は、フロッピ・ディスク、ハード・ディスク・ドライブ、コンパクト・ディスク(CD)、ディジタル・ビデオ・ディスク(DVD)、ディジタル・テープ、コンピュータ・メモリ、その他などの記録可能型媒体と、ディジタル通信媒体および/またはアナログ通信媒体(たとえば、光ファイバ・ケーブル、導波管、有線通信リンク、無線通信リンク(たとえば、送信器、受信器、送信論理、受信論理、その他)、その他)などの伝送型媒体とを含むが、これらに限定はされない可能性がある。
【0080】
当業者は、技術的現状が、システムの諸態様のハードウェア実施態様、ソフトウェア実施態様、および/またはファームウェア実施態様の間に差がほとんど残されていない可能性がある点まで進歩した可能性があり、ハードウェア、ソフトウェア、および/またはファームウェアの使用を、一般に(しかし、ある種の文脈でハードウェアとソフトウェアとの間の選択が重要になる場合があるという点で必ずではない)、費用対効率のトレードオフを表す設計選択とすることができることを認めるであろう。当業者は、本明細書で説明されたプロセスおよび/またはシステムおよび/または他のテクノロジを実現できるさまざまな手段(たとえば、ハードウェア、ソフトウェア、および/またはファームウェア)がある可能性があることと、好ましい手段が、そのプロセスおよび/またはシステムおよび/または他のテクノロジを展開できる文脈に伴って変化することとを了解するであろう。たとえば、ある実装者が、速度および正確さが主要である可能性があると判定する場合に、その実装者は、主にハードウェアおよび/またはファームウェアの手段を選ぶことができ、その代わりに、柔軟性が主要である可能性がある場合には、実装者は、主にソフトウェアの実施態様を選ぶことができ、あるいは、その代わりに、実装者は、ハードウェア、ソフトウェア、および/またはファームウェアのある組合せを選ぶことができる。したがって、本明細書で説明されたプロセスおよび/またはデバイスおよび/または他のテクノロジをそれによって実現できる複数の可能な手段がある場合があり、それらの手段のどれもが、利用される任意の手段をその手段が展開される文脈および実装者の特定の懸念(たとえば、速度、柔軟性、または予測可能性)(このいずれもが変化し得る)に依存する選択とすることができるという点で、他の手段より本質的に優れるものではない可能性がある。当業者は、実施態様の光学的態様が、通常は光学指向のハードウェア、ソフトウェア、および/またはファームウェアを使用することを認めるであろう。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15