本開示の態様は、メモリサブシステムのキューを維持することに向けられている。メモリサブシステムは、ストレージデバイス、メモリモジュール、又はストレージデバイスとメモリモジュールとのハイブリッドであり得る。ストレージデバイス及びメモリモジュールの例は、図1に関連して本明細書に説明される。一般的に、ホストシステムは、データを蓄積するメモリデバイス等の1つ以上のコンポーネントを含むメモリサブシステムを利用し得る。ホストシステムは、メモリサブシステムに蓄積されるデータを提供し得、メモリサブシステムから取得されるデータをリクエストし得る。
メモリデバイスは、不揮発性メモリデバイスであり得る。不揮発性メモリデバイスの一例は、否定論理積(NAND)メモリデバイスである。不揮発性メモリデバイスの他の例は、図1に関連して以下に説明される。不揮発性メモリデバイスは、1つ以上のダイのパッケージである。各ダイは、1つ以上のプレーンで構成され得る。プレーンは、論理ユニット(LUN)にグループ化され得る。幾つかのタイプの不揮発性メモリデバイス(例えば、NANDデバイス)の場合、各プレーンは、物理ブロックのセットで構成される。各ブロックは、ページのセットで構成される。各ページは、メモリセル(“セル”)のセットで構成される。セルは、情報を蓄積する電子回路である。データブロックは、以下では、データを蓄積するために使用されるメモリデバイスのユニットを指し、メモリセルのグループ、ワード線のグループ、ワード線、又は個々のメモリセルを含み得る。
データ動作は、メモリサブシステムによって実施され得る。データ動作は、ホスト開始の動作であり得る。例えば、ホストシステムは、メモリサブシステム上でデータ動作(例えば、書き込み、読み出し、消去等)を開始し得る。ホストシステムは、メモリサブシステムにあるメモリデバイス上にデータを蓄積するために、及びメモリサブシステム上のメモリデバイスからデータを読み出すために等、メモリサブシステムへアクセスリクエスト(例えば、書き込みコマンド、読み出しコマンド)を送り得る。
NANDセルの従来のアクセス動作では、コマンドが様々なメモリダイへ絶えず送信され得る。コマンドは、様々なレベルの優先度を有する異なるアクセス動作(例えば、読み出し動作、書き込み動作等)と関連付けられ得る。すなわち、読み出しコマンド又は書き込みコマンドが同じダイへ送信される前にホスト読み出しコマンドが特定のメモリダイへ送信されることが望ましいことがある。しかしながら、メモリサブシステムは多くのダイを含み、各ダイは多数のコマンド及びコマンドタイプと関連付け得るので、従来のアクセス動作では、コマンドの送信を効果的に優先付けることが不可能であり得る。また、従来のアクセス動作はコマンドの送信を効果的に優先付けることが不可能であり得るので、より低い優先度のコマンドがより高い優先度のコマンドの前に発行され得、システムリソース(例えば、電力)を不必要に利用し得る。したがって、従来のアクセス動作は、システムリソースが相対的に低い優先度の動作に割り当てられることをもたらし得、必要な場合により高い優先度のコマンドをメモリサブシステムが発行可能になることを阻む。
本開示の態様は、メモリサブシステムのキューをダイレベルで維持することによって、上記の及びその他の欠陥に対処する。例えば、メモリサブシステムの各メモリダイは、個別のダイと関連付けられたコマンドを維持するためにキュー(例えば、メモリダイキュー)と関連付けられ得る。更に、各メモリダイキューは、特定の優先度レベルと関連付けられたコマンドを維持するために複数のサブキュー(例えば、優先度付きキュー)を含み得る。コマンドは、個別の優先度付きキューと関連付けられた優先度レベルに基づいて、また、個別のキュー内のコマンドの量に基づいて発行され得る。すなわち、キュー内のコマンドの数が閾値を超える場合、任意の追加のコマンドがキューに割り当てられる前にコマンドが発行され得る。したがって、コマンドは、コマンドと関連付けられた優先度レベルとキュー内のコマンド数との両方に基づいて発行され得る。幾つかの例では、コマンドはローカルメモリコントローラによって発行され得る。
例えば、メモリサブシステムの特定のメモリダイと関連付けられたメモリダイキューは、1つ以上(例えば、2つ、3つ、6つ)の優先度付きキューを含み得る。各優先度付きキューは、特定の優先度レベルと関連付けられたコマンドと関連付けられ(例えば、そのためにリザーブされ)得る。3つの優先度付きキューが使用される場合、実例として、第1の優先度付きキューは、第1の(例えば、最も高い、最も緊急の)優先度レベルを有するコマンドと関連付けられ得、第2の優先度付きキューは、第2の(例えば、中間の、中位の)優先度レベルを有するコマンドと関連付けられ得、第3の優先度付きキューは、第3の(例えば、最も低い、最も緊急度の低い)優先度レベルを有するコマンドと関連付けられ得る。メモリダイに対するコマンドが受信された場合、それは、事前定義され得るその関連付けられた優先度レベルに基づいて優先度付きキューに割り当てられ得る。したがって、より高い優先度付きキュー内のコマンドは、より低い優先度付きキュー内のコマンドの前に発行され得、すなわち、第1の優先度付きキュー内のコマンドは、第2の優先度付きキュー内のコマンドの前に発行され得る。より高い優先度のコマンドが発行されている場合、コマンドは、より低い優先度付きキューに依然として割り当てられ得る。しかしながら、キュー内のコマンドの量が閾値を超える場合、キューと関連付けられる優先度レベルに関係なく、キュー内のコマンド(例えば、キュー内の全てのコマンド)が発行され得る。コマンドが一旦発行されると、他の(例えば、より高い優先度の)キュー内のコマンドの発行が再開され得る。こうした技法は、ダイ毎又はシステムレベルで実施され得、それらの両方は、単一のキュー内の大量のコマンドをさもなければ発行するために必要なシステムリソース(例えば、電力)を軽減し得る。
図は、本開示の幾つかの実施形態に従ったメモリサブシステム110を含むコンピューティングシステム100の一例を説明する。メモリサブシステム110は、1つ以上の不揮発性メモリデバイス(例えば、メモリデバイス130)、1つ以上の揮発性メモリデバイス(例えば、メモリデバイス140)、又はそれらの組み合わせ等の媒体を含み得る。
メモリサブシステム110は、ストレージデバイス、メモリモジュール、又はストレージデバイスとメモリモジュールとのハイブリッドであり得る。ストレージデバイスの例は、ソリッドステートドライブ(SSD)、フラッシュドライブ、ユニバーサルシリアルバス(USB)フラッシュドライブ、組み込みマルチメディアコントローラ(eMMC)ドライブ、ユニバーサルフラッシュストレージ(UFS)ドライブ、セキュアデジタル(SD)カード、及びハードディスクドライブ(HDD)を含む。メモリモジュールの例は、デュアルインラインメモリモジュール(DIMM)、スモールアウトラインDIMM(SO-DIMM)、及び様々なタイプの不揮発性DIMM(NVDIMM)を含む。
コンピューティングシステム100は、デスクトップコンピュータ、ラップトップコンピュータ、ネットワークサーバ、モバイルデバイス、車両(例えば、航空機、ドローン、列車、自動車、又はその他の乗り物)、モノのインターネット(IoT)対応デバイス、組み込みコンピュータ(例えば、車両、産業機器、若しくはネットワーク化された商用デバイス内に含まれるもの)、又はメモリ及び処理デバイスを含むそうしたコンピューティングデバイス等のコンピューティングデバイスであり得る。
コンピューティングシステム100は、1つ以上のメモリシステム110と結合されたホストシステム105を含み得る。幾つかの例では、ホストシステム105は、異なるタイプのメモリシステム110と結合される。図1は、1つのメモリサブシステム110と結合されたホストシステム105の一例を説明する。本明細書で使用するとき、“に結合された”又は“と結合された”は、一般的に、電気、光学、及び磁気等の接続を含む、有線又は無線を問わない、間接的通信接続又は(例えば、コンポーネントを介在さない)直接的通信接続であり得るコンポーネント間の接続を指す。
ホストシステム105は、プロセッサチップセットと、プロセッサチップセットによって実行されるソフトウェアスタックとを含み得る。プロセッサチップセットは、1つ以上のコア、1つ以上のキャッシュ、メモリコントローラ(例えば、NVDIMMコントローラ)、及びストレージプロトコルコントローラ(例えば、PCIeコントローラ、SATAコントローラ)を含み得る。ホストシステム105は、例えば、データをメモリサブシステム110に書き込み、メモリサブシステム110からデータを読み出すためにメモリサブシステム110を使用する。
ホストシステム105は、物理ホストインターフェースを使用してメモリサブシステム110に結合され得る。物理ホストインターフェースの例は、シリアルアドバンスドテクノロジーアタッチメント(SATA)インターフェース、ペリフェラルコンポーネントインターーコネクトエクスプレス(PCIe)インターフェース、USBインターフェース、ファイバーチャネル、スモールコンピューターシステムインターフェース(SCSI)、シリアルアタッチドSCSI(SAS)、ダブルデータレート(DDR)メモリバス、デュアルインラインメモリモジュール(DIMM)インターフェース(例えば、ダブルデータレート(DDR)をサポートするDIMMソケットインターフェース)、オープンNANDフラッシュインターフェース(ONFI)、ダブルデータレート(DDR)、低電力ダブルデータレート(LPDDR)、又は任意のその他のインターフェースを含むが、これらに限定されない。物理ホストインターフェースは、ホストシステム105とメモリサブシステム110との間でデータを送信するために使用され得る。ホストシステム105は、メモリサブシステム110がPCIeインターフェースによってホストシステム105と結合される場合にコンポーネント(例えば、メモリデバイス130)にアクセスするために不揮発性メモリエクスプレス(NVMe)インターフェースを更に利用し得る。物理ホストインターフェースは、メモリサブシステム110とホストシステム105との間で制御、アドレス、データ、及びその他の信号を渡すためのインターフェースを提供し得る。図1は、一例としてメモリサブシステム110を説明する。一般的に、ホストシステム105は、同じ通信接続、複数の別個の通信接続、及び/又は通信接続の組み合わせを介して複数のメモリサブシステムにアクセスし得る。
メモリデバイス130、140は、異なるタイプの不揮発性メモリデバイス及び/又は揮発性メモリデバイスの任意の組み合わせを含み得る。揮発性メモリデバイス(例えば、メモリデバイス140)は、ダイナミックRAM(DRAM)及びシンクロナスDRAM(SDRAM)等のランダムアクセスメモリ(RAM)であり得るが、これらに限定されない。
不揮発性メモリデバイス(例えば、メモリデバイス130)の幾つかの例は、否定論理積(NAND)タイプのフラッシュメモリ、及び不揮発性メモリセルのクロスポイントアレイである3次元クロスポイント(“3Dクロスポイント”)メモリ等のライトインプレースメモリを含む。不揮発性メモリのクロスポイントアレイは、スタック可能なクロスグリッドデータアクセスアレイと組み合わせて、バルク抵抗の変化に基づいてビットストレージを実施し得る。また、多くのフラッシュベースのメモリとは対照的に、クロスポイント不揮発性メモリは、ライトインプレース動作を実施し得、不揮発性メモリセルが事前に消去されることなく、不揮発性メモリセルはプログラミングされ得る。NANDタイプのフラッシュメモリは、例えば、2次元NAND(2D NAND)及び3次元NAND(3D NAND)を含む。
メモリデバイス130の各々は、メモリセルの1つ以上のアレイを含み得る。あるタイプのメモリセル、例えば、シングルレベルセル(SLC)は、セル当たり1ビットを蓄積し得る。マルチレベルセル(MLC)、トリプルレベルセル(TLC)、クワッドレベルセル(QLC)、及びペンタレベルセル(PLC)等の他のタイプのメモリセルは、セル当たり複数ビットを蓄積し得る。幾つかの実施形態では、メモリデバイス130の各々は、SLC、MLC、TLC、QLC、又はこれらの任意の組み合わせ等のメモリセルの1つ以上のアレイを含み得る。幾つかの実施形態では、特定のメモリデバイスは、メモリセルのSLC部分、及びMLC部分、TLC部分、QLC部分、又はPLC部分を含み得る。メモリデバイス130のメモリセルは、データを蓄積するために使用されるメモリデバイスの論理ユニットを指し得るページとしてグループ化され得る。幾つかのタイプのメモリ(例えば、NAND)では、ページは、ブロックを形成するためにグループ化され得る。
NANDタイプのフラッシュメモリ(例えば、2D NAND、3D NAND)及び不揮発性メモリセルの3Dクロスポイントアレイ等の不揮発性メモリコンポーネントが説明されているが、メモリデバイス130は、ROM、相変化メモリ(PCM)、自己選択メモリ、その他のカルコゲナイドベースのメモリ、強誘電体トランジスタランダムアクセスメモリ(FeTRAM)、強誘電体RAM(FeRAM)、磁気RAM(MRAM)、スピントランスファートルク(STT)-MRAM、導電性ブリッジングRAM(CBRAM)、抵抗性ランダムアクセスメモリ(RRAM)、酸化物ベースのRRAM(OxRAM)、ネガティブor(NOR)フラッシュメモリ、及び電気的消去可能プログラマブルROM(EEPROM)等の任意のその他のタイプの不揮発性メモリに基づき得る。
メモリサブシステムコントローラ115(又は簡単のためにコントローラ115)は、メモリデバイス130におけるデータの読み出し、データの書き込み、又はデータの消去等の動作及びその他のそうした動作を実施するために、メモリデバイス130と通信し得る。メモリサブシステムコントローラ115は、1つ以上の集積回路及び/若しくはディスクリートコンポーネント、バッファメモリ、又はそれらの組み合わせ等のハードウェアを含み得る。メモリサブシステムコントローラ115は、マイクロコントローラ、専用論理回路(例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP))、又は別の適切なプロセッサであり得る。
メモリサブシステムコントローラ115は、ローカルメモリ125内に蓄積された命令を実行するように構成されたプロセッサ120(例えば、処理デバイス)を含み得る。説明する例では、メモリサブシステムコントローラ115のローカルメモリ125は、メモリサブシステム110とホストシステム105との間の通信を処理することを含む、メモリサブシステム110の動作を制御する様々なプロセス、動作、論理フロー、及びルーチンを実施するための命令を蓄積するように構成された組み込みメモリを含む。
幾つかの例では、ローカルメモリ125は、メモリポインタ、フェッチされたデータ等を蓄積するメモリレジスタを含み得る。ローカルメモリ125は、マイクロコードを蓄積するためのROMをも含み得る。図1の例示的なメモリサブシステム110は、メモリサブシステムコントローラ115を含むものとして説明されているが、本開示の別の例では、メモリサブシステム110は、メモリサブシステムコントローラ115を含まず、代わりに(例えば、外部ホストによって、又はメモリサブシステムとは別個のプロセッサ若しくはコントローラによって提供される)外部制御に依存し得る。
一般的に、メモリサブシステムコントローラ115は、ホストシステム105からコマンド又は動作を受信し得、コマンド又は動作を、メモリデバイス130及び/又はメモリデバイス140への所望のアクセスを達成するための命令又は適切なコマンドに変換し得る。メモリサブシステムコントローラ115は、ウェアレベリング動作、ガベージコレクション手順、エラー検出及びエラー訂正コード(ECC)動作、暗号化動作、キャッシング動作、並びにメモリデバイス130と関連付けられた論理アドレス(例えば、論理ブロックアドレス(LBA)、名前空間)と物理アドレス(例えば、物理ブロックアドレス)との間のアドレス変換等のその他の動作を担い得る。メモリサブシステムコントローラ115は、物理ホストインターフェース介してホストシステム105と通信するためにホストインターフェース回路を更に含み得る。ホストインターフェース回路は、ホストシステムから受信したコマンドを、メモリデバイス130及び/又はメモリデバイス140にアクセスするためのコマンド命令に変換し得ると共に、メモリデバイス130及び/又はメモリデバイス140と関連付けられた応答をホストシステム105に対する情報に変換し得る。
メモリサブシステム110はまた、説明されていない追加の回路又はコンポーネントを含み得る。幾つかの例では、メモリサブシステム110は、キャッシュ又はバッファ(例えば、DRAM)と、メモリサブシステムコントローラ115からアドレスを受信し得、メモリデバイス130にアクセスするためにアドレスを復号し得るアドレス回路(例えば、行デコーダ及び列デコーダ)とを含み得る。
幾つかの例では、メモリデバイス130は、メモリデバイス130の1つ以上のメモリセルに対する動作を実行するために、メモリサブシステムコントローラ115と共に動作するローカルメディアコントローラ135を含む。外部コントローラ(例えば、メモリサブシステムコントローラ115)は、メモリデバイス130を外部から管理し得る(例えば、メモリデバイス130に対するメディア管理動作を実施し得る)。幾つかの実施形態では、メモリデバイス130は、同じメモリデバイスパッケージ内のメディア管理のためにローカルコントローラ(例えば、ローカルコントローラ135)と組み合わされた生のメモリデバイスであるマネージドメモリデバイスである。マネージドメモリデバイスの一例は、マネージドNAND(MNAND)デバイスである。
メモリサブシステム110は、特定のキューと関連付けられたコマンドの関連付けられた優先度レベル及び数に従ってコマンドを管理するキューマネージャ150を含む。例えば、メモリサブシステム110の各メモリダイ(例えば、メモリデバイス130、メモリデバイス140)は、メモリダイキューと関連付けられ得る。メモリダイキューは、発行のためにコマンド(例えば、読み出しコマンド、書き込みコマンド、ホスト読み出しコマンド等)が割り当てられる1つ以上の優先度付きキューを各々含み得る。特定のダイと関連付けられたコマンドが受信される場合、キューマネージャ150は、コマンドと関連付けられた優先度レベルを判定し得(すなわち、キューマネージャ150は、コマンドのタイプを判定し得)、コマンドをダイと関連付けられた優先度付きキューに割り当て得る。コマンドは、関連付けられた優先度レベルに基づいて、個別の優先度付きキューから発行され得る。したがって、相対的に低い優先度レベルを有するキューと関連付けられたコマンドの前に、より高い優先度レベルを有するキューと関連付けられたコマンドが発行され得る。幾つかの実例では、しかしながら、より高い優先度のコマンドが発行されている間に、より低い優先度のコマンドが個別のキュー内に蓄積され得る。キューマネージャ150は、任意の1つのキュー内に含まれるコマンドの量を管理(例えば、追跡)し得、該量が閾値を超える場合、コマンド(例えば、キュー内のコマンドの全て)を発行し得る。コマンドが一旦発行されると、キューマネージャ150は、それらと関連付けられた優先度レベルに基づいてコマンドの発行を再開し得る。
任意の1つのキュー内のコマンドの量は、ダイ毎のレベル(例えば、単一のダイと関連付けられた優先度付きキュー内のコマンドの数)で、又はグローバルに(例えば、サブシステムのアクティブなダイの数に基づいて)管理され得る。何れの例でも、キューが閾値量のコマンドを蓄えることを阻むことは、キュー内のコマンドを発行するためにさもなければ利用され得るシステムリソース(例えば、電力)を軽減し得る。
幾つかの例では、メモリサブシステムコントローラ115は、キューマネージャ150の少なくとも一部分を含む。例えば、メモリサブシステムコントローラ115は、本明細書に説明する動作を実施するためのローカルメモリ125内に蓄積された命令を実施するように構成されたプロセッサ120(例えば、処理デバイス)を含み得る。幾つかの例では、キューマネージャ150は、ホストシステム105、アプリケーション、又はオペレーティングシステムの一部である。
図2は、本開示の幾つかの例に従ったメモリサブシステムに対するキューを維持するための例示的な方法200のフロー図である。方法200は、ハードウェア(例えば、処理デバイス、回路、専用ロジック、プログラマブルロジック、マイクロコード、デバイスのハードウェア、集積回路等)、ソフトウェア(例えば、処理デバイス上で実行する又は実行される命令)、又はそれらの組み合わせを含み得る処理ロジックによって実施され得る。幾つかの例では、方法200は、図1のキューマネージャ150によって実施される。特定のシーケンス又は順序で示されているが、特に指定がない限り、プロセスの順序は修正され得る。したがって、説明する例は単なる例として理解されるべきであり、説明するプロセスは異なる順序で実施され得、幾つかのプロセスは並行して実施され得る。また、様々な例では、1つ以上のプロセスは省略され得る。したがって、あらゆる例で全てのプロセスが必要であるわけではない。他の方法のフローが可能である。
動作205において、処理デバイスは、メモリサブシステムのメモリダイの複数のキュー内に含まれるコマンドの数を判定し得る。各コマンドは、メモリサブシステム上で実施される個別の動作と関連付けられ得、複数のキューの各キューは、個別の優先度レベルと関連付けられ得、メモリサブシステム上で実施されるコマンドの個別のセットを維持するように構成され得る。
動作210において、処理デバイスは、キュー内に含まれるコマンドの数に少なくとも部分的に基づいて、複数のキューの内のキューにコマンドを割り当て得る。
動作215において、処理デバイスは、個別の優先度レベルに少なくとも部分的に基づいて、複数のキューのコマンドの個別のセットから1つ以上のコマンドを発行し得る。
幾つかの例では、方法200は、コマンド数が閾値を下回るまで、コマンドの数が閾値を超える複数のキューの各々が追加のコマンドを受け入れることを禁止することを含み得る。
幾つかの例では、方法200は、コマンドの個別の数が閾値を下回る各キューに1つ以上の追加のコマンドを割り当てることと、個別の優先度レベルに少なくとも部分的に基づいて各キューから1つ以上の追加のコマンドを発行することを含み得る。
幾つかの例では、方法200は、コマンドの数が閾値を超える各キューに対してコマンドの全てを発行することを含み得る。各キューに1つ以上の追加のコマンドを割り当てることは、コマンドの全てを発行することに少なくとも部分的に基づき得る。
幾つかの例では、方法200は、メモリサブシステムのメモリに、コマンドの個別の数が閾値を超えるキューと関連付けられた少なくとも1つのコマンドを蓄積することと、コマンドの個別の数が閾値を下回ることに少なくとも部分的に基づいて、コマンドをキューに割り当てることを含み得る。
方法200の幾つかの例では、閾値は、メモリサブシステム上で動作を実施するために利用可能なメモリサブシステムのリソースに少なくとも部分的に基づく。
幾つかの例では、方法200は、メモリサブシステムの複数のメモリダイに対するキューのセットに、メモリサブシステム上で実施される動作と関連付けられた1つ以上のコマンドを割り当てることと、個別の優先度レベルに従ってキューのセットからコマンドを発行することを含み得る。キューのセットの各キューは、個別の優先度レベルと関連付けられ得る。
幾つかの例では、方法200は、メモリサブシステムのアクティブなメモリダイの数を判定することと、アクティブなメモリダイの数が閾値を超える場合にメモリサブシステムの1つ以上のアクティブなメモリダイが追加のコマンドを受け入れることを禁止することを含み得る。
幾つかの例では、方法200は、メモリサブシステムの複数のアクティブなメモリダイが閾値を超えると判定することを含み得る。1つ以上のアクティブなメモリダイが追加のコマンドを受け入れることを禁止することは、1つ以上のアクティブなメモリダイの各々と関連付けられたコマンドの数に少なくとも部分的に基づき得る。
方法200の幾つかの例では、メモリダイ上で動作を実施するための1つ以上のコマンドは、読み出しコマンド、書き込みコマンド、ホスト読み出しコマンド、ホスト書き込みコマンド、又はそれらの組み合わせを含む。
図3Aは、本開示の幾つかの例に従ったメモリサブシステムのキューを維持することをサポートするファームウェアキュー300aの一例を説明する。ファームウェアキュー300-aは、1つ以上の優先度付きキューを各々含む複数のメモリダイキュー305(例えば、LUNキュー305)を説明する。例えば、第1のメモリダイキュー305は、優先度付きキュー310、310-a、及び310-bを含み得る。幾つかの例では、優先度付きキュー310は第1の優先度付きキューに対応し得、優先度付きキュー310-aは第2の優先度付きキューに対応し得、優先度付きキュー310-bは第3の優先度付きキューに対応し得る。優先度付きキュー310は、特定のコマンド(例えば、コマンドを完了するためのリクエスト)を含み得、コマンドは、ローカルメモリコントローラ(例えば、フラッシュメモリコントローラ)によって発行され得る。幾つかの例では、ローカルメモリコントローラは、個別のキュー310の優先度レベルに従って、又は任意の特定のキュー内のコマンドの量が閾値を超えることに基づいてコマンドを発行し得る。幾つかの例では、コマンドは、オンザフライでキュー310に割り当てられ得、(異なる優先度レベルと関連付けられた)他のコマンドの発行が一時的に中断されることをもたらし得る。特定のキューが閾値を超える量のコマンドを含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれことに起因してさもなければ発生するであろうリソースを節約し得る。
本明細書で論じるように、メモリダイキュー305は、優先度付きキュー310、310-a、及び310-bを含み得、それらは、第1の優先度付きキュー、第2の優先度付きキュー、及び第3の優先度付きキューに夫々対応し得る。幾つかの例では、第1の優先度付きキュー310には、(例えば、第2及び第3の優先度付きキューに対して)最も高い優先度レベルが割り当てられ得る。優先度付きキュー310に最も高い優先度レベルを割り当てることによって、優先度付きキュー310内に配置された関連付けられたメモリダイに関連する任意のコマンドは、優先度付きキュー310-a及び310-b内のコマンドの前に発行され(例えば、ローカルメモリコントローラへ送られ)得る。同様に、第2の優先度付きキュー310-aには、(例えば、第1及び第3の優先度付きキューに対して)中間の優先度レベルが割り当てられ得る。優先度付きキュー310-aに中間の優先度レベルを割り当てることによって、優先度付きキュー310-a内に配置された関連付けられたメモリダイに関連する任意のコマンドは、優先度付きキュー310-b内のコマンドの前に発行され得る。他の例では、第3の優先度付きキュー310-bには、(例えば、第1及び第2の優先度付きキューに対して)最も低い優先度レベルが割り当てられ得る。優先度付きキュー310-bに最も低い優先度レベルを割り当てることによって、優先度付きキュー310-b内に配置された関連付けられたメモリダイに関連する任意のコマンドは、優先度付きキュー310及び310-aが空である(例えば、それらが何れのコマンドも含まない)場合にのみ発行され得る。
追加的又は代替的に、メモリダイキュー305の各優先度付きキューは、閾値と関連付けられ得る。すなわち、特定の優先度付きキュー内のコマンドの数が閾値を超える場合、システムは、システムリソースを軽減するために、該キュー内のコマンドの1つ以上(又は全て)を発行し得る。優先度付きキューからコマンドを発行するための閾値を実装しなければ、キューは、発行されるコマンドを受信し続け得る。したがって、システムは、特定のキュー内にさもでなければ蓄積されたであろうコマンドを発行することを強制されないことによって、リソースを節約し得る。本明細書で論じるように、閾値は、メモリダイキュー毎又は優先度付きキュー毎に割り当てられ得る。例えば、閾値がメモリダイキュー毎に割り当てられた場合、メモリダイキュー305の第1の優先度付きキュー310、第2の優先度付きキュー310-a、及び第3の優先度付きキュー310bは全て、同じ閾値と関連付けられ得る。逆に、閾値が優先度付きキュー毎に割り当てられた場合、メモリダイキュー305の第1の優先度付きキュー310、第2の優先度付きキュー310-a、及び第3の優先度付きキュー310bは全て、異なる閾値と関連付けられ得る。
例として、第1のメモリダイキュー305は、優先度付きキュー310内のコマンド328と、優先度付きキュー310-a内のコマンド330及び330-aとを含み得る。第1のメモリダイキュー305はまた、優先度付きキュー310-b内のコマンド335、335-a、及び335-bを含み得る。幾つかの例では、優先度付きキュー310、310-a、及び310-b内のコマンドの各々は、異なる時点で受信される異なるコマンドであり得る。すなわち、コマンドは、それらが発行されたときに、優先度付きキュー310、310-a、及び310-bに入力され得る。したがって、優先度付きキュー310は、優先度付きキュー310-a及び310-bよりも高い優先度レベルと関連付けられ得るので、コマンド328は、コマンド330、330-a、335、335-a、及び335-bの前に発行され得る。
しかしながら、第3の優先度付きキュー310-bは、コマンド328、330、及び330-aの内の1つ以上の前にコマンド335、335-a、及び335-bが発行されることを可能にし得る閾値と関連付けられ得る。例えば、第3の優先度付きキュー310-bに対する(メモリダイキュー毎又は優先度付きキュー毎の構成の何れかにおける)閾値は2つのコマンドであり得る。コマンド335、335-a、及び335-bは、同時に(且つ、コマンド328、330、及び/又は330-aの1つ以上が個別の優先度付きキュー内に含まれる時と同時に)第3の優先度付きキュー310-b内にあり得るので、閾値を超え得る。したがって、幾つかの例では、コマンド335、335-a、及び335-bの各々は、メモリダイキュー305の他のコマンドの何れかが発行される前に(例えば、一度に、連続して等)発行され得る。
更に、第3の優先度付きキュー310-b内のコマンドの量が閾値を超えると判定された場合、第3の優先度付きキュー310-bは、何れの追加のコマンドを受信することが一時的に阻まれ得る(すなわち、第3の優先度付きキュー310-bは、“マック(muck)”され得る)。この間(例えば、コマンドの量を閾値未満に減少させるように、任意の量のコマンドが発行されるまで)、第3の優先度付きキュー310bに割り当てられるいずれの追加のコマンドは、メモリサブシステムのメモリに一時的に割り当てられ得る。コマンドの量が閾値を一旦下回ると、メモリサブシステムのメモリに一時的に割り当てられたコマンドは、個別の優先度付きキューに移動させられ(例えば、転送され)得る。
幾つかの例では、第2のメモリダイキュー305-aは、優先度付きキュー315-a内のコマンド340、340-a、及び340-bを含み得る。第2のメモリダイキュー305-aはまた、優先度付きキュー315-b内のコマンド345、345-a、及び345-bを含み得る。図3Aに示すように、優先度付きキュー315は、一時的に空(例えば、NULL)であり得るが、(例えば、後の時点で、図示されたものとは異なる時点で)1つ以上のコマンドを受信し得る。幾つかの例では、優先度付きキュー315-a及び315-b内のコマンドの各々は、異なる時点で受信される異なるコマンドであり得る。すなわち、コマンドは、それらが発行されたときに優先度付きキュー315-a及び315-bに入力され得る。幾つかの例では、コマンドは、第1のメモリダイキュー305の優先度付きキュー310-a及び310-bに入力されたコマンドと同じ時点又は異なる時点で入力され得る。優先度付きキュー315-aは、優先度付きキュー315-bよりも高い優先度レベルと関連付けられ得るので、コマンド340、340-a、及び340-bは、コマンド345、345-a、及び345-bの前に発行され得る。
メモリダイキュー305に関して上で論じたように、メモリダイキュー305-aの各優先度付きキューは閾値と関連付けられ得る。すなわち、特定の優先度付きキュー内のコマンドの数が閾値を超えた場合、システムは、システムリソースを軽減するために、該キュー内のコマンドの内の1つ以上(又は全て)を発行し得る。本明細書で論じるように、閾値は、メモリダイキュー毎又は優先度付きキュー毎に割り当てられ得る。例えば、閾値がメモリダイキュー毎に割り当てられた場合、メモリダイキュー305-aの第1の優先度付きキュー315、第2の優先度付きキュー315-a、及び第3の優先度付きキュー315-bは全て、同じ閾値と関連付けられ得る。この閾値は、例えば、メモリダイキュー305-aの優先度付きキューと同じ又は異なる閾値であり得る。逆に、閾値が優先度付きキュー毎に割り当てられた場合、メモリダイキュー305-aの第1の優先度付きキュー315、第2の優先度付きキュー315-a、及び第3の優先度付きキュー315-bは全て、異なる閾値と関連付けられ得る。メモリダイキュー毎の閾値と同様に、この閾値は、例えば、メモリダイキュー305-aの優先度付きキューと同じ又は異なる閾値であり得る。
例として、第2のメモリダイキュー305-aは、第2の優先度付きキュー315-a内のコマンド340、340-a、及び340-bと、第2の優先度付きキュー315-b内のコマンド345、345-a、及び345-bとを含み得る。幾つかの例では、優先度付きキュー315-a及び315-b内のコマンドの各々は、異なる時点で受信される異なるコマンドであり得る。すなわち、コマンドは、それらが発行されたときに優先度付きキュー315-a及び315-bに入力され得る。したがって、優先度付きキュー310-aは、優先度付きキュー315-bよりも高い優先度レベルと関連付けられ得るので、コマンド340、340-a、及び340-bは、コマンド345、345-a、及び345-bの前に発行され得る。
しかしながら、第3の優先度付きキュー315-bは、コマンド340、340-a、及び340-bの内の1つ以上の前にコマンド345、345-a、及び345-bが発行されることを可能にし得る閾値と関連付けられ得る。例えば、第3の優先度付きキュー315-bに対する(メモリダイキュー毎又は優先度付きキュー毎の構成の何れかにおける)閾値は1つのコマンドであり得る。コマンド345、345-a、及び345-bは、同時に(且つ、コマンド340、340-a、及び340-bの1つ以上が第2の優先度付きキュー315-a内に含まれる時と同時に)第3の優先度付きキュー315b内にあり得るので、閾値を超え得る。したがって、幾つかの例では、メモリダイキュー305-aの他のコマンドの何れかが発行される前に、コマンド345、345-a、及び345-bの各々は、(例えば、一度に、連続して等)発行され得る。
更に、第3の優先度付きキュー315-b内のコマンドの量が閾値を超えると判定された場合、第3の優先度付きキュー315-bは、何れの追加のコマンドを受信することが一時的に阻まれ得る(すなわち、第3の優先度付きキュー315-bは“マック”され得る)。この間(例えば、コマンドの量を閾値未満に減少させるように、任意の量のコマンドが発行されるまで)、第3の優先度付きキュー315-bに割り当てられる任意の追加のコマンドは、メモリサブシステムのメモリ(例えば、図1のメモリサブシステム110のローカルメモリ125)に一時的に割り当てられ得る。コマンドの量が閾値を一旦下回ると、メモリサブシステムのメモリに一時的に割り当てられたコマンドは、個別の優先度付きキューに移動させられ(例えば、転送され)得る。
幾つかの例では、ファームウェアキュー300-aは、第3のメモリダイキュー305-b及び第4のメモリダイキュー305-cをも含み得る。第4のメモリダイキュー305は、ファームウェアキュー300-aのn番目のメモリダイキューであり得、又はそれを表し得る。すなわち、ファームウェアキュー300-aは、メモリサブシステムのメモリダイに対応する複数のメモリダイキューを含み得る。幾つかの例では、第3のメモリダイキュー305-b及び第4のメモリダイキュー305-bは、コマンドに対する1つ以上の優先度付きキューを各々含み得る。例えば、第3のメモリダイキュー305-bは、優先度付きキュー320-a内のコマンド350、350-a、及び350-bと、優先度付きキュー320-b内のコマンド355、355-a、及び355-bとを含み得る。図3Aに示すように、第4のメモリダイキュー305-cの優先度付きキューは、一時的に空(例えば、NULL)であり得るが、1つ以上のコマンドを(例えば、後で、異なる時点で)受信し得る。
メモリダイキュー305及び30-5aを参照して論じたように、メモリダイキュー305-b及び305-cは、個別の優先度付きキューと関連付けられた優先度レベルに従って、及び任意の特定の優先度付きキュー内のコマンドの量が閾値を超えることに基づいてコマンドを発行し得る。例えば、コマンド350、350-a、及び350-bは、優先度付きキュー320-aと関連付けられた優先度レベルに起因して、及び/又は優先度付きキュー320-a内のコマンドの量が閾値を超えることに起因して、コマンド355、355-a、及び355-bの前に発行され得る。他の例では、本明細書に論じるように、コマンド350、350-a、及び350-bの発行は、優先度付きキュー320-b内のコマンドの量が閾値を超える場合に一時的に中断(例えば、マック)され得る。追加的又は代替的に、第3のメモリダイキュー305-b及び/又は第4のメモリダイキュー305-cと関連付けられた閾値は、利用可能なシステムリソースの量(例えば、メモリサブシステムに利用可能な電力量)に基づいて設定され得、メモリダイキュー毎又は優先度付きキュー毎に設定され得る。
他の例では、閾値は、メモリサブシステムのアクティブなメモリダイの数に基づき得る。例えば、メモリサブシステムが、閾値を超える数のアクティブなメモリダイを含む場合、アクティブなメモリダイの数が閾値を下回るまで、1つ以上のメモリダイは、(その優先度レベルに関係なく)コマンドを受信することを禁止され得る。アクティブなメモリダイは、特定のキュー(例えば、特定の優先度付きキュー)内の少なくとも1つのコマンドを含む任意のメモリダイ、及び/又はアクセス動作を受けているメモリダイを指し得る。例えば、アクティブなメモリダイの閾値は、10個のメモリダイであり得る。11番目のメモリダイがアクティブになった場合、少なくとも1つのメモリダイが非アクティブ状態に戻る(例えば、それがアクセス動作にもはや供されない、及び/又はそれがその優先度付きキュー内にコマンドをもはや含まない)まで、11個のメモリダイの内の少なくとも1つは、任意の追加のコマンドを受信することを禁止され得る。コマンドを受信することを一時的に阻まれているメモリダイへコマンドを送信する場合、コマンドは、メモリサブシステムのメモリに一時的に割り当てられ得る。アクティブなメモリダイの量が閾値を一旦下回ると、メモリサブシステムのメモリに一時的に割り当てられたコマンドは、個別のメモリダイのキューに移動させられ(例えば、転送され)得る。
幾つかの例では、特定のコマンドは、事前定義された優先度レベルと関連付けられ得る。例えば、第1の優先度レベル(例えば、最も高い優先度レベル)は、ホスト読み出しコマンドと関連付けられ得る。すなわち、特定のメモリダイと関連付けられたホスト読み出しが発行される度に、それは、特定のダイと関連付けられたメモリダイキューの第1の優先度付きキューに割り当てられ得る。他の例では、第1の優先度レベル(例えば、中間の優先度レベル)は、ホスト書き込みコマンド、読み出しコマンド、書き込みコマンド、消去コマンド、又はそれらの組み合わせと関連付けられ得る。その他の全てのタイプのコマンドは、第3の(又はより低い)優先度レベルと関連付けられ得る。
図3Bは、本開示の幾つかの例に従ったグローバルプール327の一例を説明する。グローバルプール327は、図3Aを参照して論じた優先度付きキューからの1つ以上のコマンドを含み得る。すなわち、コマンドを完了するためのリクエストは、優先度付きキューからグローバルプールに発行(例えば、リリース)され得、ローカルメモリコントローラは、それらがプールに入力された順序に基づいて、関連付けられたコマンドを発行し得る。関連付けられた優先度付きキュー内のコマンドの量が閾値を超えることに基づいて、コマンドの内の1つ以上が発行され得る。閾値を超える量のコマンドを特定のキューが含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれることに起因してさもなければ発生するであろうリソースを節約し得る。
幾つかの例では、グローバルプール327は、図3Aを参照して論じたコマンドの各々を含み得る。コマンドは、特定のキュー内のコマンドの量が閾値を超えることに起因する、(例えば、個別のメモリダイキュー305によって)受信された順序、コマンドと関連付けられた個別の優先度レベル、又はそれらの組み合わせに基づいて、グローバルプール327に入力され(例えば、含まれ)得る。幾つかの例では、グローバルプール327内のコマンドは、コマンドと関連付けられた1つ以上のリソース(例えば、メモリアドレス)に対応し得る。すなわち、グローバルプール327内のコマンドは、特定のメモリセル又はメモリセルのグループにアクセスするために、ローカルメモリコントローラによって発行され得る。
グローバルプール327は、図3Aを参照して論じたメモリダイキュー305の各々からのコマンドを含み得る。例えば、第1のメモリダイキュー305からのコマンド328、330、303-a、335、335-a、及び335-bは、グローバルプール327内に含まれ得る。追加的又は代替的に、第2のメモリダイキュー305-aからのコマンド340、340-a、340-b、345、345-a、及び345-bは、第2のメモリダイキュー305-bからのコマンド350、350-a、350-b、355、355-a、及び355-bと共に含まれ得る。コマンドは、特定のキュー内のコマンドの量が閾値を超えることに起因する、個別のメモリダイキュー305で受信された順序に基づいて、コマンドと関連付けられた個別の優先度レベルに基づいて、又はそれらの組み合わせに基づいてグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第2の優先度付きキュー310-aからのコマンド330は、グローバルプール327内の第1のコマンドであり得る。コマンド330は、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに起因してグローバルプール327に入力される第1のコマンドであり得る。幾つかの例では、コマンド330は、コマンド330が最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド330-a、340、340-a、340-b、350,350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。別の言い方をすれば、第2の優先度付きキュー310-aは、任意の他のメモリダイキューが同じ(又はより高い)優先度レベルを有するコマンドを受信及び発行する前にコマンド350を受信し得る。
幾つかの例では、第2のメモリダイキュー305-aの第2の優先度付きキュー315-aからのコマンド340は、グローバルプール327内の次の(例えば、第2の)コマンドであり得る。コマンド340は、コマンド330の後ではあるが、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに基づいてグローバルプール327に入力され得る。幾つかの例では、コマンド340は、コマンド340が最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド330-a、340、340-a、340-b、350、350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第2の優先度付きキュー310-aからのコマンド330-aは、グローバルプール327内の次のコマンドであり得る。コマンド330-aは、コマンド340の後ではあるが、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに基づいてグローバルプール327に入力され得る。幾つかの例では、コマンド330-aは、コマンド330-aが最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド340-a、340-b、350、350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第2のメモリダイキュー305-aの第2の優先度付きキュー315-aからのコマンド340-aは、グローバルプール327内の次のコマンドであり得る。コマンド340-aは、コマンド350-aの後ではあるが、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに基づいてグローバルプール327に入力され得る。幾つかの例では、コマンド340-aは、コマンド340-aが最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド340-a、340-b、350,350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第3の優先度付きキュー310-bからのコマンド335は、グローバルプール327内の次のコマンドであり得る。コマンド335は、他のメモリダイキューがより高い優先度のコマンドを含まない場合にそれが受信されることに基づいてグローバルプールに入力され得る。幾つかの例では、コマンド335は、コマンド335が最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド335-a、335-b、345、345-a、345-b、355、355-a、及び/又は355-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第1の優先度付きキュー310からのコマンド328は、グローバルプール327内の次のコマンドであり得る。コマンド328は、その優先度のみに基づいてグローバルプール327に入力され得る。例えば、コマンド328は、第1(例えば最も高い優先度)と関連付けられるので、他のメモリダイキューが個別の優先度付きキュー内のコマンドを含む場合であっても、それはグローバルプール327に入力され得る。例えば、第1のメモリダイキュー305は、第2の優先度付きキュー310-a内のコマンド330及び330-aを含み得る。しかしながら、コマンド328の優先度に起因して、コマンド328は最初に(例えば、コマンド330及び330-aの前に)発行され得る。
幾つかの例では、この時点で、メモリダイキュー305-bの第2の優先度付きキュー320-a内のコマンドの量は閾値を超え得る。例えば、閾値は2(2)つのコマンドであり得、コマンド350、350-a、及び350-bの各々は、優先度付きキュー320-a内にあり得る。したがって、任意の他のより高い優先度のコマンドがメモリサブシステムの任意の他の優先度付きキュー内にあるにもかかわらず、コマンド350、350-a、及び350-bは発行され得る。コマンドが発行されるまで、メモリダイキュー305-bの第2の優先度付きキュー320-aは、いずれの追加のコマンドを受信することを阻まれ得る。すなわち、優先度付きキュー320-a内に含まれる任意のコマンドは、コマンド350、350-a、及び350-bが発行されるまで、メモリサブシステムのメモリに一時的に蓄積され得る。コマンドが発行され、優先度付きキュー320-a内のコマンドの数が閾値を一旦下回ると、優先度付きキュー320-aは、コマンドの受信を再開し得、グローバルプール327内の他のコマンドが発行され得る。閾値を超える量のコマンドを特定のキューが含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれること起因してさもなければ発生するであろうリソースを節約し得る。
幾つかの例では、残りのコマンド(例えば、コマンド340-b、335-b、345、335-a、345-a、345-b、355、355-a、及び355-b)の各々は、最後にグローバルプール327に入力され得る。幾つかの例では、コマンドは、受信される順序に基づいて、各コマンドの個別のメモリダイキューと関連付けられた優先度レベルに基づいて、又は関連付けられた優先度付きキューのコマンドの量が閾値を超えることに基づいて入力され得る。本明細書で論じるように、グローバルプール327内の各コマンドは、グローバルプール327に入力された順序に従って、ローカルメモリコントローラによって発行され得る。閾値を超える量のコマンドを特定のキューが含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれることに起因してさもなければ発生するであろうリソースを節約し得る。
図4は、本開示の幾つかの例に従ってキューを維持するためのメモリサブシステム400の一例を説明する。メモリサブシステム400は、メモリサブシステムのメモリダイへ送信される1つ以上のコマンドを含むメールボックス405を含み得る。コマンドは、キューマネージャ410を使用して、個別のメモリダイキュー415に通信され(例えば、送信され、送られ)得る。各メモリダイキュー415は、優先度付きキュー420、425、及び430等の1つ以上の優先度付きキューを含み得、それらは、図3Aを参照して説明したような第1の優先度付きキュー、第2の優先度付きキュー、及び第3の優先度付きキューに夫々対応し得る。各キューと関連付けられたコマンドの量を判定するために、スコアボード417は、メモリサブシステム400の各メモリダイキュー415の各優先度付きキューのコマンド数を追跡し得る(例えば、スコアボードは、カウントを維持し得る)。メモリダイマネージャ435は、各個別の優先度付きキューと関連付けられたコマンドを発行し得、コマンドを高い優先度440又は通常の優先度445(又はその他の優先度レベル)として指し示し得る。高い優先度440又は通常の優先度445の何れかとして指し示されるコマンドは、ローカルメモリコントローラによって発行され得る。
メールボックス405は、メモリサブシステムの様々なメモリダイキュー415へ送信されるコマンドのセットを保持し得る。例えば、コマンドが(例えば、ホストデバイスから)受信されると、コマンドは、メールボックス405内に蓄積(例えば、一時的に蓄積)され得る。キューマネージャ410は、メールボックス405内のコマンドを個別のメモリダイに割り当て得、幾つかの例では、コマンドと関連付けられた優先度に基づいて、個別のメモリダイキュー415の特定の優先度付きキューに割り当て得る。例えば、高い優先度のコマンドは優先度付きキュー420に割り当てられ得、中間の優先度のコマンドは優先度付きキュー425に割り当てられ得、他のコマンドは、優先度付きキュー430(又は他の優先度付きキュー)に割り当てられ得る。
幾つかの例では、キューマネージャ410は、コマンドが様々な優先度付きキュー及び/又はメモリダイに割り当てられることを禁止するために、スコアボード417及び/又はメモリダイマネージャ435と通信し得る。例えば、優先度付きキューがマックされた場合、キューマネージャ410は、キュー内のコマンドの量が閾値を下回るまでコマンドを該キューへ送信しないことがある。また、(例えば、アクティブなメモリダイの数が閾値を超えることに起因して)ダイ全体がマックされた場合、キューマネージャ410は、アクティブなメモリダイの量が閾値を下回るまで、コマンドを1つ以上のアクティブなメモリダイへ送信することを控え得る。アクティブなメモリダイの数及び/又はメモリサブシステムの各優先度付きキュー内に含まれるコマンドの数は、スコアボード417によって管理され得る。
メモリダイマネージャ435は、メモリサブシステム400の様々な優先度付きキュー内に含まれるコマンドを発行し得る。本明細書で論じるように、コマンドは、それらの個別の優先度に基づいて、及び/又は任意の1つの優先度付きキュー内のコマンドの量が閾値を超えることに基づいて発行され得る。追加的又は代替的に、単一のメモリダイと関連付けられたコマンドは、メモリダイのアクティブな量が閾値を超えることに基づいて発行され得る。1つ以上のコマンドが発行される場合、メモリダイマネージャ435は、コマンドのタイプ(例えば、読み出しコマンド、書き込みコマンド、ホスト読み出しコマンド、ホスト書き込みコマンド等)を判定し得、コマンドと関連付けられた特定のメモリセルを判定し得る。すなわち、メモリダイマネージャ435は、コマンドを発行及び実施するために、コマンドをリソース(例えば、関連付けられたメモリセルのアドレス)と関連付け得る。幾つかの例では、メモリダイマネージャ435は、任意のコマンドを高い優先度440又は通常の優先度445として指定し得る。
高い優先度のコマンド440は、その優先度レベル及び/又は閾値が超えることに基づいて発行される(例えば、直ぐに発行される)任意のコマンドを含み得る。例えば、コマンドが中間の優先度付きキュー425から発行されている間に、コマンドが受信されて第1の優先度付きキュー420に入力された場合、メモリダイマネージャ435は、新たに受信したコマンドを高い優先度440のコマンドとして指定し得る。したがって、ローカルメモリコントローラは、(通常の優先度445と指定され得る)任意の他のより低い優先度のコマンドを発行する前にコマンドを発行し得る。同様に、アクティブなメモリダイの閾値及び/又は優先度付きキュー内のコマンドの閾値を超える場合、メモリダイマネージャ435は、任意の関連付けられたコマンドを高い優先度440のコマンドとし得る。したがって、ローカルメモリコントローラは、(通常の優先度445と指定され得る)任意の他のより低い優先度のコマンドを発行する前にコマンドを発行し得る。こうした方法でコマンドを発行することは、個別のキュー内又は大量のメモリダイ内に更に大量のコマンドが含まれることに起因してさもなければ発生するであろうリソースをシステムが節約することを可能にし得る。
図5は、本明細書で開示するような例に従ったメモリサブシステムに対するキューを維持することをサポートするコンピュータシステム500の例示的なマシンを説明する。コンピュータシステム500は、本明細書に説明する技法の内の任意の1つ以上をマシンに実施させるための命令のセットを含み得る。幾つかの例では、コンピュータシステム500は、メモリサブシステム(例えば、図1を参照して説明したメモリサブシステム110)を含む、それと結合される、又はそれを利用するホストシステム(例えば、図1を参照して説明したホストシステム105)に対応し得、又はコントローラの動作を実施するために(例えば、図1を参照して説明したキューマネージャ150に対応する動作を実施するためにオペレーティングシステムを実行するために)使用され得る。幾つかの例では、マシンは、ローカルエリアネットワーク(LAN)、イントラネット、エクストラネット、及び/又はインターネット内の他のマシンと接続(例えば、ネットワーク接続)され得る。マシンは、クライアントサーバーネットワーク環境でサーバー若しくはクライアントマシンの性能で、ピアツーピア(若しくは分散)ネットワーク環境でピアマシンとして、又はクラウドコンピューティングインフラストラクチャ若しくは環境でサーバー若しくはクライアントマシンとして動作し得る。
マシンは、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、携帯情報端末(PDA)、携帯電話、ウェブアプライアンス、サーバー、ネットワークルーター、スイッチ若しくはブリッジ、又は該マシンによって実行されるアクションを指定する(シーケンシャルな又はその他の方法の)命令のセットを実行可能な任意のマシンであり得る。更に、単一のマシンが説明されているが、用語“マシン”は、本明細書で論じる方法の内の何れか1つ以上を実施するために命令のセット(又は複数のセット)を個々に又は共同して実行するマシンの任意の集合をも含み得る。
例示的なコンピュータシステム500は、処理デバイス505と、メインメモリ510(例えば、ROM、フラッシュメモリ、SDRAM又はランバスDRAM(RDRAM)等のDRAM等)と、スタティックメモリ515(例えば、フラッシュメモリ、スタティックRAM(SRAM)等)と、データストレージシステム525とを含み得、それらは、バス545を介して相互に通信する。
処理デバイス505は、マイクロプロセッサ又は中央処理デバイス等の1つ以上の汎用処理デバイスを表す。より具体的には、処理デバイスは、複合命令セットコンピューティング(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、若しくはその他の命令セットを実装するプロセッサ、又は命令セットの組み合わせを実装するプロセッサであり得る。処理デバイス505はまた、ASIC、FPGA、DSP、又はネットワークプロセッサ等の1つ以上の専用処理デバイスであり得る。処理デバイス505は、本明細書で論じる動作及びステップを実施するための命令535を実行するように構成される。コンピュータシステム500は、ネットワーク540を介して通信するためのネットワークインターフェースデバイス520を更に含み得る。
データストレージシステム525は、本明細書に説明する方法又は機能の内の何れか1つ以上を具体化する命令535又はソフトウェアの1つ以上のセットが蓄積されるマシン可読ストレージ媒体530(コンピュータ可読媒体としても知られる)を含み得る。命令535はまた、コンピュータシステム500による実行中にメインメモリ510内及び/又は処理デバイス505内に完全に又は少なくとも部分的に常駐し得、メインメモリ510及び処理デバイス505もマシン可読ストレージ媒体を構成する。マシン可読ストレージ媒体530、データストレージシステム525、及び/又はメインメモリ510は、メモリサブシステムに対応し得る。
一例では、命令535は、キューマネージャ550(例えば、図1を参照して説明したキューマネージャ150)に対応する機能を実装するための命令を含む。マシン可読ストレージ媒体530は単一の媒体として示されているが、用語“マシン可読ストレージ媒体”は、命令の1つ以上のセットを蓄積する単一の媒体又は複数の媒体を含み得る。用語“マシン可読ストレージ媒体”はまた、マシンによる実行のための命令のセットを蓄積又は符号化することが可能であり、本開示の方法の内の任意の1つ以上をマシンに実施させる任意の媒体を含み得る。用語“マシン可読ストレージ媒体”は、固体メモリ、光学媒体、及び磁気媒体を含み得るが、これらに限定されない。
前述の詳細な説明の幾つかの部分は、コンピュータメモリ内のデータビットに対する演算のアルゴリズム及び記号表現に関して提示されている。これらのアルゴリズムの記述及び表現は、データ処理技術の当業者が彼らの仕事の内容を他の当業者に最も効果的に伝えるために使用される方法である。アルゴリズムはここにあり、一般的に、所望の結果につながる一貫した一連の動作であると考えられる。動作は、物理量の物理的な操作を必要とする動作である。必ずではないが、通常、これらの量は、蓄積され、組み合わされ、比較され、さもなければ操作されることが可能な電気信号又は磁気信号の形式をとる。これらの信号をビット、値、要素、記号、文字、項、又は数等と称することは、主に一般的な使用上の理由から、場合によっては便利であることが証明されている。
しかしながら、これらの用語及び類似の用語の全ては、適切な物理量と関連付けられ、これらの量に適用される便利なラベルにすぎないことに留意すべきである。本開示は、コンピュータシステムのレジスタ及びメモリ内の物理的(電子的)量として表されるデータを、コンピュータシステムのメモリ若しくはレジスタ、又はその他のそうした情報ストレージシステム内の物理的量として同様に表される他のデータに操作及び変換する、コンピュータシステム又は同様の電子コンピューティングデバイスのアクション及びプロセスに言及し得る。
本開示はまた、本明細書の動作を実施するための装置に関する。この装置は、意図した目的のために特別に構築され得、又はコンピュータ内に蓄積されたコンピュータプログラムによって選択的に起動又は再構成される汎用コンピュータを含み得る。そうしたコンピュータプログラムは、非限定的に、コンピュータシステムバスに各々結合された、フロッピーディスク、光ディスク、CD-ROM、及び光磁気ディスクを含む任意のタイプのディスク、ROM、RAM、EPROM、EEPROM、磁気カード若しくは光カード、又は電子的命令を蓄積するのに適した任意のタイプの媒体等のコンピュータ可読ストレージ媒体内に蓄積され得る。
本明細書に提示されるアルゴリズム及び表示は、本質的に特定のコンピュータ又はその他の装置と関連付けられない。本明細書の教示に従ったプログラムを用いて様々な汎用システムが使用され得、又は方法を実施するためのより特化した装置を構築することが便利であることが証明され得る。様々なこれらのシステムに対する構造は、以下の説明の記述に現れるであろう。また、本開示は、任意の特定のプログラミング言語に言及して説明されていない。本明細書に説明するような開示の教示を実装するために、様々なプログラミング言語が使用され得ることは理解されるであろう。
本開示は、命令をその上に蓄積したマシン可読媒体を含み得るコンピュータプログラム製品又はソフトウェアとして提供され得、それは、本開示に従ったプロセスを実施するためにコンピュータシステム(又はその他の電子デバイス)をプログラミングするために使用され得る。マシン可読媒体は、マシン(例えば、コンピュータ)によって読み出し可能な形式で情報を蓄積するための任意のメカニズムを含む。幾つかの例では、マシン可読(例えば、コンピュータ可読)媒体は、ROM、RAM、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリコンポーネント等のマシン(例えば、コンピュータ)可読ストレージ媒体を含む。
前述の明細書では、開示の例は、それらの具体例に言及して説明されている。以下の特許請求の範囲に記載されるような開示の例のより広い精神及び範囲から逸脱することなく、様々な修正がそれらになされ得ることは明らかであろう。明細書及び図面は、したがって、限定的な意味ではなく、例示的な意味でみなされるべきである。
本開示の態様は、メモリサブシステムのキューを維持することに向けられている。メモリサブシステムは、ストレージデバイス、メモリモジュール、又はストレージデバイスとメモリモジュールとのハイブリッドであり得る。ストレージデバイス及びメモリモジュールの例は、図1に関連して本明細書に説明される。一般的に、ホストシステムは、データを蓄積するメモリデバイス等の1つ以上のコンポーネントを含むメモリサブシステムを利用し得る。ホストシステムは、メモリサブシステムに蓄積されるデータを提供し得、メモリサブシステムから取得されるデータをリクエストし得る。
メモリデバイスは、不揮発性メモリデバイスであり得る。不揮発性メモリデバイスの一例は、否定論理積(NAND)メモリデバイスである。不揮発性メモリデバイスの他の例は、図1に関連して以下に説明される。不揮発性メモリデバイスは、1つ以上のダイのパッケージである。各ダイは、1つ以上のプレーンで構成され得る。プレーンは、論理ユニット(LUN)にグループ化され得る。幾つかのタイプの不揮発性メモリデバイス(例えば、NANDデバイス)の場合、各プレーンは、物理ブロックのセットで構成される。各ブロックは、ページのセットで構成される。各ページは、メモリセル(“セル”)のセットで構成される。セルは、情報を蓄積する電子回路である。データブロックは、以下では、データを蓄積するために使用されるメモリデバイスのユニットを指し、メモリセルのグループ、ワード線のグループ、ワード線、又は個々のメモリセルを含み得る。
データ動作は、メモリサブシステムによって実施され得る。データ動作は、ホスト開始の動作であり得る。例えば、ホストシステムは、メモリサブシステム上でデータ動作(例えば、書き込み、読み出し、消去等)を開始し得る。ホストシステムは、メモリサブシステムにあるメモリデバイス上にデータを蓄積するために、及びメモリサブシステム上のメモリデバイスからデータを読み出すために等、メモリサブシステムへアクセスリクエスト(例えば、書き込みコマンド、読み出しコマンド)を送り得る。
NANDセルの従来のアクセス動作では、コマンドが様々なメモリダイへ絶えず送信され得る。コマンドは、様々なレベルの優先度を有する異なるアクセス動作(例えば、読み出し動作、書き込み動作等)と関連付けられ得る。すなわち、読み出しコマンド又は書き込みコマンドが同じダイへ送信される前にホスト読み出しコマンドが特定のメモリダイへ送信されることが望ましいことがある。しかしながら、メモリサブシステムは多くのダイを含み、各ダイは多数のコマンド及びコマンドタイプと関連付け得るので、従来のアクセス動作では、コマンドの送信を効果的に優先付けることが不可能であり得る。また、従来のアクセス動作はコマンドの送信を効果的に優先付けることが不可能であり得るので、より低い優先度のコマンドがより高い優先度のコマンドの前に発行され得、システムリソース(例えば、電力)を不必要に利用し得る。したがって、従来のアクセス動作は、システムリソースが相対的に低い優先度の動作に割り当てられることをもたらし得、必要な場合により高い優先度のコマンドをメモリサブシステムが発行可能になることを阻む。
本開示の態様は、メモリサブシステムのキューをダイレベルで維持することによって、上記の及びその他の欠陥に対処する。例えば、メモリサブシステムの各メモリダイは、個別のダイと関連付けられたコマンドを維持するためにキュー(例えば、メモリダイキュー)と関連付けられ得る。更に、各メモリダイキューは、特定の優先度レベルと関連付けられたコマンドを維持するために複数のサブキュー(例えば、優先度付きキュー)を含み得る。コマンドは、個別の優先度付きキューと関連付けられた優先度レベルに基づいて、また、個別のキュー内のコマンドの量に基づいて発行され得る。すなわち、キュー内のコマンドの数が閾値を超える場合、任意の追加のコマンドがキューに割り当てられる前にコマンドが発行され得る。したがって、コマンドは、コマンドと関連付けられた優先度レベルとキュー内のコマンド数との両方に基づいて発行され得る。幾つかの例では、コマンドはローカルメモリコントローラによって発行され得る。
例えば、メモリサブシステムの特定のメモリダイと関連付けられたメモリダイキューは、1つ以上(例えば、2つ、3つ、6つ)の優先度付きキューを含み得る。各優先度付きキューは、特定の優先度レベルと関連付けられたコマンドと関連付けられ(例えば、そのためにリザーブされ)得る。3つの優先度付きキューが使用される場合、実例として、第1の優先度付きキューは、第1の(例えば、最も高い、最も緊急の)優先度レベルを有するコマンドと関連付けられ得、第2の優先度付きキューは、第2の(例えば、中間の、中位の)優先度レベルを有するコマンドと関連付けられ得、第3の優先度付きキューは、第3の(例えば、最も低い、最も緊急度の低い)優先度レベルを有するコマンドと関連付けられ得る。メモリダイに対するコマンドが受信された場合、それは、事前定義され得るその関連付けられた優先度レベルに基づいて優先度付きキューに割り当てられ得る。したがって、より高い優先度付きキュー内のコマンドは、より低い優先度付きキュー内のコマンドの前に発行され得、すなわち、第1の優先度付きキュー内のコマンドは、第2の優先度付きキュー内のコマンドの前に発行され得る。より高い優先度のコマンドが発行されている場合、コマンドは、より低い優先度付きキューに依然として割り当てられ得る。しかしながら、キュー内のコマンドの量が閾値を超える場合、キューと関連付けられる優先度レベルに関係なく、キュー内のコマンド(例えば、キュー内の全てのコマンド)が発行され得る。コマンドが一旦発行されると、他の(例えば、より高い優先度の)キュー内のコマンドの発行が再開され得る。こうした技法は、ダイ毎又はシステムレベルで実施され得、それらの両方は、単一のキュー内の大量のコマンドをさもなければ発行するために必要なシステムリソース(例えば、電力)を軽減し得る。
図1は、本開示の幾つかの実施形態に従ったメモリサブシステム110を含むコンピューティングシステム100の一例を説明する。メモリサブシステム110は、1つ以上の不揮発性メモリデバイス(例えば、メモリデバイス130)、1つ以上の揮発性メモリデバイス(例えば、メモリデバイス140)、又はそれらの組み合わせ等の媒体を含み得る。
メモリサブシステム110は、ストレージデバイス、メモリモジュール、又はストレージデバイスとメモリモジュールとのハイブリッドであり得る。ストレージデバイスの例は、ソリッドステートドライブ(SSD)、フラッシュドライブ、ユニバーサルシリアルバス(USB)フラッシュドライブ、組み込みマルチメディアコントローラ(eMMC)ドライブ、ユニバーサルフラッシュストレージ(UFS)ドライブ、セキュアデジタル(SD)カード、及びハードディスクドライブ(HDD)を含む。メモリモジュールの例は、デュアルインラインメモリモジュール(DIMM)、スモールアウトラインDIMM(SO-DIMM)、及び様々なタイプの不揮発性DIMM(NVDIMM)を含む。
コンピューティングシステム100は、デスクトップコンピュータ、ラップトップコンピュータ、ネットワークサーバ、モバイルデバイス、車両(例えば、航空機、ドローン、列車、自動車、又はその他の乗り物)、モノのインターネット(IoT)対応デバイス、組み込みコンピュータ(例えば、車両、産業機器、若しくはネットワーク化された商用デバイス内に含まれるもの)、又はメモリ及び処理デバイスを含むそうしたコンピューティングデバイス等のコンピューティングデバイスであり得る。
コンピューティングシステム100は、1つ以上のメモリシステム110と結合されたホストシステム105を含み得る。幾つかの例では、ホストシステム105は、異なるタイプのメモリシステム110と結合される。図1は、1つのメモリサブシステム110と結合されたホストシステム105の一例を説明する。本明細書で使用するとき、“に結合された”又は“と結合された”は、一般的に、電気、光学、及び磁気等の接続を含む、有線又は無線を問わない、間接的通信接続又は(例えば、コンポーネントを介在さない)直接的通信接続であり得るコンポーネント間の接続を指す。
ホストシステム105は、プロセッサチップセットと、プロセッサチップセットによって実行されるソフトウェアスタックとを含み得る。プロセッサチップセットは、1つ以上のコア、1つ以上のキャッシュ、メモリコントローラ(例えば、NVDIMMコントローラ)、及びストレージプロトコルコントローラ(例えば、PCIeコントローラ、SATAコントローラ)を含み得る。ホストシステム105は、例えば、データをメモリサブシステム110に書き込み、メモリサブシステム110からデータを読み出すためにメモリサブシステム110を使用する。
ホストシステム105は、物理ホストインターフェースを使用してメモリサブシステム110に結合され得る。物理ホストインターフェースの例は、シリアルアドバンスドテクノロジーアタッチメント(SATA)インターフェース、ペリフェラルコンポーネントインターーコネクトエクスプレス(PCIe)インターフェース、USBインターフェース、ファイバーチャネル、スモールコンピューターシステムインターフェース(SCSI)、シリアルアタッチドSCSI(SAS)、ダブルデータレート(DDR)メモリバス、デュアルインラインメモリモジュール(DIMM)インターフェース(例えば、ダブルデータレート(DDR)をサポートするDIMMソケットインターフェース)、オープンNANDフラッシュインターフェース(ONFI)、ダブルデータレート(DDR)、低電力ダブルデータレート(LPDDR)、又は任意のその他のインターフェースを含むが、これらに限定されない。物理ホストインターフェースは、ホストシステム105とメモリサブシステム110との間でデータを送信するために使用され得る。ホストシステム105は、メモリサブシステム110がPCIeインターフェースによってホストシステム105と結合される場合にコンポーネント(例えば、メモリデバイス130)にアクセスするために不揮発性メモリエクスプレス(NVMe)インターフェースを更に利用し得る。物理ホストインターフェースは、メモリサブシステム110とホストシステム105との間で制御、アドレス、データ、及びその他の信号を渡すためのインターフェースを提供し得る。図1は、一例としてメモリサブシステム110を説明する。一般的に、ホストシステム105は、同じ通信接続、複数の別個の通信接続、及び/又は通信接続の組み合わせを介して複数のメモリサブシステムにアクセスし得る。
メモリデバイス130、140は、異なるタイプの不揮発性メモリデバイス及び/又は揮発性メモリデバイスの任意の組み合わせを含み得る。揮発性メモリデバイス(例えば、メモリデバイス140)は、ダイナミックRAM(DRAM)及びシンクロナスDRAM(SDRAM)等のランダムアクセスメモリ(RAM)であり得るが、これらに限定されない。
不揮発性メモリデバイス(例えば、メモリデバイス130)の幾つかの例は、否定論理積(NAND)タイプのフラッシュメモリ、及び不揮発性メモリセルのクロスポイントアレイである3次元クロスポイント(“3Dクロスポイント”)メモリ等のライトインプレースメモリを含む。不揮発性メモリのクロスポイントアレイは、スタック可能なクロスグリッドデータアクセスアレイと組み合わせて、バルク抵抗の変化に基づいてビットストレージを実施し得る。また、多くのフラッシュベースのメモリとは対照的に、クロスポイント不揮発性メモリは、ライトインプレース動作を実施し得、不揮発性メモリセルが事前に消去されることなく、不揮発性メモリセルはプログラミングされ得る。NANDタイプのフラッシュメモリは、例えば、2次元NAND(2D NAND)及び3次元NAND(3D NAND)を含む。
メモリデバイス130の各々は、メモリセルの1つ以上のアレイを含み得る。あるタイプのメモリセル、例えば、シングルレベルセル(SLC)は、セル当たり1ビットを蓄積し得る。マルチレベルセル(MLC)、トリプルレベルセル(TLC)、クワッドレベルセル(QLC)、及びペンタレベルセル(PLC)等の他のタイプのメモリセルは、セル当たり複数ビットを蓄積し得る。幾つかの実施形態では、メモリデバイス130の各々は、SLC、MLC、TLC、QLC、又はこれらの任意の組み合わせ等のメモリセルの1つ以上のアレイを含み得る。幾つかの実施形態では、特定のメモリデバイスは、メモリセルのSLC部分、及びMLC部分、TLC部分、QLC部分、又はPLC部分を含み得る。メモリデバイス130のメモリセルは、データを蓄積するために使用されるメモリデバイスの論理ユニットを指し得るページとしてグループ化され得る。幾つかのタイプのメモリ(例えば、NAND)では、ページは、ブロックを形成するためにグループ化され得る。
NANDタイプのフラッシュメモリ(例えば、2D NAND、3D NAND)及び不揮発性メモリセルの3Dクロスポイントアレイ等の不揮発性メモリコンポーネントが説明されているが、メモリデバイス130は、ROM、相変化メモリ(PCM)、自己選択メモリ、その他のカルコゲナイドベースのメモリ、強誘電体トランジスタランダムアクセスメモリ(FeTRAM)、強誘電体RAM(FeRAM)、磁気RAM(MRAM)、スピントランスファートルク(STT)-MRAM、導電性ブリッジングRAM(CBRAM)、抵抗性ランダムアクセスメモリ(RRAM)、酸化物ベースのRRAM(OxRAM)、ネガティブor(NOR)フラッシュメモリ、及び電気的消去可能プログラマブルROM(EEPROM)等の任意のその他のタイプの不揮発性メモリに基づき得る。
メモリサブシステムコントローラ115(又は簡単のためにコントローラ115)は、メモリデバイス130におけるデータの読み出し、データの書き込み、又はデータの消去等の動作及びその他のそうした動作を実施するために、メモリデバイス130と通信し得る。メモリサブシステムコントローラ115は、1つ以上の集積回路及び/若しくはディスクリートコンポーネント、バッファメモリ、又はそれらの組み合わせ等のハードウェアを含み得る。メモリサブシステムコントローラ115は、マイクロコントローラ、専用論理回路(例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP))、又は別の適切なプロセッサであり得る。
メモリサブシステムコントローラ115は、ローカルメモリ125内に蓄積された命令を実行するように構成されたプロセッサ120(例えば、処理デバイス)を含み得る。説明する例では、メモリサブシステムコントローラ115のローカルメモリ125は、メモリサブシステム110とホストシステム105との間の通信を処理することを含む、メモリサブシステム110の動作を制御する様々なプロセス、動作、論理フロー、及びルーチンを実施するための命令を蓄積するように構成された組み込みメモリを含む。
幾つかの例では、ローカルメモリ125は、メモリポインタ、フェッチされたデータ等を蓄積するメモリレジスタを含み得る。ローカルメモリ125は、マイクロコードを蓄積するためのROMをも含み得る。図1の例示的なメモリサブシステム110は、メモリサブシステムコントローラ115を含むものとして説明されているが、本開示の別の例では、メモリサブシステム110は、メモリサブシステムコントローラ115を含まず、代わりに(例えば、外部ホストによって、又はメモリサブシステムとは別個のプロセッサ若しくはコントローラによって提供される)外部制御に依存し得る。
一般的に、メモリサブシステムコントローラ115は、ホストシステム105からコマンド又は動作を受信し得、コマンド又は動作を、メモリデバイス130及び/又はメモリデバイス140への所望のアクセスを達成するための命令又は適切なコマンドに変換し得る。メモリサブシステムコントローラ115は、ウェアレベリング動作、ガベージコレクション手順、エラー検出及びエラー訂正コード(ECC)動作、暗号化動作、キャッシング動作、並びにメモリデバイス130と関連付けられた論理アドレス(例えば、論理ブロックアドレス(LBA)、名前空間)と物理アドレス(例えば、物理ブロックアドレス)との間のアドレス変換等のその他の動作を担い得る。メモリサブシステムコントローラ115は、物理ホストインターフェース介してホストシステム105と通信するためにホストインターフェース回路を更に含み得る。ホストインターフェース回路は、ホストシステムから受信したコマンドを、メモリデバイス130及び/又はメモリデバイス140にアクセスするためのコマンド命令に変換し得ると共に、メモリデバイス130及び/又はメモリデバイス140と関連付けられた応答をホストシステム105に対する情報に変換し得る。
メモリサブシステム110はまた、説明されていない追加の回路又はコンポーネントを含み得る。幾つかの例では、メモリサブシステム110は、キャッシュ又はバッファ(例えば、DRAM)と、メモリサブシステムコントローラ115からアドレスを受信し得、メモリデバイス130にアクセスするためにアドレスを復号し得るアドレス回路(例えば、行デコーダ及び列デコーダ)とを含み得る。
幾つかの例では、メモリデバイス130は、メモリデバイス130の1つ以上のメモリセルに対する動作を実行するために、メモリサブシステムコントローラ115と共に動作するローカルメディアコントローラ135を含む。外部コントローラ(例えば、メモリサブシステムコントローラ115)は、メモリデバイス130を外部から管理し得る(例えば、メモリデバイス130に対するメディア管理動作を実施し得る)。幾つかの実施形態では、メモリデバイス130は、同じメモリデバイスパッケージ内のメディア管理のためにローカルコントローラ(例えば、ローカルコントローラ135)と組み合わされた生のメモリデバイスであるマネージドメモリデバイスである。マネージドメモリデバイスの一例は、マネージドNAND(MNAND)デバイスである。
メモリサブシステム110は、特定のキューと関連付けられたコマンドの関連付けられた優先度レベル及び数に従ってコマンドを管理するキューマネージャ150を含む。例えば、メモリサブシステム110の各メモリダイ(例えば、メモリデバイス130、メモリデバイス140)は、メモリダイキューと関連付けられ得る。メモリダイキューは、発行のためにコマンド(例えば、読み出しコマンド、書き込みコマンド、ホスト読み出しコマンド等)が割り当てられる1つ以上の優先度付きキューを各々含み得る。特定のダイと関連付けられたコマンドが受信される場合、キューマネージャ150は、コマンドと関連付けられた優先度レベルを判定し得(すなわち、キューマネージャ150は、コマンドのタイプを判定し得)、コマンドをダイと関連付けられた優先度付きキューに割り当て得る。コマンドは、関連付けられた優先度レベルに基づいて、個別の優先度付きキューから発行され得る。したがって、相対的に低い優先度レベルを有するキューと関連付けられたコマンドの前に、より高い優先度レベルを有するキューと関連付けられたコマンドが発行され得る。幾つかの実例では、しかしながら、より高い優先度のコマンドが発行されている間に、より低い優先度のコマンドが個別のキュー内に蓄積され得る。キューマネージャ150は、任意の1つのキュー内に含まれるコマンドの量を管理(例えば、追跡)し得、該量が閾値を超える場合、コマンド(例えば、キュー内のコマンドの全て)を発行し得る。コマンドが一旦発行されると、キューマネージャ150は、それらと関連付けられた優先度レベルに基づいてコマンドの発行を再開し得る。
任意の1つのキュー内のコマンドの量は、ダイ毎のレベル(例えば、単一のダイと関連付けられた優先度付きキュー内のコマンドの数)で、又はグローバルに(例えば、サブシステムのアクティブなダイの数に基づいて)管理され得る。何れの例でも、キューが閾値量のコマンドを蓄えることを阻むことは、キュー内のコマンドを発行するためにさもなければ利用され得るシステムリソース(例えば、電力)を軽減し得る。
幾つかの例では、メモリサブシステムコントローラ115は、キューマネージャ150の少なくとも一部分を含む。例えば、メモリサブシステムコントローラ115は、本明細書に説明する動作を実施するためのローカルメモリ125内に蓄積された命令を実施するように構成されたプロセッサ120(例えば、処理デバイス)を含み得る。幾つかの例では、キューマネージャ150は、ホストシステム105、アプリケーション、又はオペレーティングシステムの一部である。
図2は、本開示の幾つかの例に従ったメモリサブシステムに対するキューを維持するための例示的な方法200のフロー図である。方法200は、ハードウェア(例えば、処理デバイス、回路、専用ロジック、プログラマブルロジック、マイクロコード、デバイスのハードウェア、集積回路等)、ソフトウェア(例えば、処理デバイス上で実行する又は実行される命令)、又はそれらの組み合わせを含み得る処理ロジックによって実施され得る。幾つかの例では、方法200は、図1のキューマネージャ150によって実施される。特定のシーケンス又は順序で示されているが、特に指定がない限り、プロセスの順序は修正され得る。したがって、説明する例は単なる例として理解されるべきであり、説明するプロセスは異なる順序で実施され得、幾つかのプロセスは並行して実施され得る。また、様々な例では、1つ以上のプロセスは省略され得る。したがって、あらゆる例で全てのプロセスが必要であるわけではない。他の方法のフローが可能である。
動作205において、処理デバイスは、メモリサブシステムのメモリダイの複数のキュー内に含まれるコマンドの数を判定し得る。各コマンドは、メモリサブシステム上で実施される個別の動作と関連付けられ得、複数のキューの各キューは、個別の優先度レベルと関連付けられ得、メモリサブシステム上で実施されるコマンドの個別のセットを維持するように構成され得る。
動作210において、処理デバイスは、キュー内に含まれるコマンドの数に少なくとも部分的に基づいて、複数のキューの内のキューにコマンドを割り当て得る。
動作215において、処理デバイスは、個別の優先度レベルに少なくとも部分的に基づいて、複数のキューのコマンドの個別のセットから1つ以上のコマンドを発行し得る。
幾つかの例では、方法200は、コマンド数が閾値を下回るまで、コマンドの数が閾値を超える複数のキューの各々が追加のコマンドを受け入れることを禁止することを含み得る。
幾つかの例では、方法200は、コマンドの個別の数が閾値を下回る各キューに1つ以上の追加のコマンドを割り当てることと、個別の優先度レベルに少なくとも部分的に基づいて各キューから1つ以上の追加のコマンドを発行することを含み得る。
幾つかの例では、方法200は、コマンドの数が閾値を超える各キューに対してコマンドの全てを発行することを含み得る。各キューに1つ以上の追加のコマンドを割り当てることは、コマンドの全てを発行することに少なくとも部分的に基づき得る。
幾つかの例では、方法200は、メモリサブシステムのメモリに、コマンドの個別の数が閾値を超えるキューと関連付けられた少なくとも1つのコマンドを蓄積することと、コマンドの個別の数が閾値を下回ることに少なくとも部分的に基づいて、コマンドをキューに割り当てることを含み得る。
方法200の幾つかの例では、閾値は、メモリサブシステム上で動作を実施するために利用可能なメモリサブシステムのリソースに少なくとも部分的に基づく。
幾つかの例では、方法200は、メモリサブシステムの複数のメモリダイに対するキューのセットに、メモリサブシステム上で実施される動作と関連付けられた1つ以上のコマンドを割り当てることと、個別の優先度レベルに従ってキューのセットからコマンドを発行することを含み得る。キューのセットの各キューは、個別の優先度レベルと関連付けられ得る。
幾つかの例では、方法200は、メモリサブシステムのアクティブなメモリダイの数を判定することと、アクティブなメモリダイの数が閾値を超える場合にメモリサブシステムの1つ以上のアクティブなメモリダイが追加のコマンドを受け入れることを禁止することを含み得る。
幾つかの例では、方法200は、メモリサブシステムの複数のアクティブなメモリダイが閾値を超えると判定することを含み得る。1つ以上のアクティブなメモリダイが追加のコマンドを受け入れることを禁止することは、1つ以上のアクティブなメモリダイの各々と関連付けられたコマンドの数に少なくとも部分的に基づき得る。
方法200の幾つかの例では、メモリダイ上で動作を実施するための1つ以上のコマンドは、読み出しコマンド、書き込みコマンド、ホスト読み出しコマンド、ホスト書き込みコマンド、又はそれらの組み合わせを含む。
図3Aは、本開示の幾つかの例に従ったメモリサブシステムのキューを維持することをサポートするファームウェアキュー300aの一例を説明する。ファームウェアキュー300-aは、1つ以上の優先度付きキューを各々含む複数のメモリダイキュー305(例えば、LUNキュー305)を説明する。例えば、第1のメモリダイキュー305は、優先度付きキュー310、310-a、及び310-bを含み得る。幾つかの例では、優先度付きキュー310は第1の優先度付きキューに対応し得、優先度付きキュー310-aは第2の優先度付きキューに対応し得、優先度付きキュー310-bは第3の優先度付きキューに対応し得る。優先度付きキュー310は、特定のコマンド(例えば、コマンドを完了するためのリクエスト)を含み得、コマンドは、ローカルメモリコントローラ(例えば、フラッシュメモリコントローラ)によって発行され得る。幾つかの例では、ローカルメモリコントローラは、個別のキュー310の優先度レベルに従って、又は任意の特定のキュー内のコマンドの量が閾値を超えることに基づいてコマンドを発行し得る。幾つかの例では、コマンドは、オンザフライでキュー310に割り当てられ得、(異なる優先度レベルと関連付けられた)他のコマンドの発行が一時的に中断されることをもたらし得る。特定のキューが閾値を超える量のコマンドを含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれことに起因してさもなければ発生するであろうリソースを節約し得る。
本明細書で論じるように、メモリダイキュー305は、優先度付きキュー310、310-a、及び310-bを含み得、それらは、第1の優先度付きキュー、第2の優先度付きキュー、及び第3の優先度付きキューに夫々対応し得る。幾つかの例では、第1の優先度付きキュー310には、(例えば、第2及び第3の優先度付きキューに対して)最も高い優先度レベルが割り当てられ得る。優先度付きキュー310に最も高い優先度レベルを割り当てることによって、優先度付きキュー310内に配置された関連付けられたメモリダイに関連する任意のコマンドは、優先度付きキュー310-a及び310-b内のコマンドの前に発行され(例えば、ローカルメモリコントローラへ送られ)得る。同様に、第2の優先度付きキュー310-aには、(例えば、第1及び第3の優先度付きキューに対して)中間の優先度レベルが割り当てられ得る。優先度付きキュー310-aに中間の優先度レベルを割り当てることによって、優先度付きキュー310-a内に配置された関連付けられたメモリダイに関連する任意のコマンドは、優先度付きキュー310-b内のコマンドの前に発行され得る。他の例では、第3の優先度付きキュー310-bには、(例えば、第1及び第2の優先度付きキューに対して)最も低い優先度レベルが割り当てられ得る。優先度付きキュー310-bに最も低い優先度レベルを割り当てることによって、優先度付きキュー310-b内に配置された関連付けられたメモリダイに関連する任意のコマンドは、優先度付きキュー310及び310-aが空である(例えば、それらが何れのコマンドも含まない)場合にのみ発行され得る。
追加的又は代替的に、メモリダイキュー305の各優先度付きキューは、閾値と関連付けられ得る。すなわち、特定の優先度付きキュー内のコマンドの数が閾値を超える場合、システムは、システムリソースを軽減するために、該キュー内のコマンドの1つ以上(又は全て)を発行し得る。優先度付きキューからコマンドを発行するための閾値を実装しなければ、キューは、発行されるコマンドを受信し続け得る。したがって、システムは、特定のキュー内にさもでなければ蓄積されたであろうコマンドを発行することを強制されないことによって、リソースを節約し得る。本明細書で論じるように、閾値は、メモリダイキュー毎又は優先度付きキュー毎に割り当てられ得る。例えば、閾値がメモリダイキュー毎に割り当てられた場合、メモリダイキュー305の第1の優先度付きキュー310、第2の優先度付きキュー310-a、及び第3の優先度付きキュー310bは全て、同じ閾値と関連付けられ得る。逆に、閾値が優先度付きキュー毎に割り当てられた場合、メモリダイキュー305の第1の優先度付きキュー310、第2の優先度付きキュー310-a、及び第3の優先度付きキュー310bは全て、異なる閾値と関連付けられ得る。
例として、第1のメモリダイキュー305は、優先度付きキュー310内のコマンド328と、優先度付きキュー310-a内のコマンド330及び330-aとを含み得る。第1のメモリダイキュー305はまた、優先度付きキュー310-b内のコマンド335、335-a、及び335-bを含み得る。幾つかの例では、優先度付きキュー310、310-a、及び310-b内のコマンドの各々は、異なる時点で受信される異なるコマンドであり得る。すなわち、コマンドは、それらが発行されたときに、優先度付きキュー310、310-a、及び310-bに入力され得る。したがって、優先度付きキュー310は、優先度付きキュー310-a及び310-bよりも高い優先度レベルと関連付けられ得るので、コマンド328は、コマンド330、330-a、335、335-a、及び335-bの前に発行され得る。
しかしながら、第3の優先度付きキュー310-bは、コマンド328、330、及び330-aの内の1つ以上の前にコマンド335、335-a、及び335-bが発行されることを可能にし得る閾値と関連付けられ得る。例えば、第3の優先度付きキュー310-bに対する(メモリダイキュー毎又は優先度付きキュー毎の構成の何れかにおける)閾値は2つのコマンドであり得る。コマンド335、335-a、及び335-bは、同時に(且つ、コマンド328、330、及び/又は330-aの1つ以上が個別の優先度付きキュー内に含まれる時と同時に)第3の優先度付きキュー310-b内にあり得るので、閾値を超え得る。したがって、幾つかの例では、コマンド335、335-a、及び335-bの各々は、メモリダイキュー305の他のコマンドの何れかが発行される前に(例えば、一度に、連続して等)発行され得る。
更に、第3の優先度付きキュー310-b内のコマンドの量が閾値を超えると判定された場合、第3の優先度付きキュー310-bは、何れの追加のコマンドを受信することが一時的に阻まれ得る(すなわち、第3の優先度付きキュー310-bは、“マック(muck)”され得る)。この間(例えば、コマンドの量を閾値未満に減少させるように、任意の量のコマンドが発行されるまで)、第3の優先度付きキュー310bに割り当てられるいずれの追加のコマンドは、メモリサブシステムのメモリに一時的に割り当てられ得る。コマンドの量が閾値を一旦下回ると、メモリサブシステムのメモリに一時的に割り当てられたコマンドは、個別の優先度付きキューに移動させられ(例えば、転送され)得る。
幾つかの例では、第2のメモリダイキュー305-aは、優先度付きキュー315-a内のコマンド340、340-a、及び340-bを含み得る。第2のメモリダイキュー305-aはまた、優先度付きキュー315-b内のコマンド345、345-a、及び345-bを含み得る。図3Aに示すように、優先度付きキュー315は、一時的に空(例えば、NULL)であり得るが、(例えば、後の時点で、図示されたものとは異なる時点で)1つ以上のコマンドを受信し得る。幾つかの例では、優先度付きキュー315-a及び315-b内のコマンドの各々は、異なる時点で受信される異なるコマンドであり得る。すなわち、コマンドは、それらが発行されたときに優先度付きキュー315-a及び315-bに入力され得る。幾つかの例では、コマンドは、第1のメモリダイキュー305の優先度付きキュー310-a及び310-bに入力されたコマンドと同じ時点又は異なる時点で入力され得る。優先度付きキュー315-aは、優先度付きキュー315-bよりも高い優先度レベルと関連付けられ得るので、コマンド340、340-a、及び340-bは、コマンド345、345-a、及び345-bの前に発行され得る。
メモリダイキュー305に関して上で論じたように、メモリダイキュー305-aの各優先度付きキューは閾値と関連付けられ得る。すなわち、特定の優先度付きキュー内のコマンドの数が閾値を超えた場合、システムは、システムリソースを軽減するために、該キュー内のコマンドの内の1つ以上(又は全て)を発行し得る。本明細書で論じるように、閾値は、メモリダイキュー毎又は優先度付きキュー毎に割り当てられ得る。例えば、閾値がメモリダイキュー毎に割り当てられた場合、メモリダイキュー305-aの第1の優先度付きキュー315、第2の優先度付きキュー315-a、及び第3の優先度付きキュー315-bは全て、同じ閾値と関連付けられ得る。この閾値は、例えば、メモリダイキュー305-aの優先度付きキューと同じ又は異なる閾値であり得る。逆に、閾値が優先度付きキュー毎に割り当てられた場合、メモリダイキュー305-aの第1の優先度付きキュー315、第2の優先度付きキュー315-a、及び第3の優先度付きキュー315-bは全て、異なる閾値と関連付けられ得る。メモリダイキュー毎の閾値と同様に、この閾値は、例えば、メモリダイキュー305-aの優先度付きキューと同じ又は異なる閾値であり得る。
例として、第2のメモリダイキュー305-aは、第2の優先度付きキュー315-a内のコマンド340、340-a、及び340-bと、第2の優先度付きキュー315-b内のコマンド345、345-a、及び345-bとを含み得る。幾つかの例では、優先度付きキュー315-a及び315-b内のコマンドの各々は、異なる時点で受信される異なるコマンドであり得る。すなわち、コマンドは、それらが発行されたときに優先度付きキュー315-a及び315-bに入力され得る。したがって、優先度付きキュー310-aは、優先度付きキュー315-bよりも高い優先度レベルと関連付けられ得るので、コマンド340、340-a、及び340-bは、コマンド345、345-a、及び345-bの前に発行され得る。
しかしながら、第3の優先度付きキュー315-bは、コマンド340、340-a、及び340-bの内の1つ以上の前にコマンド345、345-a、及び345-bが発行されることを可能にし得る閾値と関連付けられ得る。例えば、第3の優先度付きキュー315-bに対する(メモリダイキュー毎又は優先度付きキュー毎の構成の何れかにおける)閾値は1つのコマンドであり得る。コマンド345、345-a、及び345-bは、同時に(且つ、コマンド340、340-a、及び340-bの1つ以上が第2の優先度付きキュー315-a内に含まれる時と同時に)第3の優先度付きキュー315b内にあり得るので、閾値を超え得る。したがって、幾つかの例では、メモリダイキュー305-aの他のコマンドの何れかが発行される前に、コマンド345、345-a、及び345-bの各々は、(例えば、一度に、連続して等)発行され得る。
更に、第3の優先度付きキュー315-b内のコマンドの量が閾値を超えると判定された場合、第3の優先度付きキュー315-bは、何れの追加のコマンドを受信することが一時的に阻まれ得る(すなわち、第3の優先度付きキュー315-bは“マック”され得る)。この間(例えば、コマンドの量を閾値未満に減少させるように、任意の量のコマンドが発行されるまで)、第3の優先度付きキュー315-bに割り当てられる任意の追加のコマンドは、メモリサブシステムのメモリ(例えば、図1のメモリサブシステム110のローカルメモリ125)に一時的に割り当てられ得る。コマンドの量が閾値を一旦下回ると、メモリサブシステムのメモリに一時的に割り当てられたコマンドは、個別の優先度付きキューに移動させられ(例えば、転送され)得る。
幾つかの例では、ファームウェアキュー300-aは、第3のメモリダイキュー305-b及び第4のメモリダイキュー305-cをも含み得る。第4のメモリダイキュー305は、ファームウェアキュー300-aのn番目のメモリダイキューであり得、又はそれを表し得る。すなわち、ファームウェアキュー300-aは、メモリサブシステムのメモリダイに対応する複数のメモリダイキューを含み得る。幾つかの例では、第3のメモリダイキュー305-b及び第4のメモリダイキュー305-bは、コマンドに対する1つ以上の優先度付きキューを各々含み得る。例えば、第3のメモリダイキュー305-bは、優先度付きキュー320-a内のコマンド350、350-a、及び350-bと、優先度付きキュー320-b内のコマンド355、355-a、及び355-bとを含み得る。図3Aに示すように、第4のメモリダイキュー305-cの優先度付きキューは、一時的に空(例えば、NULL)であり得るが、1つ以上のコマンドを(例えば、後で、異なる時点で)受信し得る。
メモリダイキュー305及び30-5aを参照して論じたように、メモリダイキュー305-b及び305-cは、個別の優先度付きキューと関連付けられた優先度レベルに従って、及び任意の特定の優先度付きキュー内のコマンドの量が閾値を超えることに基づいてコマンドを発行し得る。例えば、コマンド350、350-a、及び350-bは、優先度付きキュー320-aと関連付けられた優先度レベルに起因して、及び/又は優先度付きキュー320-a内のコマンドの量が閾値を超えることに起因して、コマンド355、355-a、及び355-bの前に発行され得る。他の例では、本明細書に論じるように、コマンド350、350-a、及び350-bの発行は、優先度付きキュー320-b内のコマンドの量が閾値を超える場合に一時的に中断(例えば、マック)され得る。追加的又は代替的に、第3のメモリダイキュー305-b及び/又は第4のメモリダイキュー305-cと関連付けられた閾値は、利用可能なシステムリソースの量(例えば、メモリサブシステムに利用可能な電力量)に基づいて設定され得、メモリダイキュー毎又は優先度付きキュー毎に設定され得る。
他の例では、閾値は、メモリサブシステムのアクティブなメモリダイの数に基づき得る。例えば、メモリサブシステムが、閾値を超える数のアクティブなメモリダイを含む場合、アクティブなメモリダイの数が閾値を下回るまで、1つ以上のメモリダイは、(その優先度レベルに関係なく)コマンドを受信することを禁止され得る。アクティブなメモリダイは、特定のキュー(例えば、特定の優先度付きキュー)内の少なくとも1つのコマンドを含む任意のメモリダイ、及び/又はアクセス動作を受けているメモリダイを指し得る。例えば、アクティブなメモリダイの閾値は、10個のメモリダイであり得る。11番目のメモリダイがアクティブになった場合、少なくとも1つのメモリダイが非アクティブ状態に戻る(例えば、それがアクセス動作にもはや供されない、及び/又はそれがその優先度付きキュー内にコマンドをもはや含まない)まで、11個のメモリダイの内の少なくとも1つは、任意の追加のコマンドを受信することを禁止され得る。コマンドを受信することを一時的に阻まれているメモリダイへコマンドを送信する場合、コマンドは、メモリサブシステムのメモリに一時的に割り当てられ得る。アクティブなメモリダイの量が閾値を一旦下回ると、メモリサブシステムのメモリに一時的に割り当てられたコマンドは、個別のメモリダイのキューに移動させられ(例えば、転送され)得る。
幾つかの例では、特定のコマンドは、事前定義された優先度レベルと関連付けられ得る。例えば、第1の優先度レベル(例えば、最も高い優先度レベル)は、ホスト読み出しコマンドと関連付けられ得る。すなわち、特定のメモリダイと関連付けられたホスト読み出しが発行される度に、それは、特定のダイと関連付けられたメモリダイキューの第1の優先度付きキューに割り当てられ得る。他の例では、第1の優先度レベル(例えば、中間の優先度レベル)は、ホスト書き込みコマンド、読み出しコマンド、書き込みコマンド、消去コマンド、又はそれらの組み合わせと関連付けられ得る。その他の全てのタイプのコマンドは、第3の(又はより低い)優先度レベルと関連付けられ得る。
図3Bは、本開示の幾つかの例に従ったグローバルプール327の一例を説明する。グローバルプール327は、図3Aを参照して論じた優先度付きキューからの1つ以上のコマンドを含み得る。すなわち、コマンドを完了するためのリクエストは、優先度付きキューからグローバルプールに発行(例えば、リリース)され得、ローカルメモリコントローラは、それらがプールに入力された順序に基づいて、関連付けられたコマンドを発行し得る。関連付けられた優先度付きキュー内のコマンドの量が閾値を超えることに基づいて、コマンドの内の1つ以上が発行され得る。閾値を超える量のコマンドを特定のキューが含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれることに起因してさもなければ発生するであろうリソースを節約し得る。
幾つかの例では、グローバルプール327は、図3Aを参照して論じたコマンドの各々を含み得る。コマンドは、特定のキュー内のコマンドの量が閾値を超えることに起因する、(例えば、個別のメモリダイキュー305によって)受信された順序、コマンドと関連付けられた個別の優先度レベル、又はそれらの組み合わせに基づいて、グローバルプール327に入力され(例えば、含まれ)得る。幾つかの例では、グローバルプール327内のコマンドは、コマンドと関連付けられた1つ以上のリソース(例えば、メモリアドレス)に対応し得る。すなわち、グローバルプール327内のコマンドは、特定のメモリセル又はメモリセルのグループにアクセスするために、ローカルメモリコントローラによって発行され得る。
グローバルプール327は、図3Aを参照して論じたメモリダイキュー305の各々からのコマンドを含み得る。例えば、第1のメモリダイキュー305からのコマンド328、330、303-a、335、335-a、及び335-bは、グローバルプール327内に含まれ得る。追加的又は代替的に、第2のメモリダイキュー305-aからのコマンド340、340-a、340-b、345、345-a、及び345-bは、第2のメモリダイキュー305-bからのコマンド350、350-a、350-b、355、355-a、及び355-bと共に含まれ得る。コマンドは、特定のキュー内のコマンドの量が閾値を超えることに起因する、個別のメモリダイキュー305で受信された順序に基づいて、コマンドと関連付けられた個別の優先度レベルに基づいて、又はそれらの組み合わせに基づいてグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第2の優先度付きキュー310-aからのコマンド330は、グローバルプール327内の第1のコマンドであり得る。コマンド330は、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに起因してグローバルプール327に入力される第1のコマンドであり得る。幾つかの例では、コマンド330は、コマンド330が最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド330-a、340、340-a、340-b、350,350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。別の言い方をすれば、第2の優先度付きキュー310-aは、任意の他のメモリダイキューが同じ(又はより高い)優先度レベルを有するコマンドを受信及び発行する前にコマンド350を受信し得る。
幾つかの例では、第2のメモリダイキュー305-aの第2の優先度付きキュー315-aからのコマンド340は、グローバルプール327内の次の(例えば、第2の)コマンドであり得る。コマンド340は、コマンド330の後ではあるが、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに基づいてグローバルプール327に入力され得る。幾つかの例では、コマンド340は、コマンド340が最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド330-a、340、340-a、340-b、350、350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第2の優先度付きキュー310-aからのコマンド330-aは、グローバルプール327内の次のコマンドであり得る。コマンド330-aは、コマンド340の後ではあるが、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに基づいてグローバルプール327に入力され得る。幾つかの例では、コマンド330-aは、コマンド330-aが最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド340-a、340-b、350、350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第2のメモリダイキュー305-aの第2の優先度付きキュー315-aからのコマンド340-aは、グローバルプール327内の次のコマンドであり得る。コマンド340-aは、コマンド350-aの後ではあるが、より高い優先度と関連付けられた任意のコマンド(例えば、コマンド328)の前にそれが受信されることに基づいてグローバルプール327に入力され得る。幾つかの例では、コマンド340-aは、コマンド340-aが最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド340-a、340-b、350,350-a、及び/又は350-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第3の優先度付きキュー310-bからのコマンド335は、グローバルプール327内の次のコマンドであり得る。コマンド335は、他のメモリダイキューがより高い優先度のコマンドを含まない場合にそれが受信されることに基づいてグローバルプールに入力され得る。幾つかの例では、コマンド335は、コマンド335が最初に受信されることに起因して、同じ優先度レベルと関連付けられた他のコマンド(例えば、コマンド335-a、335-b、345、345-a、345-b、355、355-a、及び/又は355-b)の前にグローバルプール327に入力され得る。
幾つかの例では、第1のメモリダイキュー305の第1の優先度付きキュー310からのコマンド328は、グローバルプール327内の次のコマンドであり得る。コマンド328は、その優先度のみに基づいてグローバルプール327に入力され得る。例えば、コマンド328は、第1(例えば最も高い優先度)と関連付けられるので、他のメモリダイキューが個別の優先度付きキュー内のコマンドを含む場合であっても、それはグローバルプール327に入力され得る。例えば、第1のメモリダイキュー305は、第2の優先度付きキュー310-a内のコマンド330及び330-aを含み得る。しかしながら、コマンド328の優先度に起因して、コマンド328は最初に(例えば、コマンド330及び330-aの前に)発行され得る。
幾つかの例では、この時点で、メモリダイキュー305-bの第2の優先度付きキュー320-a内のコマンドの量は閾値を超え得る。例えば、閾値は2(2)つのコマンドであり得、コマンド350、350-a、及び350-bの各々は、優先度付きキュー320-a内にあり得る。したがって、任意の他のより高い優先度のコマンドがメモリサブシステムの任意の他の優先度付きキュー内にあるにもかかわらず、コマンド350、350-a、及び350-bは発行され得る。コマンドが発行されるまで、メモリダイキュー305-bの第2の優先度付きキュー320-aは、いずれの追加のコマンドを受信することを阻まれ得る。すなわち、優先度付きキュー320-a内に含まれる任意のコマンドは、コマンド350、350-a、及び350-bが発行されるまで、メモリサブシステムのメモリに一時的に蓄積され得る。コマンドが発行され、優先度付きキュー320-a内のコマンドの数が閾値を一旦下回ると、優先度付きキュー320-aは、コマンドの受信を再開し得、グローバルプール327内の他のコマンドが発行され得る。閾値を超える量のコマンドを特定のキューが含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれること起因してさもなければ発生するであろうリソースを節約し得る。
幾つかの例では、残りのコマンド(例えば、コマンド340-b、335-b、345、335-a、345-a、345-b、355、355-a、及び355-b)の各々は、最後にグローバルプール327に入力され得る。幾つかの例では、コマンドは、受信される順序に基づいて、各コマンドの個別のメモリダイキューと関連付けられた優先度レベルに基づいて、又は関連付けられた優先度付きキューのコマンドの量が閾値を超えることに基づいて入力され得る。本明細書で論じるように、グローバルプール327内の各コマンドは、グローバルプール327に入力された順序に従って、ローカルメモリコントローラによって発行され得る。閾値を超える量のコマンドを特定のキューが含むことを阻むことによって、システムは、個別のキュー内に更に大量のコマンドが含まれることに起因してさもなければ発生するであろうリソースを節約し得る。
図4は、本開示の幾つかの例に従ってキューを維持するためのメモリサブシステム400の一例を説明する。メモリサブシステム400は、メモリサブシステムのメモリダイへ送信される1つ以上のコマンドを含むメールボックス405を含み得る。コマンドは、キューマネージャ410を使用して、個別のメモリダイキュー415に通信され(例えば、送信され、送られ)得る。各メモリダイキュー415は、優先度付きキュー420、425、及び430等の1つ以上の優先度付きキューを含み得、それらは、図3Aを参照して説明したような第1の優先度付きキュー、第2の優先度付きキュー、及び第3の優先度付きキューに夫々対応し得る。各キューと関連付けられたコマンドの量を判定するために、スコアボード417は、メモリサブシステム400の各メモリダイキュー415の各優先度付きキューのコマンド数を追跡し得る(例えば、スコアボードは、カウントを維持し得る)。メモリダイマネージャ435は、各個別の優先度付きキューと関連付けられたコマンドを発行し得、コマンドを高い優先度440又は通常の優先度445(又はその他の優先度レベル)として指し示し得る。高い優先度440又は通常の優先度445の何れかとして指し示されるコマンドは、ローカルメモリコントローラによって発行され得る。
メールボックス405は、メモリサブシステムの様々なメモリダイキュー415へ送信されるコマンドのセットを保持し得る。例えば、コマンドが(例えば、ホストデバイスから)受信されると、コマンドは、メールボックス405内に蓄積(例えば、一時的に蓄積)され得る。キューマネージャ410は、メールボックス405内のコマンドを個別のメモリダイに割り当て得、幾つかの例では、コマンドと関連付けられた優先度に基づいて、個別のメモリダイキュー415の特定の優先度付きキューに割り当て得る。例えば、高い優先度のコマンドは優先度付きキュー420に割り当てられ得、中間の優先度のコマンドは優先度付きキュー425に割り当てられ得、他のコマンドは、優先度付きキュー430(又は他の優先度付きキュー)に割り当てられ得る。
幾つかの例では、キューマネージャ410は、コマンドが様々な優先度付きキュー及び/又はメモリダイに割り当てられることを禁止するために、スコアボード417及び/又はメモリダイマネージャ435と通信し得る。例えば、優先度付きキューがマックされた場合、キューマネージャ410は、キュー内のコマンドの量が閾値を下回るまでコマンドを該キューへ送信しないことがある。また、(例えば、アクティブなメモリダイの数が閾値を超えることに起因して)ダイ全体がマックされた場合、キューマネージャ410は、アクティブなメモリダイの量が閾値を下回るまで、コマンドを1つ以上のアクティブなメモリダイへ送信することを控え得る。アクティブなメモリダイの数及び/又はメモリサブシステムの各優先度付きキュー内に含まれるコマンドの数は、スコアボード417によって管理され得る。
メモリダイマネージャ435は、メモリサブシステム400の様々な優先度付きキュー内に含まれるコマンドを発行し得る。本明細書で論じるように、コマンドは、それらの個別の優先度に基づいて、及び/又は任意の1つの優先度付きキュー内のコマンドの量が閾値を超えることに基づいて発行され得る。追加的又は代替的に、単一のメモリダイと関連付けられたコマンドは、メモリダイのアクティブな量が閾値を超えることに基づいて発行され得る。1つ以上のコマンドが発行される場合、メモリダイマネージャ435は、コマンドのタイプ(例えば、読み出しコマンド、書き込みコマンド、ホスト読み出しコマンド、ホスト書き込みコマンド等)を判定し得、コマンドと関連付けられた特定のメモリセルを判定し得る。すなわち、メモリダイマネージャ435は、コマンドを発行及び実施するために、コマンドをリソース(例えば、関連付けられたメモリセルのアドレス)と関連付け得る。幾つかの例では、メモリダイマネージャ435は、任意のコマンドを高い優先度440又は通常の優先度445として指定し得る。
高い優先度のコマンド440は、その優先度レベル及び/又は閾値が超えることに基づいて発行される(例えば、直ぐに発行される)任意のコマンドを含み得る。例えば、コマンドが中間の優先度付きキュー425から発行されている間に、コマンドが受信されて第1の優先度付きキュー420に入力された場合、メモリダイマネージャ435は、新たに受信したコマンドを高い優先度440のコマンドとして指定し得る。したがって、ローカルメモリコントローラは、(通常の優先度445と指定され得る)任意の他のより低い優先度のコマンドを発行する前にコマンドを発行し得る。同様に、アクティブなメモリダイの閾値及び/又は優先度付きキュー内のコマンドの閾値を超える場合、メモリダイマネージャ435は、任意の関連付けられたコマンドを高い優先度440のコマンドとし得る。したがって、ローカルメモリコントローラは、(通常の優先度445と指定され得る)任意の他のより低い優先度のコマンドを発行する前にコマンドを発行し得る。こうした方法でコマンドを発行することは、個別のキュー内又は大量のメモリダイ内に更に大量のコマンドが含まれることに起因してさもなければ発生するであろうリソースをシステムが節約することを可能にし得る。
図5は、本明細書で開示するような例に従ったメモリサブシステムに対するキューを維持することをサポートするコンピュータシステム500の例示的なマシンを説明する。コンピュータシステム500は、本明細書に説明する技法の内の任意の1つ以上をマシンに実施させるための命令のセットを含み得る。幾つかの例では、コンピュータシステム500は、メモリサブシステム(例えば、図1を参照して説明したメモリサブシステム110)を含む、それと結合される、又はそれを利用するホストシステム(例えば、図1を参照して説明したホストシステム105)に対応し得、又はコントローラの動作を実施するために(例えば、図1を参照して説明したキューマネージャ150に対応する動作を実施するためにオペレーティングシステムを実行するために)使用され得る。幾つかの例では、マシンは、ローカルエリアネットワーク(LAN)、イントラネット、エクストラネット、及び/又はインターネット内の他のマシンと接続(例えば、ネットワーク接続)され得る。マシンは、クライアントサーバーネットワーク環境でサーバー若しくはクライアントマシンの性能で、ピアツーピア(若しくは分散)ネットワーク環境でピアマシンとして、又はクラウドコンピューティングインフラストラクチャ若しくは環境でサーバー若しくはクライアントマシンとして動作し得る。
マシンは、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、携帯情報端末(PDA)、携帯電話、ウェブアプライアンス、サーバー、ネットワークルーター、スイッチ若しくはブリッジ、又は該マシンによって実行されるアクションを指定する(シーケンシャルな又はその他の方法の)命令のセットを実行可能な任意のマシンであり得る。更に、単一のマシンが説明されているが、用語“マシン”は、本明細書で論じる方法の内の何れか1つ以上を実施するために命令のセット(又は複数のセット)を個々に又は共同して実行するマシンの任意の集合をも含み得る。
例示的なコンピュータシステム500は、処理デバイス505と、メインメモリ510(例えば、ROM、フラッシュメモリ、SDRAM又はランバスDRAM(RDRAM)等のDRAM等)と、スタティックメモリ515(例えば、フラッシュメモリ、スタティックRAM(SRAM)等)と、データストレージシステム525とを含み得、それらは、バス545を介して相互に通信する。
処理デバイス505は、マイクロプロセッサ又は中央処理デバイス等の1つ以上の汎用処理デバイスを表す。より具体的には、処理デバイスは、複合命令セットコンピューティング(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、若しくはその他の命令セットを実装するプロセッサ、又は命令セットの組み合わせを実装するプロセッサであり得る。処理デバイス505はまた、ASIC、FPGA、DSP、又はネットワークプロセッサ等の1つ以上の専用処理デバイスであり得る。処理デバイス505は、本明細書で論じる動作及びステップを実施するための命令535を実行するように構成される。コンピュータシステム500は、ネットワーク540を介して通信するためのネットワークインターフェースデバイス520を更に含み得る。
データストレージシステム525は、本明細書に説明する方法又は機能の内の何れか1つ以上を具体化する命令535又はソフトウェアの1つ以上のセットが蓄積されるマシン可読ストレージ媒体530(コンピュータ可読媒体としても知られる)を含み得る。命令535はまた、コンピュータシステム500による実行中にメインメモリ510内及び/又は処理デバイス505内に完全に又は少なくとも部分的に常駐し得、メインメモリ510及び処理デバイス505もマシン可読ストレージ媒体を構成する。マシン可読ストレージ媒体530、データストレージシステム525、及び/又はメインメモリ510は、メモリサブシステムに対応し得る。
一例では、命令535は、キューマネージャ550(例えば、図1を参照して説明したキューマネージャ150)に対応する機能を実装するための命令を含む。マシン可読ストレージ媒体530は単一の媒体として示されているが、用語“マシン可読ストレージ媒体”は、命令の1つ以上のセットを蓄積する単一の媒体又は複数の媒体を含み得る。用語“マシン可読ストレージ媒体”はまた、マシンによる実行のための命令のセットを蓄積又は符号化することが可能であり、本開示の方法の内の任意の1つ以上をマシンに実施させる任意の媒体を含み得る。用語“マシン可読ストレージ媒体”は、固体メモリ、光学媒体、及び磁気媒体を含み得るが、これらに限定されない。
幾つかの例では、本明細書に説明するような装置は、1つ以上の方法を実施し得る。装置は、本開示の以下の態様を実施するための特徴、回路、ロジック、手段、若しくは命令(例えば、プロセッサによって実行可能な命令を蓄積する非一時的コンピュータ可読媒体)、又はそれらの任意の組み合わせを含み得る。
態様1:メモリサブシステムのメモリダイの複数のキューの内のキュー内に含まれるコマンドの数を判定することであって、各コマンドは、メモリサブシステム上で実施される個別の動作と関連付けられ、複数のキューの各キューは、個別の優先度レベルと関連付けられ、メモリサブシステム上で実施されるコマンドの個別のセットを維持するように構成されることと、キュー内に含まれるコマンドの数に少なくとも部分的に基づいて、コマンドを複数のキューの内のキューに割り当てることと、個別の優先度レベルに少なくとも部分的に基づいて、複数のキューのコマンドの個別のセットから1つ以上のコマンドを発行することのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを含む、方法、装置、又は非一時的コンピュータ可読媒体。
態様2:コマンドの数が閾値を超える複数のキューの各々が、コマンドの数が閾値を下回るまで追加のコマンドを受け入れることを禁止することのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを更に含む、態様1に記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様3:コマンドの個別の数が閾値を下回る各キューに1つ以上の追加のコマンドを割り当てることと、個別の優先度レベルに少なくとも部分的に基づいて、各キューから1つ以上の追加のコマンドを発行することのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを更に含む、態様2に記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様4:コマンドの数が閾値を超える各キューに対するコマンドの全てを発行することであって、各キューに1つ以上の追加のコマンドを割り当てることは、コマンドの全てを発行することに少なくとも部分的に基づくことのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを更に含む、態様3に記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様5:コマンドの個別の数が閾値を超えるキューと関連付けられた少なくとも1つのコマンドをメモリサブシステムのメモリに蓄積することと、コマンドの個別の数が閾値を下回ることに少なくとも部分的に基づいて、コマンドをキューに割り当てることのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを更に含む、態様2~4の何れかに記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様6:閾値は、メモリサブシステム上で動作を実施するために利用可能なメモリサブシステムのリソースに少なくとも部分的に基づく、態様2~5の何れかに記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様7:メモリサブシステムの複数のメモリダイに対するキューのセットに、メモリサブシステム上で実施される動作と関連付けられた1つ以上のコマンドを割り当てることであって、キューのセットの各キューは、個別の優先度レベルと関連付けられることと、個別の優先度レベルに従ってキューのセットからコマンドを発行することのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを更に含む、態様1~6の何れかに記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様8:メモリサブシステムのアクティブなメモリダイの数を判定することと、アクティブなメモリダイの数が閾値を超えた場合にメモリサブシステムの1つ以上のアクティブなメモリダイが追加のコマンドを受け入れることを禁止することのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを更に含む、態様7に記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様9:メモリサブシステムの複数のアクティブなメモリダイが閾値を超えると判定することであって、1つ以上のアクティブなメモリダイが追加のコマンドを受け入れることを禁止することは、1つ以上のアクティブなメモリダイの各々と関連付けられたコマンドの数に少なくとも部分的に基づくことのための動作、特徴、回路、ロジック、手段、若しくは命令、又はそれらの任意の組み合わせを更に含む、態様8に記載の方法、装置、又は非一時的コンピュータ可読媒体。
態様10:メモリダイ上で動作を実施するための1つ以上のコマンドは、読み出しコマンド、書き込みコマンド、ホスト読み出しコマンド、ホスト書き込みコマンド、又はそれらの組み合わせを含む、態様1~9の何れかに記載の方法、装置、又は非一時的コンピュータ可読媒体。
説明する技法は可能な実装を含むこと、動作及びステップは再配置され得、さもなければ修正され得ること、並びに他の実装が可能であることに留意すべきである。更に、方法の内の2つ以上からの部分は組み合わされ得る。
前述の詳細な説明の幾つかの部分は、コンピュータメモリ内のデータビットに対する演算のアルゴリズム及び記号表現に関して提示されている。これらのアルゴリズムの記述及び表現は、データ処理技術の当業者が彼らの仕事の内容を他の当業者に最も効果的に伝えるために使用される方法である。アルゴリズムはここにあり、一般的に、所望の結果につながる一貫した一連の動作であると考えられる。動作は、物理量の物理的な操作を必要とする動作である。必ずではないが、通常、これらの量は、蓄積され、組み合わされ、比較され、さもなければ操作されることが可能な電気信号又は磁気信号の形式をとる。これらの信号をビット、値、要素、記号、文字、項、又は数等と称することは、主に一般的な使用上の理由から、場合によっては便利であることが証明されている。
しかしながら、これらの用語及び類似の用語の全ては、適切な物理量と関連付けられ、これらの量に適用される便利なラベルにすぎないことに留意すべきである。本開示は、コンピュータシステムのレジスタ及びメモリ内の物理的(電子的)量として表されるデータを、コンピュータシステムのメモリ若しくはレジスタ、又はその他のそうした情報ストレージシステム内の物理的量として同様に表される他のデータに操作及び変換する、コンピュータシステム又は同様の電子コンピューティングデバイスのアクション及びプロセスに言及し得る。
本開示はまた、本明細書の動作を実施するための装置に関する。この装置は、意図した目的のために特別に構築され得、又はコンピュータ内に蓄積されたコンピュータプログラムによって選択的に起動又は再構成される汎用コンピュータを含み得る。そうしたコンピュータプログラムは、非限定的に、コンピュータシステムバスに各々結合された、フロッピーディスク、光ディスク、CD-ROM、及び光磁気ディスクを含む任意のタイプのディスク、ROM、RAM、EPROM、EEPROM、磁気カード若しくは光カード、又は電子的命令を蓄積するのに適した任意のタイプの媒体等のコンピュータ可読ストレージ媒体内に蓄積され得る。
本明細書に提示されるアルゴリズム及び表示は、本質的に特定のコンピュータ又はその他の装置と関連付けられない。本明細書の教示に従ったプログラムを用いて様々な汎用システムが使用され得、又は方法を実施するためのより特化した装置を構築することが便利であることが証明され得る。様々なこれらのシステムに対する構造は、以下の説明の記述に現れるであろう。また、本開示は、任意の特定のプログラミング言語に言及して説明されていない。本明細書に説明するような開示の教示を実装するために、様々なプログラミング言語が使用され得ることは理解されるであろう。
本開示は、命令をその上に蓄積したマシン可読媒体を含み得るコンピュータプログラム製品又はソフトウェアとして提供され得、それは、本開示に従ったプロセスを実施するためにコンピュータシステム(又はその他の電子デバイス)をプログラミングするために使用され得る。マシン可読媒体は、マシン(例えば、コンピュータ)によって読み出し可能な形式で情報を蓄積するための任意のメカニズムを含む。幾つかの例では、マシン可読(例えば、コンピュータ可読)媒体は、ROM、RAM、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリコンポーネント等のマシン(例えば、コンピュータ)可読ストレージ媒体を含む。
前述の明細書では、開示の例は、それらの具体例に言及して説明されている。以下の特許請求の範囲に記載されるような開示の例のより広い精神及び範囲から逸脱することなく、様々な修正がそれらになされ得ることは明らかであろう。明細書及び図面は、したがって、限定的な意味ではなく、例示的な意味でみなされるべきである。