(57)【要約】      （修正有）【課題】装置における電源管理のためのリソース割当及び解除を提供する。【解決手段】１つ以上のプロセッサ及びメモリを備える装置であって、プロセッサは、複数のリソースの第１の非ゼロサブセットの使用量を決定するよう構成され、複数のリソースがサーモメータデータ構造に従って割当てられ、且つ、解放される。プロセッサは更に、複数のリソースの第１の非ゼロサブセットの使用量を、複数のリソースの第１の非ゼロサブセットを複数のリソースの第２の非ゼロサブセットから分離する閾値と比較し、比較に少なくとも基づいて、複数のリソースの第２の非ゼロサブセットの電源をオンにする。メモリは、閾値を格納する。【選択図】図２
2016105273.tif 000002
【特許請求の範囲】
【請求項１】
装置のコントローラによって、前記装置の複数のリソースの第１の非ゼロサブセットの使用量を決定することであって、前記複数のリソースがサーモメータデータ構造に従って割当てられ、且つ解放される、決定することと、
前記コントローラによって、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を、前記複数のリソースの前記第１の非ゼロサブセットを前記複数のリソースの第２の非ゼロサブセットから分離する閾値と比較することと、
前記比較に少なくとも基づいて、前記複数のリソースの前記第２の非ゼロサブセットの電源をオンにすることと
を含む、方法。
【請求項２】
前記装置はソリッドステートドライブ（ＳＳＤ）を備え、前記複数のリソースは、前記ＳＳＤの不揮発性メモリへデータを書込むこと、及びそれからデータを読取ることの１つ以上に対応する、請求項１に記載の方法。
【請求項３】
更に、前記コントローラによって、前記サーモメータデータ構造の解析に少なくとも基づいて、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を決定することを含む、請求項１に記載の方法。
【請求項４】
前記サーモメータデータ構造は、前記複数のリソースのそれぞれに対する各ビットを含み、前記各ビットのそれぞれは、前記複数のリソースの対応する１つが要求ユニットに割当てられるか、又は要求ユニットへの割当に利用可能かどうかを示す、請求項１に記載の方法。
【請求項５】
更に、前記サーモメータデータ構造の前記各ビットの統計的解析に少なくとも基づいて、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を決定することを含む、請求項４に記載の方法。
【請求項６】
更に、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を、要求されるであろう前記複数のリソースの期待数を示す予測使用量に変換することを含み、
前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を比較することは、要求されるであろう前記複数のリソースの前記期待数を前記閾値と比較することを含む、請求項１に記載の方法。
【請求項７】
前記複数のリソースのそれぞれは各メモリスロットを備え、前記各メモリスロットのそれぞれは同じバイト数を含む、請求項１に記載の方法。
【請求項８】
前記複数のリソースのそれぞれは、ソリッドステートドライブの不揮発性メモリに書込まれるＥＣＣ符号化データに関してＥＣＣ復号化を実行するために用いられるそれぞれのエラー検出訂正（ＥＣＣ）デコーダを備える、請求項１に記載の方法。
【請求項９】
前記複数のリソースの前記第２の非ゼロサブセットの電源をオンにすることは、前記使用量が前記閾値と等しいか、又はそれを超える場合に前記複数のリソースの前記第２の非ゼロサブセットの電源をオンにすることを含み、
前記方法は更に、前記使用量が前記閾値よりも小さい場合に前記複数のリソースの前記第２の非ゼロサブセットの電源をオフにすることを含む、請求項１に記載の方法。
【請求項１０】
更に、消費電力を制御するよう、経時的に前記閾値を異なる値に動的に設定することを含む、請求項１に記載の方法。
【請求項１１】
装置であって、
複数のリソースの第１の非ゼロサブセットの使用量を決定することであって、前記複数のリソースがサーモメータデータ構造に従って割当てられ、且つ解放される、決定することと、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を、前記複数のリソースの前記第１の非ゼロサブセットを前記複数のリソースの第２の非ゼロサブセットから分離する閾値と比較することと、前記比較に少なくとも基づいて、前記複数のリソースの前記第２の非ゼロサブセットの電源をオンにすることとを行うよう構成される１つ以上のプロセッサと、
前記閾値を格納するよう構成されるメモリと
を備える、装置。
【請求項１２】
前記装置はソリッドステートドライブ（ＳＳＤ）を備え、
前記複数のリソースは、前記ＳＳＤの不揮発性メモリへデータを書込むこと、及びそれからデータを読取ることの１つ以上に対応する、請求項１１に記載の装置。
【請求項１３】
前記１つ以上のプロセッサは更に、前記サーモメータデータ構造の解析に少なくとも基づいて、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を決定するよう構成される、請求項１１に記載の装置。
【請求項１４】
前記サーモメータデータ構造は、前記複数のリソースのそれぞれに対する各ビットを含み、前記各ビットのそれぞれは、前記複数のリソースの対応する１つが要求ユニットに割当てられるか、又は要求ユニットへの割当に利用可能かどうかを示す、請求項１１に記載の装置。
【請求項１５】
前記１つ以上のプロセッサは更に、前記サーモメータデータ構造の前記各ビットの統計的解析に少なくとも基づいて、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を決定するよう構成される、請求項１４に記載の装置。
【請求項１６】
前記１つ以上のプロセッサは更に、前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を、要求されるであろう前記複数のリソースの期待数を示す予測使用量に変換するよう構成され、
前記１つ以上のプロセッサは、要求されるであろう前記複数のリソースの前記期待数を前記閾値と比較するよう構成される、請求項１１に記載の装置。
【請求項１７】
前記複数のリソースのそれぞれは各メモリスロットを備え、前記各メモリスロットのそれぞれは同じバイト数を含む、請求項１１に記載の装置。
【請求項１８】
前記複数のリソースのそれぞれは、ソリッドステートドライブの不揮発性メモリに書込まれるＥＣＣ符号化データに関してＥＣＣ復号化を実行するために用いられるそれぞれのエラー検出訂正（ＥＣＣ）デコーダを備える、請求項１１に記載の装置。
【請求項１９】
前記１つ以上のプロセッサは、前記使用量が前記閾値と等しいか、又はそれを超える場合に前記複数のリソースの前記第２の非ゼロサブセットの電源をオンにするよう構成され、
前記１つ以上のプロセッサは更に、前記使用量が前記閾値よりも小さい場合に前記複数のリソースの前記第２の非ゼロサブセットの電源をオフにするよう構成される、請求項１１に記載の装置。
【請求項２０】
前記１つ以上のプロセッサは更に、消費電力を制御するよう、経時的に前記閾値を異なる値に動的に設定するよう構成される、請求項１１に記載の装置。
【請求項２１】
非一時的コンピュータ読取可能記憶媒体であって、実行時に、１つ以上のプロセッサに、
複数のリソースの第１の非ゼロサブセットの使用量を決定することであって、前記複数のリソースがサーモメータデータ構造に従って割当てられ、且つ解放される、決定することと、
前記複数のリソースの前記第１の非ゼロサブセットの前記使用量を、前記複数のリソースの前記第１の非ゼロサブセットを前記複数のリソースの第２の非ゼロサブセットから分離する閾値と比較することと、
前記比較に少なくとも基づいて、前記複数のリソースの前記第２の非ゼロサブセットの電源をオンにすることと
を行わせる命令を格納している非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、リソース割当に関し、より詳細には、電源管理のためのリソース割当に関する。
【背景技術】
【０００２】
装置は、装置の操作全体を支持する様々な目的のためにリソースを割当て、その割当を解除できる。例えば、ソリッドステートドライブ（ＳＳＤ）等のストレージ装置は、データバッファアクセス、データを不揮発性メモリ（例えば、フラッシュメモリ）に格納する場合のエラー検出訂正（ＥＣＣ）符号化、データを不揮発性メモリから呼び出す場合のフラッシュチャンネルアクセス、データを不揮発性メモリから呼び出す場合のＥＣＣ復号化を支持して、リソースを割当て、その割当を解除できる。リソースの数がユニット（「要求元」と称されてもよい）の数よりも少ない場合の例において、ストレージ装置は、極端な遅延を回避する方法でリソースに対して十分にバランスの取れたアクセスを提供するための試行において（いわゆる、ラウンドロビンスキーム等の）アービトレーションスキームを実装してもよい。
【０００３】
幾つかの例において、リソースの数は、（例えば、消費電力の観点から見て）ストレージ装置のより効率的な動作を達成するよう意図的に制限される。即ち、利用可能なリソースのうちの幾つかの部分は、ストレージ装置を動作させることに関連する消費電力及び対応するコストを低減するよう電源がオフにされてもよい。特定の文脈でリソースの数を意図的に制限することにおいて、ストレージ装置メーカは、性能と作業効率とのバランスを取るよう試みている。例えば、様々なメーカは、リソース需要が高い場合には性能を向上させるよう初期状態で電源がオフにされていたそれらのリソースの電源を動的にオンにし、リソース需要が低い場合には作業効率を向上させるようこれらの同じリソースの電源を動的にオフにするよう試みていた。
【０００４】
動的リソース割当及び解除は、従って、種々のリソースが必要な時に電源をオンにし、必要ではない時に電源をオフにすることを可能にしてもよい。しかし、この省電力化リソース割当／解除を容易にするよう開発されたアルゴリズムは、割当データ構造における制限により、悪化する恐れがある。リソース割当／解除に用いられる先入れ先出し（ＦＩＦＯ）データ構造又は後入れ先出し（ＬＩＦＯ）データ構造は、結果として、割当解除されたリソースが割当られたリソースと混合されるランダム分布を生じ、特定のリソースをサービス要求に遅れずに利用できるように十分な時間をもって、これらのリソースが要求される場合を知ることが難しくなる。複雑なハードウェアが用いられてもよく、汎用プロセッサ（中央処理装置即ちＣＰＵ等）が、作業効率のバランスを十分に取ることができる一方で、十分な性能も提供する動的リソース割当／解除を容易にするよう配備されてもよい。しかし、この専用ハードウェア又は別の目的のために再利用されるＣＰＵは、相当な電力を消費し、省電力化の全てが動的割当／解除アルゴリズムを介して提供されない場合、多くを相殺する恐れがある。
【発明の概要】
【課題を解決するための手段】
【０００５】
一実施例において、方法は、装置のコントローラによって、装置の複数のリソースの第１の非ゼロサブセットの使用量を決定することであって、複数のリソースがサーモメータデータ構造に従って割当てられ、且つ解放される、決定することと、コントローラによって、複数のリソースの第１の非ゼロサブセットの使用量を、複数のリソースの第１の非ゼロサブセットを複数のリソースの第２の非ゼロサブセットから分離する閾値と比較することと、比較に少なくとも基づいて、複数のリソースの第２の非ゼロサブセットの電源をオンにすることとを含む。
【０００６】
別の実施例において、装置は、複数のリソースの第１の非ゼロサブセットの使用量を決定することであって、複数のリソースがサーモメータデータ構造に従って割当てられ、且つ解放される、決定することと、複数のリソースの第１の非ゼロサブセットの使用量を、複数のリソースの第１の非ゼロサブセットを複数のリソースの第２の非ゼロサブセットから分離する閾値と比較することと、比較に少なくとも基づいて、複数のリソースの第２の非ゼロサブセットの電源をオンにすることとを行うよう構成される１つ以上のプロセッサと、閾値を格納するよう構成されるメモリとを備える。
【０００７】
別の実施例において、非一時的コンピュータ読取可能記憶媒体は、実行時に、１つ以上のプロセッサに、複数のリソースの第１の非ゼロサブセットの使用量を決定することであって、複数のリソースがサーモメータデータ構造に従って割当てられ、且つ解放される、決定することと、複数のリソースの第１の非ゼロサブセットの使用量を、複数のリソースの第１の非ゼロサブセットを複数のリソースの第２の非ゼロサブセットから分離する閾値と比較することと、比較に少なくとも基づいて、複数のリソースの第２の非ゼロサブセットの電源をオンにすることとを行わせる命令を格納している。
【０００８】
上で検討した１つ以上の実施例の詳細を、添付の図面及び以下の説明において説明する。他の特徴、目的、及び利点は、説明及び図面から、そして特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【０００９】
【図１】図１は、ストレージ装置が、本開示の１つ以上の技術に従ってホスト装置用のストレージ装置として機能できる実施例のストレージ環境を示す概念図及び概略ブロック図である。
【図２】図２は、本開示の１つ以上の技術に従う実施例のコントローラを示す概念図及び概略ブロック図である。
【図３】図３は、図２の実施例において示した一般的なリソース割当モジュールをより詳細に示す図である。
【図４】図４は、図２のＥＣＣデコーダをより詳細に示すブロック図である。
【図５Ａ】図５Ａは、本開示で説明するリソース割当及び解除技術を実行することにおいて、ストレージ装置の例示的な動作を示すフローチャートである。
【図５Ｂ】５Ｂは、本開示で説明するリソース割当及び解除技術を実行することにおいて、ストレージ装置の例示的な動作を示すフローチャートである。
【図６】図６は、図３のサーモメータデータ構造をより詳細に示す図である。
【発明を実施するための形態】
【００１０】
本開示の１つ以上の技術に従い、装置（コントローラがフラッシュコントローラと称されてもよいＳＳＤ等）のコントローラは、一定に連続して割当及び解除を容易にする方法でリソースを割当てるサーモメータタイプのデータ構造を用いる動的リソース割当及び解除を実行してもよい。結果としてリソース割当及び解除のランダム分布を生じるデータ構造に関する基本の割当及び解除の代わりに、サーモメータタイプデータ構造は、インクリメント式に増加するリソース識別子によって特定されるリソースの一定の順序を維持してもよい。割当機構は次いで、最も低いリソース識別子を有する利用可能リソースが、比較的高いリソース識別子を有する利用可能リソースの割当前に割当てられる規則に従って動作してもよい。結果として、サーモメータデータ構造は、サーモメータデータ構造の構成要素によって表されるリソースの統計的解析によって、頻繁な使用を示す、いわゆる「ホットスポット」及び稀な使用を示す「コールドスポット」を露呈し得る。これらのホットスポット及びコールドスポットを特定することによって、コントローラは閾値を動的に定義できる。即ち、フラッシュコントローラは、ある時間にわたるリソースの使用量の統計的解析により閾値を特定してもよい。閾値は、リソースのうちで電源がオンにされたままのものと電源がオフにされ得るものとを分ける境界を定義してもよい。
【００１１】
フラッシュコントローラは、この閾値を設定し、ＳＳＤ内部で生じるであろう多くの異なるシナリオを占めるよう時間が経つにつれて動的に閾値を更新してもよい。例えば、フラッシュコントローラは、使用量がピークの間のメモリリソースの使用量が増加している間に閾値を増加させ、それによって、使用量がより多くのメモリリソースを必要とする場合に性能を向上させてもよい。フラッシュコントローラはまた、使用量がピークではない間のメモリリソースの相対的な使用量が減少している間に閾値を減少させ、それによって、より多くのリソースの電源をオフにすることによって作業効率を向上させてもよい。別の例として、フラッシュコントローラは、時間が経つにつれて、フラッシュメモリが摩耗するため、フラッシュメモリの不具合が増加することにより、ＥＣＣデコーダの使用が増加してきたことに注意できる。フラッシュコントローラは、ＥＣＣデコーダのこの増加した使用量を検出することに応じて、動的に閾値を増加させて、より多くのＥＣＣデコーダの電源をオンにしてもよい。この点において、技術は、ＳＳＤの配備初期の間に向上させた作業効率を促進し、ＳＳＤの配備後期の間に同じ性能を維持するよう閾値を増加させることによって作業効率を減少させることができる。
【００１２】
図１は、ストレージ装置６が、本開示の１つ以上の技術に従ってホスト装置４用のストレージ装置として機能できる実施例のストレージ環境２を示す概念図及び概略ブロック図である。例えば、ホスト装置４は、データを格納し、取り出すためにストレージ装置６に含まれる不揮発性メモリ装置を利用してもよい。幾つかの実施例において、ストレージ環境２は、ストレージアレイとして動作してもよいストレージ装置６等の複数のストレージ装置を含んでもよい。例えば、ストレージ環境２は、ホスト装置４用の大容量ストレージ装置として集合的に機能する安価／独立ディスクの冗長アレイ（ＲＡＩＤ）として構成される複数のストレージ装置６を含んでもよい。
【００１３】
ストレージ環境２は、ストレージ装置６等の１つ以上のストレージ装置にデータを格納し、及び／又は、それらからデータを取り出してもよいホスト装置４を含んでもよい。図１に示すように、ホスト装置４は、インターフェース１４を介してストレージ装置６と通信してもよい。ホスト装置４は、コンピュータサーバ、ネットワーク接続ストレージ（ＮＡＳ）ユニット、デスクトップコンピュータ、ノートブック（即ち、ラップトップ）コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォン等の電話送受器、いわゆる「スマート」パッド、テレビ、カメラ、ディスプレイ装置、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミング装置等を含む、何れかの広範囲の装置を備えてもよい。
【００１４】
図１に示すように、ストレージ装置６は、コントローラ８、不揮発性メモリアレイ１０（ＮＶＭＡ１０）、電力供給部１１、揮発性メモリ１２、及びインターフェース１４を含んでもよい。幾つかの実施例において、ストレージ装置６は、明確にするために、図１に図示しない追加の構成部品を含んでもよい。例えば、ストレージ装置６は、ストレージ装置６の構成部品が機械的に取り付けられ、ストレージ装置６の構成部品を電気的に相互接続する導電性トレース等を含むプリント基板（ＰＢ）を含んでもよい。幾つかの実施例において、ストレージ装置６の物理的寸法及びコネクタ構成は、１つ以上の標準的なフォームファクタに準拠してもよい。幾つかの標準的フォームファクタ例は、３．５”ハードディスクドライブ（ＨＤＤ）、２．５”ＨＤＤ、１．８”ＨＤＤ、周辺構成機器相互接続（ＰＣＩ）、ＰＣＩ−ｅｘｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（例えば、ＰＣＩｅ  ｘ１、ｘ４、ｘ８、ｘ１６、ＰＣＩｅ  Ｍｉｎｉ  Ｃａｒｄ、ＭｉｎｉＰＣＩ等）を含むが、これらに限定されない。幾つかの実施例において、ストレージ装置６は、ホスト装置４のマザーボードに直接結合されてもよい（例えば、直接半田付けされてもよい）。
【００１５】
ストレージ装置６は、ホスト装置４とインターフェース接続するためのインターフェース１４を含んでもよい。インターフェース１４は、ホスト装置４とデータをやり取りするためのデータバス及びホスト装置４とコマンドをやり取りするための制御バスのうちの一方又は両方を含んでもよい。インターフェース１４は、何れかの適切なプロトコルに従って動作してもよい。例えば、インターフェース１４は、以下のプロトコルのうちの１つ以上に従って動作してもよい：アドバンストテクノロジーアタッチメント（ＡＴＡ）（例えば、シリアルＡＴＡ（ＳＡＴＡ）、及びパラレルＡＴＡ（ＰＡＴＡ））、ファイバーチャンネル、小型コンピューターシステムインターフェース（ＳＣＳＩ）、ｓｅｒｉａｌｌｙ  ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、周辺構成機器相互接続（ＰＣＩ）、及びＰＣＩ−ｅｘｐｒｅｓｓ。インターフェース１４の電気接続（例えば、データバス、制御バス、又は両方）は、コントローラ８に電気的に接続され、ホスト装置４とコントローラ８との間に電気接続を提供し、データがホスト装置４とコントローラ８との間でやり取りされることを可能にする。幾つかの実施例において、インターフェース１４の電気接続は、ストレージ装置６がホスト装置４から電力を受けることを可能にしてもよい。図１に示すように、電力供給部１１は、インターフェース１４を介してホスト装置４から電力を受けてもよい。
【００１６】
ストレージ装置６は、それぞれがデータを格納及び／又は取り出すよう構成されてもよい複数のメモリ装置１６Ａａ〜１６Ｎｎ（総称して、「メモリ装置１６」）を含んでもよいＮＶＭＡ１０を含んでもよい。例えば、複数のメモリ装置１６のうちの１つのメモリ装置は、コントローラ８から、データを受信し、メモリ装置にデータを格納するよう指示するメッセージを受信してもよい。同様に、複数のメモリ装置１６のうちのメモリ装置は、コントローラ８から、メモリ装置にデータを取り出すよう指示するメッセージを受信してもよい。幾つかの実施例において、メモリ装置１６はダイと称されてもよい。幾つかの実施例において、単一の物理チップは、複数のダイ（即ち、複数のメモリ装置１６）を含んでもよい。幾つかの実施例において、各メモリ装置１６は、比較的大きいデータ量（例えば、１２８ＭＢ、２５６ＭＢ、５１２ＭＢ、１ＧＢ、２ＧＢ、４ＧＢ、８ＧＢ、１６ＧＢ、３２ＧＢ、６４ＧＢ、１２８ＧＢ、２５６ＧＢ、５１２ＧＢ、１ＴＢ等）を格納するよう構成されてもよい。
【００１７】
幾つかの実施例において、メモリ装置１６は、何れかの種類の不揮発性メモリ装置を含んでもよい。メモリ装置１６の幾つかの実施例は、フラッシュメモリ装置、相変化メモリ（ＰＣＭ）装置、抵抗ランダムアクセスメモリ（ＲｅＲＡＭ）装置、磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）装置、強誘電体ランダムアクセスメモリ（Ｆ−ＲＡＭ）、ホログラフィックメモリ装置、及び何れかの他の種類の不揮発性メモリ装置を含むが、これらに限定されない。
【００１８】
フラッシュメモリ装置は、ＮＡＮＤ又はＮＯＲベースのフラッシュメモリ装置を含んでもよく、各フラッシュメモリセルのためのトランジスタのフローティングゲートに含まれる電荷に基づいてデータを格納してもよい。ＮＡＮＤフラッシュメモリ装置において、フラッシュメモリ装置は、複数のページに分割されてもよい複数のブロックに分割されてもよい。特定のメモリ装置内部の複数のブロックのうちの各ブロックは、複数のＮＡＮＤセルを含んでもよい。ＮＡＮＤセルの列は、複数のページのうちの１つのページを定義するようワードラインを用いて電気的に接続されてもよい。複数のページのうちのそれぞれにおける各セルは、各ビットラインに電気的に接続されてもよい。コントローラ８は、ブロックレベルでＮＡＮＤフラッシュメモリ装置にデータを書込み、それからデータを読み出してもよい。
【００１９】
幾つかの実施例において、コントローラ８にとって、メモリ装置１６の各メモリ装置に別々に接続されることは実用的ではない場合がある。そのように、メモリ装置１６とコントローラ８との間の接続は、多重化されてもよい。例として、メモリ装置１６は、チャンネル１８Ａ〜１８Ｎ（総称して、「チャンネル１８」）にグループ化されてもよい。例えば、図１に示すように、メモリ装置１６Ａａ〜１６Ｎｎは第１のチャンネル１８Ａにグループ化されてもよく、メモリ装置１６Ｎａ〜１６ＮｎはＮ番目のチャンネル１８Ｎにグループ化されてもよい。各チャンネル１８にグループ化された複数のメモリ装置１６は、コントローラ８への１つ以上の接続を共有してもよい。例えば、第１のチャンネル１８Ａにグループ化された複数のメモリ装置１６は、共通Ｉ／Ｏバス及び共通制御バスに取り付けられてもよい。ストレージ装置６は、複数のチャンネル１８のうちの各それぞれのチャンネルのための共通Ｉ／Ｏバス及び共通制御バスを含むことができる。幾つかの実施例において、複数のチャンネル１８のうちの各チャンネルは、各チャンネル上のメモリ装置を多重化するよう用いられてもよい１セットのチップイネーブル（ＣＥ）ラインを含んでもよい。例えば、各ＣＥラインは、複数のメモリ装置１６のうちのそれぞれのメモリ装置に接続されてもよい。このように、コントローラ８とメモリ装置１６との間の別々の接続の数は、削減されてもよい。更に、各チャンネルはコントローラ８への独立したセットの接続を有しているため、接続の削減は、コントローラ８が異なるコマンドを各チャンネルに同時に発行できることから、データスループット率に大きな影響を及ぼさない。
【００２０】
幾つかの実施例において、ストレージ装置６は、ホスト装置４がアクセスできる容量よりも多い総容量を提供するよう選択される多くのメモリ装置１６を含んでもよい。これは、オーバープロビジョニングと称される。例えば、ストレージ装置６が２４０ＧＢのユーザがアクセスできるストレージ容量を含むよう宣伝された場合、ストレージ装置６は、２５６ＧＢの総ストレージ容量を与えるために十分なメモリ装置１６を含んでもよい。１６ＧＢのストレージ装置６は、ホスト装置４又はホスト装置４のユーザがアクセスできなくてもよい。代わりに、追加ストレージ装置６は、書込、ガベージコレクション、ウェアレベリング等を容易にするよう追加ブロックを提供してもよい。更に、追加ストレージ装置６は、幾つかのブロックが摩耗して使用不能になり、使用を中止した場合に使用されてもよい追加ブロックを提供してもよい。追加ブロックの存在により、ホスト装置４が利用可能なストレージ容量に変化を生じることなく、摩耗したブロックの使用停止を可能にしてもよい。幾つかの実施例において、オーバープロビジョニングの量は、ｐ＝（Ｔ−Ｄ）／Ｄとして定義されてもよく、ここで、ｐはオーバープロビジョニング率、Ｔはストレージ装置６の総ストレージ容量、Ｄはホスト装置４がアクセスできるストレージ装置６のストレージ容量である。
【００２１】
ストレージ装置６は、ストレージ装置６の１つ以上の構成部品に電力を供給できる電力供給部１１を含んでもよい。標準モードで動作する時、電力供給部１１は、ホスト装置４等の外部装置によって供給される電力を用いて１つ以上の構成部品に電力を供給してもよい。例えば、電力供給部１１は、インターフェース１４を介してホスト装置４から受け取る電力を用いて１つ以上の構成部品に電力を供給してもよい。幾つかの実施例において、電力供給部１１は、電力を外部装置から受け取ることを中止する場合等のシャットダウンモードで動作する時、１つ以上の構成部品に電力を供給するよう構成される１つ以上の電力貯蔵部品を含んでもよい。このように、電力供給部１１は、オンボードバックアップ電源として機能してもよい。１つ以上の電力貯蔵部品の幾つかの実施例は、コンデンサ、スーパーキャパシタ、バッテリ等を含むが、これらに限定されない。幾つかの実施例において、１つ以上の電力貯蔵部品によって蓄えられてもよい電力量は、１つ以上の電力貯蔵部品のコスト及び／又はサイズの関数（例えば、面積／体積）であってもよい。言い換えれば、１つ以上の電力貯蔵部品によって蓄えられる電力量が増加するにつれて、１つ以上の電力貯蔵部品のコスト及び／又はサイズも増加する。
【００２２】
コントローラ８は、１つ以上の読取操作及び書込操作を支持して動的リソース割当及び解除の一形態を実行してもよい。コントローラ８は、図２に関してより詳細に説明するように、データバッファアクセス、データを不揮発性メモリ（例えば、フラッシュメモリ）に格納する場合のエラー検出訂正（ＥＣＣ）符号化、データを不揮発性メモリから呼び出す場合のフラッシュチャンネルアクセス、データを不揮発性メモリから呼び出す場合のＥＣＣ復号化を支持して、リソースを割当て、その割当を解除してもよい。リソースの数が要求ユニット（「要求元」と称されてもよい）の数よりも少ない場合の例において、コントローラ８は、極端な遅延を回避する方法でリソースに対して十分にバランスの取れたアクセスを提供するための試行において、１つ以上のアービトレーションスキームを実行してもよい。
【００２３】
幾つかの例において、リソースの数は、（例えば、消費電力の観点から見て）ストレージ装置のより効率的な動作を達成するよう意図的に制限される。即ち、コントローラ８は、ストレージ装置を動作させることに関連する消費電力及び対応するコストを低減するよう、利用可能なリソースのうちの幾つかの部分の電源をオフにしてもよい。特定の文脈でリソースの数を意図的に制限することにおいて、コントローラ８は、性能と作業効率のバランスを取るよう試行してもよい。例えば、コントローラ８は、リソース需要が高い場合には性能を向上させるよう初期状態で電源がオフにされているそれらのリソースの電源を動的にオンにし、リソース需要が低い場合には作業効率を向上させるようこれらの同じリソースの電源を動的にオフにしてもよい。
【００２４】
動的リソース割当及び解除は、従って、種々のリソースが必要な時に電源をオンにし、必要ではない時に電源をオフにすることを可能にしてもよい。しかし、この省電力化リソース割当／解除を容易にするよう開発されたアルゴリズムは、割当／解除データ構造における制限により、悪化する恐れがある。説明のために、割当アルゴリズムは、待ち行列等の先入れ先出しデータ構造を採用してもよい。この割当スキームにおいて、リソースはそれぞれ、リソース識別子を割当てられる。この割当スキームにおけるアービタは、一例として、割当てられるべき最初のものである（即ち、待ち行列から「ポップされる」待ち行列の観点から見て）最下位リソース識別子と共に、各リソース識別子を待ち行列にプッシュしてもよい。アービタは、待ち行列からポップされたリソース識別子に関連するリソースを割当ててもよい。リソース識別子をポップすることにより、このリソースを２つ以上の要求元に割当てられたものから効果的に削除する。
【００２５】
しかし、要求元当たりのリソース利用期間は変化する場合があり、これは、アービタがランダムにリソース識別子を待ち行列に戻す場合があることを意味している。この固定されていないリソース割当時間の結果として、リソース識別子はじきに、待ち行列内部でランダムに分布される。リソース識別子のこのランダム分布は、何れかの所定の時間枠当たりに要求されるリソースの数を特定する能力を低下させ、それによって、作業効率と性能のバランスを取るためのリソースの動的な電力供給を妨げる場合がある。リソース割当／解除に対して後入れ先出し（ＬＩＦＯ）データ構造を採用する割当スキームは、結果として、リソース識別子のランダム分布を同様に生じてもよい。割当スキームにおけるこれらの制限を克服するため、コントローラは、作業効率のバランスを十分に取ることができる一方で、十分な性能も提供する動的リソース割当／解除を容易にするよう、複雑なハードウェア又は汎用プロセッサ（中央処理装置即ちＣＰＵ等）を組み込んでもよい。しかし、この専用ハードウェア又は別の目的のために再利用されるＣＰＵは、相当な電力を消費し、省電力化の全てが動的割当／解除アルゴリズムを介して提供されない場合、多くを相殺する恐れがある。
【００２６】
本開示の１つ以上の技術に従い、ストレージ装置６のコントローラ８は、一定に連続して割当及び解除を容易にする方法でリソースを割当てるサーモメータタイプのデータ構造を用いる動的リソース割当及び解除を実行してもよい。結果としてリソース割当及び解除のランダム分布を生じるデータ構造に関する基本の割当及び解除の代わりに、サーモメータタイプデータ構造は、インクリメント式に、及び、潜在的に単調に増加するリソース識別子によって特定されるリソースの一定の順序を維持してもよい。割当機構は次いで、最も低いリソース識別子を有する利用可能リソースが、比較的高いリソース識別子を有する利用可能リソースの割当前に割当てられる規則に従って動作してもよい。結果として、サーモメータデータ構造は、サーモメータデータ構造の構成要素によって表されるリソースの統計的解析によって、頻繁な使用を示す、いわゆる「ホットスポット」及び稀な使用を示す「コールドスポット」を露呈し得る。これらのホットスポット及びコールドスポットを特定することによって、コントローラ８は閾値を動的に定義できる。即ち、フラッシュコントローラは、ある時間にわたるリソースの使用量の統計的解析により閾値を特定してもよい。閾値は、リソースのうちで電源がオンにされたままのものと電源がオフにされ得るものとを分ける境界を定義してもよい。
【００２７】
コントローラ８は、この閾値を設定し、多くのインスタンスを占めるよう時間が経つにつれて閾値を動的に更新してもよい。例えば、コントローラ８は、使用量がピークの間のメモリリソースの使用量が増加している間に閾値を増加させ、それによって、使用量がより多くのメモリリソースを必要とする場合に性能を向上させてもよい。コントローラ８はまた、使用量がピークではない間のメモリリソースの相対的な使用量が減少している間に閾値を減少させ、それによって、より多くのリソースの電源をオフにすることによって電気的な作業効率を潜在的に向上させてもよい。別の例として、コントローラ８は、時間が経つにつれて、不揮発性メモリ１０が摩耗するため、不揮発性メモリ１０の不具合が増加することにより、ＥＣＣデコーダの使用が増加してきた場合のインスタンスを特定してもよい。コントローラ８は、ＥＣＣデコーダのこの増加した使用量を検出することに応じて、動的に閾値を増加させて、より多くのＥＣＣデコーダの電源をオンにしてもよい。この点において、技術は、ＳＳＤの配備初期の間に向上させた作業効率を促進し、ＳＳＤの配備後期の間に同じ性能を維持するよう閾値を増加させることによって作業効率を減少させることができる。
【００２８】
この点において、コントローラ８は、複数のリソースの第１のゼロではないサブセット（即ち、言い換えれば、一部）の使用量を決定してもよく、ここで、複数のリソースは、また、サーモメータデータ構造と称されてもよいサーモメータ状のサーモメータデータ構造に従って割当てられ、且つ解放される。コントローラ８は次いで、複数のリソースの第１の非ゼロサブセットの使用量を、複数のリソースの第１の非ゼロサブセットをリソースの第２の非ゼロサブセットから分離する閾値と比較してもよい。
【００２９】
コントローラ８は、幾つかの実施例において、この比較を行う前に、使用量を多くのリソースに変換してもよい。例えば、使用量は、幾つかの時間枠当たりの要求数の点で定義されてもよい。コントローラ８は次いで、各リソースが処理できる時間枠当たりの要求数を決定するか、そうでなければ取得してもよい。コントローラ８は次いで、必要とされるリソースの期待数を決定するように、時間枠当たりの要求数を、リソースが処理できる同じ時間枠当たりの要求数で除算してもよい。
【００３０】
コントローラ８は次いで、必要とされてもよい（使用量を効果的に表す）リソースの期待数を閾値と比較してもよい。コントローラ８は、その閾値による必要とされてもよいリソースの期待数の比較に少なくとも基づいて、リソースの第２の非ゼロサブセットの電源をオンにしてもよい。同様に、コントローラ８は、経時的な使用量を決定するか、そうでなければ取得するよう継続してもよく、この使用量を電源オン、言い換えれば、リソースの第２の非ゼロサブセットを起動した後の閾値と比較してもよい。使用量が閾値によって可能とされたものよりも低い場合、コントローラ８は、リソースの第２の非ゼロサブセットの電源をオフにしてもよい。
【００３１】
図２は、コントローラ８の詳細例を示す概念図及び概略ブロック図である。幾つかの実施例において、コントローラ８は、アドレス変換モジュール２２、書込モジュール２４、メンテナンスモジュール２６、読取モジュール２８、スケジューリングモジュール３０、及び複数のチャンネルコントローラ３２Ａ〜３２Ｎ（総称して、「チャンネルコントローラ３２」）を含んでもよい。他の実施例において、コントローラ８は、追加のモジュール又はハードウェアユニットを含んでもよく、又は、より少ないモジュール又はハードウェアユニットを含んでもよい。コントローラ８は、マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は他のデジタル論理回路を含んでもよい。幾つかの実施例において、コントローラ８は、オンチップシステム（ＳｏＣ）であってもよい。
【００３２】
コントローラ８は、インターフェース１４を介してホスト装置４とインターフェース接続し、メモリ装置１６へのデータの格納及びそれからのデータの取出しを管理してもよい。例えば、コントローラ８の書込モジュール２４は、メモリ装置１６への書込を管理してもよい。例えば、書込モジュール２４は、インターフェース１４を介してホスト装置４から、論理アドレスに関連するデータ及びそのデータを格納するようストレージ装置６に指示するメッセージを受信してもよい。書込モジュール２４は、メモリ装置１６へのデータの書込を管理してもよい。
【００３３】
例えば、書込モジュール２４は、データの格納位置を管理するためにホスト装置４によって用いられる論理アドレスと、データの書込をメモリ装置へ向けるために書込モジュール２４によって用いられる物理ブロックアドレスとの間の変換を管理するアドレス変換モジュール２２と通信してもよい。コントローラ８のアドレス変換モジュール２２は、メモリ装置１６によって格納されるデータの論理アドレス（即ち、論理ブロックアドレス）をメモリ装置１６によって格納されるデータの物理ブロックアドレスに変換するフラッシュ変換レイヤ又はテーブルを利用してもよい。例えば、ホスト装置４は、ストレージ装置６に対する命令又はメッセージ内のメモリ装置１６によって格納されるデータの論理ブロックアドレスを利用してもよい一方で、書込モジュール２４は、メモリ装置１６に対するデータの書込を制御するためにデータの物理ブロックアドレスを利用する。（同様に、読取モジュール２８は、メモリ装置１６からのデータの読出しを制御するために物理ブロックアドレスを利用する。）物理ブロックアドレスは、メモリ装置１６の実際の物理ブロックに対応している。幾つかの実施例において、アドレス変換モジュール２２は、キャッシュされた情報１３内部等の揮発性メモリ１２内にフラッシュ変換レイヤ又はテーブルを格納してもよい。
【００３４】
このように、ホスト装置４は、データの特定のセットのために静的論理ブロックアドレスを用いるよう可能とされてもよい一方で、データが実際に格納されている物理ブロックアドレスは変化してもよい。アドレス変換モジュール２２は、論理ブロックアドレスを物理ブロックアドレスにマッピングして、ホスト装置４による静的論理ブロックアドレスの使用を可能にするようフラッシュ変換レイヤ又はテーブルを維持してもよい一方で、データの物理ブロックアドレスは、例えば、ウェアレベリング、ガベージコレクション等により変化してもよい。
【００３５】
上で検討したように、コントローラ８の書込モジュール２４は、メモリ装置１６へのデータの書込を管理するために１つ以上の操作を実行してもよい。例えば、書込モジュール２４は、データを格納するためのメモリ装置１６内部の１つ以上のブロックを選択し、選択したブロックを含むメモリ装置１６のうちのメモリ装置にデータを実際に格納させることによって、メモリ装置１６へのデータの書込を管理してもよい。上で検討したように、書込モジュール２４は、選択したブロックに基づいて、アドレス変換モジュール２２にフラッシュ変換レイヤ又はテーブルを更新させてもよい。例えば、書込モジュール２４は、ホスト装置４から一単位のデータ及び論理ブロックアドレスを含むメッセージを受信し、データを格納するためのメモリ装置１６の特定のメモリ装置内部のブロックを選択し、メモリ装置１６の特定のメモリ装置に（例えば、特定のメモリ装置に対応する複数のチャンネルコントローラ３２のうちの１つのチャンネルコントローラを介して）データを実際に格納させ、論理ブロックアドレスが特定のメモリ装置内部の選択したブロックに対応することを示すようアドレス変換モジュール２２にフラッシュ変換レイヤ又はテーブルを更新させてもよい。
【００３６】
幾つかの実施例において、ホスト装置４から単位データを受信した後、書込モジュール２４は、１つ以上のメモリ装置１６にデータを実際に格納させる前に、揮発性メモリ１２を利用して一時的に単位データを格納してもよい。幾つかの実施例において、書込モジュール２４は、ホスト装置４にデータが正常に格納されたかどうかを示すメッセージを送信するよう構成されてもよい。しかし、幾つかの実施例において、書込モジュール２４は、データが実際に格納される前に、データの正常な格納を確認するメッセージをホスト装置４に送信してもよい。例えば、書込モジュール２４は、データが揮発性メモリ１２に格納される場合に、データの正常な格納を確認するメッセージをホスト装置４に送信してもよい。
【００３７】
幾つかの実施例において、メモリ装置１６によってデータが格納されることに加えて、書込モジュール２４は、１つ以上のブロックが失敗したか、破損した場合の単位データを回復するために用いられてもよい情報をメモリ装置１６に格納させてもよい。パリティ情報が、他のブロックによって格納されるデータを回復するために用いられてもよい。幾つかの実施例において、パリティ情報は、他のブロックによって格納されるＸＯＲデータであってもよい。
【００３８】
論理値０（荷電）を有するビットを前の論理値１（非荷電）を有するビットに書込むために、大電流が用いられる。この電流は、隣接するフラッシュメモリセルの荷電に対する不用意な変更の原因となる場合のある十分に大きなものであってもよい。不用意な変更を防ぐために、フラッシュメモリセルのブロック全体は、何れかのデータをブロック内部のセルに書込む前に、論理値１（非荷電）に消去されてもよい。このため、フラッシュメモリセルは、ブロックレベルで消去され、ページレベルで書込まれてもよい。
【００３９】
従って、１ページ未満を消費するデータ量を書込むためでさえも、コントローラ８は、ブロック全体を消去させてもよい。これは、結局、ホスト装置４から受信されてメモリ装置１６に書込まれるデータ量と、メモリ装置１６に実際に書込まれるデータ量との間の比率を指すライトアンプリフィケーションを招く恐れがある。ライトアンプリフィケーションは、ライトアンプリフィケーションが生じない場合よりもフラッシュメモリセルの急速な摩耗の一因となる。フラッシュメモリセルに対する摩耗は、フラッシュメモリセルがフラッシュメモリセルを消去するために用いられる比較的高い電圧により消去された場合に生じる恐れがある。複数の消去サイクルにわたる比較的高い電圧は、フラッシュメモリセルに対する変更の原因となることがある。最終的に、フラッシュメモリセルは、この摩耗により使用できなくなる恐れがあり、この場合、フラッシュメモリセルは、データを取り出すことができるよう十分な精度を持ってデータを格納できなくなる可能性がある。
【００４０】
コントローラ８がフラッシュメモリセルのライトアンプリフィケーション及び摩耗を低減するために実装できる１つの技術は、ホスト装置４から受信したデータを未使用ブロック又は一部使用されたブロックに書込むことを含んでいる。例えば、仮に、ホスト装置４が、ストレージ装置６によって既に格納されたデータから僅かな変更のみを含むデータをストレージ装置６に送信したとする。その場合、コントローラは古いデータを陳腐化又は有効期限切れのデータとしてマークを付けてもよい。時間が経つにつれて、これにより、古いデータを保持するブロックを消去し、更新されたデータを同じブロックに書込むことにブロックが曝され、比較される消去操作の数を低減できる。
【００４１】
ホスト装置４から書込コマンドを受信することに応答して、書込モジュール２４は、データを書込むためのメモリ装置１６の物理的位置（例えば、ブロック）がどこであるかを決定してもよい。例えば、書込モジュール２４は、アドレス変換モジュール２２又はメンテナンスモジュール２６から、空である（例えば、何のデータも格納していない）か、部分的に空である（例えば、ブロックの幾つかのページのみがデータを格納している）か、又は、少なくとも幾つかの無効（又は陳腐化）データを格納している１つ以上の物理ブロックアドレスを要求してもよい。１つ以上の物理ブロックアドレスを受信すると、書込モジュール２４は、上で検討したように、１つ以上のブロックを選択し、チャンネルコントローラ３２Ａ〜３２Ｎ（総称して、「チャンネルコントローラ３２」）にデータを選択ブロックに書込ませるメッセージを通信してもよい。
【００４２】
読取モジュール２８は同様に、メモリ装置１６からのデータの読取を制御してもよい。例えば、読取モジュール２８は、関連する論理ブロックアドレスを有するデータを要求するメッセージをホスト装置４から受信してもよい。アドレス変換モジュール２２は、フラッシュ変換レイヤ又はテーブルを用いて論理ブロックアドレスを物理ブロックアドレスに変換してもよい。読取モジュール２８は次いで、データを物理ブロックアドレスから取り出すよう１つ以上のチャンネルコントローラ３２を制御してもよい。書込モジュール２４と同様に、読取モジュール２８は、１つ以上のブロックを選択し、チャンネルコントローラ３２にデータを選択ブロックから読取らせるメッセージを通信してもよい。
【００４３】
チャンネルコントローラ３２の各チャンネルコントローラは、チャンネル１８のそれぞれのチャンネルに接続されてもよい。幾つかの実施例において、コントローラ８は、ストレージ装置２のチャンネル１８の数と同じ数のチャンネルコントローラ３２を含んでもよい。チャンネルコントローラ３２は、例えば、書込モジュール２４、読取モジュール２８、及び／又はメンテナンスモジュール２６の制御下で、それぞれのチャンネルに接続されるメモリ装置１６のアドレス指定、プログラミング、消去、及び読取の密接な制御を実行してもよい。
【００４４】
メンテナンスモジュール２６は、性能を維持し、ストレージ装置６（例えば、メモリ装置１６）の耐用年数を延長させることに関する操作を実行するよう構成されてもよい。例えば、メンテナンスモジュール２６は、ウェアレベリング又はガベージコレクションのうちの少なくとも１つを実施してもよい。
【００４５】
上で説明したように、フラッシュメモリセルを消去することは、比較的高い電圧を用いる場合があり、これは、複数の消去操作にわたると、フラッシュメモリセルに対する変更の原因となる場合がある。一定数の消去操作後に、フラッシュメモリセルは、データがそれ以上フラッシュメモリセルに書込めなくなる程度まで劣化する恐れがあり、それらのセルを含むブロックは、使用停止させられる（それ以上、データを格納するためにコントローラ８によって使用されない）恐れがある。ブロックが摩耗し、使用停止される前にメモリ装置１６に書込むことができるデータの量を増加させるため、メンテナンスモジュール２６はウェアレベリングを実施してもよい。
【００４６】
ウェアレベリングにおいて、メンテナンスモジュール２６は、各ブロック又はブロックのグループに対し、１ブロック又はブロックの１グループの消去又は書込の数を追跡してもよい。メンテナンスモジュール２６は、ホスト装置４からの受信データを、比較的少ない書込又は消去を受けたブロック又はブロックのグループに書込んで、各ブロック又はブロックのグループに対する書込又は消去の数を略等しく維持するように試みてもよい。これは、メモリ装置１６の各ブロックを略同じ割合で摩耗させ、ストレージ装置６の耐用年数を高めることができる。
【００４７】
これは、異なるブロックに対してデータを消去し、書込む数を削減することによって、フラッシュメモリセルのライトアンプリフィケーション及び摩耗を低減できるが、これはまた、幾つかの有効（新規）データ及び幾つかの無効（陳腐化）データを含むブロックにつながる場合もある。この新規データ／陳腐化データ状態を克服するために、メンテナンスモジュール２６はガベージコレクションを実施してもよい。ガベージコレクション操作において、メンテナンスモジュール２６は、メモリ装置１６のブロックの内容を解析して、高い割合の無効（陳腐化）データを含むブロックを決定してもよい。メンテナンスモジュール２６は次いで、ブロックからの有効データを異なるブロックに書き換え、次いで、そのブロックを消去してもよい。これは、メモリ装置１６によって格納される無効（陳腐化）データの量を削減し、フリーブロックの数を増加させることができるが、メモリ装置１６のライトアンプリフィケーション及び摩耗も増加させる恐れがある。
【００４８】
コントローラ８のスケジューリングモジュール３０は、メモリ装置１６によって実行されるべき動作をスケジュール設定するために１つ以上の操作を実行してもよい。例えば、スケジューリングモジュール３０は、コントローラ８の他の構成部品から受信する要求をスケジュール設定して、１つ以上のメモリ装置１６に１つ以上の動作を実行中に行うよう命令してもよい。幾つかの実施例において、スケジューリングモジュール３０は、それらが受信された順序（例えば、先入れ先出し即ちＦＩＦＯ）で実行される要求をスケジュール設定してもよい。幾つかの実施例において、スケジューリングモジュール３０は、要求の種類（例えば、読取要求、書込要求、消去要求、ガベージコレクション要求等）、要求が受信されてから経過した時間、要求の実行によって消費された電力量、帯域幅考慮等を含むが、これらに限定されない１つ以上の要因に基づく要求をスケジュール設定してもよい。
【００４９】
幾つかの実施例において、消費電力予算に適合するために、スケジューリングモジュール３０は、性能が制限されるように実行される動作をスケジュール設定してもよい。例えば、消費電力予算により、全てのメモリ装置１６が同時に動作した場合に消費される電力量よりも少ない電力量をメモリ装置１６に割当てる場合、スケジューリングモジュール３０は、メモリ装置１６によって消費される電力量が、メモリ装置１６に割当てられた電力量を超えないように、実行される動作をスケジュール設定してもよい。
【００５０】
一実施例として、ストレージ装置６が２５Ｗの消費電力目標を有している場合、消費電力予算は、消費電力目標の一部（例えば、１６Ｗ）をメモリ装置１６による使用に対して割当ててもよい。仮に、全てのメモリ装置１６が同時に動作した場合に消費される電力量が、消費電力目標の割当部分（例えば、１６Ｗ）よりも大きい場合、スケジューリングモジュール３０は、割当部分よりも多くの電力を消費することなく現在動作しているであろうメモリ装置１６の数量を決定してもよい。例えば、メモリ装置１６が消費電力予算のうちのＸ単位を割当てられ、メモリ装置１６の各メモリ装置が動作時に１単位の電力を消費した場合、スケジューリングモジュール３０は、メモリ装置１６のうちのＸ個のメモリ装置が同時に動作しているであろうことを決定してもよい。
【００５１】
幾つかの実施例において、スケジューリングモジュール３０は、性能制限を選択的にイネーブルにするよう構成されてもよい。例えば、スケジューリングモジュール３０は、第１のモードで動作している場合に制限をイネーブルにし、第２のモードで動作している場合に制限をディスエーブルにしてもよい。幾つかの実施例において、制限が、同時に動作しているであろうメモリ装置１６の量を低減する場合等のように、スケジューリングモジュール３０がデータをメモリ装置１６に書込ませる割合は、制限がディスエーブルにされる場合と比較して、制限がイネーブルにされる場合の方が低くてもよい。
【００５２】
図２の例において更に示すように、コントローラ８は、多数のバッファ３４を含んでもよい。バッファ３４は、幾つかの実施例において「生データバッファ３４」と称されてもよい。生データバッファ３４は、チャンネルコントローラ３２に渡されるか、及び／又はそれらから受信されるべきデータを格納するために用いるバッファを表してもよい。生データバッファ３４は、書込モジュール２４及び読取モジュール２８等のいわゆる要求元によって要求されてもよい上で言及したリソースのうちの１つを表してもよい。
【００５３】
更に、説明を容易にするためにチャンネルコントローラ３２Ａに関してのみ示しているが、チャンネルコントローラ３２のそれぞれは、チャンネルコントローラ３２Ａに関して示したものと類似のＥＣＣエンコーダ３６、読取バッファ３８、及びＥＣＣデコーダ４０の形で多数の例示的なリソースを含んでもよい。ＥＣＣエンコーダ３６は、不揮発性メモリ領域１０に書込まれるよう待機しているデータに対してＥＣＣ符号化を実行するよう構成されるユニット又はモジュールを表してもよい。読取バッファ３８は、不揮発性メモリ領域１０から読取られるデータを格納するよう構成されるユニット又はモジュールを表してもよい。読取バッファ３８は、読取った符号語を格納するよう構成されてもよい。ＥＣＣデコーダ４０は、読取バッファ３８に格納されたデータに関してＥＣＣ復号化を実行するよう構成されるユニット又はモジュールを表してもよい。
【００５４】
本開示の１つ以上の技術によって、チャンネルコントローラ３２Ａは、一実施例として、以下でより詳細に説明する方法で一定に連続して、リソースの割当及び解除を可能にするサーモメータデータ構造を少なくとも部分的に用いて、ＥＣＣエンコーダ３６、読取バッファ３８、及びＥＣＣデコーダ４０のうちの１つ以上の割当及び解除を実行するリソース割当モジュール４２を含んでもよい。単一のリソース割当モジュール４２を含むものとして示しているが、チャンネルコントローラ３２Ａは、複数の異なるリソース割当モジュール４２を含んでもよく、それぞれが、リソース３６〜４０のうちの別個の１つを割当てることに関与してもよい。説明を容易にするために図２の実施例には図示していないが、チャンネルコントローラ３２のそれぞれ、又は、幾つかの例において、１つ以上のチャンネルコントローラ３２は、チャンネルコントローラ３２Ａのリソース割当モジュール４２と類似した１つ以上のリソース割当モジュール４２を含んでもよい。その上、コントローラ８は、再度、説明を容易にするために図２の実施例には図示していないが、チャンネルコントローラ３２から分離したモジュールとして、作業効率と性能のバランスを取るようにバッファ３４を割当て／解除するために本開示に説明する技術を実行してもよいリソース割当モジュール４２の別の例を含んでもよい。
【００５５】
何れかのイベントにおいて、リソース割当モジュール４２は、閾値を決定するために前述の特定したリソース３４〜４０のうちの１つ以上の使用を特定するよう、サーモメータデータ構造を解析してもよい。この閾値は、初めに予め定義され、先の統計的解析又は他の基準に基づいて、コントローラ８内部で構成されてもよい。リソース割当モジュール４２は、上で言及したように、初めに電源をオンにすることに関して、リソース３４〜４０のうちの１つ以上の第１の非ゼロサブセットの電源のみをオンにし、時間が経つにつれて、これらリソースの使用量を決定して、この使用量と閾値を比較してもよい。リソース割当モジュール４２は次いで、この比較に基づいて、リソース３４〜４０のうちの１つ以上の第２の非ゼロサブセットの電源をオンにしてもよく、ここで、この第２の非ゼロサブセットは、対応するリソース３４〜４０の第１の非ゼロサブセットの何れかのリソース３４〜４０も含まない場合がある。
【００５６】
図３は、図２の実施例において示した一般的なリソース割当モジュール４２をより詳細に示す図である。図３の実施例において示すように、リソース割当モジュール４２は、アービタモジュール５０（「リソースアービタ５０」と称されてもよい）と、アロケータ及び電力制御モジュール５２（「リソースアロケータ５２」と称されてもよい）とを含んでもよい。リソース割当モジュール４２は、前述で説明したリソースのうちの何れかの１つ以上、例えば、バッファ３４、ＥＣＣエンコーダ３６、読取バッファ３８、及びＥＣＣデコーダ４０、並びに、一般的なストレージ装置又はコンピュータ装置に共通する何れかの他のリソースを表してもよい、リソース５４Ａ〜５４Ｍ（「リソース５４」）とインターフェース接続してもよい。
【００５７】
リソース割当モジュール４２は、リソース５４へのアクセスを仲裁するために要求元５６Ａ〜５６Ｎ（「要求元５６」）ともインターフェース接続する一方で、本開示に説明する技術に従って、電力制御を容易にするためにリソース５４の異なる非ゼロサブセットも割当ててもよい。リソース５４は、汎用プロセッサ（中央処理装置即ちＣＰＵ等）、専用プロセッサ、専用ハードウェア、様々なコア、又は、何れかの他の種類のソフトウェア又はハードウェア要求元によって実行される様々なソフトウェアスレッドを表してもよい。
【００５８】
一般に、本開示の技術は、要求元５６の数がリソース５４の数を超える（例えば、ＮがＭより大きい）場合、リソース５４へのアクセスを容易にできる。これらの例において、リソース割当モジュール４２は、以下の幾つかのインターフェースを提供してもよい：
１）Ｍ＜Ｎの場合、Ｍ個のリソースのセットのうちの１つに接続されるよう設計されたＮ個の競合する要求ポートのセット；
２）リソースの各インスタンスに接続される電力制御出力のセット；
３）リソースから関連するリソースの現在の電力状態を示す装置への電力状態インジケータ入力のセット；及び、
４）ＣＰＵメモリ又は入／出力（ＩＯ）ベースのインターフェース。
【００５９】
アービタモジュール５０は、アービトレーションスキームを実行するよう構成されたユニットを表してもよい。アービトレーションスキームの例は、ラウンドロビンアービトレーションスキームである。ラウンドロビンアービトレーションスキームにおいて、リソース５４のうちの１つへのアクセスが最後に許可された要求元５６のうちの１つは、次の許可を受信する点から見て、要求元５６の中で最も低い相対的優先度を有し、そうでなければ、要求元５６のうちの番号順で次のものが次の許可を受信する。即ち、要求元５６のそれぞれは、要求元５６の中で順序を番号順に定義してもよい要求元識別子（ＩＤ）を割当てられる。また、リソースＩＤが、リソース５４のそれぞれに割当てられてもよい。幾つかの実施例において、複数のリソースＩＤが、リソース５４のその１つの能力に応じて、リソース５４のそれぞれに割当てられてもよい。複数のリソースＩＤがリソース５４の１つ１つに割当てられてもよいそれらの実施例において、リソースＩＤは、「リソース要素ＩＤ」又は「割当ＩＤ」と称されてもよい。単一のリソースＩＤがリソース５４の１つ１つに割当てられる例においてさえも、リソースＩＤは、「リソース要素ＩＤ」又は「割当ＩＤ」と称されてもよい。これらの用語のそのような用法は、交換可能であってもよく、必ずしも、複数のリソースＩＤがリソース５４の１つ以上に割当てられたかどうかを示すとは限らない。
【００６０】
アービタモジュール５０によって実装されるラウンドロビンアービトレーションスキームは、アービタモジュール５０が、要求元ＩＤを要求元５６のそれぞれに割当て、１つ以上のリソースＩＤをリソース５４のそれぞれに割当てる結果となってもよい。アービタモジュール５０は次いで、昇順での各要求に関連する要求元ＩＤの番号順でリソース５４へのアクセスに対する未処理の要求を介して回帰してもよい。アービタモジュール５０は、要求元５６のうちの幾つかからの特定の要求が許可された最後の要求であったかどうかに応じて、要求のうちの幾つかを降格させ、それによって、要求元５６を横切るリソース５４へのアクセスのバランスを取るために直前に処理されたこれらの要求元５６からの要求を効果的に降格させてもよい。要求元５６からの要求は、矢印によって示されており、「要求５８Ａ〜５８Ｎ」又は総称して「要求５８」と称されてもよい。
【００６１】
図３の実施例において、アロケータ及び電力制御モジュール５２は、アロケータモジュール６０と電力制御モジュール６２とを含んでいる。要求元５６からの要求５８間の仲裁において、アロケータモジュール６０は、アービタモジュール５０とデータを通信するか、そうでなければ共有して、要求５８の許可を容易にしてもよい。例えば、全てのリソース５４がアービタモジュール５０に割当てられることを、アロケータモジュール６０が示す場合、アービタモジュール５０は、保留中の要求５８のうちの１つを許可しなくてもよい。別の実施例として、全ての利用可能なリソース（電源がオンにされるリソース５４の非ゼロサブセットを指してもよい）がアービタモジュール５０に割当てられることを、アロケータモジュール６０が示す場合、アービタモジュール５０は、保留中の要求５８のうちの１つを許可しなくてもよい。更に別の実施例として、全てのリソース５４がアービタモジュール５０に対して電源がオフにされることを、アロケータモジュール６０が示す場合、アービタモジュール５０は、保留中の要求５８のうちの１つを許可しなくてもよい。幾つかの実施例において、１つ以上のリソース５４は、外部ＣＰＵ又は他の制御装置による許可に対してイネーブルにされてもよい（幾つかの実施例において、レジスタインターフェースによって生じてもよい）。アロケータモジュール６０は、同様に、リソース５４のうちのこれらの制御されたものが、ＣＰＵ又は他の制御装置が許可のためにリソース５４のうちのこれらのものをイネーブルにした時に割当てられるよう利用可能であることを、アービタモジュール５０と通信のみしてもよい。
【００６２】
初めに、ストレージ装置６が最初に電源をオンにされた場合、ストレージ装置６は、リソース５４の全ての電源が切断されていなければ（又は、電源投入されていなければ）幾つかが低電力状態で動作してもよい。要求元５６は１つ以上の要求５８を発行し始めてもよく、ＣＰＵ又は他の制御ロジックは次いで、リソース５４の幾つかの非ゼロサブセットの電源をオンにするように、電力制御モジュール６２とインターフェース接続するようアロケータモジュール６０をイネーブルにしてもよい。即ち、アロケータモジュール６０は、リソース５４の残りのものの電源をオンにすることなく、この非ゼロサブセットの電源のみをオンにするよう、電力制御モジュール６２とインターフェース接続してもよい。リソース５４のこの非ゼロサブセットはまた、リソース５４の一部又はリソース５４のバンクと称されてもよい。その上、リソース５４のこの非ゼロサブセットは、全てのリソース５４ではないが、１つ、２つ、又はそれを超えるリソース５４を含んでもよい。
【００６３】
リソース５４のこの非ゼロサブセットの電源投入に応答して、アロケータモジュール６０は次いで、サーモメータデータ構造６１（「温度データ構造６１」）を初期化し、増加するリソースＩＤを順番にリソース５４の電源をオンにした非ゼロサブセットに割当て、サーモメータデータ構造６１を更新して、リソース５４の電源をオンにした非ゼロサブセットのうちの特定の１つにリソースＩＤの割当を反映させてもよい。このサーモメータデータ構造６１は、リソース５４の電源をオンにした非ゼロサブセットのうちの１つ１つに対するノードを含んでもよく、各ノードは、順次及び潜在的に単調に増加するリソースＩＤのうちの１つと、リソースの非ゼロセットのうちのこの対応する１つが利用可能であるか、又は使用中であるかどうかの指示を格納している。アロケータモジュール６０は次いで、１つ以上の要求５８を許可することに使用するために、リソースＩＤをアービタモジュール５０に渡してもよい。図３の実施例に示すように、アロケータモジュール６０は、サーモメータデータ構造６１をアービタモジュール５０に供給することによってリソースＩＤを渡してもよい。それぞれがサーモメータデータ構造６１のコピーを有するように示しているが、アービタモジュール５０及びアロケータモジュール６０はそれぞれ、アービタモジュール５０及びアロケータモジュール６０の両方によってアクセス可能な単一の位置に格納されてもよい同じサーモメータデータ構造６１にアクセスしてもよい。
【００６４】
アービタモジュール５０は次いで、アービトレーションスキームに従って、要求５８を許可するよう進行し、それによって、要求元５６にリソースＩＤによって特定されるそれらのリソースに対するアクセスを提供してもよい。アービタモジュール５０は、リソース５４の非ゼロサブセットのうちのそれらが要求元５６のうちの１つによって使用中として割当てられることを示すようサーモメータデータ構造６１を更新してもよい。時間が進むにつれて、要求元５６は、増加する要求５８を発行してもよく、これはリソース５４のうちの１つに対するアクセスが許可される前に、要求元５６が平均して長時間待機する結果となる恐れがある。アロケータモジュール６０は、（例えば、要求５８のうちの１つの発行から要求５８のうちのその１つの許可までの平均時間の観点から）この遅延を特定し、この遅延を、遅延を低減するために必要とされるであろうリソースの期待数に変換してもよい。リソースのこの期待数は、これらのリソースが必要とされるよう予測される前に、これらのリソースの電源をオンにするように、過去の使用量に基づいて、変換が使用量を予測するよう試行されてもよいという点で、実際には予測であってもよい。使用量のこの予測は、実際の使用量情報が（予測される使用量情報ではなく）、リソース５４のこれらの追加のものの需要があることを示す場合に、これらのリソース５４が利用可能であるように、リソース５４の電源をオンにするように電力制御モジュール６２とインターフェース接続するよう、アロケータモジュール６０をイネーブルにしてもよい。
【００６５】
サーモメータデータ構造６１を初期化する場合、アロケータモジュール６０は、電源がオンにされるリソース５４の非ゼロサブセットを電源がオンにされないリソース５４の残りのものから分離させる閾値を決定してもよい。この閾値は、ＣＰＵ又は他の制御ロジックによって定義され、アロケータモジュール６０内部で予めプログラムされるか、予め構成され、ストレージ装置６の前の動作又はそれらの幾つかの組み合わせを介して（コンピュータ学習アルゴリズムを介して）取得されてもよい。本開示において単一の閾値に関して説明したが、技術は複数の閾値まで拡張されてもよく、そのそれぞれは、電源オン及び電源オフされた非ゼロリソースサブセット間の別の分離点を定義する。
【００６６】
何れかのイベントにおいて、リソース５４の期待数が閾値と等しいか、超える場合（又は、幾つかの実施例では、超える場合にのみ）、アロケータモジュール６０は、リソース５４の残りのものの電源をオンにするよう、電力制御モジュール６２とインターフェース接続してもよい。幾つかの実施例において、アロケータモジュール６０は最初に、リソース５４の残りのものが、リソース５４のこれらのものの電源をオンにする前に電源をオンにされることを確認するよう、ＣＰＵ又は他の制御ロジックとインターフェース接続してもよい。電力制御モジュール６２によって報告されるように電源がオンにされると、アロケータモジュール６０は、リソース５４の新たに電源がオンにされたものを反映するよう、サーモメータデータ構造６１を更新してもよい。アービタモジュール５０は次いで、サーモメータデータ構造６１が更新された後、これらの要求元５６からの要求５８を許可するように、リソース５４の新たに電源がオンにされたものを要求元５６に割当てることを開始してもよい。サーモメータデータ構造６１の使用を通じて、アロケータモジュール６０は、一定に連続して、又は、特定の進行でリソース５４の電源をオンにしてもよい。
【００６７】
言い換えれば、アロケータモジュール６０は、リソース５４の最も低い番号が付けられたものに関連するものである最も低い番号が付けられた値に向けてリソースＩＤを集中させてもよいアルゴリズムに従って動作する。要求５８の第１のものがアービタモジュール５０によって受信される場合、アービタモジュール５０は、サーモメータデータ構造６１に格納されたリソースＩＤのうちの最も低い番号が付けられたものを割当て、リソース５４の対応するものがビジーである（即ち、言い換えれば、使用中又は利用不可である）ことを示すためにサーモメータデータ構造６１を更新するよう構成されてもよい。要求５８の第２のものが、リソース５４の対応するものによって完全に処理された第１の要求の前に、アービタモジュール５０によって受信される場合、アービタモジュール５０は、サーモメータデータ構造６１に格納されたリソースＩＤのうちの２番目に低い利用可能なものを割当ててもよい。リソースＩＤのうちのこの２番目に低い利用可能なものを割当てた後、アービタモジュール５０は、この対応するリソースがビジーであることを示すためにサーモメータデータ構造６１を更新してもよい。要求５８の第１のものが処理されると、アービタモジュール５０は、要求５８のその第１のものを処理するリソース５４のうちの１つが利用可能であることを示すためにサーモメータデータ構造６１を更新してもよい。リソース５４のうちのこの１つが（全ての利用可能なリソースＩＤのうちで）最下位の利用可能なリソースＩＤを有することを考えると、アービタモジュール５０は、再度、要求５８の何れかの追加のものに応じてこのリソースＩＤを割当て、それによって、リソース５４の残りのものの電源を投入させることを潜在的に回避してもよい。
【００６８】
時間が進むにつれて、アロケータモジュール６０は、所定の時間間隔当たりの要求数が減少したことを決定してもよい。この減少は、利用可能なリソース５４の幾つかが一定期間アイドルとなる結果を効果的にもたらしてもよい。アロケータモジュール６０は、所定の時間間隔当たりの要求数をリソースの期待数に変換することによってこのアイドルを検出してもよい。アロケータモジュール６０は、リソースのこの期待数を上で言及した閾値と比較し、この比較に基づいて（例えば、リソースの期待数が、閾値未満、又は、それと等しいか、単にそれ未満である場合）、電源をオンにする前にリソース５４の残りの非ゼロサブセットの電源をオフにしてもよい。
【００６９】
アロケータモジュール６０は、時間が経つにつれて、よりきめ細かい電力制御を提供するよう閾値の数を増加させるか、そうでなければ、リソース５４の幾つかの増量分のみの電源をオン又はオフにするよう既存の閾値を調整してもよい。言い換えれば、静的閾値を有するものとして上で説明する一方で、技術は、リソースの期待数、時間帯、又は、熱、消費される処理サイクル、使用メモリ等の何れかの他の条件に基づいて経時的に変化する動的閾値を用いて実施されてもよい。閾値を動的に調整することにおいて、アロケータモジュール６０は、リソース５４の初期の非ゼロサブセットを超える追加リソースの電源をオン又はオフにし、リソース５４のこの非ゼロサブセットに存在するリソース数を増加又は減少させてもよい。閾値を動的に調整することにより、性能と消費電力とのバランスを取るための更に別の方法を提供できる。
【００７０】
図４は、図２のＥＣＣデコーダ４０をより詳細に示すブロック図である。図４の実施例において、ＥＣＣデコーダ４０は、アービタモジュール５０及びアロケータ及び電力制御モジュール５２（それぞれは、図３の実施例に示すアービタモジュール５０及び／又はアロケータ及び電力制御モジュール５２と類似しているか、それらと同じであってもよい）の形で統合されたリソース割当モジュール４２（図示せず）を含んでいる。ＥＣＣデコーダ４０は更に、要求元５６及び読取データマルチプレクサ７２（「読取データＭＵＸ７２」）を効果的に表してもよい１つ以上のリソース要求モジュールを含んでもよい。要求元５６は、ＣＰＵ７０とインターフェース接続し、要求５８を生成するよう構成されるインターフェースを表してもよい。読取データＭＵＸ７２は、リソース５４として示されるメモリバンク間で多重化するか、そうでなければ、それらのうちの１つからデータを選択するよう構成されるユニットを表してもよい。
【００７１】
図４の実施例において、要求元５６は、メモリバッファにデータをコピーするよう要求する装置、ユニット、又はモジュールを表してもよい。リソース５４は、（一実施例として、それぞれがＳＲＡＭと称される種類のメモリを含んでもよい）メモリバンク０〜３内部に位置するメモリバッファを表してもよい。各メモリバンクが４つのバッファを提供でき、平均要求到着時間は、最大４つの要求元５６がバッファの寿命を超えて動作するようなものであるとすれば、単一のメモリバンク５４のみが、需要を満たすために電源をオンにされてもよい。しかし、要求の到着時間が減少するか、バッファの平均寿命が増加する場合、アロケータ及び電力制御モジュール５２は、メモリバンク５４のうちの追加の１つ（例えば、メモリバンク０に加えてメモリバンク１）を電源投入し、それによって、４つの更なるリソースＩＤを提供してもよい。アロケータ及び電力制御モジュール５２は次いで、４から８にバッファスロットの利用可能なプールを増加させてもよいが、これは、メモリバンク１が、ＰＷＲ＿ＩＳ＿ＯＮ制御チャンネル（又は、電力状態制御ラインと称されるもの）を介して電源投入状態にあることを示した後にのみ行われる。
【００７２】
図５Ａ及び５Ｂは、本開示で説明するリソース割当及び解除技術を実行することにおいて、ストレージ装置の例示的な動作を示すフローチャートである。最初に図５Ａを参照すると、図１の実施例に示すストレージ装置６等のストレージ装置が最初に電源投入されると、ストレージ装置６は、（図３及び４の実施例に示す）リソース５４の全ての電源が切断されていなければ（又は、電源投入されていなければ）幾つかが低電力状態で動作してもよい（９０）。要求元５６は１つ以上の要求５８を発行し始めてもよく、ＣＰＵ又は他の制御ロジックは次いで、リソース５４の幾つかの非ゼロサブセットの電源をオンにするように、電力制御モジュール６２とインターフェース接続するようアロケータモジュール６０をイネーブルにしてもよい（９４）。
【００７３】
リソース５４のこの非ゼロサブセットの電源投入に応答して、アロケータモジュール６０は次いで、サーモメータデータ構造６１（「温度データ構造６１」）を初期化し、増加するリソースＩＤを順番にリソース５４の電源をオンにした非ゼロサブセットに割当て、サーモメータデータ構造６１を更新して、リソース５４の電源をオンにした非ゼロサブセットのうちの特定の１つにリソースＩＤの割当を反映させてもよい（９６）。アービタモジュール５０は次いで、アービトレーションスキームに従って、要求５８を許可するよう進行し（９８）、それによって、要求元５６にリソースＩＤによって特定されるそれらのリソースに対するアクセスを提供してもよい。アービタモジュール５０は、リソース５４の非ゼロサブセットのうちのそれらが要求元５６のうちの１つによって使用中として割当てられることを示すようサーモメータデータ構造６１を更新してもよい（１００）。
【００７４】
時間が進むにつれて、要求元５６は、増加する要求５８を発行してもよく、これはリソース５４のうちの１つに対するアクセスが許可される前に、要求元５６が平均して長時間待機する結果となる恐れがある。アロケータモジュール６０は、（例えば、要求５８のうちの１つの発行から要求５８のうちのその１つの許可までの平均時間の観点から）要求から許可までの遅延を決定し、上で説明した方法で、この遅延を（リソースの期待数の観点から）閾値と比較してもよい（１０２、１０４）。（遅延を効果的に表す）リソース５４の期待数が閾値以下である場合（「ＮＯ」１０６）、アロケータモジュール６０は、監視を継続し、そうでなければ、要求から許可までの遅延を決定し、この遅延を閾値と比較してもよい（１０２、１０４）。リソース５４の期待数が閾値を超える場合（「ＹＥＳ」１０６）、アロケータモジュール６０は、リソース５４の残りのものの電源をオンにするよう、電力制御モジュール６２とインターフェース接続してもよい（１０８）。
【００７５】
上で言及したように、複数のリソースの非ゼロサブセット及び複数のリソースの残りのものに関して説明したが、技術は、リソースのそれぞれ連続する非ゼロサブセットを分離するよう定義される対応する閾値を有するリソースのサブセットの何れかの数まで拡張されてもよい。この点において、複数のリソースは、大多数のリソースのサブセットであると理解されてもよい。そのため、複数のリソースの残りのものは、大多数のリソースの内部の複数のリソースの第２の非ゼロサブセットを表してもよい。
【００７６】
何れかのイベントにおいて、電力制御モジュール６２によって報告されるように電源がオンにされると、アロケータモジュール６０は、リソース５４の新たに電源がオンにされたものを反映するよう、サーモメータデータ構造６１を更新してもよい（１１０）。図５Ｂの実施例を参照すると、アービタモジュール５０は次いで、サーモメータデータ構造６１が更新された後、これらのリソース５６の割当及び解放を反映するようサーモメータデータ構造６１を更新する間に、これらの要求元５６からの要求５８を許可するように、リソース５４の新たに電源がオンにされたものを要求元５６に割当てることを開始してもよい（１１２、１１４）。
【００７７】
時間が進むにつれて、アロケータモジュール６０は、所定の時間間隔当たりの要求数が減少したことを決定してもよい。この減少は、利用可能なリソース５４の幾つかが一定期間アイドルとなる結果を効果的にもたらしてもよい。アロケータモジュール６０は、所定の時間間隔当たりの要求数をリソースの期待数に潜在的に変換する要求から許可までの遅延を再度決定してもよい（１１６）。アロケータモジュール６０は、リソースのこの期待数を上で言及した閾値と比較し（１１８）、この比較に基づいて（例えば、リソースの期待数が、閾値未満、又は、それと等しいか、単にそれ未満である場合）、電源をオンにする前にリソース５４の残りの非ゼロサブセットの電源をオフにしてもよい。
【００７８】
例えば、遅延が閾値より大きい場合（「ＹＥＳ」１２０）、アロケータモジュール６０は、要求から許可までの遅延を決定し、この遅延を閾値と比較し続けてもよい（１１６、１１８）。遅延が閾値以下である場合（「ＮＯ」１２０）、アロケータモジュール６０は、リソース５４の残りのサブセットの電源をオフにするよう、電力制御モジュール６２とインターフェース接続してもよい（１２２）。アロケータモジュール６０は、リソース５４のこれらのものの電源がオフにされたことを反映するよう、サーモメータデータ構造６１を更新してもよい（１２４）。ストレージ装置６は、このようにして動作し続け、ストレージ装置６が性能モードで動作する（１０８〜１２０）点で、要求から許可までの遅延が閾値を超えるまで、ここで動作コスト低減モードとして称されてもよい方法で、要求から許可までの遅延１０２を継続的に決定する（１０２〜１０６、１２２、１２４）。
【００７９】
図６は、図３のサーモメータデータ構造６１をより詳細に示す図である。サーモメータデータ構造６１は、ノード１３０Ａ〜１３０Ｉ（「ノード１３０」）を含み、各ノードは、リソースＩＤ（ＲＩＤ）及び利用可能な（Ａ）ビットを格納している。図６の実施例において、ノード１３０Ａ、１３０Ｃ〜１３０Ｆ、及び１３０Ｈに関連するリソース５４は、Ａ＝０によって（及び、対角線で満たされた図において）示すように利用できない。ノード１３０のそれぞれは、左から右に連続的に増加するリソースＩＤ（例えば、０から８）を割当てられる。フリーリソース（ノード１３０Ｂ、１３０Ｇ、及び１３０Ｉが、フリーである、即ち、言い換えれば、利用可能なリソースと関連する）の割当のために、アービタモジュール５０は、一方の側（例えば、左側）からフリーリソースの検索を常に開始する。結果として、アービタモジュール５０は、要求５８の次のものに応じて、（ノード１３０Ｂによって特定されるように）１と等しいリソースＩＤに関連するリソース５４のうちの１つを割当ててもよい。従来の割当の代わりに、この棒グラフ／サーモメータスタイルの割当は、上で説明した方法で、未使用のリソースの電源を遮断できる。効果的に、サーモメータデータ構造６１の一方の側は、ビジーのままにできる一方で、他方の側は大半をフリーのままにできる。
【００８０】
本開示において説明した技術は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、又はそれらの何れかの組み合わせで実装されてもよい。例えば、説明した技術の様々な態様は、１つ以上のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は何れかの他の同等の集積又は個別論理回路、並びに、かかる構成部品の何れかの組み合わせを含む１つ以上のプロセッサ内部で実装されてもよい。用語「プロセッサ」又は「処理回路」は、一般に、前述の論理回路の何れか単体で、又は他の論理回路との組み合わせで、又は何れかの他の同等の回路を指してもよい。ハードウェアを含む制御ユニットも、本開示の技術の１つ以上を実行してもよい。
【００８１】
かかるハードウェア、ソフトウェア、及びファームウェアは、本開示で説明した様々な技術に対応するよう、同じ装置内部又は別個の装置内部に実装されてもよい。加えて、説明したユニット、モジュール、又は構成部品の何れかは、個別だが、相互運用可能な論理装置として、一緒に、又は別々に実装されてもよい。モジュール又はユニットとしての異なる特徴の描写は、異なる機能的態様を強調することを意図するものであり、必ずしも、かかるモジュール又はユニットが別々のハードウェア、ファームウェア、又はソフトウェア部品によって実現されるべきであることを含蓄しない。代わりに、機能的に関連する１つ以上のモジュール又はユニットは、別々のハードウェア、ファームウェア、又はソフトウェア部品によって実行され、共通又は別々のハードウェア、ファームウェア、又はソフトウェア部品内部で統合されてもよい。
【００８２】
本開示で説明した技術は、命令と共に符号化されたコンピュータ読取可能記憶媒体を含む製品内で具現化され、又は符号化されてもよい。符号化されたコンピュータ読取可能記憶媒体を含む製品内に埋め込まれるか、符号化される命令は、コンピュータ読取可能記憶媒体内に含まれるか、符号化される命令が、１つ以上のプロセッサによって実行される場合のように、１つ以上のプログラマブルプロセッサ又は他のプロセッサに本明細書中で説明した１つ以上の技術を実施させてもよい。コンピュータ読取可能記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、プログラマブル読出し専用メモリ（ＰＲＯＭ）、消去可能プログラマブル読出し専用メモリ（ＥＰＲＯＭ）、電気消去可能プログラマブル読出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、コンパクトディスクＲＯＭ（ＣＤ−ＲＯＭ）、フロッピー（登録商標）ディスク、カセット、磁気ディスク、光学式媒体、又は他のコンピュータ読取可能媒体を含んでもよい。幾つかの実施例において、製品は、１つ以上のコンピュータ読取可能記憶媒体を含んでもよい。
【００８３】
幾つかの実施例において、コンピュータ読取可能記憶媒体は非一時的媒体を含んでもよい。用語「非一時的」は、記憶媒体が搬送波又は伝播信号において具現化されないことを示してもよい。特定の実施例において、非一時的記憶媒体は、時間が経つにつれて、変化する可能性のあるデータを格納してもよい（例えば、ＲＡＭ又はキャッシュ内）。
【００８４】
種々の実施例を説明してきた。これら及び他の実施形態は、以下の特許請求の範囲の適用内にある。
【符号の説明】
【００８５】
２  ストレージ環境
４  ホスト装置
６  ストレージ装置
８  コントローラ
１０  不揮発性メモリアレイ
１１  電力供給部
１２  揮発性メモリ
１３  キャッシュされた情報
１４  インターフェース
１６  メモリ装置
１８  チャンネル
２２  アドレス変換モジュール
２４  書込モジュール
２６  メンテナンスモジュール
２８  読取モジュール
３０  スケジューリングモジュール
３２  チャンネルコントローラ
３４  生データバッファ
３６  ＥＣＣエンコーダ
３８  読取バッファ
４０  ＥＣＣデコーダ
４２  リソース割当モジュール
５０  アービタモジュール
５２  アロケータ及び電力制御モジュール
５４  リソース
５６  要求元
５８  要求
６０  アロケータモジュール
６１  サーモメータデータ構造
６２  電力制御モジュール
７０  ＣＰＵ
７２  読取データマルチプレクサ
１３０  ノード
【図１】
2016105273.tif 000003
【図２】
2016105273.tif 000004
【図３】
2016105273.tif 000005
【図４】
2016105273.tif 000006
【図５Ａ】
2016105273.tif 000007
【図５Ｂ】
2016105273.tif 000008
【図６】
2016105273.tif 000009
【外国語明細書】
2016105273000001.pdf