(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-27
(54)【発明の名称】ブロックデバイスの構築
(51)【国際特許分類】
G06F 12/06 20060101AFI20221220BHJP
G06F 12/00 20060101ALI20221220BHJP
G06F 11/10 20060101ALI20221220BHJP
【FI】
G06F12/06 515H
G06F12/00 550E
G06F12/00 550Z
G06F12/00 597U
G06F12/00 597Z
G06F11/10 676
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022523555
(86)(22)【出願日】2020-10-07
(85)【翻訳文提出日】2022-06-20
(86)【国際出願番号】 US2020054595
(87)【国際公開番号】W WO2021080774
(87)【国際公開日】2021-04-29
(32)【優先日】2019-10-22
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】595168543
【氏名又は名称】マイクロン テクノロジー,インク.
(74)【代理人】
【識別番号】100121083
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【氏名又は名称】大菅 義之
(72)【発明者】
【氏名】マヘシュ アナンダ シー. エス.
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA14
5B160MM03
5B160MM04
5B160NA03
(57)【要約】
開示する実施形態は、異種のメモリコンポーネントを使用してメモリサブシステム内にメモリの割り当てを構築することに関する。一例では、方法は、ホストシステムから、メモリの割り当てを構築するためのリクエストを受信することと、メモリデバイスのプールから複数のメモリデバイスを選択することと、複数のメモリデバイス中の複数のメモリコンポーネントを選択することと、メモリの割り当てを実装するために複数のメモリコンポーネントを集約することと、ホストシステムに、メモリの割り当てを実装する複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、階層アドレスは、関連するメモリデバイスのデバイスIDを各々含むことを含む。
【特許請求の範囲】
【請求項1】
ホストシステムから、メモリの割り当てを構築するためのリクエストを受信することと、
メモリデバイスのプールから複数のメモリデバイスを選択することと、
前記複数のメモリデバイス中の複数のメモリコンポーネントを選択することと、
メモリの前記割り当てを実装するために前記複数のメモリコンポーネントを集約することと、
前記ホストシステムに、メモリの前記割り当てを実装する前記複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するメモリデバイスのデバイスIDを各々含むこと
を含む方法。
【請求項2】
前記ホストシステムから、メモリの前記割り当てのニーズを指定する指標を受信することを更に含み、
前記複数のメモリデバイス及び前記複数のメモリコンポーネントを選択することは、メモリの前記割り当ての前記ニーズを前記メモリコンポーネントの媒体タイプと一致させることを含み、メモリの前記割り当ての前記ニーズは、容量、性能、耐久性、又は電力消費の内の2つ以上を含む、
請求項1に記載の方法。
【請求項3】
メモリの前記割り当てを動的に変更することを要求する1つ以上のトリガーを受信することと、
前記複数のメモリデバイスの中から、又はメモリデバイスの前記プールの別のメモリデバイスから、又はメモリデバイスの前記プールに追加されている追加のメモリデバイスから追加のメモリコンポーネントを選択することと、前記追加のメモリコンポーネントを、メモリの前記割り当てを既に実装している前記複数のメモリデバイスと集約することによって、1つ以上のトリガーが容量要件の増加、性能要件の増加、又は電力バジェットの増加の内の1つ以上を指し示す場合に、メモリの前記割り当てを拡張することと、
前記複数のメモリコンポーネントの内の1つ、又は複数のメモリデバイスの内の1つ及びそれに含まれる前記複数のメモリコンポーネントの内の何れかを選択及び割り当て解除することによって、前記1つ以上のトリガーが容量要件の減少、性能要件の減少、及び電力バジェットの減少の内の1つ以上を指し示す場合に、メモリの前記割り当てを縮小すること
を更に含む、請求項1に記載の方法。
【請求項4】
メモリの前記割り当ての第1の部分を、前記複数のメモリコンポーネントの内の第1のメモリコンポーネントから、メモリデバイスの第2の前記プール上の第2のメモリコンポーネントに移行することであって、前記移行することは、
前記ホストシステムの性能、容量、及び電力消費のニーズの内の1つ以上の変化、
前記複数のメモリデバイスの内の第1のメモリデバイスが耐久性レベルの閾値に達したことの指標、又は
前記第1のメモリコンポーネントの障害の指標
によってトリガーされること
を更に含む、請求項1に記載の方法。
【請求項5】
メモリデバイスの前記プールから新たな複数のメモリデバイスを選択することと、
前記新たな複数のメモリデバイスの中から、最大2つ以上の異なる媒体タイプを含む新たな複数のメモリコンポーネントを選択することと、
メモリの新たな割り当てを構築するために、前記新たな複数のメモリコンポーネントを集約することと、
前記ホストシステムに、メモリの前記新たな割り当てを実装する前記新たな複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するメモリデバイスのデバイスIDを各々含むこと
によって、前記ホストシステムのニーズの変化を指し示すトリガーに応答してメモリの前記割り当てを再構築すること
を更に含み、
前記ホストシステムの前記ニーズの変化は、新たにリクエストされたジオメトリ、階層化を実装するニーズ、及びキャッシングを実装するニーズの内の1つを含む、
請求項1に記載の方法。
【請求項6】
前記複数のメモリコンポーネントの中から第1、第2、及び第3のメモリコンポーネントを選択することと、
前記第1、第2、及び第3のメモリコンポーネントを、メモリデバイスに渡るRedundant Array of Independent Component(RAIMC)として使用することと、
前記ホストシステムに、前記第1のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するホストシステムのホストIDと、関連するメモリデバイスのデバイスIDとを含むことと、
前記第2及び第3のメモリコンポーネントに、前記第1のメモリコンポーネントにアドレッシングされたデータアクセスを複製することと、
前記第3のメモリコンポーネントのデータ要素毎に、前記第1及び第2のメモリコンポーネントの対応する要素の排他的OR(XOR)を反映するパリティを蓄積することであって、前記パリティの“1”の値はデータエラーを指し示すこと
を更に含む、請求項1に記載の方法。
【請求項7】
前記複数のメモリコンポーネントは、シングルレベルセル(SLC)NADNフラッシュ、マルチレベルセル(MLC)NADNフラッシュ、トリプルレベルセル(TLC)NANDフラッシュ、及びクアッドレベルセル(QLC)NANDフラッシュ、3次元クロスポイント、ReRAM、及びNRAMの内の2つ以上を含む、異種の不揮発性メモリコンポーネントである、請求項1に記載の方法。
【請求項8】
メモリデバイスのプールと、
ホストシステムから、メモリの割り当てを構築するためのリクエストを受信することと、
メモリデバイスの前記プールから複数のメモリデバイスを選択することと、
前記複数のメモリデバイス中の複数のメモリコンポーネントを選択することと、
メモリの前記割り当てを実装するために、前記複数のメモリコンポーネントを集約することと、
前記ホストシステムに、メモリの前記割り当てを実装する前記複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するメモリデバイスのデバイスIDを各々含むこと
を行うための、メモリデバイスの前記プールに動作可能に結合された処理デバイスと
を含むシステム。
【請求項9】
前記処理デバイスは、
前記ホストシステムから、メモリの前記割り当てのニーズを指定する指標を受信するとことを更に行い、
前記複数のメモリデバイス及び前記複数のメモリコンポーネントを選択することは、メモリの前記割り当ての前記ニーズを前記メモリコンポーネントの媒体タイプと一致させることを含み、メモリの前記割り当ての前記ニーズは、容量、性能、耐久性、又は電力消費の内の2つ以上を含む、
請求項8に記載のシステム。
【請求項10】
前記処理デバイスは、
メモリの前記割り当てを動的に変更することを要求する1つ以上のトリガーを受信することと、
前記複数のメモリデバイスの中から、又はメモリデバイスの前記プールの別のメモリデバイスから、又はメモリデバイスの前記プールに追加されている追加のメモリデバイスから追加のメモリコンポーネントを選択することと、前記追加のメモリコンポーネントを、メモリの前記割り当てを既に実装している前記複数のメモリデバイスと集約することによって、前記1つ以上のトリガーが容量要件の増加、性能要件の増加、又は電力バジェットの増加の内の1つ以上を指し示す場合に、メモリの前記割り当てを拡張することと、
前記複数のメモリコンポーネントの内の1つ、又は前記複数のメモリデバイスの内の1つ及びそれに含まれる前記複数のメモリコンポーネントの内の何れかを選択及び割り当て解除することによって、前記1つ以上のトリガーが容量要件の減少、性能要件の減少、及び電力バジェットの減少の内の1つ以上を指し示す場合に、メモリの前記割り当てを縮小すること
を更に行う、請求項8に記載のシステム。
【請求項11】
前記処理デバイスは、
メモリの前記割り当ての第1の部分を、前記複数のメモリコンポーネントの内の第1のメモリコンポーネントから、メモリデバイスの第2の前記のプール上の第2のメモリコンポーネントに移行することであって、前記移行することは、
前記ホストシステムの性能、容量、及び電力消費のニーズの内の1つ以上の変化、
前記複数のメモリデバイスの内の第1のメモリデバイスが耐久性レベルの閾値に達したことの指標、又は
前記第1のメモリコンポーネントの障害の指標
によってトリガーされること
を更に行う、請求項8に記載のシステム。
【請求項12】
前記処理デバイスは、
メモリデバイスの前記プールから新たな複数のメモリデバイスを選択することと、
前記新たな複数のメモリデバイスの中から、最大2つ以上の異なる媒体タイプを含む新たな複数のメモリコンポーネントを選択することと、
メモリの新たな割り当てを構築するために、前記新たな複数のメモリコンポーネントを集約することと、
前記ホストシステムに、メモリの前記新たな割り当てを実装する前記新たな複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するメモリデバイスのデバイスIDを各々含むこと
によって、前記ホストシステムのニーズの変化を指し示すトリガーに応答してメモリの前記割り当てを再構築すること
を更に行い、
前記ホストシステムの前記ニーズの変化は、新たにリクエストされたジオメトリ、階層化を実装するニーズ、及びキャッシングを実装するニーズの内の1つを含む、
請求項8に記載のシステム。
【請求項13】
前記処理デバイスは、
前記複数のメモリコンポーネントから第1、第2、及び第3のメモリコンポーネントを選択することであって、前記第1、第2、及び第3のコンポーネントは、前記複数のメモリデバイスの内の複数と関連付けられることと、
前記第1、第2、及び第3のメモリコンポーネントを、Redundant Array of Independent Component(RAIMC)として使用することと、
前記ホストシステムに、前記第1のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するホストシステムのホストIDと、関連するメモリデバイスのデバイスIDとを含むことと、
前記第2及び第3のメモリコンポーネントに、前記第1のメモリコンポーネントにアドレッシングされたデータアクセスを複製することと、
前記第3のメモリコンポーネントのデータ要素毎に、前記第1及び第2のメモリコンポーネントの対応する要素の排他的OR(XOR)を反映するパリティを蓄積することであって、前記パリティの“1”の値はデータエラーを指し示すこと
更に行う、請求項8に記載のシステム。
【請求項14】
前記複数のメモリコンポーネントは、シングルレベルセル(SLC)NADNフラッシュ、マルチレベルセル(MLC)NADNフラッシュ、トリプルレベルセル(TLC)NANDフラッシュ、及びクアッドレベルセル(QLC)NANDフラッシュ、3Dクロスポイント、ReRAM、及びNRAM(ナノRAM、抵抗変化型不揮発性ランダムアクセスメモリ(RAM))の内の2つ以上を含む、異なるタイプの不揮発性メモリコンポーネントを含む、異種である、請求項8に記載のシステム。
【請求項15】
処理デバイスにより実行される場合に、
ホストシステムから、メモリの割り当てを構築するためのリクエストを受信することと、
メモリデバイスのプールから複数のメモリデバイスを選択することと、
前記複数のメモリデバイス中の複数のメモリコンポーネントを選択することと、
メモリの前記割り当てを実装するために、前記複数のメモリコンポーネントを集約することと、
前記ホストシステムに、メモリの前記割り当てを実装する前記複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するメモリデバイスのデバイスIDを各々含むこと
を前記処理デバイスにさせる命令を含む非一時的マシン可読ストレージ媒体。
【請求項16】
前記命令は、
メモリの前記割り当てを動的に変更することを要求する1つ以上のトリガーを受信することと、
前記複数のメモリデバイスの中から、又はメモリデバイスの前記プールの別のメモリデバイスから、又はメモリデバイスの前記プールに追加されている追加のメモリデバイスから追加のメモリコンポーネントを選択することと、前記追加のメモリコンポーネントを、メモリの前記割り当てを既に実装している前記複数のメモリデバイスと集約することによって、1つ以上のトリガーが容量要件の増加、性能要件の増加、又は電力バジェットの増加の内の1つ以上を指し示す場合に、メモリの前記割り当てを拡張することと、
前記複数のメモリコンポーネントの内の1つ、又は前記複数のメモリデバイスの内の1つ及びそれに含まれる前記複数のメモリコンポーネントの内の何れかを選択及び割り当て解除することによって、前記1つ以上のトリガーが容量要件の減少、性能要件の減少、及び電力バジェットの減少の内の1つ以上を指し示す場合に、メモリの前記割り当てを縮小すること
を前記処理デバイスに更にさせる、請求項15に記載の非一時的マシン可読ストレージ媒体。
【請求項17】
前記命令は、
メモリの前記割り当ての第1の部分を、前記複数のメモリコンポーネントの内の第1のメモリコンポーネントから、メモリデバイスの第2の前記プール上の第2のメモリコンポーネントに移行することであって、前記移行することは、
前記ホストシステムの性能、容量、及び電力消費のニーズの内の1つ以上の変化、
前記複数のメモリデバイスの内の第1のメモリデバイスが耐久性レベルの閾値に達したことの指標、又は
前記第1のメモリコンポーネントの障害の指標
によってトリガーされること
を前記処理デバイスに更にさせる、請求項15に記載の非一時的マシン可読ストレージ媒体。
【請求項18】
前記命令は、
夫々、0個以上のメモリデバイスをメモリデバイスの前記プールに追加すること、又は前記メモリデバイスの前記プールから除去することによって、メモリデバイスの新たなプールを定義することと、
メモリデバイスの前記新たなプールから新たな複数のメモリデバイスを選択することと、
前記新たな複数のメモリデバイスの中から、最大2つ以上の異なる媒体タイプを含む新たな複数のメモリコンポーネントを選択することと、
メモリの新たな割り当てを構築するために、前記新たな複数のメモリコンポーネントを集約することと、
前記ホストシステムに、メモリの前記新たな割り当てを実装する前記新たな複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するメモリデバイスのデバイスIDを各々含むこと
によって、前記ホストシステムのニーズの変化を指し示すトリガーに応答してメモリの前記割り当てを再構築すること
前記処理デバイスに更にさせ、
前記ホストシステムの前記ニーズの変化は、新たにリクエストされたジオメトリ、階層化を実装するニーズ、及びキャッシングを実装するニーズの内の1つを含む、
請求項15に記載の非一時的マシン可読ストレージ媒体。
【請求項19】
前記命令は、
前記複数のメモリコンポーネントの中から第1、第2、及び第3のメモリコンポーネントを選択することであって、前記第1、第2、及び第3のコンポーネントは、同じメモリデバイス内に含まれることと、
前記第1、第2、及び第3のメモリコンポーネントを、Redundant Array of Independent Component(RAIMC)として使用することと、
前記ホストシステムに、前記第1のメモリコンポーネントにアクセスするために使用される階層アドレスを提供することであって、前記階層アドレスは、関連するホストシステムのホストIDと、関連するメモリデバイスのデバイスIDとを含むことと、
前記第2及び第3のメモリコンポーネントに、前記第1のメモリコンポーネントにアドレッシングされたデータアクセスを複製することと、
前記第3のメモリコンポーネントのデータ要素毎に、前記第1及び第2のメモリコンポーネントの対応する要素の排他的OR(XOR)を反映するパリティを蓄積することであって、前記パリティの“1”の値はデータエラーを指し示すこと
を前記処理デバイスに更にさせる、請求項15に記載の非一時的マシン可読ストレージ媒体。
【請求項20】
前記複数のメモリコンポーネントは、シングルレベルセル(SLC)NADNフラッシュ、マルチレベルセル(MLC)NADNフラッシュ、トリプルレベルセル(TLC)NANDフラッシュ、及びクアッドレベルセル(QLC)NANDフラッシュ、3Dクロスポイント、ReRAM、及びNRAM(ナノRAM、抵抗変化型不揮発性ランダムアクセスメモリ(RAM))の内の2つ以上を含む、異なるタイプの不揮発性メモリコンポーネントを含む、異種である、請求項15に記載の非一時的マシン可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般的に、メモリサブシステム内のブロックデバイスの構築に関し、より具体的には、異種の媒体を有するブロックデバイスを実装することに関する。
【背景技術】
【0002】
メモリサブシステムは、データを蓄積するメモリデバイス内に1つ以上のメモリコンポーネントを含み得る。メモリコンポーネントは、例えば、不揮発性メモリコンポーネント及び揮発性メモリコンポーネントであり得る。一般的に、ホストシステムは、メモリコンポーネントにデータを蓄積し、メモリコンポーネントからデータを検索するために、メモリサブシステムを利用し得る。
【図面の簡単な説明】
【0003】
開示は、以下に与えられる詳細な説明及び開示の様々な実施形態の添付の図面からより完全に理解されるであろう。図面は、しかしながら、開示を特定の実施形態に限定するように解釈されるべきではなく、説明及び理解のみを目的とする。
【0004】
【
図1】本開示の幾つかの実施形態に従ったメモリサブシステムを含む例示的なコンピューティング環境を説明する。
【
図2】本開示の幾つかの実施形態に従ったブロックデバイスをホストするための複数の異種のメモリコンポーネントの最初の割り当てを説明する。
【
図3】本開示の幾つかの実施形態に従った変更されたブロックデバイス構成を説明する。
【
図4】本開示の幾つかの実施形態に従った異種のブロックデバイスを構築するための例示的な方法のフロー図である。
【
図5】本開示の幾つかの実施形態に従ったブロックデバイスを形成するための複数のホストシステムに渡る異種のメモリコンポーネントの最初の割り当てを説明する。
【
図6】本開示の幾つかの実施形態に従った変更されたブロックデバイス構成を説明する。
【
図7】本開示の幾つかの実施形態に従った異種のブロックデバイスを構築するための例示的な方法のフロー図である。
【
図8】本開示の実施形態が動作し得る例示的なコンピュータシステムのブロック図である。
【発明を実施するための形態】
【0005】
本開示の態様は、メモリサブシステム内の異種のブロックデバイスの構築に向けられる。メモリサブシステムは、以下では、“メモリデバイス”又は“(複数の)メモリデバイス”とも称される。メモリサブシステムの例は、メモリバスを介して中央処理デバイス(CPU)に接続された1つ以上のメモリモジュールである。メモリサブシステムは、ストレージデバイス、メモリモジュール、又はストレージデバイスとメモリモジュールとのハイブリッドであり得る。ストレージデバイス及びメモリモジュールの例は、
図1に関連して以下に説明される。一般的に、ホストシステムは、1つ以上のメモリデバイスを含むメモリサブシステムを利用し得る。メモリデバイスは、例えば、ネガティブAND(NAND)メモリデバイス等の不揮発性メモリデバイス、及び不揮発性メモリセルのクロスポイントアレイである3次元クロスポイント(“3Dクロスポイント”)メモリデバイス等の書き込みインプレースメモリデバイスを含み得る。揮発性メモリデバイスを含む他のタイプのメモリデバイスは、
図1に関連して以下により詳細に説明される。ホストシステムは、メモリサブシステムに蓄積されるデータを提供し得、メモリサブシステムから検索されるデータをリクエストし得る。
【0006】
本明細書で言及するように、ブロックデバイスは、グループ、物理ユニット、チャンク、及び論理ブロックにフォーマット化され得る、ある量の不揮発性メモリ(NVM)である。例えば、ブロックデバイスは、アプリケーション又は使用に割り当てられ、メモリのブロック又はその他のユニット等のフォーマットされたグループ内に書き込まれる、NVMの一部分の抽象化(例えば、パーティション又は物理ストレージリソースのその他の論理的抽象化等)であり得る。幾つかの文脈では、ブロックデバイスは名前空間と称され得る。以下に説明する実施形態は、ブロックデバイスを指すが、“ブロック”の特定の定義に限定されない。したがって、用語“ブロックデバイス”は、用語“メモリの割り当て”と交換可能に使用され得る。
【0007】
従来のブロックデバイスは、メモリサブシステム内の同種の媒体を使用して構築される。例えば、複数のタイプの不揮発性メモリ(NVM)(例えば、シングルレベルセル(SLC)NANDフラッシュ、マルチレベルセル(MLC)NANDフラッシュ、トリプルレベルセル(TLC)NANDフラッシュ、クアッドレベルセル(QLC)NANDフラッシュ、3Dクロスポイント、ReRAM(抵抗変化型ランダムアクセスメモリ)、又はNRAM(ナノRAM))、MRAM(磁気抵抗変化型RAM)、STT(スピントルクトランスファーMRAM)、MRAM、FRAM(登録商標)(強誘電体RAM)が利用可能である場合、従来の各ブロックデバイスは、1つの媒体タイプのみを使用する。こうした限定があるため、従来のシステムは、ホストシステム上で実行するアプリケーションの多様なニーズに適切に一致しないことがしばしばある。
【0008】
本開示の態様は、異なる媒体タイプの集合体を使用して異種のブロックデバイスを構築することによって、例えば、アプリケーションのニーズに最もよく一致する媒体タイプを選択することによって、上記の及びその他の欠陥に対処する。例えば、アプリケーションは、ブロックデバイス内にストレージの階層化又はキャッシングを実装するために、ストレージの高密度で高遅延の部分と、ストレージの低密度で低レイテンシの部分との両方を使用し得る。
【0009】
開示する実施形態は、ブロックデバイスの動的変更を更にサポートし、媒体タイプの最初の選択で構築された後、その後、それを拡張、縮小、シンプロビジョニング、複製、及び移行することを可能にする。言い換えれば、メモリコンポーネント及びメモリデバイスは、ブロックデバイスを最初に構築した後の何時か、ブロックデバイスに追加され得、又はブロックデバイスから除去され得る。開示する実施形態は、ブロックデバイスを動的に拡張、縮小、又は再構築する必要があることを指し示す様々なトリガーに応答し得る。
【0010】
有利には、開示する実施形態は、ホストシステム上のアプリケーションのニーズに動的に一致させることを試み、ブロックデバイスをホストシステムの変化する要件又はNVMのコンポーネントの障害に適合する。
【0011】
図1は、本開示の幾つかの実施形態に従ったメモリサブシステム110を含む例示的なコンピューティング環境100を説明する。メモリサブシステム110は、メモリコンポーネント112A~112N(“メモリデバイス”とも称される)等の媒体を含み得る。メモリコンポーネント112A~112Nは、揮発性メモリコンポーネント、不揮発性メモリコンポーネント、又はそれらの組み合わせであり得る。メモリサブシステム110は、ストレージデバイス、メモリモジュール、又はストレージデバイスとメモリモジュールとのハイブリッドであり得る。ストレージデバイスの例は、ソリッドステートドライブ(SSD)、フラッシュドライブ、ユニバーサルシリアルバス(USB)フラッシュドライブ、組み込みマルチ媒体コントローラ(eMMC)ドライブ、ユニバーサルフラッシュストレージ(UFS)ドライブ、及びハードディスクドライブ(HDD)を含む。メモリモジュールの例は、デュアルインラインメモリモジュール(DIMM)、スモールアウトラインDIMM(SO-DIMM)、及び不揮発性デュアルインラインメモリモジュール(NVDIMM)を含む。
【0012】
コンピューティング環境100は、1つ以上のメモリサブシステム110に結合された(例えば、メモリサブシステム管理スタック125を含む)ホストシステム120を含み得る。幾つかの実施形態では、ホストシステム120は、異なるタイプのメモリサブシステム110に結合される。
図1は、1つのメモリサブシステム110に結合されたホストシステム120の一例を説明する。ホストシステム120は、例えば、メモリサブシステム110にデータを書き込み、メモリサブシステム110からデータを読み出すために、メモリサブシステム110を使用する。本明細書で使用するとき、“結合される”は、一般的に、電気、光、磁気等の接続を含む、有線であるか無線であるかに関わらない、間接的な通信接続又は(例えば、介在するコンポーネントのない)直接的な通信接続であり得るコンポーネント間の接続を指す。
【0013】
ホストシステム120は、デスクトップコンピュータ、ラップトップコンピュータ、ネットワークサーバ、モバイルデバイス、組み込みコンピュータ(例えば、車両、産業用機器、若しくはネットワーク化された商用デバイスに含まれるもの)、ストレージシステムプロセッサ、又はメモリ及び処理デバイスを含むそうしたコンピューティングデバイス等のコンピューティングデバイスであり得る。ホストシステム120は、メモリサブシステム110を含み得、又はそれに結合され得、その結果、ホストシステム120は、メモリサブシステム110からデータを読み出し、又はメモリサブシステム110にデータを書き込み得る。ホストシステム120は、物理的ホストインターフェースを介してメモリサブシステム110に結合され得る。物理的ホストインターフェースの例は、シリアルアドバンスドテクノロジーアタッチメント(SATA)インターフェース、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)インターフェース、ユニバーサルシリアルバス(USB)インターフェース、ファイバーチャネル、シリアルアタッチドSCSI(SAS)等を含むが、これらに限定されない。物理的ホストインターフェースは、ホストシステム120とメモリサブシステム110との間でデータを送信するために使用され得る。ホストシステム120は、メモリサブシステム110がPCIeインターフェースによりホストシステム120と結合されている場合にメモリコンポーネント112A~112Nにアクセスするために、NVM Express(NVMe)プロトコルインターフェースを更に利用し得る。物理的ホストインターフェースは、メモリサブシステム110とホストシステム120との間で制御、アドレス、データ、及びその他の信号を渡すためのインターフェースを提供し得る。
【0014】
メモリコンポーネント112A~112Nは、異なるタイプの不揮発性メモリコンポーネント及び/又は揮発性メモリコンポーネントの任意の組み合わせを含み得る。不揮発性メモリコンポーネントの例は、ネガティブand(NAND)タイプフラッシュメモリを含む。メモリコンポーネント112A~112Nの各々は、例えば、シングルレベルセル(SLC)、マルチレベルセル(MLC)、トリプルレベルセル(TLC)、又はクアッドレベルセル(QLC)等のメモリセルの1つ以上のアレイを含むダイであり得る。メモリセルの各々は、ホストシステム120により使用されるデータの1つ以上のビットを蓄積し得る。NANDタイプフラッシュメモリ等の不揮発性メモリコンポーネントが説明されているが、メモリコンポーネント112A~112Nは、揮発性メモリ等の任意のその他のタイプのメモリに基づき得る。幾つかの実施形態では、メモリコンポーネント112A~112Nは、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、同期型ダイナミックランダムアクセスメモリ(SDRAM)、相変化メモリ(PCM)、マグネトランダムアクセスメモリ(MRAM)、ネガティブor(NOR)フラッシュメモリ、電気的消去可能プログラマブルリードオンリーメモリ(EEPROM)、ReRAM、NRAM(ナノRAM、抵抗性不揮発性ランダムアクセスメモリ)、及び不揮発性メモリセルのクロスポイントアレイであり得るが、これらに限定されない。不揮発性メモリのクロスポイントアレイは、積み重ね可能なクロスグリッドデータアクセスアレイと組み合わせて、バルク抵抗の変化に基づいてビットストレージを実施し得る。また、多くのフラッシュベースのメモリとは対照的に、クロスポイント不揮発性メモリは、不揮発性メモリセルを事前に消去することなく不揮発性メモリセルがプログラミングされ得る書き込みインプレース動作を実施し得る。更に、メモリコンポーネント112A~112Nのメモリセルは、ページを形成するためにグループ化され得、又はそれは、データを蓄積するために使用されるメモリコンポーネントのユニットを指し得る。メモリ(例えば、NAND)の内の幾つかのタイプでは、ページは、ブロックを形成するためにグループ化され得る。
【0015】
メモリシステムコントローラ115(以下、“コントローラ”又は“(複数の)コントローラ”と称する)は、コンポーネント112A~112Nにおけるデータの読み出し、データの書き込み、又はメモリでのデータの消去等の動作、及びその他のそうした動作を実施するために、メモリコンポーネント112A~112Nと通信し得る。一実施形態では、
図3~
図4及び
図5~
図6を参照して説明するように、メモリサブシステム110は、特定の媒体タイプの1つ以上のメモリコンポーネント112A~112Nのセットのためのコントローラ115を含む。例えば、メモリサブシステムは、1つ以上のSLCメモリコンポーネント112A~112Nのセットを管理するための第1のコントローラ115、1つ以上のTLCメモリコンポーネント112A~112Nのセットを管理するための第2のコントローラ115等を含み得る。
【0016】
各コントローラ115は、1つ以上の集積回路及び/若しくは個別のコンポーネント、バッファメモリ、又はそれらの組み合わせ等のハードウェアを含み得る。コントローラ115は、マイクロコントローラ、特殊目的論理回路(例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等)、又は別の適切なプロセッサであり得る。コントローラ115は、ローカルメモリ119内に蓄積された命令を実行するように構成されたプロセッサ(処理デバイス)117を含み得る。説明する例では、コントローラ115のローカルメモリ119は、メモリサブシステム110とホストシステム120との間の通信の処理を含む、メモリサブシステム110の動作を制御する様々なプロセス、動作、ルーチンを実施するための命令を蓄積するように構成された組み込みメモリを含む。幾つかの実施形態では、ローカルメモリ119は、メモリポインタ、フェッチされたデータ等を蓄積するメモリレジスタを含み得る。ローカルメモリ119はまた、マイクロコードを蓄積するためのリードオンリーメモリ(ROM)を含み得る。
図1のメモリサブシステム110は、コントローラ115を含むものとして説明されているが、本開示の別の実施形態では、メモリサブシステム110は、コントローラ115を含まなくてもよく、代わりに、(例えば、メモリサブシステム110とは別のホスト、プロセッサ、又はコントローラにより提供される)メモリコンポーネント112A~112Nの管理の内の少なくとも幾つかのための外部制御に依拠し得る。
【0017】
一般的に、コントローラ115は、ホストシステム120からコマンド又は動作を受信し得、コマンド又は動作を、メモリコンポーネント112A~112Nへの所望のアクセスを達成するための命令又は適切なコマンドに変換し得る。コントローラ115は、ウェアレベリング動作、ガベージコレクション動作、エラー検出及びエラー訂正コード(ECC)動作、暗号化動作、重複排除動作、圧縮動作、キャッシング動作、及びメモリコンポーネント112A~112Nと関連付けられた論理アドレス(例えば、論理ブロックアドレス(LBA))と物理アドレス(例えば、物理ブロックアドレス)との間のアドレス変換等のその他の動作を担当し得る。コントローラ115は、物理的ホストインターフェースを介してホストシステム120と通信するためのホストインターフェース回路を更に含み得る。ホストインターフェース回路は、ホストシステムから受信したコマンドを、メモリコンポーネント112A~112Nにアクセスするためのコマンド命令に変換し得ると共に、メモリコンポーネント112A~112Nと関連付けられた応答をホストシステム120に対する情報に変換し得る。
【0018】
メモリコンポーネント112A~112Nの内の何れか1つは、メモリコンポーネント112A~112Nのメモリセルを管理するための、メモリサブシステムコントローラ115と通信するための、及びメモリサブシステムコントローラ115から受信したメモリリクエスト(例えば、読み出し又は書き込み)を実行するための媒体コントローラ(例えば、媒体コントローラ130A及び媒体コントローラ130N)を含み得る。
【0019】
メモリサブシステム110はまた、説明されない追加の回路又はコンポーネントを含み得る。幾つかの実施形態では、メモリサブシステム110は、キャッシュ又はバッファ(例えば、DRAM)、及びコントローラ115からアドレスを受信し得、メモリコンポーネント112A~112Nにアクセスするために該アドレスをデコードし得るアドレス回路(例えば、行デコーダ及び列デコーダ)を含み得る。
【0020】
ホストシステム120は、異種の媒体タイプのメモリコンポーネントを使用してブロックデバイスを割り当て及び管理し得るブロックデバイスマネージャ113を含む。ブロックデバイスマネージャは、以下では、“異種のブロックデバイスマネージャ”又は“(複数の)異種のブロックデバイスマネージャ”とも称される。一実施形態では、ブロックデバイスマネージャ113は、メモリサブシステム管理スタック125、例えば、ホストアプリケーションにより使用される論理ブロックアドレスと、メモリサブシステム及びそのコンポーネント112A~112Nと関連付けられた物理ブロックアドレスとの間のアドレス変換を提供するソフトウェアスタック又はソリューションスタックの一部である。例えば、これは、ホストシステム120が抽象化された方法でメモリサブシステムに対して読み出す/書き込むことを可能にするスモールコンピュータシステムインターフェース(SCSI)又はNVMeブロックデバイス管理スタックであり得る。例えば、メモリサブシステム管理スタック125は、ホストシステム120が入力/出力スケジューリング、データ配置、ガベージコレクション、及びウェアレベリング等の、コントローラ115により内部的に従来は管理されるであろう態様を制御することをも可能にするオープンチャネルメモリシステムであり得る。メモリサブシステム管理スタック125は、マイクロコントローラ、専用論理回路(例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等)、又は別の適切なプロセッサであり得、又はそれらを含み得る。また、ローカルメモリ135内に蓄積された命令を実行するように構成された1つ以上のプロセッサ130(処理デバイス)は、メモリサブシステム管理スタック125の少なくとも一部分を実装し得る。例えば、プロセッサ130は、本明細書に説明する動作を実施するためのローカルメモリ135内に蓄積された命令を実行し得る。本明細書の説明は、ホストシステム120の一部であるブロックデバイスマネージャ113に焦点を当てているが、幾つかの実施形態では、ブロックデバイスマネージャ113の機能の内の幾つか又は全ては、コントローラ115内に実装される。ブロックデバイスマネージャ113の動作に関する更なる詳細は以下に説明される。
【0021】
図2は、幾つかの実施形態に従ったブロックデバイスをホストするための複数の異種のメモリコンポーネントの最初の割り当てを説明する。示されるように、メモリサブシステム110は、ホストシステム120に結合される。メモリサブシステム110は、上に説明したメモリサブシステム110の詳細な例であり、メモリデバイス208、220、及び232をホストシステム120に結合するメモリバス207を含む。メモリデバイス208、220、及び232の各々は、コントローラ210、222、及び234として示されるコントローラを含み、これらは、上に説明したコントローラ115の例である。メモリデバイス208、220、及び232の各々は、1つ以上のメモリコンポーネントのセットを含み、これらは、上に説明したメモリコンポーネント112A~112Nの例である。一実施形態では、メモリデバイス208、220、及び232の各々は、単一のタイプの媒体のメモリモジュールである。
【0022】
メモリデバイス208は、コントローラ210と、4つのQLCメモリコンポーネント212、214、216、及び218とを含む。幾つかの実施形態では、ここでのように、メモリコンポーネント212、214、216、及び218は、チャネルによって並列ユニットに抽象化され得る(本明細書で使用するとき、並列ユニットは、チャネル内のメモリコンポーネントを指す)。例えば、異なるメモリコンポーネントは、異なるチャネル又はグループを介してコントローラに結合され得、並列処理及びスループットを向上させる。こうしたグループは、アドレッシングの別のレイヤーを提供する。QLCメモリコンポーネント216及び218は、並列ユニット219の一部である。メモリデバイス208は、開示する実施形態に従えば、4つのメモリコンポーネントを有することに限定されない。図示されない他の実施形態では、メモリデバイス208は、より多くのQLCメモリコンポーネントを含む。
【0023】
メモリデバイス220は、コントローラ222と、4つのQLCメモリコンポーネント224、226、228、及び230とを含む。QLCメモリコンポーネント228及び230は、並列ユニット231の一部である。メモリデバイス220は、開示する実施形態に従えば、4つのメモリコンポーネントを有することに限定されない。図示されない他の実施形態では、メモリデバイス220は、より多くのQLCメモリコンポーネントを含む。
【0024】
メモリデバイス232は、コントローラ234と、4つのSLCメモリコンポーネント236、238、240、及び242とを含む。SLCメモリコンポーネント240及び242は、並列ユニット243の一部である。メモリデバイス232は、開示する実施形態に従えば、4つのメモリコンポーネントを有することに限定されない。他の実施形態では、メモリデバイス232は、より多くのSLCメモリコンポーネントを含む。
【0025】
ここでは、QLC及びSLCメモリデバイスを含むメモリサブシステム110が示されている。他の実施形態は、SLC、MLC、TLC、又はQLCフラッシュメモリ、及び/若しくは不揮発性メモリセルのクロスポイントアレイ、又はReRAM若しくはNRAM若しくはMRAM若しくはSTT MRAM、FRAM等のその他のNVMを含む様々な媒体タイプの内の何れかを有するメモリコンポーネントを含む。典型的には、SLCメモリコンポーネントは、MLC、TLC、及びQLCよりも、読み出し及び書き込みの観点でより高い性能を有する。QLCメモリコンポーネントはセル毎に4ビットを蓄積し得、SLCメモリコンポーネントよりもビット当たりの多い容量と、低コストをもたらす。したがって、説明するメモリコンポーネントのタイプは、セル毎に蓄積されるビットがSLCからMLC、TLC、QLCメモリデバイスに増加するにつれて、コストと性能速度が低下する。
【0026】
動作中、ブロックデバイスマネージャ113は、ホストシステム120から、ブロックデバイス244を構築するためのリクエストを受信する。例えば、ブロックデバイスマネージャ113は、物理ユニット、ダイ、及び/又は論理ユニット番号(LUN)を割り当てることによってブロックデバイス244を構築する。幾つかの実施形態では、メモリデバイス208、220、及び232は、それらの内部ストレージリソースをホストシステム120に可視化させる。幾つかの実施形態では、ホストシステム120は、例えば、メモリデバイスにジオメトリコマンドを発行することによって、メモリデバイス208、220、及び232内のメモリコンポーネントのジオメトリを発見し得る。本明細書で使用するとき、“ジオメトリ”は、メモリデバイス内のグループ、並列ユニット、及びチャンクの境界を指す。ホストシステム120は、ブロックデバイスを構築するためのリクエストと共に(又はそれに加えて)リクエストされたジオメトリをその後指定し得る。
【0027】
一実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスを実装するために、メモリデバイス208、220、及び232を含むメモリデバイスのプールの中から複数のメモリデバイスを選択する。選択されたメモリデバイスの中から、ブロックデバイスマネージャ113は、ブロックデバイス244を実装するために、複数のメモリコンポーネントを更に選択する。示されるように、ブロックデバイスマネージャ113は、ブロックデバイス244を実装するために、メモリデバイスの一部分を割り当て、例えば、6つのメモリコンポーネントの物理ユニット(PU)、ダイ、及び/又は論理ユニット番号(LUN)を割り当てる。選択された部分は、本明細書では、割り当て、分配、又は分配部分と称されることがある。示されるように、ブロックデバイス244を構築するために使用される割り当ては、異種のメモリコンポーネント(SLC及びQLCメモリコンポーネント)の中から選択される。幾つかの実施形態では、ブロックデバイスマネージャ113は、ホストシステム120により指し示されるように、選択された割り当ての媒体タイプをブロックデバイス244のニーズに一致させ得る。表1は、ブロックデバイスマネージャ113によるブロックデバイス244の実装を示し、これは、
図2にも説明されている。
【表1】
【0028】
ブロックデバイスマネージャ113は、ブロックデバイス244を実装する複数のメモリコンポーネントにアクセスするために使用される階層アドレスをその後生成し、メモリサブシステム管理スタック125に提供する。例えば、ブロックデバイスマネージャ113は、ブロックデバイス244に割り当てられた媒体の階層的アドレスをメモリサブシステム管理スタック125に提供する。階層は、メモリデバイス、(関連するジオメトリ情報を有する)メモリコンポーネント、及びメモリコンポーネント112内の論理ブロック、チャンク、又はページを含む。
【0029】
幾つかの実施形態では、ブロックデバイスを構築するためのリクエストと共に、ブロックデバイスマネージャ113は、ホストシステム120から、ブロックデバイスのニーズの指標を受信する。こうしたニーズは、容量、性能、耐久性、又は電力消費を含み得る。或いは、ホストシステム120は、媒体タイプの観点でそうしたニーズを指し示し得る。幾つかの実施形態では、ブロックデバイスマネージャ113は、2つ以上のそうしたニーズ及び各ニーズに属するストレージの量の指標を受信する。それに応じて、ブロックデバイスマネージャ113は、複数のメモリデバイス及び複数のメモリコンポーネントを選択する場合に、ブロックデバイスに対するニーズを、対応する媒体タイプのメモリデバイス及びコンポーネントと一致させる。例えば、リクエストは、ブロックデバイスの半分が高性能/低レイテンシのストレージである一方、他の半分は大容量ストレージであることを指し示し得る。それに応じて、ブロックデバイスマネージャ113は、高性能/低レイテンシのストレージのニーズを満たすためにSLC媒体を選択し得、大容量のストレージのニーズを満たすためにQLC媒体を選択し得る。ホストシステム120はまた、シンプロビジョニングされたブロックデバイスをリクエストし得る(例えば、最初に50%の容量のみを割り当て得、その後、要求に応じて拡張し得る)。ホストシステム120はまた、ブロックデバイスマネージャ113に、割り当てられた容量を縮小するようにリクエストし得る(例えば、使用されていない場合に50%の容量を割り当て解除し得る)。
【0030】
図3は、幾つかの実施形態に従ったブロックデバイス構成のオンデマンドの変更を説明する。該図は、
図2に説明し、表1に説明したような、メモリサブシステム110からブロックデバイス244への割り当ての再構成を説明する。ブロックデバイスマネージャ113は、ホストがリクエストしたジオメトリに応答してメモリデバイス208、220、及び232の6つのメモリコンポーネント214、224、236、226、238、及び216(夫々、割り当て1、2、3、4、5、及び6)を選択及び集約することによって、ブロックデバイス244を最初に構築されている。
図3に示すように、ブロックデバイスマネージャ113は、割り当て2~5を移行し、割り当て6を除去し、割り当て7及び8を追加するように、ブロックデバイスの割り当てを変更している。この再構成された割り当ては、7つの割り当て(すなわち、容量の交換及び拡張)の集合体を含むブロックデバイス394として説明されている。表2は、ブロックデバイスマネージャ113によるブロックデバイス394の実装を示し、これは、
図3にも示されている。図示及び説明したように、ブロックデバイスマネージャ113は、夫々、割り当て1、2、3、4、5、7、及び8からなるジオメトリをホストするために、メモリコンポーネント214、212、240、242、218、226、及び238を有するブロックデバイス394を実装する。
【表2】
【0031】
幾つかの実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスを動的に変更することを要求する1つ以上のトリガーを受信し得る。そうした実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスを再構成することによって応答し得る。例えば、ホストシステム120は、ブロックデバイスを拡張するためにブロックデバイスマネージャ113をトリガーするリクエストを発行し得る。幾つかの実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスを既に実装しているメモリデバイスの内の1つ、プールされたメモリデバイスのメモリデバイスの内の1つ、又はメモリデバイスのプールに追加されているメモリデバイスの中から追加のメモリコンポーネント(又はその一部分)を選択することと、拡張されたブロックデバイスを実装するために追加のメモリコンポーネントを以前に選択されたメモリコンポーネントと集約することによって応答する。ブロックデバイスのそうした拡張の例は、メモリデバイス220のメモリコンポーネント226内の新たに追加された分配7と、メモリデバイス232のメモリコンポーネント238内の新たに追加された分配8とを含む。ブロックデバイス244を構築するための方法は、以下の
図4を参照して更に説明される。
【0032】
ブロックデバイスのオンデマンドの拡張をサポートすることによって、開示する実施形態は、ホストシステム120が必要に応じてブロックデバイスの容量を増加させること、又は割り当て解除された分配を交換することを可能にする。
【0033】
幾つかの実施形態では、ホストシステム120は、ブロックデバイスの一部分又は割り当てられた分配を収縮、期限切れ、又は割り当て解除する、さもなければブロックデバイスを縮小するためにブロックデバイスマネージャ113をトリガーするリクエストを発行する。再構成されたブロックデバイス394内の分配6の除去は、そうした割り当て解除の一例である。ここで、
図3に示し、表2に説明したように、ブロックデバイスマネージャ113は、割り当て6に割り当てられたストレージを割り当て解除している。
【0034】
ブロックデバイスのオンデマンドの縮小を可能にすることによって、開示する実施形態は、障害のある又は性能の低いメモリデバイスの除去/交換を可能にする。不要なメモリコンポーネントを割り当て解除することはまた、割り当て解除されたストレージ容量を別の目的でホストシステム120に利用可能させ得る。
【0035】
幾つかの実施形態では、ホストシステム120は、ブロックデバイスの一部を第1のメモリコンポーネントから同じメモリデバイス上の同じ媒体タイプの第2のメモリコンポーネントに移行するためにブロックデバイスマネージャ113をトリガーするリクエストを発行する。こうしたニーズは、データへのアクセスのより高い並列処理を可能にするため、障害のあるメモリコンポーネントからデータを移動するためにデータを別の場所に配置する必要性、ホストシステムの性能、容量、及び電力消費のニーズの内の1つ以上の変化等、様々な理由で発生し得る。ブロックデバイスマネージャ113は、分配を移行する別のメモリコンポーネントを選択することと、以前に選択されたメモリコンポーネントから新たに選択されたメモリコンポーネントにデータをコピーすることによって応答する。新たに選択されたメモリコンポーネントは、ホストシステム120からのリクエストの一部として指し示され得る。同じメモリデバイス内の移行の例は、メモリデバイス232のメモリコンポーネント236から同じメモリデバイス232内の同じタイプのメモリコンポーネント240への割り当て3の移行として説明される。
【0036】
幾つかの実施形態では、分配を、同じ媒体タイプであるが異なるメモリデバイス内の別のメモリコンポーネントに移行する必要が生じる。例えば、メモリデバイス又はコンポーネントの障害は、1つ以上の分配の移行をトリガーし得る。ブロックデバイスマネージャ113は、分配を移行するメモリコンポーネントを自動的に選択し得、又は対象のメモリコンポーネントは、ホストシステム120からのリクエストの一部として指し示され得る。そうした移行の例は、メモリデバイス220のコンポーネント224からメモリデバイス208の同じタイプのメモリコンポーネント212への分配2の移行として説明される。
【0037】
幾つかの実施形態では、ブロックデバイスマネージャ113は、第1のメモリデバイス、又は第1のメモリデバイス内のメモリコンポーネントが耐久性レベルの閾値に達した指標を第1のメモリデバイスから受信する。耐久性レベルの閾値は、幾つかの実施形態では、所定の閾値又はプログラミング可能な閾値である。他の実施形態では、ブロックデバイスマネージャ113は、ホストシステム120から指標を受信し得る。幾つかの実施形態では、指標は、第2のメモリデバイスの選択及びブロックデバイスの一部分の第2のメモリデバイスへの移行を自動的にトリガーする。
【0038】
幾つかの実施形態では、ホストシステム120は、性能、容量、又は電力消費のニーズの変化に応じて、ブロックデバイスの再構成をリクエストする。例えば、高性能メモリをもはや必要としない(又はあまり必要としない)アプリケーションは、ブロックデバイスマネージャ113に、ブロックデバイスの一部を低性能の媒体タイプに移行するように命令し得る。同様に、アプリケーションは、より多くの容量を必要とし得、又は電力消費を削減することを必要とし得る。そうした実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスの一部分を(複数のメモリコンポーネントの内の)1つのメモリコンポーネントから(メモリデバイスのプールの)別のメモリデバイスの別のメモリコンポーネントに移行し得る。一実施形態では、第2のメモリコンポーネントは、第1のメモリコンポーネントとは異なる媒体タイプのものである。例えば、第2のメモリコンポーネントの媒体タイプは、ホストシステムの性能、容量、及び電力消費のニーズの内の1つ以上を満たすために、第1のメモリコンポーネントよりもより良く適し得る。上の例に従うと、異なる媒体タイプは、低コストで低電力の媒体タイプであり得る。ブロックデバイスマネージャ113は、同様に、データを低性能の媒体タイプから高性能の媒体タイプに移行し得る。開示する実施形態は、そうした電力及びコストの最適化を可能にする。割り当てを高性能のメモリコンポーネントから低性能で低コストのメモリコンポーネントに移行する例は、SLCメモリデバイス232のメモリコンポーネント238からQLCメモリデバイス208のメモリコンポーネント218への分配5の移行として説明される。
【0039】
低性能で低コストの媒体タイプからより高性能でより高コストの媒体タイプへの分配の移行の例は、メモリデバイス220のQLCメモリコンポーネント226からメモリデバイス232のSLCメモリコンポーネント242への分配4の移行として説明される。
【0040】
別の例では、幾つかの実施形態では、1つ以上のメモリデバイス及びメモリコンポーネントは、最初に、ブロックデバイスの一部として割り当てられる。幾つかの実施形態は、ホストシステムのニーズ(例えば、階層化を実装するため、又はキャッシングを実装するために新たにリクエストされたジオメトリ)の変化に起因してブロックデバイスを再構築するためのトリガーに応答する。幾つかのそうした実施形態では、メモリデバイスのプールからメモリデバイスの新たなグループを選択することと、メモリデバイスの新たなグループの中から最大2つ以上の異なる媒体タイプを含むメモリコンポーネントの新たなグループを選択することと、新たなブロックデバイスを構築するためにメモリコンポーネントの新たなグループを集約することによって、新たなブロックデバイスが構築される。ブロックデバイスを構築する前又は後に、メモリデバイスがメモリデバイスのプールに追加又はプールから除去され得、それによってメモリデバイスの新たなプールを創出することに留意すべきである。例えば、幾つかの実施形態は、最初に、0個以上のメモリデバイスをプールされたメモリデバイスに追加又は除去することによってブロックデバイスを再構築するためのトリガーに応答する。
【0041】
開示する実施形態はまた、Redundant Array of Independent Component(RAIMC)として動作するブロックデバイスを構築することによって、冗長性、フォールトトレランス、及び性能における利点を得ることができる。本明細書で使用されるとき、RAIMCは、(論理ユニットを創出するために複数のディスクを使用するRedundant Array of Independent Disk(RAID)とは対照的に)メモリサブシステム内のメモリデバイスに渡る複数の物理メモリコンポーネントを1つの論理ユニットに結合する。より具体的には、幾つかの実施形態では、処理デバイス(すなわち、ブロックデバイスマネージャ)は、RAIMCとして使用されるサブシステム/デバイスから複数のメモリコンポーネントを選択する。処理デバイスは、ホストシステムに、第1のメモリコンポーネントにアクセスするための階層アドレスを提供する。階層アドレスは、関連するホストシステムのホストIDと、関連するメモリデバイスのデバイスIDとを含む。処理デバイスは、複数のメモリコンポーネントに渡って第1のメモリコンポーネントにアドレッシングされたデータアクセスをストライピング及び/又は複製する。幾つかの実施形態では、処理デバイスはまた、データ要素毎に、エラー訂正値を蓄積する(例えば、パリティ値は、複製された第1及び第2のメモリコンポーネントの2つの対応する要素の排他的OR(XOR)がゼロ以外である場合にデータエラーを指し示す第3のメモリコンポーネント内に蓄積され得る)。幾つかの実施形態では、RAIMCは、n=m+kであるように、合計n個のメモリコンポーネントを含み、そのうちのm個のコンポーネントがデータを蓄積し、k個のコンポーネントがパリティ情報を蓄積するイレイジャーコーディングアルゴリズムを用いて使用される。開示する実施形態は、それらが同じメモリデバイス、メモリサブシステム、若しくはホストシステム内にあるか、及び/又は異なるメモリデバイス、メモリサブシステム、又はホストシステム内にあるかにかかわらず、異種のメモリコンポーネントを使用してRAIMCの構築を可能にする。
【0042】
図4は、本開示の幾つかの実施形態に従った異種のブロックデバイスを構築するための例示的な方法のフロー図である。方法400は、ハードウェア(例えば、処理デバイス、回路、専用ロジック、プログラミング可能なロジック、マイクロコード、デバイスのハードウェア、集積回路等)、ソフトウェア(例えば、処理デバイス上で実行(run)又は実行(execute)される命令)、又はそれらの組み合わせを含み得る処理ロジックによって実施され得る。幾つかの実施形態では、方法400は、
図1のブロックデバイスマネージャ113によって実施される。特定のシーケンス又は順序で示されているが、特に指定がない限り、プロセスの順序は変更され得る。したがって、説明する実施形態は、例としてのみ理解されるべきであり、説明するプロセスは、異なる順序で実施され得る。幾つかのプロセスは並行して実施され得る。また、様々な実施形態では、1つ以上のプロセスが省略され得る。したがって、あらゆる実施形態で全てのプロセスが必要とされない。その他のプロセスフローも可能である。
【0043】
動作405において、処理デバイスは、ブロックデバイスを構築するためのリクエストを受信し得る。例えば、ブロックデバイスマネージャ113は、ホストシステム120内で実行するオペレーティングシステム、アプリケーション、又は別のプロセスからブロックデバイスのリクエストを受信する。一実施形態では、リクエストは、ブロックデバイスのニーズを指し示す。一実施形態では、ニーズは、容量、性能、耐久性、又は電力消費の内の2つ以上を含む。一実施形態では、リクエストは、ブロックデバイスに対するリクエストされたジオメトリ(例えば、メモリデバイスの数、デバイス内のメモリコンポーネントに対する並列ユニット/グループ等)を指定する。
【0044】
動作410において、処理デバイスは、メモリデバイスのプールの中から複数のメモリデバイスを選択する。例えば、ブロックデバイスマネージャ113は、メモリデバイスのプール内の関連するジオメトリを有する利用可能なメモリコンポーネントリソースをリスト化するデータ構造を維持し得る。
【0045】
一実施形態では、そうした可用性データ構造は、利用可能なメモリデバイス、それらの中の利用可能なメモリコンポーネント、利用可能な媒体タイプ、まだ割り当てられていないストレージ範囲等をリスト化する。幾つかの実施形態では、可用性データ構造は、利用可能なストレージスペース、例えば、利用可能な最大の連続ブロック、利用可能な最小のブロック、ジオメトリ(並列ユニット/グループ)等の特性をも含む。一実施形態では、可用性データ構造は、分配されたストレージスペース及びメモリデバイス統計のオンデマンドのレポートを準備するために使用される。幾つかの実施形態では、可用性データ構造は、方法400を実施するブロックデバイスマネージャ113によって維持される。可用性データ構造を参照して、例えば、ブロックデバイスマネージャ113は、メモリデバイス208、220、及び232のリスト(例えば、プール)の中から複数のメモリデバイスを選択する。幾つかの実施形態では、ブロックデバイスマネージャ113は、分配されたストレージスペースを複数のメモリデバイス及びコンポーネントに均等に分散するように試みることによってシステム全体のストレージ利用のバランスをとる選択戦略を適用する。一例では、リクエストがリクエストされたジオメトリを含む場合、ブロックデバイスマネージャ113は、リクエストに一致するように複数のメモリデバイスを選択する。
【0046】
動作415において、処理デバイスは、複数のメモリデバイスの中から最大2つ以上(すなわち、1つ、2つ、3つ、又はそれ以上)の異なる媒体タイプを有する複数のメモリコンポーネントを選択する。例えば、上記のように、ブロックデバイスマネージャ113は、可用性データ構造を維持し得、リクエストに従ってメモリコンポーネントを選択し得る。一例では、ブロックデバイスマネージャ113は、可用性データ構造にアクセスし、複数のメモリデバイスの中から最大2つ以上(すなわち、1つ、2つ、3つ、又はそれ以上)の異なる媒体タイプを有する複数のメモリコンポーネント214、224、236、226、238、及び216を選択する。この例では、選択されたメモリコンポーネントは、2つの異なる媒体タイプ、SLC及びQLCを有する。幾つかの実施形態では、ブロックデバイスマネージャ113は、同種の媒体タイプ(例えば、全てSLC)を有するメモリコンポーネントを選択する。
【0047】
動作420において、処理デバイスは、ブロックデバイスを実装するために複数のメモリコンポーネントを集約する。例えば、ブロックデバイスマネージャ113は、割り当てられた複数のメモリコンポーネントにアクセスするために使用される階層アドレスを識別する。こうした階層アドレスは、関連するメモリデバイスのデバイスIDを夫々含む。
【0048】
一実施形態では、ブロックデバイスマネージャ113は、複数の割り当てられたメモリコンポーネントを集約し、ブロックデバイス244のジオメトリを詳述するジオメトリデータ構造を構築する。例えば、そうしたジオメトリデータ構造は、論理ブロックアドレス、並列ユニット/グループ、及びブロックデバイスを構成するメモリコンポーネントの割り当てのアドレス形式を含み得る。また、こうしたジオメトリデータ構造は、最小の書き込みデータサイズ等の書き込みデータ要件を指定し得る。ジオメトリデータ構造は、読み出し、書き込み、リセットに対する標準時間及び最大時間等、性能関連のメトリックを指し示し得る。
【0049】
一実施形態では、ブロックデバイスマネージャ113は、過去のリクエストに対して行われた割り当てを含む、過去の割り当てを指し示すログ又は履歴データ構造を維持する。
【0050】
ブロックデバイスマネージャ113は、リクエストに応答して新たな割り当てが提供される場合に、そうしたデータ構造を更新する。一実施形態では、履歴データ構造は、故障又は障害(例えば、メモリコンポーネントの障害又はメモリデバイスの障害)の場合にブロックデバイスを再構築するために使用され得る。
【0051】
動作425において、処理デバイスは、メモリサブシステム管理スタックに、複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供する。例えば、ブロックデバイスマネージャ113は、動作420において創出されたジオメトリデータ構造をメモリサブシステム管理スタック125に提供する。メモリサブシステム管理スタック125に提供される階層アドレスは、関連するメモリデバイスのデバイスIDを各々含む。階層アドレスは、メモリデバイス内の個々のメモリコンポーネントに必要であり得るジオメトリ及びその他のアドレッシングをも含み得る。
【0052】
幾つかの実施形態では、階層アドレスは、以下を含む、各メモリコンポーネントと関連付けられたアドレス階層の幾つかのレイヤーを識別するフィールドを含む。
・デバイスID:関連するメモリデバイスを識別する。
・グループ:デバイス上の異なる転送バス又はチャネル上に各々ある並列ユニット(PU)の集合。
・パラレルユニット(PU):デバイス上の同じ転送バス又はチャネルを共有する個々のメモリコンポーネントの集合。
・論理ブロック:読み出し及び書き込みに対する最小のアドレッシング可能単位。
・チャンク:論理ブロックの集合。リセット(消去)に対する最小のアドレッシング可能単位でもあり得る。
【0053】
一実施形態では、メモリサブシステム管理スタック125は、将来の使用のために、1つ以上のブロックデバイスに割り当てられた論理アドレスを含む割り当てデータ構造を維持する。別の実施形態では、コンピューティング環境100内のメモリデバイスの各々は、過去の分配についての詳細をリスト化する割り当てデータ構造を維持する。こうした割り当てデータ構造は、故障(例えば、メモリコンポーネント又はデバイスの障害)の場合場合にブロックデバイスの割り当てを再構築するために使用され得る。こうした割り当てデータ構造は、システム全体のストレージ割り当てのオンデマンドのレポートを生成するためにも使用され得る。
【0054】
動作430において、処理デバイスは、ブロックデバイスを拡張、縮小、若しくは再構築するため、又はブロックデバイス内のメモリコンポーネントを移行するための1つ以上のトリガーに応答する。幾つかの実施形態では、処理デバイスは、新たなメモリデバイス又は新たなメモリコンポーネントをブロックデバイスに追加し得る。例えば、ブロックデバイスマネージャ113は、ブロックデバイスを動的に変更するために、以下のトリガーの内の何れかの発生を認識し得、1)コンポーネントの障害(例えば、メモリコンポーネント又はメモリデバイスの障害)、2)耐久性の変化(すなわち、メモリデバイスが耐久性レベルの閾値に近づくこと)、3)性能ニーズの変化(例えば、ホストシステムの性能要件の増加又は性能要件の減少)、4)容量ニーズの変化(例えば、ホストシステムの容量要件の増加又は容量要件の減少)、5)消費電力のニーズの変化(例えば、電力バジェットの増加は、より多くの又はより高速の媒体の追加が必要になり得、電力バジェットの減少は、幾つかのストレージ媒体を割り当て解除し、又はブロックデバイスの一部分をより低性能でより低電力の媒体タイプに移行する必要があり得る)、及び6)その他の変化するニーズ(例えば、新たにリクエストされたジオメトリ、階層化を実装するニーズ、又はキャッシングを実装するニーズ)。開示する実施形態は、ブロックデバイスを動的に再構築又は変更することによって、そうしたトリガーに応答する。
【0055】
例えば、幾つかの実施形態では、ホストシステム120がより高性能のストレージを必要とする場合、それは、ブロックデバイスの一部をより高性能の媒体タイプに移行する。そうした実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスの一部分を、第1の複数のメモリデバイスのメモリコンポーネントから、異なるより高性能の媒体タイプを有する第2のメモリデバイス上のメモリコンポーネントに移行する。第1及び第2のメモリデバイスは、同じホストシステム又は異なるホストシステムの何れかと関連付けられ得る。割り当てを低性能で低コストの媒体タイプから高性能の媒体タイプに移行する例は、
図2~
図3に説明したように、メモリデバイス220のQLCメモリコンポーネント226からメモリデバイス232のSLCメモリコンポーネント242への割り当て4の移行として説明される。
【0056】
異種の不揮発性メモリコンポーネントを含む異種のメモリコンポーネント間の割り当てのオンデマンドの移行を可能にすることによって、幾つかの開示する実施形態は、動的キャッシングの割り当てを可能にすることによって性能を改善する。
【0057】
別の例では、幾つかの実施形態では、1つ以上のメモリデバイス及びメモリコンポーネントは、最初に、ブロックデバイスの一部として割り当てられる。幾つかの実施形態は、ホストシステムのニーズ(例えば、階層化を実装するため、又はキャッシングを実装するための新たに要求されたジオメトリ)の変化に起因してブロックデバイスが再構築されることを指し示すトリガーに応答する。幾つかのそうした実施形態では、メモリデバイスのプールからメモリデバイスの新たなグループを選択することと、メモリデバイスの新たなグループの中から最大2つ以上の異なる媒体タイプを含むメモリコンポーネントの新たなグループを選択することと、新たなブロックデバイスを構築するためにメモリコンポーネントの新たなグループを集約することによって、新たなブロックデバイスが構築される。
【0058】
一旦構築されると、ブロックデバイスのメモリコンポーネントにアクセスするために使用される階層アドレスがホストシステムに提供される。ここで、階層アドレスは、上で説明したように、各メモリコンポーネントと関連付けられたホストIDと共に、デバイスID、グループ、並列ユニット、論理ブロック、及びチャンクに対する識別子を含み得る。
【0059】
図5は、幾つかの実施形態に従ったブロックデバイスをホストするための複数の異種のメモリコンポーネントの別の最初の割り当てを説明する。示されるように、コンピューティングシステム500は、ホストシステム501、502、及び503のプールを含み、それらの各々は、ブロックデバイスマネージャ113を含む。ホストシステム501、502、及び503は、上に説明したホストシステム120の例である。動作中、ホストシステムは、ホストシステムのプールに追加され得、又は該プールから除去され得ることに留意すべきである。例えば、ブロックデバイスは、ホストシステムのプールに追加されている別のホストシステム内の追加されたメモリデバイスから選択されたメモリコンポーネントを追加することによって拡張し得る。
【0060】
ホストシステムバス509は、ホストシステム501、502、及び503のプール間の通信を可能にする。例えば、ホストシステム501は、メモリデバイス508及び520内の利用可能な媒体タイプの量を指し示すリスト又はその他のデータ構造を維持し得、該データをホストシステム502及び503と共有し得る。同様に、ホストシステム502及び503は、それらの個別の基礎となるメモリサブシステム532及び560に対する同様のデータ構造を維持及び共有し得る。一実施形態では、プール内の別のホストシステムにより管理されるメモリサブシステムからの媒体の割り当てをリクエストするために、ホストシステムは、ホストシステムバス509を使用する。幾つかの実施形態では、ホストシステムバス509は、イーサネット、PCIe、Infiiband、又は別のホストネットワーク相互接続バスである。他の実施形態では、ホスト501~503は、バスを介したNVMeOF(NVMeオーバーファブリック)プロトコル接続を介して通信する。
【0061】
メモリサブシステム506は、ホストシステム501と関連付けられ、メモリデバイス508及び520のプールを含む。動作中、メモリデバイスは、メモリデバイスのプールに追加され得、又は該プールから除去され得、ホストシステムは、ホストシステムのプールに追加され得、又は該プールから除去され得ることに留意すべきである。メモリデバイス508は、コントローラ115と、4つのSLCメモリコンポーネント512、514、516、及び518とを含む。メモリデバイス520は、コントローラ115と、4つのMLCメモリコンポーネント524、526、528、及び530とを含む。メモリデバイス508及び520のコントローラ115は、上で論じたコントローラ115の例である。幾つかの実施形態では、ここでのように、メモリコンポーネント512、514、516、518、524、526、528、及び530は、チャネル毎に並列ユニットのグループに抽象化され得る。例えば、異なるメモリコンポーネントは、異なるチャネルを介してコントローラに結合され得、並列処理及びスループットを向上させる。こうしたグループは、アドレッシングの別のレイヤーを提供する。SLCメモリコンポーネント516及び518は、並列ユニット519の一部である。MLCメモリコンポーネント528及び530は、並列ユニット531の一部である。同様に、MLCメモリコンポーネント524及び526は、並列ユニット527の一部である。並列ユニット531及び527は、グループであり、別々のチャネル又は転送バスに各々属する。
【0062】
メモリサブシステム532は、ホストシステム502と関連付けられ、メモリデバイス534及び546のプールを含む。メモリデバイス534は、コントローラ115と、4つのQLCメモリコンポーネント538、540、542、及び544とを含む。メモリコンポーネント542及び544は並列ユニット545の一部である。メモリデバイス546は、コントローラ115と、4つのQLCメモリコンポーネント550、552、554、及び556とを含む。QLCメモリコンポーネント554及び556は並列ユニット557の一部である。
【0063】
メモリサブシステム560は、ホストシステム503と関連付けられ、メモリデバイス562及び574のプールを含む。メモリデバイス562は、コントローラ115と、4つのTLCメモリコンポーネント566、568、570、及び572とを含む。TLCメモリコンポーネント570及び572は並列ユニット573の一部である。メモリデバイス574は、コントローラ115と、4つのMLCメモリコンポーネント578、580、582、及び584とを含む。MLCメモリコンポーネント582及び584は並列ユニット585の一部である。
【0064】
ホストシステム501、502、及び503の各々は、夫々、関連するメモリサブシステム506、532、及び560と通信するためにメモリサブシステムバス507を使用し得る。幾つかの実施形態では、メモリサブシステムバス507は、ホストシステム各々が、関連するメモリサブシステム内のメモリデバイス及びメモリコンポーネントと通信することを可能にする。幾つかの実施形態では、メモリサブシステムバス507は、ペリフェラルコンポーネントインターフェースエクスプレス(PCIe)バスであり、バス上で通信されるデータパケットは、不揮発性メモリエクスプレス(NVMe)プロトコルに準拠する。このバスは、Gen-Z、CXL(コンピュータエクスプレスリンク)、CCIX(Cache Coherent Interface for Accelerators)、DDR(ダブルデータレート)等そのの他のタイプであり得る。
【0065】
ここでは、SLC、MLC、TLC、及びQLCメモリデバイスを含むコンピューティングシステム500が示されている。他の実施形態は、説明した媒体タイプ及び/又は不揮発性メモリセルのクロスポイントアレイを含む、様々な媒体タイプの何れかを有するメモリコンポーネントを含む。
【0066】
動作中、例としてホストシステム501に焦点を当てると、ブロックデバイスマネージャ113は、プロセッサ130(ここには示されていないが、
図1に関して上に説明した)から、ブロックデバイス544を構築するためのリクエストを受信する。例えば、ブロックデバイスマネージャ113は、物理ユニット、ダイ、及び/又はLUNを割り当てることによってブロックデバイス544を構築する。幾つかの実施形態では、メモリデバイス508、520、534、546、562、及び574は、それらの内部ストレージリソースをホストシステムに可視化させる。そうすることで、メモリデバイス508、520、534、546、562、及び574は、ホストシステム501、502、及び503のプールに結合されたメモリデバイスのプールを形成すると言うことができる。幾つかの実施形態では、ホストシステム501は、例えば、メモリデバイスにジオメトリコマンドを発行することによって、メモリデバイス508、520、534、546、562、及び574内のメモリコンポーネントのジオメトリを発見し得る。上に説明したように、ホストシステム501は、ブロックデバイスを構築するためのリクエストと共に(又はそれに加えて)リクエストされたジオメトリをその後指定し得る。
【0067】
一実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスを実装するために、ホストシステムのプールの中から複数のホストシステム(ホストシステム501、502、及び503を含む)、及び選択されたホストシステムから複数のメモリデバイス(メモリデバイス508、534、及び562を含む)を選択する。選択されたメモリデバイスの中から、ブロックデバイスマネージャ113は、ブロックデバイス544を実装するために複数のメモリコンポーネントを更に選択する。示されるように、ブロックデバイスマネージャ113は、メモリデバイスの一部分を割り当て、例えば、ブロックデバイス544を実装するために、5つのメモリコンポーネントの物理ユニット(PU)、ダイ、及び/又は論理ユニット番号(LUN)を割り当てる。示されているように、ブロックデバイス544を構築するために使用される割り当ては、異種のメモリコンポーネント(様々な媒体タイプのメモリコンポーネント:SLC、MLC、TLC、及びQLC)の中から選択される。幾つかの実施形態では、ブロックデバイスマネージャ113は、ホストシステム501により指し示されるように、選択された割り当ての媒体タイプをブロックデバイス544のニーズに一致させ得る。表3は、
図5に説明するようなブロックデバイスマネージャ113によるブロックデバイス544の元の実装を説明する。
【表3】
【0068】
ブロックデバイスマネージャ113は、ブロックデバイス544を実装する複数のメモリコンポーネントにアクセスするために使用される階層アドレスをその後生成し、ホストシステム501に提供する。例えば、ブロックデバイスマネージャ113は、ブロックデバイス544に割り当てられた媒体の階層アドレスをメモリサブシステム管理スタック125に提供する。
【0069】
幾つかの実施形態では、ブロックデバイスを構築するためのリクエストと共に(又はそれに加えて)、ブロックデバイスマネージャ113は、ブロックデバイスに対するニーズの指標をホストシステム501から受信する。こうしたニーズは、容量、性能、耐久性、又は電力消費を含み得る。或いは、ホストシステム501は、媒体タイプの観点でそうしたニーズを指し示し得る。幾つかの実施形態では、ブロックデバイスマネージャ113は、最大2つ以上(すなわち、1つ、2つ、3つ、又はそれ以上)のそうしたニーズ及び各ニーズに属するストレージの量の指標を受信する。それに応じて、ブロックデバイスマネージャ113は、複数のホストシステム、複数のメモリデバイス、及び複数のメモリコンポーネントを選択する場合に、ブロックデバイスに対するニーズを媒体タイプと一致させる。例えば、リクエストは、ブロックデバイスの半分が高性能/低レイテンシのストレージである一方、他の半分が大容量のストレージであることを指し示し得る。それに応じて、ブロックデバイスマネージャ113は、高性能/低レイテンシのストレージのニーズを満たすためにSLC媒体を選択し得、大容量のストレージのニーズを満たすためにQLC媒体を選択し得る。ブロックデバイス544を構築するための方法は、以下の
図7を参照して更に説明される。
【0070】
図6は、本開示の幾つかの実施形態に従った変更されたブロックデバイス構成を説明する。該図は、
図5に説明し、表3に説明したように、メモリサブシステム506、532、及び560の割り当ての再構成を説明する。
【0071】
ブロックデバイスマネージャ113は、ホストがリクエストしたジオメトリに応答して、メモリデバイス508、534、及び562の5つのメモリコンポーネント514、540、512、538、及び566(夫々、割り当て1、2、3、4、及び5)を選択及び集約することによって、ブロックデバイス544を最初に構築している。
図6に示すように、ブロックデバイスマネージャ113は、割り当て1~4を移行し、割り当て5を除去し、割り当て6及び7を追加するように、ブロックデバイスの割り当てを変更している。この再構成された割り当ては、6つの割り当ての集約を含むブロックデバイス694として説明されている。表4は、
図6に説明するような、ブロックデバイスマネージャ113によるブロックデバイス694の実装を示す。図示及び説明したように、ブロックデバイスマネージャ113は、夫々、割り当て1、2、3、4、6、及び7からなるジオメトリをホストするために、メモリコンポーネント512、552、542、516、518、及び580を有するブロックデバイス694を実装する。
【表4】
【0072】
幾つかの実施形態では、ブロックデバイスマネージャ113は、ホストシステムからのリクエストに応答してブロックデバイスを再構成する。例えば、ホストシステム501は、ブロックデバイスを拡張するためにブロックデバイスマネージャ113をトリガーするリクエストを発行し得る。幾つかの実施形態では、ブロックデバイスマネージャ113は、プールされたメモリデバイスの中から、又はメモリデバイスのプールの別のメモリデバイスから、又はメモリデバイスのプールに追加されている追加のメモリデバイスから、又はホストシステムのプールに追加されている追加のホストシステムから追加のメモリコンポーネント(又はその一部分)を選択することと、拡張されたブロックデバイスを実装するために、追加のメモリコンポーネントを以前に選択されたメモリコンポーネントと集約することによって応答する。ブロックデバイスのそうした拡張の例は、メモリデバイス508のメモリコンポーネント518内に新たに追加された分配6と、メモリデバイス574のメモリコンポーネント580内に新たに追加された分配7とを含む。
【0073】
例えば、幾つかの実施形態では、ブロックデバイスマネージャ113は、複数のメモリデバイスの中から追加のメモリコンポーネントを含む追加のメモリデバイスを動的に選択することと、追加のメモリコンポーネントを、ブロックデバイスを既に実装している複数のメモリコンポーネントと集約することによって、ブロックデバイスを拡張し得る。
【0074】
ブロックデバイスのオンデマンドの拡張をサポートすることによって、開示する実施形態は、ホストシステム501が必要に応じてブロックデバイスの容量を増加させること、又は割り当て解除された分配を交換することを可能にする。
【0075】
幾つかの実施形態では、ホストシステム501は、ブロックデバイスマネージャ113が分配の一部分を収縮、期限切れ、又は割り当て解除し、さもなければブロックデバイスを縮小するようにトリガーするリクエストを発行する。再構成されたブロックデバイス694内の分配5の除去は、そうした割り当て解除の一例である。ここで、
図6に示し、表4に説明したように、ブロックデバイスマネージャ113は、割り当て5に割り当てられたストレージを割り当て解除する。
【0076】
ブロックデバイスのオンデマンドの縮小を可能にすることによって、開示する実施形態は、障害のある又は性能の低いメモリデバイスの除去/交換を可能にする。不要なメモリコンポーネントを割り当て解除することはまた、割り当て解除されたストレージ容量を別の目的でホストシステム501(並びにホストシステム502及び503)に利用可能にさせ得る。
【0077】
幾つかの実施形態では、ホストシステム501は、ブロックデバイスの一部を第1のメモリコンポーネントから同じメモリデバイス上の同じ媒体タイプの第2のメモリコンポーネントに移行するためにブロックデバイスマネージャ113をトリガーするリクエストを発行する。こうしたニーズは、データへのアクセスの並列処理を高めることを可能にするため、障害のあるメモリコンポーネントからデータを移動するため等、データを異なる場所に配置するニーズ等、様々な理由で発生し得る。ブロックデバイスマネージャ113は、分配を移行する別のメモリコンポーネントを選択することと、以前に選択されたメモリコンポーネントから新たに選択されたメモリコンポーネントにデータをコピーすることによって応答する。新たに選択されたメモリコンポーネントは、ホストシステム501からのリクエストの一部として指し示され得る。同じメモリデバイス内の移行の例は、メモリデバイス508のメモリコンポーネント514から同じメモリデバイス508内の同じタイプのメモリコンポーネント512への割り当て1の移行として説明される。
【0078】
幾つかの実施形態では、異なるメモリデバイス内であるが同じ媒体の別のメモリコンポーネントに分配を移行するニーズが生じる。例えば、メモリデバイスの障害は、1つ以上の分配の移行をトリガーし得る。ブロックデバイスマネージャ113は、分配を移行するメモリコンポーネントを選択し得、又は対象のメモリコンポーネントは、ホストシステム501からのリクエストの一部として指し示され得る。そうした移行の例は、メモリデバイス534のQLCメモリコンポーネント540からメモリデバイス546内の同じタイプのQLCメモリコンポーネント552への分配2の移行として説明される。
【0079】
幾つかの実施形態では、ブロックデバイスマネージャ113は、第1のメモリデバイス、又は第1のメモリデバイス内のメモリコンポーネントが耐久性レベルの閾値に達したことの指標を第1のメモリデバイスから受信する。他の実施形態では、ブロックデバイスマネージャ113は、ホストシステム120から指標を受信する。指標は、第2のメモリデバイスの選択、及びブロックデバイスの一部分の第2のメモリデバイスへの移行をトリガーする。
【0080】
上に説明したように、幾つかの実施形態では、ホストシステム501は、幾つかのトリガーの内の何れかに応答して、ブロックデバイスを動的に再構成する。再構成によって、ブロックデバイスは、拡張、縮小、再構築、シンプロビジョニング、複製、及び移行され得る。分配を低性能で低コストの媒体タイプから高性能で高コストの媒体タイプに移行する例は、メモリデバイス534のQLCメモリコンポーネント538からメモリデバイス508のSLCメモリコンポーネント516への分配4の移行として説明される。
【0081】
幾つかの実施形態では、ホストシステム501は、もはや高性能のストレージを必要とせず(又はあまり必要とせず)、ブロックデバイスの一部を低コストの媒体タイプに移行する。そうした実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスの一部分を、第1の複数のメモリデバイスの第1のメモリコンポーネントから第2のメモリデバイス上の第2のメモリコンポーネントに移行し、第2のメモリコンポーネントは、第1のメモリコンポーネントのそれとは異なる媒体タイプを有する。高性能のメモリコンポーネントから低コストのメモリコンポーネントへの割り当ての移行の例は、メモリサブシステム506のメモリデバイス508のSLCメモリコンポーネント512からメモリサブシステム532のメモリデバイス534のQLCメモリコンポーネント542への割り当て3の移行として説明される。
【0082】
幾つかの実施形態では、ホストシステム501は、より高性能のストレージを必要とし、ブロックデバイスの一部をより高性能の媒体タイプに移行する。そうした実施形態では、ブロックデバイスマネージャ113は、ブロックデバイスの一部を、第1の複数のメモリデバイスの第1のメモリコンポーネントから第2のメモリデバイス上の第2のメモリコンポーネントに移行し、第2のメモリコンポーネントは、異なるより高高性能の媒体タイプを有する。第1及び第2のメモリデバイスは、同じホストシステム又は異なるホストシステムの何れかと関連付けられ得る。割り当てを低性能で低コストの媒体タイプから高性能の媒体タイプに移行する例は、メモリサブシステム532のメモリデバイス534のQLCメモリコンポーネント538からメモリサブシステム506のメモリデバイス508のSLCメモリコンポーネント516への割り当て4の移行として説明される。
【0083】
異種のメモリコンポーネント間の割り当てのオンデマンドの移行を可能にすることによって、幾つかの開示する実施形態は、動的キャッシングの割り当てを可能にすることによって性能を改善する。
【0084】
図7は、本開示の幾つかの実施形態に従った異種のブロックデバイスを構築するための例示的な方法のフロー図である。方法700は、ハードウェア(例えば、処理デバイス、回路、専用ロジック、プログラミング可能なロジック、マイクロコード、デバイスのハードウェア、集積回路等)、ソフトウェア(例えば、処理デバイス上で実行又は実行される命令)、又はそれらの組み合わせを含み得る処理ロジックによって実施され得る。幾つかの実施形態では、方法700は、
図1のブロックデバイスマネージャ113によって実施される。特定のシーケンス又は順序で示されているが、特に指定がない限り、プロセスの順序は変更され得る。したがって、説明する実施形態は、例としてのみ理解されるべきであり、説明するプロセスは、異なる順序で実施され得る。幾つかのプロセスは並行して実施され得る。また、様々な実施形態では、1つ以上のプロセスが省略され得る。したがって、あらゆる実施形態において全てのプロセスが必要とされない。その他のプロセスフローが可能である。
【0085】
動作705において、処理デバイスは、ブロックデバイスを構築するためのリクエストをホストシステムから受信する。例えば、ブロックデバイスマネージャ113は、ホストシステム501内で実行するオペレーティングシステム、アプリケーション、又は別のプロセスからブロックデバイスのリクエストを受信する。一実施形態では、リクエストは、ブロックデバイスのニーズを指し示す。一実施形態では、ニーズは、容量、性能、耐久性、又は電力消費の内の2つ以上を含む。一実施形態では、リクエストは、ブロックデバイスに対するリクエストされたジオメトリを指定する。
【0086】
動作710において、処理デバイスは、ホストシステムのプールの中から複数のホストシステムを選択する。例えば、ブロックデバイスマネージャ113は、ホストシステムのプール内の利用可能なリソースをリスト化するデータ構造を維持し得る。こうした可用性データ構造の創出、保守、及び使用は、動作410に関して上に説明した可用性データ構造のそれと同様である。方法700で使用される可用性構造は、しかしながら、複数のホストシステムについての可用性情報をも含む。
【0087】
一実施形態では、可用性データ構造は、方法700を実施するホストシステム内の異種のブロックデバイスマネージャ113によって維持及び更新される。幾つかの実施形態では、可用性データ構造は、システム500内の1つ以上の他の冗長な異種のブロックデバイスマネージャ113によって維持及び更新される。例えば、ブロックデバイス544の割り当て、変更、又は割り当て解除に応答して、ホストシステム501のブロックデバイスマネージャ113は、システム500内の利用可能なメモリリソースを反映する可用性データ構造への更新を、ホストシステム502及び503内の異種のブロックデバイスマネージャ113へ送信し得、各ブロックデバイスマネージャ113が可用性データ構造のローカルコピーを更新することを可能にする。こうした冗長な可用性データ構造は、例えば故障(例えば、ホストシステム、又はデバイス、又はコンポーネントの障害)の場合に、過去の分配を再構築するために使用され得る。
【0088】
幾つかの実施形態では、システム内のホスト又はメモリデバイスの各々は、そのドメイン内のメモリコンポーネントに関連するローカルな可用性データ構造を維持する。そうしたローカルな可用性データ構造は、動作710を実施する前に方法700を実施する異種のブロックデバイスマネージャ113によって照会される。こうして、ブロックデバイスマネージャ113は、システム全体の分配の最新の正確な知識を有するであろう。こうした最新の知識は、他の異種のブロックデバイスマネージャ113によって創出又は除去された割り当てをも反映するであろう。
【0089】
上に説明したように、そうした可用性データ構造は、利用可能なホストシステム、メモリデバイス、及びメモリコンポーネントと共に、利用可能な媒体タイプ、まだ割り当てられていないストレージ範囲等をリスト化する。そうした可用性データ構造を参照して、例えば、ブロックデバイスマネージャ113は、ホストシステム501、502、及び503のリスト(例えば、プール)から複数のホストシステムを選択する。一例では、リクエストがリクエストされたジオメトリを含む場合、ブロックデバイスマネージャ113は、リクエストに一致させるために、複数のホストシステム、メモリデバイス、及びメモリコンポーネントを選択する。一実施形態では、ブロックデバイスマネージャ113は、リクエストを発信するホストシステムに直接結合された/ローカルに結合されたメモリデバイス/コンポーネントに優先権を与え、(例えば、対応する媒体タイプの可用性の欠如に起因して)リクエストがローカルで満たされ得ない場合に、プール内の他のホストシステムに結合されたメモリデバイス/コンポーネントを利用する。幾つかの実施形態では、ブロックデバイスマネージャ113は、動作710を実施する場合に、動作410に関して上で説明した選択戦略のような選択戦略を適用する。
【0090】
動作715において、処理デバイスは、複数のホストシステムの中から複数のメモリデバイスを選択する。例えば、動作710と同様に、ブロックデバイスマネージャ113は、可用性データ構造を参照して、メモリデバイス508、520、534、546、562、及び574のプールの中から複数のメモリデバイスを選択する。一例では、リクエストがリクエストされたジオメトリを含む場合、ブロックデバイスマネージャ113は、リクエストに一致するように複数のホスト及び複数のメモリデバイスを選択する。
【0091】
一実施形態では、リクエストは、ブロックデバイスのニーズ(例えば、容量、性能、耐久性、又は電力消費の内の2つ以上)を指し示す。リクエストがブロックデバイスのニーズを指し示す場合、ブロックデバイスマネージャ113は、ブロックデバイスを実装するために、利用可能なホストシステム、メモリデバイス、及びメモリコンポーネントを選択する。一例では、リクエストがブロックデバイスの高性能な部分に対するニーズを指し示す場合、ブロックデバイスマネージャ113は、SLCメモリコンポーネントを選択することによって該ニーズと一致させる。別の例では、リクエストがブロックデバイスの低コスト部分に対するニーズを指し示す場合、ブロックデバイスマネージャ113は、QLCメモリコンポーネントを選択することによって該ニーズと一致させる。
【0092】
動作720において、処理デバイスは、複数のメモリデバイスの中から最大2つ以上(すなわち、1つ、2つ、3つ以上)の媒体タイプを有する複数のメモリコンポーネントを選択する。例えば、上記のように、ブロックデバイスマネージャ113は、可用性データ構造を維持し得る。一例では、可用性データ構造を参照して、ブロックデバイスマネージャ113は、動作715において選択された複数のメモリデバイスの中から最大2つ以上(すなわち、1つ、2つ、3つ、又はそれ以上)の異なる媒体タイプを有する複数のメモリコンポーネント514、540、512、538、及び566を選択する。この例では、選択されたメモリコンポーネントは、3つの異なる/異種の媒体タイプSLC、QLC、及びTLCを有する。幾つかの実施形態では、ブロックデバイスマネージャ113は、同種の媒体タイプを有するメモリコンポーネントを選択し得る。
【0093】
動作725において、処理デバイスは、ブロックデバイスを実装するために、複数のメモリコンポーネントを集約する。例えば、ブロックデバイスマネージャ113は、割り当てられた複数のメモリコンポーネントにアクセスするために使用される階層アドレスを識別する。こうした階層アドレスは、関連するホストシステムのホストIDと、関連するメモリデバイスのデバイスIDとを各々含む。
【0094】
一実施形態では、ブロックデバイスマネージャ113は、複数の割り当てられたメモリコンポーネントを集約し、ブロックデバイス544のジオメトリを詳述する(動作420に関して上で説明したもののような)ジオメトリデータ構造を構築する。例えば、そうしたジオメトリデータ構造は、ブロックデバイスを構成する割り当ての論理ブロックアドレス及びアドレス形式を含み得る。また、こうしたジオメトリデータ構造は、最小の書き込みデータサイズ等の書き込みデータ要件を指定し得る。ジオメトリデータ構造は、読み出し、書き込み、及びリセットに対する標準時間及び最大時間等、性能関連のメトリックをも指し示し得る。
【0095】
一実施形態では、ブロックデバイスマネージャ113は、過去のリクエストに対して行われた割り当てを含む、過去の割り当てを指し示すログ又は履歴データ構造を維持する。ブロックデバイスマネージャ113は、リクエストに応答して新たな割り当てが提供される場合に、そうしたデータ構造を更新する。一実施形態では、履歴データ構造は、故障又は障害(例えば、ホスト、デバイス、又はコンポーネントの障害)の場合にブロックデバイスを再構築するために使用され得る。
【0096】
動作730において、処理デバイスは、ホストシステムに、複数のメモリコンポーネントにアクセスするために使用される階層アドレスを提供する。例えば、ブロックデバイスマネージャ113は、動作725において創出されたジオメトリデータ構造をホストシステム120に提供する。ホストシステム120に提供される階層アドレスは、関連するホストシステムのホストIDと、関連するメモリデバイスのデバイスIDとを各々含む。上に説明したように、階層アドレスはまた、デバイスID、グループ、並列ユニット、論理ブロック、及びチャンクを説明し得る。
【0097】
動作735において、動作430と同様に、処理デバイスは、ブロックデバイスを拡張、収縮、若しくは再構築するため、又はブロックデバイス内のメモリコンポーネントを移行するための1つ以上のトリガーに応答する。
【0098】
一実施形態では、ホストシステム501は、将来の使用のために、それに割り当てられた論理アドレスを含む割り当てデータ構造を維持する。別の実施形態では、システム500内のメモリデバイスの各々は、過去の分配についての詳細をリスト化する割り当てデータ構造を維持する。こうした割り当てデータ構造は、故障(例えば、メモリコンポーネントの故障、デバイスの故障、又はホストの故障)の場合にブロックデバイスの割り当てを再構築するために使用され得る。こうした割り当てデータ構造はまた、システム全体のストレージの割り当てのオンデマンドのレポートを生成するために使用され得る。別の実施形態では、ホストシステム502及び503の内の1つ以上は、割り当てデータ構造の冗長コピーを維持する。
【0099】
図8は、コンピュータシステム800の例示的なマシンを説明し、その中で、本明細書で論じる方法の内の何れか1つ以上をマシンに実施させるための命令のセットが実行され得る。幾つかの実施形態では、コンピュータシステム800は、メモリサブシステム(例えば、
図1のメモリサブシステム110)を含む、それに結合される、又はそれを利用するホストシステム(例えば、
図1のホストシステム120)に対応し得、又はコントローラの動作を実施するために(例えば、
図1のブロックデバイスマネージャ113に対応する動作を実施するためにオペレーティングシステムを実行するために)使用され得る。代替の実施形態では、マシンは、LAN、イントラネット、エクストラネット、及び/又はインターネット内の他のマシンに接続(例えば、ネットワーク化)され得る。マシンは、クライアントサーバネットワーク環境内のサーバ又はクライアントマシンの容量内で、ピアツーピア(又は分散)ネットワーク環境内のピアマシンとして、又はクラウドコンピューティングインフラストラクチャ若しくは環境内のサーバ若しくはクライアントマシンとして動作し得る。
【0100】
マシンは、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、携帯情報端末(PDA)、携帯電話、ウェブ家電製品、サーバ、ネットワークルータ、スイッチ若しくはブリッジ、又は該マシンにより実行されるアクションを指定する命令のセット(シーケンシャル又はその他)を実行可能な任意のマシンであり得る。更に、単一のマシンが説明されているが、用語“マシン”はまた、本明細書で論じる方法の内の何れか1つ以上を実施するための命令のセット(又は複数のセット)を個々に又は共同して実行するマシンの任意の集合を含むと解釈されるべきであろう。
【0101】
例示的なコンピュータシステム800は、処理デバイス802、メインメモリ804(例えば、リードオンリーメモリ(ROM)、フラッシュメモリ、同期型DRAM(SDRAM)又はランバスDRAM(RDRAM)等のダイナミックランダムアクセスメモリ(DRAM)等)、スタティックメモリ806(例えば、フラッシュメモリ、スタティックランダムアクセスメモリ(SRAM)等)、及びデータストレージシステム818を含み、それらは、バス830を介して相互に通信する。
【0102】
処理デバイス802は、マイクロプロセッサ又は中央処理デバイス等の1つ以上の汎用処理デバイスを表す。より具体的には、処理デバイスは、複合命令セットコンピューティング(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長期命令語(VLIW)マイクロプロセッサ、又はその他の命令セットを実装するプロセッサ、又は命令セットの組み合わせを実装するプロセッサであり得る。処理デバイス802はまた、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタルシグナルプロセッサ(DSP)、又はネットワークプロセッサ等の1つ以上の専用処理デバイスであり得る。処理デバイス802は、本明細書で論じる動作及びステップを実施するための命令826を実行するように構成される。コンピュータシステム800は、ネットワーク820を介して通信するためのネットワークインターフェースデバイス808を更に含み得る。
【0103】
データストレージシステム818は、本明細書で説明する方法又は機能の内の何れか1つ以上を具体化する命令826又はソフトウェアの内の1つ以上のセットが蓄積される(コンピュータ可読媒体としても知られる)マシン可読ストレージ媒体824を含み得る。命令826はまた、完全に、又は少なくとも部分的に、メインメモリ804内及び/又はコンピュータシステム800によるその実行中の処理デバイス802内に常駐し得、メインメモリ804及び処理デバイス802もまたマシン可読ストレージ媒体を構成する。マシン可読ストレージ媒体824、データストレージシステム818、及び/又はメインメモリ804は、
図1のメモリサブシステム110に対応し得る。
【0104】
一実施形態では、命令826は、異種のブロックデバイスマネージャコンポーネント(例えば、
図1のブロックデバイスマネージャ113)に対応する機能を実装するための命令を含む。マシン可読ストレージ媒体824は、例示的な実施形態では単一の媒体であることが示されているが、用語“マシン可読ストレージ媒体”は、命令の1つ以上のセットを蓄積する単一の媒体又は複数の媒体を含むと解釈されるべきである。用語“マシン可読ストレージ媒体”はまた、マシンによる実行のための命令のセットを蓄積又は符号化し得、本開示の方法の内の何れか1つ以上をマシンに実施させる任意の媒体を含むと解釈されるであろう。用語“マシン可読ストレージ媒体”は、したがって、固体メモリ、光学媒体、及び磁気媒体を含むがこれらに限定されないと解釈されるであろう。
【0105】
前述の詳細な説明の幾つかの部分は、コンピュータメモリ内のデータビット上の動作のアルゴリズム及び記号表現の観点で提示されている。これらのアルゴリズムの説明及び表現は、データ処理技術の当業者がそれらの作動の実体を当業者に最も効果的に伝えるために使用される方法である。アルゴリズムはここにあり、一般的に、所望の結果につながる自己矛盾のない一連の動作であると考えられる。動作は、物理量の物理的な操作を必要とする動作である。通常、必ずしもそうとは限らないが、これらの量は、蓄積、結合、比較、及びその他の方法で操作可能な電気又は磁気信号の形式をとる。主に一般的な使用の理由から、これらの信号をビット、値、要素、記号、文字、用語、又は数値等と称することが便利な場合がある。
【0106】
しかしながら、これらの及び類似の用語の全ては、適切な物理量と関連付けられるべきであり、これらの量に適用される便利なラベルにすぎないことに留意すべきである。本開示は、コンピュータシステムのレジスタ及びメモリ内の物理的(電子的)量として表されるデータを操作し、コンピュータシステムのメモリ又はレジスタ又はその他のそうした情報ストレージシステム内の物理量として同様に表されるその他のデータに変換する、コンピュータシステム又は同様の電子コンピューティングデバイスのアクション及びプロセスを指し得る。
【0107】
本開示はまた、本明細書の動作を実施するための装置に関する。この装置は、意図する目的のために特別に構築され得、又はコンピュータ内に蓄積されたコンピュータプログラムによって選択的に起動又は再構成される汎用コンピュータを含み得る。例えば、コンピュータシステム又はコントローラ115等のその他のデータ処理システムは、そのプロセッサがメモリ又はその他の非一時的マシン可読ストレージ媒体内に含まれるコンピュータプログラム(例えば、一連の命令)を実行することに応答して、コンピュータ実装方法400及び700を実行し得る。こうしたコンピュータプログラムは、非限定的に、コンピュータシステムバスに各々接続される、フロッピーディスク、光ディスク、CD-ROM、及び磁気光学ディスクを含む任意のタイプのディスク、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM(消去可能プログラマブルリードオンリーメモリ)、EEPROM(電気的消去可能プログラマブルリードオンリーメモリ)、磁気若しくは光学カード、又は電子的命令の蓄積に適した任意のタイプの媒体等のコンピュータ可読ストレージ媒体内に蓄積され得る。
【0108】
本明細書に提示するアルゴリズム及び表示は、任意の特定のコンピュータ又はその他の装置に本質的に関連しない。様々な汎用システムは、本明細書の教示に従ったプログラムで使用され得、又は方法を実施するためのより特殊な装置を構築するのに便利であることが証明され得る。様々なこれらのシステムに対する構造は、以下の説明に記載されるように現れるであろう。また、本開示は、特定のプログラミング言語に言及して説明されていない。本明細書に説明するような開示の教示を実装するために、様々なプログラミング言語が使用され得ることは理解されるであろう。
【0109】
本開示は、本開示に従ったプロセスを実施するようにコンピュータシステム(又はその他の電子デバイス)をプログラミングするために使用され得る、命令をその上に蓄積したマシン可読媒体を含み得るコンピュータプログラム製品又はソフトウェアとして提供され得る。マシン可読媒体は、マシン(例えば、コンピュータ)によって可読な形式で情報を蓄積するための任意のメカニズムを含む。幾つかの実施形態では、マシン可読(例えば、コンピュータ可読)媒体は、リードオンリーメモリ(“ROM”)、ランダムアクセスメモリ(“RAM”)、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリコンポーネント等のマシン(例えば、コンピュータ)可読ストレージ媒体を含む。
【0110】
前述の明細書において、開示の実施形態は、それらの特定の例示的な実施形態を参照して説明されている。以下の特許請求の範囲に記載されるように、開示の実施形態のより広い精神及び範囲から逸脱することなく、それらに様々な修正がなされ得ることは明らかであろう。明細書及び図面は、したがって、限定的な意味ではなく、例示的な意味でみなされるべきである。
【国際調査報告】