(57)【要約】      （修正有）【課題】ベクトルプロセッサにおいて、１または複数の変換が実行されたデータを１または複数のストレージデバイスに格納する処理を高速化する技術を提供する。【解決手段】ベクトルプロセッサにおいて、データ格納要求を受信することと、ベクトルプロセッサによって、データに１または複数の変換を実行することと、ベクトルプロセッサによって、１または複数のストレージデバイスにデータを格納するように直接命令することとを備える。【選択図】図１
2020038650.tif 000002
【特許請求の範囲】
【請求項１】
ベクトルプロセッサにおいて、データ格納要求を受信することと、
前記ベクトルプロセッサによって、前記データに１または複数の変換を実行することと、
前記ベクトルプロセッサによって、１または複数のストレージデバイスに、前記データを格納するように直接命令することと
を備える方法であって、
前記データに１または複数の変換を実行することは、
データフラグメントのうちの任意のｋ個が前記データを再生成するために使用可能であるように構成されたｎ個の前記データフラグメントを生成するために前記データを消去符号化することであって、ｋはｎ未満であることを備え、
前記１または複数のストレージデバイスに前記データを格納するように直接命令することは、
前記１または複数のストレージデバイスに、複数のデータフラグメントを格納するように直接命令することを備える、方法。
【請求項２】
前記ベクトルプロセッサによって、前記データに１または複数の変換を実行することは、
前記ベクトルプロセッサによって、前記データに１または複数の可逆変換を実行することから成る、請求項１に記載の方法。
【請求項３】
前記データに１または複数の変換を実行することは、前記データの暗号ハッシュを計算することを更に備え、
前記１または複数のストレージデバイスに前記データを格納するように直接命令することは、１または複数のストレージデバイスに、前記データの前記暗号ハッシュを格納するように直接命令することを備える、請求項１または請求項２に記載の方法。
【請求項４】
前記データに１または複数の変換を実行することは、前記データ格納要求に関連する格納イベントをロギングすることを備える、請求項１〜請求項３のいずれか１項に記載の方法。
【請求項５】
前記データに１または複数の変換を実行することは、前記データを暗号化および／または圧縮することを備える、請求項１〜請求項４のいずれか１項に記載の方法。
【請求項６】
前記データに１または複数の変換を実行することは、前記１または複数の変換に用いられるように構成された１または複数のプラグインを識別することを備える、請求項１〜請求項５のいずれか１項に記載の方法。
【請求項７】
前記データフラグメントを前記１または複数のストレージデバイスに格納することは、前記ベクトルプロセッサによって、ストレージデバイスに、前記データフラグメントのうちの少なくともｋ個を格納するように命令することを備え、ｋは、前記データを再生成するために用いられ得るデータフラグメントの最小数である、請求項１〜請求項６のいずれか１項に記載の方法。
【請求項８】
前記ベクトルプロセッサにおいて、前記データ格納要求を受信することは、前記ベクトルプロセッサによって実行中のカーネルにおいて書込み命令を実行することを備える、請求項１〜請求項７のいずれか１項に記載の方法。
【請求項９】
前記１または複数のストレージデバイスに前記データを格納するように直接命令する前に、前記ベクトルプロセッサによって、前記データを不揮発性メモリに格納することを更に備える、請求項１〜請求項８のいずれか１項に記載の方法。
【請求項１０】
１または複数のストレージデバイスに前記データを格納するように直接命令することは、複数のストレージデバイスに並行して前記データを格納するように直接命令することを備える、請求項１〜請求項９のいずれか１項に記載の方法。
【請求項１１】
ベクトルプロセッサにおいて、データ取出し要求を受信することと、
１または複数のストレージデバイスに、前記１または複数のストレージデバイスから前記データに関連する複数のデータフラグメントを取り出すように直接命令することと、
前記ベクトルプロセッサによって、前記データを取得するために前記データフラグメントに１または複数の変換を実行することと
を備える方法であって、
前記複数のデータフラグメントは、ｎ個の消去符号化データフラグメントの中の少なくともｋ個のデータフラグメントを備え、前記データフラグメントのうちの任意のｋ個が前記データを再生成するために使用可能であり、ｋはｎ未満であり、
前記データを取得するために前記データフラグメントに１または複数の変換を実行することは、前記データを生成するために少なくともｋ個のデータフラグメントを消去復号することを備える、方法。
【請求項１２】
前記データに１または複数の変換を実行することは、前記データ取出し要求に関連する取出しイベントをロギングすることを備える、請求項１１に記載の方法。
【請求項１３】
前記データフラグメントに１または複数の変換を実行することは、前記データを暗号解読および／または圧縮解除することを備える、請求項１１または請求項１２に記載の方法。
【請求項１４】
前記データフラグメントに１または複数の変換を実行することは、前記１または複数の変換に用いられるように構成された１または複数のプラグインを識別することを備える、請求項１１〜請求項１３のいずれか１項に記載の方法。
【請求項１５】
前記１または複数のストレージデバイスから前記データに関連する複数のデータフラグメントを取り出すように前記１または複数のストレージデバイスに直接命令することは、
前記１または複数のストレージデバイスに、前記データに関連するデータフラグメントの要求を送信することと、
前記要求の１または複数に応答して、前記ベクトルプロセッサにおいて、前記データに関連する少なくとも１つのデータフラグメントを受信することと
を備える、請求項１１〜請求項１４のいずれか１項に記載の方法。
【請求項１６】
前記データフラグメントの要求はメモリアドレスを備え、少なくとも１つのデータフラグメントを受信することは、
前記メモリアドレスに関連するメモリを読み取ることと、
前記メモリに格納された前記データが前記データを生成するために用いられ得る場合、前記少なくとも１つのデータフラグメントが受信されたと決定することと
を備える、請求項１５に記載の方法。
【請求項１７】
データ取出し要求を受信することは、前記ベクトルプロセッサによって実行中のカーネルにおいて読取り命令を実行することを備える、請求項１１〜請求項１６のいずれか１項に記載の方法。
【請求項１８】
１または複数のベクトルプロセッサと、
メモリと
を備えるシステムであって、
前記メモリは、前記１または複数のベクトルプロセッサによって実行されるとき、請求項１〜請求項１７のいずれか１項に記載の方法を実行するように前記１または複数のベクトルプロセッサを構成する命令を備える、システム。
【請求項１９】
１または複数のベクトルプロセッサによって実行されるとき、前記１または複数のベクトルプロセッサに請求項１〜請求項１７のいずれか１項に記載の方法を実行させる命令を備える、１または複数の非一時的コンピュータ可読媒体。
【請求項２０】
１または複数のベクトルプロセッサによって実行されるとき、前記１または複数のベクトルプロセッサに請求項１〜請求項１７のいずれか１項に記載の方法を実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、ベクトルプロセッサ格納に関する。
【背景技術】
【０００２】
従来のコンピュータシステムは、１または複数のＣＰＵ（中央処理装置）を備える。そのようなシステムにおけるＣＰＵの１つの役割は、システムの様々な周辺機器を管理することである。
【０００３】
たとえば、データがストレージデバイスに格納され、ストレージデバイスから取り出されることは一般的である。ＣＰＵは、ストレージコントローラに、ストレージからデータを取り出して特定のメモリアドレスに書き込むように命令し、ストレージコントローラに、データをストレージに書き込むように命令してよい。したがってＣＰＵは従来、任意のデータ格納および取出しに関与する。よって、たとえばＧＰＵ（画像処理装置）上など、コンピュータシステム内のどこかでプログラムが実行されている場合でも、制御は一般に、データ格納および取出しを処理するためにＣＰＵに戻る。場合によっては、これはＧＰＵで実行中の計算を遅延させ、全体的に緩慢なコンピュータシステムをもたらし得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
第１の実施形態例において、ベクトルプロセッサにおいて、データ格納要求を受信することと、ベクトルプロセッサによって、データに１または複数の変換を実行することと、ベクトルプロセッサによって、１または複数のストレージデバイスにデータを格納するように直接命令することとを備える方法であって、データに１または複数の変換を実行することは、データフラグメントのうちの任意のｋ個がデータを再生成するために使用可能であるように構成されたｎ個のデータフラグメントを生成するためにデータを消去符号化することを備え、ｋはｎ未満であり、１または複数のストレージデバイスにデータを格納するように直接命令することは、１または複数のストレージデバイスに複数のデータフラグメントを格納するように直接命令することを備える方法が提供される。
【０００５】
第２の実施形態例において、ベクトルプロセッサにおいて、データ取出し要求を受信することと、１または複数のストレージデバイスに、１または複数のストレージデバイスからデータに関連する複数のデータフラグメントを取り出すように直接命令することと、ベクトルプロセッサによって、データを取得するためにデータフラグメントに１または複数の変換を実行することとを備える方法であって、複数のデータフラグメントは、ｎ個の消去符号化されたデータフラグメントの中の少なくともｋ個のデータフラグメントを備え、データフラグメントのうちの任意のｋ個がデータを再生成するために使用可能であり、ｋはｎ未満であり、データを取得するためにデータフラグメントに１または複数の変換を実行することは、データを生成するために少なくともｋ個のデータフラグメントを消去復号することを備える方法が提供される。
【０００６】
添付図面は本明細書の一部を成し、いくつかの実施形態を例示することが意図される。図面は、上述した概要および後述する実施形態の詳細な説明とともに、それらの実施形態を説明するものである。
【図面の簡単な説明】
【０００７】
【図１】１つの実施形態に係る、データを格納するベクトルプロセッサに関連する方法のフローチャートを示す。
【図２】１つの実施形態に係る、データを取り出すベクトルプロセッサに関連する方法のフローチャートを示す。
【図３】符号化されたデータがいつメモリに書き込まれたかをベクトルプロセッサが決定することに関連する方法のフローチャートを示す。
【図４】コンピュータシステム例のブロック図を示す。
【図５】不揮発性メモリを有するコンピュータシステム例のブロック図を示す。
【図６】多数のストレージデバイスを有するコンピュータシステム例のブロック図を示す。
【図７】ストレージデバイス例のブロック図を示す。
【図８】ベクトルプロセッサ例のブロック図を示す。
【発明を実施するための形態】
【０００８】
いくつかの実施形態において、ベクトルプロセッサは、１または複数のストレージデバイスからデータを読み取り、１または複数のストレージデバイスへデータを書き込むために用いられてよく、これは、ベクトルプロセッサがストレージデバイスと直接インタフェース接続することによって起こり得る。
【０００９】
ベクトルプロセッサは、ベクトルプロセッサ上でドライバを起動することによってこれを実現してよい。ドライバは、（たとえばＣＰＵまたは他のデバイスから）データを取り出す、または格納するための命令を受信する長期実行カーネルであってよい。ベクトルプロセッサはその後、ストレージデバイスと直接インタフェース接続し、たとえば符号化または復号、暗号化または暗号解読、またはロギングなど任意の必要な計算を実行してよい。ＣＰＵは、カーネルを起動するためまたはベクトルプロセッサへ命令を送信するために関与し得るが、ベクトルプロセッサは、ストレージデバイスとの通信に関与しなくてよい。
【００１０】
１つの実施形態において、ベクトルプロセッサがデータ格納要求を受信すると、データは、ストレージデバイスでの格納のために変換される。他の実施形態において、ベクトルプロセッサがデータ読取り要求を受信すると、ストレージデバイスからデータが直接取り出され、データを取得するために変換される。このようにベクトルプロセッサは、ＣＰＵが必ずしもベクトルプロセッサとストレージデバイスとの間のインタラクションを仲介せずとも、ストレージコントローラとして機能し得る。
データ格納要求の受信
【００１１】
図１は、１つの実施形態に係る、データを格納するベクトルプロセッサに関連する方法１００のフローチャートを示す。
【００１２】
ステップ１０１において、ベクトルプロセッサは、データ格納要求を受信する。
【００１３】
要求は、ベクトルプロセッサ上で実行中のカーネルからの書込み命令の形式であってよい。この書込み命令は、ベクトルプロセッサが、第１のメモリアドレスにおいて格納されたデータをストレージに書き込まなければならないことを示す。第１のメモリアドレスは、コンピュータシステム内の任意のプロセッサからアクセス可能なアドレス空間内の仮想メモリアドレスであってよい。書込み命令は、データが格納されるべき場所を指定する必要はなく、データがどのように格納されるかの詳細に関してベクトルプロセッサが責任を負うという条件の下、ベクトルプロセッサに一般的にデータを格納するように単純に命令する。
【００１４】
いくつかの実施形態において、書込み命令は、コンピュータシステム内の他の構成要素からの命令に基づいて実行される。たとえば、ベクトルプロセッサ上で実行中の長期実行カーネルは、命令がアドレスに書き込まれたかを決定するために、構成要素に関連する所定の仮想メモリアドレスをポーリングしてよい。これが起こると、カーネルはベクトルプロセッサに、そのアドレスまたは第２の所定の仮想メモリアドレスに格納されたデータを用いて書込み命令を実行させてよい。
【００１５】
「データ」という用語は、一般に任意のサイズのデータを指すために用いられるが、特に、データのブロックを指してよい。すなわちこれは、たとえば４０９６バイトなどのファイルシステムブロックサイズに対応するデータ量であってよい。すなわち、データ格納要求は、データのブロックを格納する要求であってよい。
データの変換
【００１６】
ステップ１０２において、ベクトルプロセッサは、データに１または複数の変換を実行する。変換は、暗号化、符号化、圧縮、重複排除、またはロギングの１または複数を含んでよい。
【００１７】
変換は、設定可能なプラグインとして指定され得る。これらは、特定の実装要件に基づいて選択され得る。たとえば、第１の実装は、ある程度の暗号化を必要としてよく、第２の実装は、暗号化を一切必要としなくてよい。
【００１８】
これらは、ドライバにおいて、使用可能なプラグインのセットから特定のプラグインが適用されるべきであることを設定することによって指定され得る。場合によっては、プラグインは、指定されたパラメータに基づいて設定され得る。たとえば符号化プラグインの場合、パリティレベルはプラグインにおいて調整され得る。
【００１９】
ベクトルプロセッサは最初に、データにアクセスする。これは、第１のメモリアドレスに格納されたデータを、たとえばベクトルプロセッサローカルメモリなどのメモリに対応する第２のメモリアドレスへコピーすることを伴ってよい。このコピーは、自動的に行われ得る。たとえば、ベクトルプロセッサが、ユニファイドメモリに対応する仮想メモリアドレスにアクセスすると、データは、メインメモリからベクトルプロセッサメモリへ転送され得る。
【００２０】
ベクトルプロセッサはその後、データを変換する。これらの変換は、逆関数を実行することによってオリジナルコンテンツが復元され得るような可逆変換であってよい。たとえば暗号化、符号化、圧縮、重複排除、および更なる情報の追加は通常、逆関数によってオリジナル情報が取得され得るため、可逆関数である。変換は、所定の順序で実行され得る。たとえば暗号化は、符号化より前に実行され得る。
【００２１】
１つの変換は、データの暗号化であってよい。これは、ＲＳＡ、ＡＥＳ、または他の任意の適切な暗号化アルゴリズムを用いて実行され得る。これは、基礎となるストレージデバイスが損なわれた場合にデータが読み取られることを回避し得る。
【００２２】
別の変換は、データをデータフラグメントに分割する前に誤り訂正符号を使用することによりデータにパリティ情報を追加することによってデータを符号化することであってよい。これによって、いくつかのフラグメントが誤っている場合でも、フラグメントに基づいてオリジナルデータを再現することが可能である。この誤り訂正符号は、いくつかのフラグメントが完全に失われた場合でもオリジナルデータを再現することを可能にする消去符号であってよい。
【００２３】
リードソロモン符号は、消去符号の一例である。たとえばブロックなどのデータは、リードソロモンアルゴリズムを用いて複数のコードワードを形成するように符号化される。各コードワードはｎ個のシンボルを備え、これらのうちｋ個はオリジナルデータからの情報を搬送し、残りは計算され、オリジナルデータを再構成するために用いられ得る。各コードワードは、データフラグメントを形成するために分割され得る。パリティｎ−ｋは、データの種類、システムデフォルト、ユーザ嗜好、または他の任意の適切なアプローチに基づいて選択され得る。リードソロモン符号の働きにより、最大ｎ−ｋ個のフラグメントが失われた場合でも、オリジナルデータが取得され得る。
【００２４】
たとえば、２：１のパリティを用いるリードソロモン符号の場合、オリジナルデータの２単位ごとに追加された１単位のパリティ情報が存在する。これは、１つのフラグメントが失われた場合でも、任意の２つの他のフラグメントからオリジナルデータが再生成され得ることを意味する。１５：５のパリティは、オリジナルデータの１５単位ごとに追加された５単位のパリティが存在することを指す。任意の５つのフラグメントが失われた場合、残りの２０のフラグメントのうち任意の１５からオリジナルデータが再生成され得る。
【００２５】
したがってベクトルプロセッサは、データフラグメントの任意のｋ個がデータを再生成するために用いられ得るようにｎ個のデータフラグメントを形成するためにデータを符号化してよく、ｋはｎ以下である。
【００２６】
一般により高いパリティは、データが復元不可能になる前により多い数のデータフラグメントが失われ得ることを意味する。また、実際のデータに対するパリティデータのより高い比率は、所与の誤り耐性に関して格納されたデータの全体量を低減し得る。ただし、一般により高いパリティは、符号化に必要な計算のレベルを指数関数的に増大させる傾向がある。
【００２７】
またこれは、データに基づいて暗号ハッシュを計算すること、およびそれをデータの一部として符号化することを含んでよい。
【００２８】
更なる変換は、イベントログにおける格納イベントのログを取ることであってよい。これは、データのタイムスタンプおよび暗号ハッシュを含んでよい。ロギングは、格納されているデータに影響を及ぼさないが、変換の順序のためにデータの変換として扱われ得る。
【００２９】
変換を実行するためにベクトルプロセッサを用いることによって、ＣＰＵを用いることに比べて、比較的高品質の変換がより効率的に実行され得る。たとえば符号化の場合、高レベルのパリティが用いられ得る。またこれは、実質的にリアルタイムで行われ得るため、変換が（たとえば、格納に数ミリ秒未満の時間を追加することで）格納プロセスを著しく遅延させることはない。
データの格納
【００３０】
ステップ１０３において、ベクトルプロセッサは、１または複数のストレージデバイスにデータを格納する。データが複数のデータフラグメントに変換された場合、これらのデータフラグメントが１または複数のストレージデバイスに格納され得る。
【００３１】
格納は一般に、１または複数のストレージデバイスに、データの少なくとも一部（たとえばデータフラグメントの１または複数など）を格納するように直接命令することを伴う。この場合、直接命令することは、ＣＰＵの仲介なしで命令することを意味する。たとえばベクトルプロセッサは、データの少なくとも一部をメモリ内に配置し、ローカルストレージ周辺機器に、ダイレクトメモリアクセスを用いてそのメモリからデータを読み取って格納するように命令してよい。あるいはベクトルプロセッサは、たとえば遠隔サーバなどの遠隔ストレージシステムへデータを送信するようにＮＩＣに命令してよい。いずれの場合も、ベクトルプロセッサと周辺機器との間のインタラクションは、ＣＰＵの関与なく、または最小限の関与で起こり得る。たとえばＣＰＵの関与は、周辺機器にアクションを実行させるためにドライバを起動することに限られ得る。
【００３２】
複数のストレージデバイスが並行して命令され得る。これは、ベクトルプロセッサが、少なくとも２つのデバイスに同時にデータのそれぞれの部分を格納するように命令することを意味する。
【００３３】
「ストレージデバイス」は、データを格納するために用いられ得る任意のデバイスを指す。これは、たとえばハードディスクドライブまたはソリッドステートドライブなど従来のストレージデバイスを含んでよいが、（データがネットワークを介してシステムに格納されることを可能にする）ネットワークデバイスまたは（更なるストレージデバイスに接続される）ストレージコントローラも含み得る。したがってストレージデバイスは、必ずしもストレージデバイスにデータをローカルに格納するデバイスに限定されるわけではない。
【００３４】
ベクトルプロセッサは、ストレージデバイスがデータフラグメントの格納を確認することを必要とし得る。これは、ストレージデバイスがメモリアドレスに確認を書き込むことによって起こり得る。ベクトルプロセッサは、適切な確認が出現するまで、このアドレスを継続的にポーリングしてよい。あるいはベクトルプロセッサは単純に、ストレージデバイスからデータフラグメントを読み取ろうと試みてよい。読取りがデータフラグメントを提供した場合、それが、データフラグメントが格納されたという確認である。
【００３５】
場合によっては、全てではなく一部のストレージデバイスが対応するデータフラグメントの格納を確認することが許容される。たとえば、ｎ個のデータフラグメントが存在するが、データを再現するためにｋ個のデータフラグメントしか必要ではない場合、ｋ個の（またはｋより大きくｎ未満の数の）データフラグメントに対応するストレージデバイスが格納を確認することに十分であり得る。この場合、残りのデータフラグメントが格納されなくても、少なくともｋ個のデータフラグメントが格納されたので、オリジナルデータは再生成され得る。
【００３６】
あるいは、データ損失の確率が閾値を下回る場合、確認は省略され得る。たとえば発見的解析は、データ損失が１０億回のデータ格納イベントに１回未満しか生じないことを示し得る。この場合、これは、速度を最大化するために許容可能なリスクと思われ得る。
【００３７】
場合によっては、データフラグメントは（たとえば不揮発性メモリ内に）キャッシュされ得る。データフラグメントは、キャッシュされると、確認されたとみなされ得る。実際の確認が受信されると、データフラグメントはキャッシュから消去され得る。
【００３８】
確認が受信されると（または任意選択的に、格納命令が送信されると）、ベクトルプロセッサは、メタデータレジスタを更新してよい。これは、少なくともデータフラグメントが格納されるアドレスにデータをリンクし得る。データは、データの名称またはハッシュによって識別され得る。追加または代替として、データ（またはデータの名称）は、ストレージデバイスの１または複数においてメタデータにリンクされてよく、あるいはデータフラグメントのハッシュに基づいて格納されることによって自己記述され得る。
【００３９】
ステップ１０３へ続き、ベクトルプロセッサは、データが格納されたことを確認してよい。この確認の形式は、オリジナル格納要求がどのように起動されたかに依存する。たとえばこれは、カーネルが所定のメモリアドレスから確認を読み取ることを介して起こり得る。
データ取出し要求の受信
【００４０】
図２は、１つの実施形態に係る、データを取り出すベクトルプロセッサに関連する方法２００のフローチャートを示す。
【００４１】
ステップ２０１において、ベクトルプロセッサは、データ取出し要求を受信する。
【００４２】
要求は、ベクトルプロセッサ上で実行中のカーネルからの読取り命令の形式であってよい。この読取り命令は、ベクトルプロセッサが、ストレージから特定のデータを読み取り、それを第１のメモリアドレスに書き込まなければならないことを示す。第１のメモリアドレスは一般に、ユニファイドメモリアドレスである。データは、名称または場所によって識別され得る。名称の場合、これはオリジナルデータのハッシュであってよい。
【００４３】
いくつかの実施形態において、読取り命令は、別の構成要素からの命令に基づいて実行される。たとえば、ベクトルプロセッサ上で実行中の長期実行カーネルは、コンピュータシステムの別の構成要素が所定の値をアドレスに書き込んだかを決定するために、所定の仮想メモリアドレスをポーリングしてよい。これが起こると、カーネルはベクトルプロセッサに、そのアドレスまたは１または複数の第２の所定の仮想メモリアドレス内に格納されたデータを用いて読取り命令を実行させてよい。
フラグメントの取出し
【００４４】
ステップ２０２において、ベクトルプロセッサは、要求に関連するデータを取り出す。
【００４５】
これは、たとえば先行ステップ１０２における符号化中に生成され、先行ステップ１０３において格納された複数のデータフラグメントなど、データの複数の部分を取り出すことを伴ってよい。データフラグメントは、消去符号化されたデータフラグメントであってよい。
【００４６】
場合によっては、ベクトルプロセッサは、データフラグメントの第１のセットを要求してよい。第１のセットは、データに対応する全てのデータフラグメントであってよく、あるいはデータを再生成するために十分な数であってよい。
【００４７】
必ずしも全てのフラグメントがデータを再生成するために取り出される必要はないので、ベクトルプロセッサは、ストレージデバイスのサブセットに、対応するフラグメントを提供するように命令するのみでよい。
【００４８】
１つのストレージデバイスがオリジナルデータを再生成するために十分なフラグメントを保持する場合、要求は最初にそのストレージデバイスのみへ送信され得る。これは、フラグメントが１つのソースから取得され得るため、待ち時間の少ない要求をもたらし得る。
【００４９】
場合によっては、ベクトルプロセッサは、データフラグメントが特定のストレージデバイスから入手不可能であることを決定してよい。これはたとえば、ストレージデバイスが故障している場合、データフラグメントを提供する第１のストレージデバイスにおける予想遅延が（適切なモデルによって評価されたように）閾値を上回る場合、ストレージデバイスとの通信リンクが故障している場合、または他の任意の理由によってストレージデバイスからデータフラグメントを取り出せない場合、起こり得る。
【００５０】
そのような場合、ベクトルプロセッサは、更なるデータフラグメントを取得するために他のデバイスへ更なる命令を送信してよい。
【００５１】
あるいは命令は、複数のストレージデバイスへ送信され得る。これは並行して起こり得る。識別子に対応するフラグメントを格納している任意のストレージデバイスが、その後、応答してよい。ストレージデバイスの１つが第２のベクトルプロセッサである場合、第２のベクトルプロセッサは、第２のベクトルプロセッサと通信状態にある任意の更なるストレージデバイスへ命令を更に送信してよい。この方法では、いくつかのストレージデバイスが緩慢に応答するか、あるいは使用不可能である場合でも、要求を再現するために十分なフラグメントが比較的短期間で提供される可能性が高い。
データの生成
【００５２】
ステップ２０３において、ベクトルプロセッサは、オリジナルデータを取得するために、取り出したデータを変換する。これは、ステップ１０２において実行された変換を逆にするように変換を実行することによって起こる。変換は、暗号解読、復号、圧縮解除、逆重複排除、またはロギングの１または複数を含んでよい。
【００５３】
たとえば、取り出したデータが、リードソロモンアルゴリズムを用いて符号化されたデータフラグメントを備える場合、適切な復号アルゴリズムは、ウェルチバーレカンプアルゴリズム（Ｂｅｒｌｅｋａｍｐ−Ｗｅｌｃｈ  ａｌｇｏｒｉｔｈｍ）であってよい。これは、線形代数式のセットに対する解を生成することを伴う。
【００５４】
解は、ステップ２０２において十分なデータフラグメントが指定されたメモリアドレスに書き込まれてからしか求められない。ただし、これを直接（たとえば確認を介して）チェックするのではなく、ベクトルプロセッサは、所定の期間（たとえば１００ｍｓごとなど）に基づいて、ステップ２０２において特定されたメモリアドレスにおけるデータに基づいて継続的または定期的に解を生成しようと試みてよい。この試みは最初、過去にメモリ内に何のデータがあったかに基づいて失敗し、十分なデータフラグメントが書き込まれるまで失敗し続ける。しかし、任意のｋ個のデータフラグメントがメモリアドレスに書き込まれると、復号アルゴリズムは結果を生成する。この結果が元々格納されたデータである。復号されたデータがチェックサムを含む場合、これは、データが正確に復号されたことを検証するために用いられ得る。
【００５５】
オリジナルデータが取得されると、これは、取出し要求からの第１のメモリアドレスに格納され得る。したがって、要求者の観点から、データは簡単に要求され、指定のメモリアドレスに出現する。すなわち、ストレージデバイスと復号とのインタラクションは、要求者から隠れた方法で起こる。
【００５６】
また、ベクトルプロセッサは任意の計算集約的変換を処理し得るので、ＣＰＵを用いることに比べて、比較的高品質の変換がより効率的に実行され得る。これは、実質的にリアルタイムで行われ得ることため、変換が（たとえば、取出しに数ミリ秒未満の時間を追加することで）取出しプロセスを著しく遅延させることはない。
データがいつ書き込まれたかの決定
【００５７】
ステップ２０３において、ベクトルプロセッサは、データを正確に復号することによって、符号化されたデータがいつメモリに書き込まれたかを決定し得ることに留意する。
【００５８】
この動作のより詳しい図は図３に示される。
【００５９】
ステップ３０１において、ベクトルプロセッサは、１または複数のメモリアドレスからデータを取得する。これらのメモリアドレスは、事前に指定されている。
【００６０】
ステップ３０２において、ベクトルプロセッサは、データを復号しようと試みる。データがリードソロモン符号を用いて符号化されたことが知られている場合、たとえばウェルチバーレカンプアルゴリズムなどの適切な復号アルゴリズムが用いられ得る。この復号は、データがメモリアドレスに書き込まれていない場合、失敗することが予想される。したがってこの試みが失敗した場合、ベクトルプロセッサは、ステップ３０１に逆戻りしてよい。この試みが成功した場合、ベクトルプロセッサは、データを取得している。ベクトルプロセッサはその後、任意選択的にステップ３０３へ移動してよい。
【００６１】
ステップ３０３において、ベクトルプロセッサは、正確に復号されたデータを別のメモリアドレスに格納する。
【００６２】
追加または代替として、ステップ３０２は、データのチェックサムを計算することを伴ってよい。これは、データに関する既知のチェックサムと比較され得る。計算されたチェックサムが既知のチェックサムと一致する場合、ベクトルプロセッサがデータを取得したとみなされ得る。
【００６３】
方法３００は、継続的に起こってよく、あるいは定期的（たとえば１０ｍｓごとなど）に起こるようにスケジュールされ得る。方法３００はベクトルプロセッサと関連して説明されたが、別の種類の処理装置によって等しく実行され得る。たとえば同じステップがＣＰＵによって実行され得る。
消去符号化
【００６４】
上述したように、消去符号化は、ｎ個のデータフラグメントを形成するようにデータが符号化されるアプローチである。オリジナルデータは、任意のｋ個のデータフラグメント（ｋ≦ｎ）から復元可能である。各データフラグメントはｗビットワードであり、ｗは任意の正の整数であってよい。たとえば、１ビットおよび８ビットが一般的である。一般に、ｎおよびｗの値が高いほど、消去符号化および復号プロセスはより計算集約的である。
【００６５】
第１に、オリジナルデータは、ｗ×ｋビットのデータセグメントにセグメント化される。
【００６６】
第２に、各データセグメントをｋｗビットサイズのデータワードに分割することによってｋ個のデータフラグメントｄ１・・・ｄｋが形成される。これらがデータワードである。
【００６７】
第３に、
ｃｉ＝ａｉ，０ｄ０＋・・・＋ａｉ，ｋｄｋ
のように、データワードと係数との一次結合に基づいて、ｍ＝ｎ−ｋのデータフラグメントｃ１・・・ｃｍが形成され、ここで、演算はガロア体ＧＦ（２ｗ）にわたり定義される。これらが符号化ワードである。
【００６８】
データフラグメントは、ディスクのセットにわたるストライプに格納され得るため、データフラグメントがディスクにわたり分散される。場合によっては、様々なディスクが様々な数のデータフラグメントを保持してよい。任意選択的に、データセグメントに基づく（たとえば暗号ハッシュなどの）チェックサムも格納される。全てのデータセグメントが格納されると、オリジナルデータに基づく（たとえば更なる暗号ハッシュなどの）更なるチェックサムも格納され得る。
【００６９】
係数を選択するための多数の方法が存在する。１つのアプローチは、コーシーリードソロモン符号を用いることである。これは、ＧＦ（２ｗ）内のｎ個の数を選択し、それらを２つの個別のセットＸ＝｛ｘ１，・・・，ｘｍ｝およびＹ＝｛ｙ１，・・・，ｙｋ｝に分割することによって起こり、
【数１】
2020038650.tif 000003
であるように
【数２】
2020038650.tif 000004
であり、ここで、演算はガロア体ＧＦ（２ｗ）にわたり定義される。
【００７０】
データが格納されると、データを取り出すためにデータフラグメントのうちの任意のｋ個が用いられ得る。たとえば、データワードｄ１・・・ｄｋが取得された場合、これらは、それらがセグメント化された方法の逆を用いて結合され得る。符号化ワードｃｉが用いられた場合、欠落データフラグメントを取得するために上述した式に基づく方程式系が解かれ得る。
【００７１】
消去符号化は、高い誤り耐性および柔軟性を可能にするアプローチを提供する。データフラグメントは、多数の独立したシステムにわたり格納され得る。ｍ個以下のフラグメントが失われた場合、対応するデータセグメントが復元され得るので、オリジナルデータが計算され得る。また、オリジナルデータを復元するために任意のｋ個のデータフラグメントが用いられてよく、それによって格納システムのいずれかが応答することが可能である。
システム
【００７２】
図４は、コンピュータシステム例９００のブロック図を示す。
【００７３】
システム９００は、ＣＰＵ（中央処理装置）９１０、メインメモリ９２０、１または複数の周辺機器９３０、およびＧＰＵ（画像処理装置）９５０形式のベクトルプロセッサを備える。ＣＰＵ９１０、メインメモリ９２０、周辺機器９３０、およびＧＰＵ９５０は、バス９４０によって接続される。ＰＣＩｅ（ＰＣＩエクスプレス）トポロジの場合、バス９４０はルートコンプレックスを含み、周辺機器９３０の各々およびＧＰＵ９５０はＰＣＩｅエンドポイントである。ＧＰＵ９５０は、バス９４０を直接介して周辺機器９３０と通信してよい。
【００７４】
周辺機器９３０は、（たとえばハードディスクドライブ、ソリッドステートドライブなどの）ストレージデバイス、（たとえばＲＡＩＤコントローラなどの）ストレージコントローラ、（たとえばネットワークインタフェースカードなどの）ネットワークコントローラ、（たとえば更なる周辺機器を接続するように構成されたＰＣＩｅスイッチなどの）スイッチ、または様々なデバイスのいずれかを含んでよい。
【００７５】
周辺機器９３０およびＧＰＵ９５０は、バス９４０を介してメインメモリ９２０へのアクセスを有してよい。ＤＭＡ（直接メモリアクセス）によって、これは、周辺機器９３０またはＧＰＵ９５０がメインメモリからデータを読み取りメインメモリへデータを書き込むことを可能にし得る。これは、データをメインメモリ９２０から周辺機器９３０またはＧＰＵ９５０のローカルなメモリへコピーすることを伴ってよい。
【００７６】
場合によっては、ＣＰＵ９１０およびＧＰＵ９５０のためのメモリ空間は、ユニファイド仮想メモリを介して共有され得る。これは、メインメモリ９２０とローカルメモリとの間でデータをコピーする必要なく、単一メモリアドレスへのポインタがＣＰＵとＧＰＵとの間で受け渡されることを可能にする。
【００７７】
図５は、上述した方法を実行し得るコンピュータシステム９００の実施形態を示す。図５に示すシステム９０１は、図４に示すシステム９００と同様である。ただし、重要な差異は、メインメモリ９２０が、たとえばＮＶＤＩＭＭ（不揮発性デュアルインラインメモリモジュール）などの不揮発性メモリ９２１であることである。不揮発性メモリ９２１は、電力が失われた場合、不揮発性メモリ９２１に格納されたデータが保持されるように構成される。電力が再確立されると、データは再びアクセスされ得る。
【００７８】
使用中、ＧＰＵ９５０が、たとえば方法１００または方法２００などの格納を伴う方法を実行する場合、システム９０１の構成は、電力が失われた場合、読取りまたは書込み動作が起こる段階にかかわらず、データが保持されることを確実にする。たとえば、ＧＰＵ９５０がステップ１０２を実行した場合、その結果、データフラグメントはメモリ９２１に格納される。不揮発性メモリ９２１は不揮発性であるため、電力が失われても、データフラグメントは保持され、ＧＰＵ９５０は方法の実行を再開し得る。
【００７９】
これにより、ステップ１０３が実行される前でも、ＧＰＵ９５０は（たとえば確認によって）データが格納されたことを報告することが可能であり得る。またこれにより、不揮発性メモリ９２１が事前フラッシュされるので、ＧＰＵ９５０がフラッシュに瞬時に応答することが可能である。このように、基礎となるストレージデバイスが比較的緩慢である場合でも、ＧＰＵ９５０を用いる書込み動作の見かけの性能はより高くなる。
【００８０】
追加または代替として、これはジャーナリングのために用いられ得る。すなわち、任意のデータがストレージデバイスに書き込まれる前に、チェックサムおよびパリティ情報に沿って不揮発性メモリ９２１に最初に格納され得る。データまたはデータフラグメントはその後、不揮発性メモリから１または複数のストレージデバイスへ書き込まれる。これは、書込みの穴、すなわち、たとえば電力喪失など、いくつかのデータフラグメントがストレージに書き込まれているが他は書き込まれていない状況を回避することができる。これは、不十分なデータフラグメントがストレージに書き込まれ、揮発性メモリに格納された書き込まれていないデータフラグメントが失われているため、回復不可能なデータをもたらし得る。
【００８１】
図６は、上述した方法を実行し得るコンピュータシステム９００の他の実施形態を示す。図６に示すシステム９０２は、図４に示すシステム９００と同様である。ただし、重要な差異は、周辺機器９３０が４つのＮＶＭｅ（不揮発性メモリエクスプレス）ドライブ９３１を備える点である。実際は、より多いまたは少ない数のＮＶＭｅドライブ９３１が用いられ得る。ＧＰＵ９５０は、ＰＣＩｅバス９４１を介して直接各ＮＶＭｅドライブ９３１と通信してよい。
【００８２】
使用中、ＧＰＵ９５０がたとえば方法１００または方法２００などの格納を伴う方法を実行する場合、ＮＶＭｅドライブ９３１の性能は、ＰＣＩｅバス９４１のスループットと十分に一致する。たとえばＰＣＩｅバス９４１は１６レーンを有してよく、その各々がレーンごとに約１ＧＢ／ｓでデータを送信し得る。各ＮＶＭｅドライブ９３１は、一般に１、２、または４つのレーン数のインタフェースを用いてよい。ＮＶＭｅドライブ９３１の数は、ドライブのレーンの合計数がＰＣＩｅバス９４１のレーンと等しいように選択され得る。たとえば４つの４レーンＮＶＭｅドライブ９３１が用いられ得る。このように、選択されたＮＶＭｅドライブ９３１がＰＣＩｅバス９４１の容量と完全に一致する。
【００８３】
システム９０２を用いると、ＧＰＵ９５０はＮＶＭｅドライブ９３１に直接データを書き込むことができる。ＰＣＩｅバス９４１のスループットは制限因子であるため、データがメモリ９２０に格納されたかドライブ９３１に直接格納されたかの速度差がほとんどない。
【００８４】
これはメモリ９２０の重要な利点の１つ、すなわち、従来、ドライブへの格納よりも速いとみなされる点を回避する。したがって、データが従来メモリ９２１に格納される状況（たとえば過渡計算）において、これは、速度不利益を一切伴わず、かつデータが従来揮発性メモリ９２０に格納される場合に起こり得る揮発性を伴わずに不揮発性ストレージに格納され得る。
【００８５】
また、ＮＶＭｅドライブは一般に、ドライバがそれらの機能のいずれかに関してＣＰＵで起動することを必要としないので、ＮＶＭｅドライブとの直接インタラクションにおけるあらゆるＣＰＵボトルネックを回避する。
【００８６】
システム９０２は、ＰＣＩｅバスおよびＮＶＭｅドライブを参照して説明されたが、実際は、ドライブの合計スループットがバス容量と等しいかそれ以上であれば、バスおよびドライブの任意の組み合わせによって同じ利益が実現され得る。
ストレージデバイス周辺機器
【００８７】
図７は、ストレージデバイス例９３５のブロック図を示す。これは、システム９００における周辺機器９３０の１つであってよい。
【００８８】
ストレージデバイス９３５は、ドライブ９３６、ディスクコントローラ９３７、およびＤＭＡコントローラ９３８を有する。
【００８９】
ＤＭＡコントローラ９３８は、ＣＰＵ９１０またはＧＰＵ９５０からの命令を受信する。命令は、ＣＰＵ９１０またはＧＰＵ９５０がＤＭＡコントローラ９３８のレジスタをプログラミングすることによって提供され得る。これは、ＣＰＵ９１０またはＧＰＵ９５０で起動中のドライバが、ＤＭＡコントローラ９３８の対応するレジスタにマッピングされた仮想メモリアドレスに命令を書き込むことを伴ってよい。メモリ管理ユニット（ＭＭＵ）はその後、仮想メモリアドレスを対応するレジスタに移動してよい。
【００９０】
ＤＭＡコントローラ９３８は、複数のレジスタを有してよい。たとえば、転送されるデータのソースに対応する開始仮想メモリアドレスを保持する第１のレジスタ、データの宛先に対応する開始仮想メモリアドレスを保持する第２のレジスタ、および転送されるバイトまたはワードの数を保持する第３のレジスタが存在してよい。
【００９１】
ＤＭＡコントローラ９３８は、開始メモリアドレスから宛先メモリアドレスへバイトまたはワードを反復的に転送する。これは、ＤＭＡコントローラ９３８が、たとえばバス９４０を介してディスクコントローラ９３７と通信することによって起こり得る。ＤＭＡコントローラ９３８は、各バイトまたはワードを転送するためにディスクコントローラ９３７のレジスタをプログラミングしてよい。たとえば、バイトまたはワードのソースアドレスに対応する第１のレジスタ、およびバイトまたはワードの宛先アドレスに対応する第２のレジスタが存在してよい。
【００９２】
これらのレジスタに書き込まれたデータに基づいて、ディスクコントローラ９３７は、ドライブ９３６からのデータを取得する。
【００９３】
ドライブ９３６は、情報を格納するおよび読み取ることができる物理媒体である。たとえばドライブ９３６は、可動磁気ヘッドを用いて回転するプラッタに情報を磁気的に格納するハードディスクドライブであってよい。あるいはドライブ９３６は、たとえばＮＡＮＤベースのフラッシュメモリなどの不揮発性メモリに情報を格納するソリッドステートドライブであってよい。
【００９４】
ディスクコントローラ９３７は、ディスクコントローラ９３７がドライブ９３６のレジスタをプログラミングすることによってドライブ９３６においてデータを取出しまたは格納するように命令され得る。これらの命令に応答して、ディスクコントローラ９３７は、ドライブ９３６からディスクコントローラ９３７のデータレジスタへデータのブロックを読み取り、またはドライブ９３６からディスクコントローラ９３７のデータレジスタへデータのブロックを書き込むようにドライブ（たとえばハードディスクドライブの場合、可動磁気ヘッドなど）を制御する。
【００９５】
ドライブ９３６のレジスタに書き込まれたデータに基づいて、ディスクコントローラ内のバッファは、データを反映するように更新される。ディスクコントローラ９３７はその後、バッファ内のデータを仮想メモリアドレスへコピーしてよい。この仮想メモリアドレスは、コンピュータシステムのメインメモリ内のアドレスに対応してよい。
【００９６】
このように、ＣＰＵ９１０またはＧＰＵ９５０は、ストレージデバイスへデータを格納し、ストレージデバイスからデータを取り出してよい。
ベクトルプロセッサ
【００９７】
ベクトルプロセッサは、データアレイにおいて命令が実行されるプロセッサである。これは、スカラであって単一のデータアイテムに命令を実行する従来のＣＰＵとは対照的であり得る。これは、ベクトルプロセッサが大量のデータを従来のスカラＣＰＵよりも大幅に速く処理することを可能にし得る。
【００９８】
ベクトルプロセッサの１つの例はＧＰＵである。ただしベクトルプロセッサは、たとえばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）など他の形式で実現されてもよい。
【００９９】
ベクトルプロセッサとして動作するＧＰＵ９５０の例が図８に示される。そのようなＧＰＵ９５０は、上述したアプローチのいずれかにおいてベクトルプロセッサとして用いられ得る。
【０１００】
ＧＰＵ９５０は、一般に１〜３０の複数のＳＭ（ストリーミングマルチプロセッサ）９５１を備える。各ＳＭ９５１は、共有メモリ９５２および命令ユニット９５３を有する。
【０１０１】
各ＳＭ９５１は、たとえば８つなど複数のＳＰ（ストリーミングプロセッサ）９５４を備える。各ＳＰ９５４は、共有メモリ９５２へのアクセスを有し、レジスタ９５５のセットを有する。各ＳＰ９５４は、ＧＰＵのグローバルメモリ９５６へのアクセスも有してよい。このグローバルメモリ９５６は、コンピュータシステムのメインメモリ９２０にマッピングされ得る。
【０１０２】
ＳＭ９５１内のＳＰ９５４は、同じ命令ユニット９５３からの命令を受信する。このように、ＳＭ内の各ＳＰ９５４は一般に、同じ命令を同時に処理する。
【０１０３】
ＧＰＵ９５０は、プログラムまたは関数であってよいカーネルを実行するように構成され得る。カーネルは、ＣＵＤＡプラットフォームを利用してよい。カーネルがプリセット閾値を超えて実行するとウォッチドッグタイマがカーネルを止めるので、カーネルは一般に比較的短命（すなわち、およそ数秒）である。ただし場合によっては、カーネルは、実行が完了するまで無期限に実行し得るという点で、長期実行であってよい。カーネルはＧＰＵ上で実行するが、一般にローカルまたは遠隔ＣＰＵによって起動される。
【０１０４】
カーネルは、ＧＰＵ９５０がカーネルに対応するグリッドを実行することによって実行される。グリッドは複数のブロックで構成される。一般に、グリッド内のブロック間に同期は存在しない。
【０１０５】
各ＳＭ９５１は、グリッドのブロックを実行してよい。一般にＳＭ９５１は、複数のブロックを同時に実行する。ＳＭ９５１におけるブロックの数は、共有メモリ９５２の容量によって制限され得る。一般にブロックは、カーネルの実行中、１つのＳＭ９５１から別のＳＭ９５１へ移動しない。
【０１０６】
各ＳＰ９５４は、ブロックのスレッドを実行してよい。場合によっては、１つのＳＰ９５４が多数のスレッドを同時に処理してよい。スレッドは一般に、複数の命令を備える計算である。各命令は、たとえば４つなど複数のサイクルを実行させ得る。このレイテンシにより、ＳＰ９５４は、多数のスレッドを一度に実行してよい。すなわち、１つのスレッドの実行中、他のスレッドが開始され得る。スレッドは、ＳＭ９５１の共有メモリ９５２を介して互いに通信してよい。
【０１０７】
ＧＰＵ９５０は、ＳＩＭＤ（シングルインストラクション  マルチプルデータ）アーキテクチャを有してよい。これは、ＧＰＵ９５０がワープベースで動作し得ることを意味する。各ワープは、同じ命令を任意選択的に異なるデータにおいてロックステップで実行するブロック内の複数のスレッドを備える。たとえばワープ内の各スレッドは、様々なメモリアドレスに格納された数まで追加の命令を実行してよい。また、ワープ内の各スレッドは、メモリからのデータを同時にフェッチするように構成され得る。
【０１０８】
ワープは、ＳＭ９５１に常駐するため、ワープ内の各スレッドがＳＭ９５１内の異なるＳＰ９５４によって実行され得る。ワープサイズ（すなわち、ロックステップで実行され得るワープ内のスレッドの数）は、たとえば３２などの所定値であってよい。ＳＭ９５１は、多数の常駐ワープを有してよい。
【０１０９】
このように、単一のカーネルは、ＧＰＵにおいて使用可能な多数のプロセッサの容量を用いてよい。その結果、カーネルは、他の処理装置と比べて大幅に速く実行され得る。
解釈
【０１１０】
数々の方法が上述された。理解されるように、これらの方法のいずれかは、コンピュータプログラムを形成し得る一連の命令によって具体化され得る。これらの命令またはこのコンピュータプログラムは、非一時的であってよいコンピュータ可読媒体に格納され得る。実行時、これらの命令またはこのプログラムは、たとえばＣＰＵまたはベクトルプロセッサ（たとえばＧＰＵ）などのプロセッサに、上述した方法を実行させ得る。
【０１１１】
アプローチがプロセッサによって実現されるものとして説明された場合、これは、複数のプロセッサを備えてよい。すなわち、少なくともプロセッサの場合、単数形は複数形を含むものとして解釈する必要がある。方法が多数のステップを備える場合、異なるステップまたはステップの異なる部分が異なるプロセッサによって実行され得る。場合によっては、あるステップが第１の種類のプロセッサによって実行され（たとえば、大きなデータセットの処理はベクトルプロセッサによって実行され）、別のステップは第２の種類のプロセッサによって実行され（たとえばメタデータ検索はＣＰＵによって実行され）てよい。
【０１１２】
方法におけるステップの順序は、あるステップが別のステップが実行されることに依存する場合、または文脈上他を意味する場合を除き、ステップが順序を変えてまたは並行して実行されるように変更され得る。
【０１１３】
「備える」という用語および他の文法形式は、特に記載されない限り、包括的意味を有することが意図される。すなわち、それらは、羅列された構成要素および場合によっては他の記載されていない構成要素または要素の包含を意味するものとして受け取る必要がある。
【０１１４】
本発明は、特定の実施形態の説明によって図面を参照して説明されたが、本発明は、そのような細部に限定されることは意図されない。当業者には、追加の利点および修正が容易に明らかであろう。したがって本発明は、その幅広い態様において、特定の細部、典型的な装置および方法、および図示および説明された実例に限定されない。よって、一般発明概念の主旨または範囲から逸脱することなく、そのような細部からの逸脱がなされ得る。
【図１】
2020038650.tif 000005
【図２】
2020038650.tif 000006
【図３】
2020038650.tif 000007
【図４】
2020038650.tif 000008
【図５】
2020038650.tif 000009
【図６】
2020038650.tif 000010
【図７】
2020038650.tif 000011
【図８】
2020038650.tif 000012
【外国語明細書】
2020038650000001.pdf