(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024129443
(43)【公開日】2024-09-27
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 13/12 20060101AFI20240919BHJP
G06F 12/06 20060101ALI20240919BHJP
G06F 9/38 20180101ALI20240919BHJP
G06F 13/10 20060101ALI20240919BHJP
G06F 3/06 20060101ALI20240919BHJP
【FI】
G06F13/12 330G
G06F12/06 550A
G06F9/38 350X
G06F13/10 310B
G06F3/06 301F
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023038661
(22)【出願日】2023-03-13
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】森 悠
(72)【発明者】
【氏名】田所 三徳
【テーマコード(参考)】
5B013
5B160
【Fターム(参考)】
5B013CC13
5B160CD04
(57)【要約】
【課題】 処理の効率を向上できるメモリシステムを実現する。
【解決手段】 実施形態によれば、メモリシステムは、複数のメモリチップと、ランダムアクセスメモリと、コントローラとを具備する。複数のメモリチップは、並列に動作可能である。ランダムアクセスメモリは、ホストから発行される要求を格納順に記憶可能な物理チャネル領域と、ホストから発行される要求を格納順にそれぞれ記憶可能である複数の仮想チャネル領域とを含む。コントローラは、ホストから発行される1つ以上の要求を、ホストから取得した順に物理チャネル領域に格納する。コントローラは、1つ以上の要求のそれぞれを、複数の仮想チャネル領域のいずれか1つに格納する。複数の仮想チャネル領域のそれぞれは、1つ以上の要求に従って複数のメモリチップに対してそれぞれ実行される複数のプロセスの1つと対応する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
並列に動作可能な複数のメモリチップと、
ホストから発行される要求を格納順に記憶可能な物理チャネル領域と、前記ホストから発行される要求を格納順にそれぞれ記憶可能である複数の仮想チャネル領域とを含むランダムアクセスメモリと、
前記ホストから発行される1つ以上の要求を、前記ホストから取得した順に前記物理チャネル領域に格納し、
前記1つ以上の要求のそれぞれを、前記複数の仮想チャネル領域のいずれか1つに格納するように構成されるコントローラとを具備し、
前記複数の仮想チャネル領域のそれぞれは、前記1つ以上の要求に従って前記複数のメモリチップに対してそれぞれ実行される複数のプロセスの1つと対応し、
前記コントローラは、
前記複数のプロセスの並列化の自由度が所定の閾値以上である場合、前記物理チャネル領域を用いてプロセスを実行し、
前記自由度が前記所定の閾値未満である場合、前記複数の仮想チャネル領域を用いてプロセスを実行するように構成される、
メモリシステム。
【請求項2】
前記コントローラは、
前記複数のプロセスの並列化の自由度が所定の閾値以上である場合、前記物理チャネル領域の先頭に格納されている前記1つ以上の要求のうちの第1要求を取得し、前記第1要求に応じたプロセスを実行し、
前記自由度が前記所定の閾値未満である場合、前記複数の仮想チャネル領域のうちの第2仮想チャネル領域の先頭に格納されている前記1つ以上の要求のうちの第2要求を取得し、前記第2要求に応じた処理を実行するように構成される、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記複数のプロセスの並列化の自由度が所定の閾値以上である場合、前記第1要求に応じたプロセスを実行した後、前記物理チャネル領域に格納されている前記第1要求を削除し、前記複数の仮想チャネル領域の内の第1仮想チャネル領域に格納されている前記第1要求を削除し、
前記自由度が前記所定の閾値未満である場合、前記第2要求に応じた処理を実行した後、前記第2仮想チャネル領域に格納されている前記第2要求を削除し、前記物理チャネル領域に格納されている前記第2要求を削除するように構成される、
請求項2に記載のメモリシステム。
【請求項4】
並列に動作可能な複数のメモリチップと、
ホストから発行される要求を格納順に記憶可能な物理チャネル領域と、前記ホストから発行される要求を格納順にそれぞれ記憶可能である複数の仮想チャネル領域とを含むランダムアクセスメモリと、
前記ホストから発行される1つ以上の要求を、前記ホストから取得した順に前記物理チャネル領域に格納し、
前記1つ以上の要求のそれぞれを、前記複数の仮想チャネル領域のいずれか1つに格納するように構成されるコントローラとを具備し、
前記複数の仮想チャネル領域のそれぞれは、前記1つ以上の要求に従って前記複数のメモリチップに対してそれぞれ実行される複数のプロセスの1つと対応し、
前記コントローラは、
前記複数のプロセスの並列化の自由度が所定の閾値以上である場合、前記物理チャネル領域の先頭に格納されている前記1つ以上の要求のうちの第1要求を取得し、前記第1要求に応じたプロセスを実行し、その後、前記物理チャネル領域に格納されている前記第1要求を削除し、前記複数の仮想チャネル領域の内の第1仮想チャネル領域に格納されている前記第1要求を削除し、
前記自由度が前記所定の閾値未満である場合、前記複数の仮想チャネル領域のうちの第2仮想チャネル領域の先頭に格納されている前記1つ以上の要求のうちの第2要求を取得し、前記第2要求に応じた処理を実行し、その後、前記第2仮想チャネル領域に格納されている前記第2要求を削除し、前記物理チャネル領域に格納されている前記第2要求を削除するように構成される、
メモリシステム。
【請求項5】
前記コントローラは、
前記第1要求を前記物理チャネル領域に物理的に格納し、
前記第1要求が格納された前記物理チャネル領域内の位置を示す第1情報を前記第1仮想チャネル領域に格納することによって、前記第1要求を前記第1仮想チャネル領域に仮想的に格納するように構成される、
請求項4に記載のメモリシステム。
【請求項6】
前記コントローラは、前記自由度が前記所定の閾値以上である場合、前記物理チャネル領域に格納されている前記第1要求を取得し、前記第1要求に応じた処理を実行し、前記物理チャネル領域に格納されている前記第1要求を削除し、前記第1仮想チャネル領域に格納されている前記第1情報を削除するように構成される、
請求項5に記載のメモリシステム。
【請求項7】
前記コントローラは、
前記第2要求を前記物理チャネル領域に物理的に格納し、
前記第2要求が格納された前記物理チャネル領域内の位置を示す第2情報を前記第2仮想チャネル領域に格納することによって、前記第2要求を前記第2仮想チャネル領域に仮想的に格納するように構成される、
請求項4に記載のメモリシステム。
【請求項8】
前記コントローラは、
前記自由度が前記所定の閾値未満である場合、前記第2仮想チャネル領域に格納されている前記第2情報を取得し、前記第2情報に基づいて前記物理チャネル領域から前記第2要求を取得し、前記第2要求に応じた処理を実行し、その後、前記第2仮想チャネル領域に格納されている前記第2情報を削除し、前記物理チャネル領域に格納されている前記第2要求を削除するように構成される
請求項7に記載のメモリシステム。
【請求項9】
前記第1要求は、前記第2要求よりも先に前記物理チャネル領域に格納され、
前記第1仮想チャネル領域は、前記複数のプロセスの内の第1プロセスに対応し、
前記第2仮想チャネル領域は、前記複数のプロセスの内の第2プロセスに対応し、
前記コントローラは、
前記自由度が前記所定の閾値未満であり、且つ前記第1プロセスと前記第2プロセスとが実行可能である場合、前記物理チャネル領域に格納されている前記第1要求を取得し、前記第1要求に応じた処理を実行し、その後、前記物理チャネル領域に格納されている前記第1要求を削除し、前記第1仮想チャネル領域に格納されている前記第1要求を削除し、
前記自由度が前記所定の閾値未満であり、且つ前記第1プロセスが実行可能であって前記第2プロセスが実行可能でない場合、前記物理チャネル領域に格納されている前記第1要求を取得し、前記第1要求に応じた処理を実行し、その後、前記物理チャネル領域に格納されている前記第1要求を削除し、前記第1仮想チャネル領域に格納されている前記第1要求を削除し、
前記自由度が前記所定の閾値未満であり、且つ前記第2プロセスが実行可能であって前記第1プロセスが実行可能でない場合、前記物理チャネル領域に格納されている前記第2要求を取得し、前記第2要求に応じた処理を実行し、その後、前記物理チャネル領域に格納されている前記第2要求を削除し、前記第2仮想チャネル領域に格納されている前記第2要求を削除するように構成される、
請求項4に記載のメモリシステム。
【請求項10】
前記コントローラは、
前記第1要求を前記物理チャネル領域に格納し、
前記第1要求が格納された前記物理チャネル領域内の位置を示す第1情報を前記第1仮想チャネル領域に格納することによって、前記第1要求を前記第1仮想チャネル領域に仮想的に格納し、
前記第1要求よりも後に前記第2要求を前記物理チャネル領域に格納し、
前記第2要求が格納された前記物理チャネル領域内の位置を示す第2情報を前記第2仮想チャネル領域に格納することによって、前記第2要求を前記第2仮想チャネル領域に仮想的に格納するように構成され、
前記第1仮想チャネル領域は、前記複数のプロセスの内の第1プロセスに対応し、
前記第2仮想チャネル領域は、前記複数のプロセスの内の第2プロセスに対応し、
前記コントローラは、
前記自由度が前記所定の閾値未満であり、且つ前記第1プロセスと前記第2プロセスとが実行可能である場合、前記物理チャネル領域に格納されている前記第1要求を取得し、前記第1要求に応じた処理を実行し、その後、前記物理チャネル領域に格納されている前記第1要求を削除し、前記第1仮想チャネル領域に格納されている前記第1情報を削除し、
前記自由度が前記所定の閾値未満であり、且つ前記第1プロセスが実行可能であって前記第2プロセスが実行可能でない場合、前記物理チャネル領域に格納されている前記第1要求を取得し、前記第1要求に応じた処理を実行し、その後、前記物理チャネル領域に格納されている前記第1要求を削除し、前記第1仮想チャネル領域に格納されている前記第1情報を削除し、
前記自由度が前記所定の閾値未満であり、且つ前記第2プロセスが実行可能であって前記第1プロセスが実行可能でない場合、前記物理チャネル領域に格納されている前記第2要求を取得し、前記第2要求に応じた処理を実行し、その後、前記物理チャネル領域に格納されている前記第2要求を削除し、前記第2仮想チャネル領域に格納されている前記第2情報を削除するように構成される、
請求項4に記載のメモリシステム。
【請求項11】
前記コントローラは、前記ホストから第3要求を取得した場合、
前記第3要求を前記物理チャネル領域に格納し、
前記第3要求に対応するプロセスを特定し、前記特定されたプロセスに対応する前記複数の仮想チャネル領域の内の第3仮想チャネル領域に、前記第3要求を格納するように構成される、
請求項4に記載のメモリシステム。
【請求項12】
前記コントローラは、前記ホストから第3要求を取得した場合、
前記第3要求を前記物理チャネル領域に物理的に格納し、
前記第3要求に対応するプロセスを特定し、前記特定されたプロセスに対応する前記複数の仮想チャネル領域の内の第3仮想チャネル領域に、前記第3要求が格納された前記物理チャネル領域内の位置を示す第3情報を格納することによって、前記第3要求を前記第3仮想チャネル領域に仮想的に格納するように構成される、
請求項4に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリ等の記憶デバイスを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、例えば、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【0003】
メモリシステムは、ホストによって発行された要求(例えば、コマンドとも呼ぶ)に応じて、記憶デバイスに対するデータ書き込みやデータ読み出し等の処理を行う。メモリシステムでは、データコヒーレンシを保つために、ホストによって発行された複数の要求の順序が、例えば、先入れ先出し(First-In First-Out:FIFO)構造のメモリ(FIFOメモリ)によって維持される。
【0004】
また、メモリシステムの記憶デバイスとして、並列に動作可能な複数のメモリチップを備えることがある。例えば、データセンター、およびエンタープライズ向け製品では、メモリチップの動作の並列性は増加傾向にある。
【0005】
このようなメモリシステムでは、ホストによる要求の本来の順序に従う処理(インオーダ処理)を保証する必要がなく、且つ、互いに独立な要求を同時に実行することでメモリシステムの性能を向上できる場合、並列に実行可能な複数のプロセスごとに関連付けられる複数のFIFOメモリが設けられることがある。ホストからの要求は、複数のFIFOメモリの内、対応するプロセスに関連付けられたFIFOメモリに格納される。これにより、複数のプロセスのそれぞれにおいて要求の順序が再構築される。そして、各FIFOメモリに格納された要求に応じた処理が並列に実行され得るので、厳密な順序に従う必要がないと共に、メモリシステムの性能を向上できる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許出願公開第2022/0253248号明細書
【特許文献2】米国特許第7506114号明細書
【特許文献3】米国特許第6581111号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
複数のプロセスのそれぞれにおいて要求の順序が再構築された場合、ホストによる要求の本来の順序に関する情報は失われる。これは、並列に実行可能な複数のプロセスにそれぞれ関連付けられる複数のFIFOメモリに要求を格納した時点で、要求が、インオーダ処理から、要求の本来の順序に従わない処理(アウトオブオーダ処理)へ変化することを意味する。
【0008】
アウトオブオーダ処理は、(先行要求の処理が不当に待たされることにより)要求に対する応答のレイテンシが悪化したり、インオーダ処理を前提とするメモリシステム内の資源の利用効率が低下したりすることで、かえってメモリシステムにおける処理の効率が低下する可能性がある。したがって、アウトオブオーダ処理における効率はアルゴリズムに依存する。
【0009】
本発明の一実施形態では、処理の効率を向上できるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0010】
実施形態によれば、メモリシステムは、複数のメモリチップと、ランダムアクセスメモリと、コントローラとを具備する。複数のメモリチップは、並列に動作可能である。ランダムアクセスメモリは、ホストから発行される要求を格納順に記憶可能な物理チャネル領域と、ホストから発行される要求を格納順にそれぞれ記憶可能である複数の仮想チャネル領域とを含む。コントローラは、ホストから発行される1つ以上の要求を、ホストから取得した順に物理チャネル領域に格納する。コントローラは、1つ以上の要求のそれぞれを、複数の仮想チャネル領域のいずれか1つに格納する。複数の仮想チャネル領域のそれぞれは、1つ以上の要求に従って複数のメモリチップに対してそれぞれ実行される複数のプロセスの1つと対応する。コントローラは、複数のプロセスの並列化の自由度が所定の閾値以上である場合、物理チャネル領域を用いてプロセスを実行する。コントローラは、自由度が所定の閾値未満である場合、複数の仮想チャネル領域を用いてプロセスを実行する。
【図面の簡単な説明】
【0011】
【
図1】実施形態に係るメモリシステムとホストとが接続された情報処理システムの全体構成例を示すブロック図。
【
図2】比較例に係るメモリシステムにおいて、レイテンシの悪化と資源の利用効率の低下を引き起こす例を説明するための図。
【
図3】実施形態に係るメモリシステムにおける、ホストからの要求の実行の例を説明するための図。
【
図4】実施形態に係るメモリシステムにおける、並列プロセス管理の自由度が閾値以上である場合のアービトレーション動作の例を説明するための図。
【
図5】実施形態に係るメモリシステムにおける、並列プロセス管理の自由度が閾値未満である場合のアービトレーション動作の例を説明するための示す図。
【
図6】実施形態に係るメモリシステムの物理チャネルおよび仮想チャネルに3つの要求が格納されている例を説明するための図。
【
図7】
図6の物理チャネルおよび仮想チャネルを実現する連結リストの例を示す図。
【
図8】実施形態に係るメモリシステムにおける、エンキュー動作の例を説明するための図。
【
図9】
図8のエンキュー動作において更新された連結リストの例を示す図。
【
図10】実施形態に係るメモリシステムにおける、デキュー動作の第1の例を説明するための図。
【
図11】
図10のデキュー動作において更新された連結リストの例を示す図。
【
図12】実施形態に係るメモリシステムにおける、デキュー動作の第2の例を説明するための図。
【
図13】
図12のデキュー動作において更新された連結リストの例を示す図。
【
図14】実施形態に係るメモリシステムにおいて、並列プロセス管理の自由度が閾値未満であり、且つ実行可能なプロセスが複数存在する場合の、アービトレーションからデキューまでの動作の例を説明するための図。
【
図15】
図14のアービトレーション動作における連結リストの例を示す図。
【
図16】
図14のデキュー動作における連結リストの例を示す図。
【発明を実施するための形態】
【0012】
以下、実施の形態について図面を参照して説明する。
【0013】
図1は、実施形態に係るメモリシステムとホストデバイスとが接続された情報処理システムの全体構成例を示すブロック図である。情報処理システム1は、例えば、ホストデバイス2とメモリシステム3とを含む。以下では、ホストデバイス2を、ホスト2とも称する。
【0014】
ホストデバイス2は、大量且つ多様なデータをメモリシステム3に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。
【0015】
メモリシステム3は、例えば、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体記憶デバイスである。不揮発性メモリは、例えば、NAND型フラッシュメモリである。メモリシステム3はストレージデバイスとも称される。メモリシステム3は、例えば、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)として実現される。
【0016】
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3は、ホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
【0017】
ホスト2とメモリシステム3とを接続するためのインタフェースは、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI ExpressTM(PCIeTM)、EthernetTM、Fibre channel、NVM ExpressTM(NVMeTM)等の規格に準拠する。
【0018】
ホスト2とメモリシステム3それぞれの構成例について以下に説明する。
【0019】
(ホスト2の構成例)
ホスト2は、例えば、セントラルプロセッシングユニット(CPU)21と、ランダムアクセスメモリ(RAM)22を備える。CPU21、およびRAM22は、例えば、バス20を介して接続される。このバス20は、ホスト2内に設けられたインターフェース(図示せず)と接続される。このインターフェースは、後述するメモリシステム3のコントローラ内にあるホストインターフェース11に接続され、ホスト2とメモリシステム3間での情報の送受信を可能としている。
【0020】
CPU21は、例えば、少なくとも1つのプロセッサである。CPU21は、ホスト2内の様々なコンポーネントの動作を制御する。
【0021】
RAM22は揮発性メモリである。RAM22は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、またはスタティックランダムアクセスメモリ(SRAM)として実現される。
【0022】
ホスト2は、複数のサブミッションキュー221を備え得る。複数のサブミッションキュー221のそれぞれには、例えば、RAM22の記憶領域が割り当てられる。サブミッションキュー221は、ホスト2(より詳しくは、CPU21)がメモリシステム3に対して発行する要求を格納するためのキューである。つまり、ホスト2は、サブミッションキュー221を介して要求をメモリシステム3に送信する。要求は、例えば、コマンドである。
【0023】
(メモリシステム3の構成例)
メモリシステム3は、例えば、不揮発性メモリ4と、コントローラ5とを備える。メモリシステム3は、ダイナミックランダムアクセスメモリ(DRAM)を備えていてもよい。
【0024】
不揮発性メモリ4は、複数のメモリチップ41を含む。複数のメモリチップ41のそれぞれは、マトリクス状に配置された複数のメモリセルをそれぞれが含む複数のブロックを含む。1つのブロックは、データ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。複数のブロックのそれぞれは、複数のページを含む。複数のページのそれぞれは、単一のワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、ワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
【0025】
各ブロックに対するプログラム/イレーズサイクル数(P/Eサイクル数)には上限があり、最大P/Eサイクル数と称される。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
【0026】
コントローラ5は、System-on-a-chip(SoC)のような回路によって実現され得る。コントローラ5は、不揮発性メモリ4を制御するように構成される。
【0027】
コントローラ5は、不揮発性メモリ4のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれと不揮発性メモリ4の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のリード/ライト動作とブロック単位の消去(イレーズ)動作との差異を隠蔽するための処理が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびガベージコレクションが含まれる。
【0028】
論理アドレスは、メモリシステム3の記憶領域をアドレス指定するために、ホスト2によって使用される。論理アドレスは、例えば論理ブロックアドレス(LBA)である。
【0029】
論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、例えば、論理物理アドレス変換テーブルを用いて実行される。コントローラ5は、論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータが書き込まれた不揮発性メモリ4内の物理記憶位置を示す。コントローラ5は、論理物理アドレス変換テーブルを用いて、不揮発性メモリ4の記憶領域を論理的に分割した複数の記憶領域を管理する。これら複数の記憶領域は、複数の論理アドレスにそれぞれ対応する。つまり、これら複数の記憶領域のそれぞれは、1つの論理アドレスで特定される。論理物理アドレス変換テーブルは、メモリシステム3の起動時に不揮発性メモリ4からDRAMにロードされてもよい。
【0030】
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、コントローラ5は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ5は、この論理アドレスをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブルを更新することにより、以前のデータを無効化する。論理物理アドレス変換テーブルから参照されているデータ(すなわち論理アドレスと紐付けられているデータ)は有効データと称される。また、どの論理アドレスとも紐付けられていないデータは無効データと称される。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
【0031】
コントローラ5は、例えば、ホストインタフェース(ホストI/F)11、SRAM12、メモリコントローラ13、およびCPU14を備える。これらホストI/F11、SRAM12、メモリコントローラ13、およびCPU14は、例えば、バス10を介して接続されている。
【0032】
ホストI/F11は、ホスト2とメモリシステム3との通信を制御する制御回路として機能する。ホストI/F11は、ホスト2(より詳しくは、サブミッションキュー221)から様々な処理の要求(コマンド)を受信する。ホスト2から受信する処理の要求は、例えば、入出力(I/O)要求、および各種制御要求である。I/O要求には、例えば、ライト要求、およびリード要求が含まれる。制御要求には、例えば、トリム要求(アンマップ要求)、アボート要求、およびフラッシュ(flush)要求が含まれる。また、ホストI/F11は、ホスト2からデータを受信する。ホスト2から受信するデータは、例えば、ライト要求に応じて不揮発性メモリ4に書き込まれるべきユーザデータである。
【0033】
SRAM12は揮発性メモリである。SRAM12の記憶領域は、例えば、リングバッファ31、物理チャネル32、および複数の仮想チャネル33として割り当てられる。
【0034】
リングバッファ31は、例えば、リードバッファ、及び/またはライトバッファである。リードバッファは、ホスト2からのリード要求に応じて不揮発性メモリ4から読み出されたユーザデータが一時的に記憶される記憶領域である。ライトバッファは、ホスト2からのライト要求に応じて不揮発性メモリ4に書き込まれるべきユーザデータが一時的に記憶される記憶領域である。
【0035】
物理チャネル32は、例えば、1つ以上の要求を格納順に記憶可能な記憶領域である。より詳しくは、物理チャネルは、例えば、1つ以上の要求と、それら1つ以上の要求の順序とを記憶可能である。物理チャネル32は、例えば、連結リストによって実現されるデータ構造を有する。ホスト2のサブミッションキュー221から取得された全ての要求は、サブミッションキュー221から取得された順序に従って、物理チャネル32に物理的に格納される。要求をチャネルに物理的に格納するとは、その要求そのもの(すなわち、要求の実体)をチャネルに格納することである。
【0036】
複数の仮想チャネル33のそれぞれは、1つ以上の要求を格納順に記憶可能な記憶領域である。より詳しくは、複数の仮想チャネル33のそれぞれは、例えば、1つ以上の要求と、それら1つ以上の要求の順序とを記憶可能である。あるいは、複数の仮想チャネル33のそれぞれは、1つ以上の要求への参照と、それら1つ以上の要求の順序とを記憶可能であってもよい。メモリシステム3に設けられる仮想チャネル33の数は、例えば、不揮発性メモリ4に対して並列に実行可能なプロセスの数に相当する。各仮想チャネル33では、例えば、FIFO方式で1つ以上の要求が管理される。各仮想チャネル33は、例えば、連結リストによって実現されるデータ構造を有する。ホスト2のサブミッションキュー221から取得された要求は、複数の仮想チャネル33のいずれか1つに、物理的に、または仮想的に、格納される(振り分けられる)。要求をチャネルに仮想的に格納するとは、例えば、その要求を参照するための情報をチャネルに格納することである。要求を参照する情報は、例えば、その要求の実体が格納された物理チャネル32内の記憶位置を示す情報である。
【0037】
1つの要求は、物理チャネル32に格納されると共に、複数の仮想チャネル33のいずれか1つに格納される。物理チャネル32と仮想チャネル33とは、双方に格納されたその1つの要求を仮想チャネルから物理チャネルに連想可能なデータ構造を有する。より具体的には、1つの要求は、例えば、物理チャネル32に物理的に格納されると共に、複数の仮想チャネル33のいずれか1つに仮想的に格納される。物理チャネル32と仮想チャネル33とは、物理的に格納された要求と仮想的に格納された要求とを相互に連想可能なデータ構造を有する。
【0038】
以下では、物理チャネル32には要求が物理的に格納され、仮想チャネル33には要求が仮想的に格納されるケースについて主に例示する。なお、物理チャネル32と仮想チャネル33の双方で、要求が物理的に格納されてもよい。物理チャネル32および仮想チャネル33の構造の具体例については、
図3から
図16を参照して後述する。
【0039】
メモリコントローラ13は、コントローラ5と不揮発性メモリ4とを電気的に接続する。メモリコントローラ13は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
【0040】
メモリコントローラ13は、不揮発性メモリ4を制御するように構成された制御回路として機能する。メモリコントローラ13は、複数のチャネルを介して、不揮発性メモリ4内の複数のメモリチップ41にそれぞれ接続されていてもよい。複数のメモリチップ41が並列に駆動されることにより、コントローラ5と不揮発性メモリ4との間のアクセスを広帯域化できる。
【0041】
メモリコントローラ13は、アービタ131と、要求実行部132とを備える。
【0042】
アービタ131は、調停(arbitration)により物理チャネル32と複数の仮想チャネル33から1つのチャネルを選択し、選択されたチャネルの先頭から要求を取得する動作を行う。以下では、この動作を、アービトレーション動作とも称する。
【0043】
具体的には、例えば、並列プロセス管理の自由度が閾値以上である場合、アービタ131は物理チャネル32を選択する。一方、並列プロセス管理の自由度が閾値未満である場合、アービタ131は、複数の仮想チャネル33から、実行可能なプロセスに対応する1つの仮想チャネル33を選択する。
【0044】
ここで、並列プロセス管理とは、メモリシステム3内で並列に実行可能な複数のプロセスの管理をいう。並列プロセス管理に関する制約は、要求仕様を満たすためにアービタ(後述)に課せられる制御制約である。並列プロセス管理に関する制約は、例えば、実現されるべき並列化の制約を示す指標で表される。実現されるべき並列化を示す指標を、並列プロセス管理の自由度とも称する。具体的には、並列プロセス管理の自由度は、例えば、複数のプロセスの内、実際に並列に実行されるべきプロセスの数、または割合に基づく。例えば、メモリシステム3において16個のプロセスが並列に実行可能である場合に、並列プロセス管理の自由度が2個のプロセスを並列化する制約を示すならば、並列プロセス管理の自由度は高いと云える。また例えば、メモリシステム3において4個のプロセスが並列に実行可能である場合に、並列プロセス管理の自由度が4個のプロセスを並列化する制約を示すならば、並列プロセス管理の自由度は低いと云える。並列プロセス管理の自由度は、メモリシステム3に要求される仕様(例えば、メモリシステム3が備える構成、メモリシステム3に要求される性能、等)により決定される。なお、並列プロセス管理の自由度の代わりに、並列プロセス管理に関する制約の厳格さを示す並列プロセス管理の制約度が用いられてもよい。並列プロセス管理の自由度が高いことは、並列プロセス管理の制約度が低いことに相当する。並列プロセス管理の自由度が低いことは、並列プロセス管理の制約度が高いことに相当する。
【0045】
調停により物理チャネル32が選択された場合、アービタ131は、物理チャネル32の先頭から要求を物理的に取得する。物理チャネル32から要求を物理的に取得するとは、物理チャネル32から要求そのものを取得することである。調停により1つの仮想チャネル33が選択された場合、アービタ131は、その仮想チャネル33の先頭から要求を仮想的に取得する。仮想チャネル33から要求を仮想的に取得するとは、要求が格納されている物理チャネル32内の記憶位置を示す情報を仮想チャネル33から取得し、取得された情報に基づいて物理チャネル32からその要求を取得することである。なお、仮想チャネル33でも要求が物理的に格納されるケースでは、アービタ131は、その仮想チャネル33の先頭から要求を物理的に取得する。アービタ131は、取得された要求を要求実行部132に送出する。
【0046】
要求実行部132は、アービタ131から受け取った要求に応じた処理を実行する。例えば、受け取った要求がライト要求である場合、要求実行部132は、メモリチップ41にユーザデータを書き込むデータ書き込み動作を行う。また例えば、受け取った要求がリード要求である場合、要求実行部132は、メモリチップ41からユーザデータを読み出すデータ読み出し動作を行う。
【0047】
アービタ131、および要求実行部132による動作の具体例については、
図3から
図16を参照して後述する。
【0048】
CPU14は、ホストI/F11、SRAM12、およびメモリコントローラ13を制御するように構成されたプロセッサである。CPU14は、ファームウェア(FW)を実行することによって様々な処理を行う。FWは、CPU14に様々な処理を実行させるための命令群を含む制御プログラムである。CPU14は、ホスト2からの様々な要求を処理するための要求処理等を実行することができる。CPU14の動作は、CPU14によって実行されるFWによって制御される。
【0049】
コントローラ5内の各部の機能は、コントローラ5内の専用ハードウェアによって実現されてもよいし、CPU14がFWを実行することによって実現されてもよい。
【0050】
CPU14は、例えば、要求管理部141として機能する。CPU14は、例えばFWを実行することにより、要求管理部141として機能する。
【0051】
要求管理部141は、ホストI/F11を介してホスト2のサブミッションキュー221から取得(より詳しくは、フェッチ)された要求を、物理チャネル32と、複数の仮想チャネル33のいずれか1つとに格納するための動作を行う。サブミッションキュー221から取得された要求を、物理チャネル32と、複数の仮想チャネル33のいずれか1つとに新たに格納するための動作を、エンキュー(enqueue)動作とも称する。エンキュー動作において、サブミッションキュー221から取得された要求は、例えば、物理チャネル32に物理的に格納されると共に、複数の仮想チャネル33から選択された1つの仮想チャネル33に仮想的に格納される。なお、要求は、選択された1つの仮想チャネル33に物理的に格納されてもよい。
【0052】
また、要求管理部141は、物理チャネル32と仮想チャネル33のいずれか1つのチャネルから要求が取得され、取得された要求に対応する処理が実行されたことに応じ、その要求を物理チャネル32と仮想チャネル33とから削除するための動作を行う。物理チャネル32と仮想チャネル33とから要求を削除するための動作を、デキュー(dequeue)動作とも称する。デキュー動作において、対応する処理が実行された要求は、例えば、その要求を物理的に格納している物理チャネル32と、その要求を仮想的に格納している仮想チャネル33の双方から削除される。なお、仮想チャネル33でも要求が物理的に格納されるケースでは、対応する処理が実行された要求は、その要求を物理的に格納している仮想チャネル33から削除される。
【0053】
要求管理部141による具体的な動作例については、
図3から
図16を参照して後述する。
【0054】
なお、要求管理部141は、メモリコントローラ13に設けられていてもよい。また、要求実行部132が、CPU14に設けられていてもよい。あるいは、要求管理部141と要求実行部132の少なくとも一方の動作が、CPU14とメモリコントローラ13の連携した動作として実現されてもよい。
【0055】
ここで、メモリシステム3におけるインオーダ処理とアウトオブオーダ処理について説明する。
【0056】
インオーダ処理は、ホスト2のサブミッションキュー221から取得された要求の順序に従う処理である。インオーダ処理では、ホスト2とメモリシステム3とでデータコヒーレンシを保つことができる。ホスト2のサブミッションキュー221から取得された要求の順序を、本来の要求順序とも称する。インオーダ処理では、例えば、単一のメモリチップ41に対する多数の要求がサブミッションキュー221から連続して取得された場合、複数のメモリチップ41全体の動作性能が低下する可能性がある。これは、その単一のメモリチップ41に対する多数の要求に応じた処理が本来の要求順序に従って完了するまで、別のメモリチップ41に対する要求に応じた処理を実行できないためである。インオーダ処理では、別のメモリチップ41に対する要求に応じた処理を直ちに実行可能であっても、先の要求に応じた処理の完了を待つ必要がある。
【0057】
アウトオブオーダ処理は、本来の要求順序に従わない処理である。アウトオブオーダ処理では、並列プロセス管理が行われる。具体的には、アウトオブオーダ処理では、サブミッションキュー221から取得された各要求に応じた処理が、並列に実行可能な複数のプロセスの1つに組み込まれる。各要求に応じた処理は、対応するプロセスの一部として、他のプロセスと並列に実行されるので、本来の要求順序に従わないアウトオブオーダ処理となる。アウトオブオーダ処理では、例えば、あるメモリチップ41に対する動作が行われていない場合に、そのメモリチップ41に対応するプロセスが実行されるように、複数のプロセスが管理される。これにより、複数のプロセスが効率的に実行されるので、複数のメモリチップ41全体の動作性能が向上し得る。
【0058】
並列プロセス管理は、例えば、単一のスレッドで行われる。そのため、複数のプロセス間の調停のためのオーバーヘッドが、ホスト2からの要求に対する応答のレイテンシとして計上される。この調停は、本来の要求順序を考慮せずに行われるので、メモリシステム3のQuality of Service(QoS)への悪影響が生じ得る。具体的には、この調停は、例えば、ホスト2からの要求に対する応答のレイテンシを悪化させる可能性がある。
【0059】
また、要求に応じた処理に用いられる資源(リソース)の管理がインオーダ処理を前提とする場合、ある要求に応じた処理で利用される資源は、その処理が完了して、解放されても、先行する要求に応じた処理が完了していないならば、利用できない。要求に応じた処理に用いられ、インオーダ処理を前提とする資源は、例えば、リングバッファ31である。解放された資源が利用できないことにより、コントローラ5が有する潜在性能を引き出すために必要な仕掛中の(in-flightな)要求数を十分に得ることができず、メモリシステム3における処理の効率が低下する可能性がある。
【0060】
図2は、比較例に係るメモリシステムにおいて、レイテンシの悪化と資源の利用効率の低下を引き起こす例を説明するための図である。比較例のメモリシステムは、リングバッファ31C、複数のFIFOメモリ33C、アービタ131C、およびマルチプレクサ121Cを備える。
【0061】
複数のFIFOメモリ33Cのそれぞれは、ホストから取得された要求をFIFO方式で記憶可能なメモリである。複数のFIFOメモリ33Cは、並列プロセス管理における複数のプロセスにそれぞれ対応する。ホストから取得された1つの要求は、対応するプロセスに基づいて、複数のFIFOメモリ33Cのいずれか1つに格納される。要求が複数のFIFOメモリ33Cのいずれか1つに格納されることにより、本来の要求順序に関する情報は失われる。
【0062】
リングバッファ31Cは、インオーダ処理を前提とする資源である。リングバッファ31Cでは、ホストからの複数の要求に応じて、複数の記憶領域C1、C2、C3、C4、……、Cxがそれぞれ順に割り当てられる。
【0063】
アービタ131Cは、複数のFIFOメモリ33Cの調停を行うが、処理の実行にあたっては、そのうちの1つのFIFOメモリ33Cを選択する。アービタ131Cは、マルチプレクサ121Cを介して、選択されたFIFOメモリ33Cの先頭の要求を取得する。これにより、取得された要求に応じた処理が実行される。
【0064】
アービタ131Cによる調停では、本来の要求順序が考慮されない。そのため、要求に応じた処理は、アウトオブオーダ処理である。したがって、要求に対する応答のレイテンシは不当に悪化する可能性がある。
【0065】
また、アウトオブオーダ処理では、要求の処理が完了したことに応じてリングバッファ31C内の対応する記憶領域の解放もアウトオブオーダになる。リングバッファ31Cでは、割り当てられている先頭の記憶領域C1から末尾の記憶領域Cxまでの全ての記憶領域が、利用中であると見なされる。例えば、先頭と末尾の途中にある記憶領域C4が、対応する要求の処理が完了したことに応じて解放されたとしても、利用中であると見なされる。このように、リングバッファ31Cにおいて、実際には利用されていないにも関わらず、利用中であると見なされる記憶領域が間欠的に発生する場合がある。これは、リングバッファ31Cの利用効率の低下を引き起こす要因となる。したがって、比較例のメモリシステムでは、リングバッファ31Cの利用効率の低下に起因して、ホストからの要求に応じた処理の効率が低下する可能性がある。
【0066】
上述の処理効率低下を抑制するため、本実施形態のメモリシステム3では、本来の要求順序で要求を記憶する物理チャネル32と、並列プロセス管理のために要求を記憶する複数の仮想チャネル33とが設けられる。
【0067】
コントローラ5は、並列プロセス管理の自由度が所定の閾値以上である場合、物理チャネル32から要求を取得し、並列プロセス管理の自由度が所定の閾値未満である場合、複数の仮想チャネル33の1つから要求を取得するように構成される。これにより、並列プロセス管理の自由度が閾値以上である場合には、本来の要求順序に従う要求のインオーダ処理により、要求に対する応答のレイテンシを短縮し、資源の利用効率を向上できる。なお、「並列プロセス管理の自由度が閾値以上である場合」は、並列プロセス管理に関する制約がない場合、あるいは並列プロセス管理の制約度が閾値未満である場合、に置き換えられてもよい。
【0068】
また、並列プロセス管理の自由度が閾値未満である場合には、要求に応じた処理を並列に実行するアウトオブオーダ処理により、複数のメモリチップ41全体の動作性能を向上できる。なお、「並列プロセス管理の自由度が閾値未満である場合」は、並列プロセス管理に関する制約がある場合、あるいは並列プロセス管理に関する制約度が閾値以上である場合、に置き換えられてもよい。
【0069】
インオーダ処理とアウトオブオーダ処理とは、レイテンシおよび資源の利用効率と、複数のメモリチップ41全体の動作性能とに関してトレードオフの関係にある。メモリシステム3では、並列プロセス管理の自由度に応じた物理チャネル32と仮想チャネル33の使い分けにより、メモリシステム3における処理の効率を向上できる。
【0070】
図3は、メモリシステム3における、ホスト2からの要求の実行の例を説明するための図である。ホスト2からの要求の実行に関する構成には、例えば、要求管理部141、物理チャネル32、複数の仮想チャネル33、リングバッファ31、アービタ131、要求実行部132、およびマルチプレクサ121が含まれる。この構成は、例えば、ハードウェアアクセラレータとして実現される。
【0071】
要求管理部141は、ホストI/F11を介してホスト2のサブミッションキュー221から取得された要求を、本来の要求順序で物理チャネル32に物理的に格納する。
【0072】
要求管理部141はさらに、その要求を、複数の仮想チャネル33の1つに仮想的に格納する。具体的には、複数の仮想チャネル33は、並列プロセス管理における複数のプロセスにそれぞれ対応する。要求管理部141は、要求に対応するプロセスに基づいて、その要求が振り分けられる1つの仮想チャネル33を特定する。要求管理部141は、特定された仮想チャネル33に要求を仮想的に格納する。仮想チャネル33では、対応するプロセス毎に、要求の順序が管理される。仮想チャネル33では、本来の要求順序に関する情報は保持されていない。
【0073】
リングバッファ31は、インオーダ処理を前提とする資源である。リングバッファ31では、サブミッションキュー221から取得された1つ以上の要求にそれぞれ対応する1つ以上の記憶領域が順に割り当てられる。リングバッファ31の記憶領域の割り当ては、例えば、要求管理部141によって行われる。
【0074】
アービタ131は、物理チャネル32と複数の仮想チャネル33に対するアービトレーション動作を行う。具体的には、アービタ131は、調停により、物理チャネル32と複数の仮想チャネル33から、要求を取得すべき1つのチャネルを選択する。アービタ131は、マルチプレクサ121を介して、選択されたチャネルの先頭の要求を取得する。アービタ131は、取得された要求を要求実行部132へ送出する。
【0075】
より具体的には、アービタ131は、選択されたチャネルを識別する情報(以下、選択チャネル情報と称する)を、マルチプレクサ121へ送出する。選択チャネル情報は、例えば、チャネルに割り当てられた番号である。マルチプレクサ121は、受け取った選択チャネル情報に基づいて対応する1つのチャネルを特定する。マルチプレクサ121は、特定されたチャネルの先頭に格納されている要求を読み出す。特定されたチャネルが物理チャネル32である場合、読み出される要求は、その物理チャネル32の先頭に物理的に格納されている要求である。特定されたチャネルが仮想チャネル33である場合、読み出される要求は、その仮想チャネル33の先頭に仮想的に格納されている要求である。マルチプレクサ121は、読み出された要求をアービタ131へ送出する。
【0076】
要求実行部132は、アービタ131から受け取った要求に応じた処理を実行する。要求実行部132は、例えば、要求に応じた処理の完了を要求管理部141に通知する。
【0077】
要求管理部141は、要求実行部132による通知に応じて、対応する要求を物理チャネル32と仮想チャネル33の双方から削除する。より詳しくは、要求管理部141は、物理チャネル32に物理的に格納されているその要求を削除すると共に、仮想チャネル33に仮想的に格納されているその要求を削除する。また、要求管理部141は、その要求に対して割り当てられたリングバッファ31内の記憶領域を解放する。
【0078】
なお、以下では、要求管理部141が物理チャネル32に要求を物理的に格納することを、単に、物理チャネル32に要求を格納するとも称する。要求管理部141が物理チャネル32に物理的に格納されている要求を削除することを、単に、物理チャネル32から要求を削除するとも称する。要求管理部141が仮想チャネル33に要求を仮想的に格納することを、単に、仮想チャネル33に要求を格納するとも称する。要求管理部141が仮想チャネル33に仮想的に格納されている要求を削除することを、単に、仮想チャネル33から要求を削除するとも称する。
【0079】
図3に示す例では、ホスト2のサブミッションキュー221から取得された要求a、b、c、d、e、f、……が、取得された順に物理チャネル32に格納されている。要求a、b、c、d、e、f、……は、第0仮想チャネル33-0、第1仮想チャネル33-1、第2仮想チャネル33-2、第3仮想チャネル33-3、第4仮想チャネル33-4、第5仮想チャネル33-5、……にもそれぞれ格納されている。
【0080】
また、リングバッファ31では、要求a、b、c、d、e、f、……に対して記憶領域A1、A2、A3、A4、A5、A6、……がそれぞれ順に割り当てられている。リングバッファ31において、ハッチングで図示された記憶領域は割り当てられている記憶領域を表し、空白で図示された記憶領域は対応する要求の処理が完了したことに応じて解放された記憶領域を表す。リングバッファ31は、インオーダ処理を前提とする資源であるので、割り当てられている記憶領域の先頭31H(ここでは、記憶領域A1)から末尾31Tまでの記憶領域全体が、利用中であると見なされる。空白で図示した幾つかの記憶領域は、先頭31Hから末尾31Tの途中の記憶領域であるため、解放されたものの、利用中であると見なされる。
【0081】
図4および
図5を参照して、アービトレーション動作について説明する。
【0082】
図4は、並列プロセス管理の自由度が閾値以上である場合のアービトレーション動作の例を説明するための図である。物理チャネル32、および仮想チャネル33に格納されている要求と、リングバッファ31において割り当てられている記憶領域については、
図3を参照して前述した通りである。
【0083】
並列プロセス管理の自由度が閾値以上である場合、アービタ131は、物理チャネル32の先頭から要求aを取得する。具体的には、アービタ131は、並列プロセス管理の自由度が閾値以上であることに基づいて、物理チャネル32を示す情報をマルチプレクサ121へ送出する。マルチプレクサ121は、物理チャネル32を示す情報に基づき、物理チャネル32の先頭から要求aを読み出す。そして、マルチプレクサ121は、読み出された要求aをアービタ131へ送出する。アービタ131は、マルチプレクサ121を介して取得された要求aを、要求実行部132へ送出する。
【0084】
要求実行部132は、アービタ131から受け取った要求aに応じた処理を実行する。このように、要求実行部132は、並列プロセス管理の自由度が閾値以上である場合、物理チャネル32を用いてプロセスを実行する。要求実行部132は、要求aに応じた処理の完了を要求管理部141に通知する。
【0085】
要求管理部141は、要求実行部132による通知に応じて、物理チャネル32に格納されている要求aを削除し、仮想チャネル33に格納されている要求aを削除する。つまり、物理チャネル32に格納されている要求aの削除が、仮想チャネル33に格納されている要求aにも反映される。また、要求管理部141は、要求aに対して割り当てられたリングバッファ31内の記憶領域A1を解放する。
【0086】
このように、並列プロセス管理の自由度が閾値以上である場合、物理チャネル32を用いることにより、ホスト2からの要求が本来の要求順序で処理される。これにより、本来の要求順序で先頭の要求aが処理されるので、要求aに対する応答のレイテンシを短縮できる。また、リングバッファ31では、要求aに対して割り当てられた記憶領域A1が解放されたことにより、利用中であると見なされる記憶領域(すなわち、先頭31Hから末尾31Tまでの記憶領域)のサイズが縮小される。そのため、リングバッファ31の利用効率を向上できる。
【0087】
図5は、並列プロセス管理の自由度が閾値未満である場合のアービトレーション動作の例を説明するための図である。物理チャネル32、および仮想チャネル33に格納されている要求と、リングバッファ31において割り当てられている記憶領域については、
図3を参照して前述した通りである。
【0088】
並列プロセス管理の自由度が閾値未満である場合、アービタ131は、複数の仮想チャネル33から1つの仮想チャネル33を選択して、選択された仮想チャネル33の先頭から要求を取得する。ここでは、第3仮想チャネル33-3が選択されたことを想定する。アービタ131は、第3仮想チャネル33-3の先頭から要求dを取得する。
【0089】
より具体的には、アービタ131は、並列プロセス管理の自由度が閾値未満であることに基づいて、複数の仮想チャネル33から、現在実行可能なプロセスに対応する第3仮想チャネル33-3を選択する。アービタ131は、選択された第3仮想チャネル33-3を示す情報をマルチプレクサ121へ送出する。マルチプレクサ121は、第3仮想チャネル33-3を示す情報に基づき、第3仮想チャネル33-3の先頭から要求dを読み出す。そして、マルチプレクサ121は、読み出された要求dをアービタ131へ送出する。
【0090】
なお、現在実行可能なプロセスが複数ある場合、アービタ131は、例えば、それら複数のプロセスにそれぞれ対応する複数の仮想チャネル33の内、本来の要求順序においてより先の要求を格納している1つの仮想チャネル33を選択する。
【0091】
アービタ131は、マルチプレクサ121を介して取得された要求dを、要求実行部132へ送出する。
【0092】
要求実行部132は、アービタ131から受け取った要求dに応じた処理を実行する。このように、要求実行部132は、並列プロセス管理の自由度が閾値未満である場合、仮想チャネル33を用いてプロセスを実行する。要求実行部132は、要求dに応じた処理の完了を要求管理部141に通知する。
【0093】
要求管理部141は、要求実行部132による通知に応じて、第3仮想チャネル33-3に格納されている要求dを削除し、物理チャネル32に格納されている要求dを削除する。つまり、第3仮想チャネル33-3に格納されている要求dの削除が、物理チャネル32に格納されている要求dにも反映される。また、要求管理部141は、要求dに対して割り当てられたリングバッファ31内の記憶領域A4を解放する。
【0094】
このように、並列プロセス管理の自由度が閾値未満である場合、仮想チャネル33を用いることにより、ホスト2からの要求が、並列プロセス管理の制約に従って並列に処理される。これにより、並列プロセス管理の制約を満たすように、複数のメモリチップ41全体の動作性能を向上できる。
【0095】
物理チャネル32および仮想チャネル33は、例えば、連結リストを用いて実現される。
図6から
図16を参照して、物理チャネル32および仮想チャネル33が連結リストを用いて実現される例を説明する。以下では、物理チャネル32および仮想チャネル33に、3つの要求a、b、およびcが格納されている場合について例示する。また、メモリシステム3に設けられる仮想チャネル33の数は、4つであるものとする。4つの仮想チャネル33は、第0仮想チャネル33-0、第1仮想チャネル33-1、第2仮想チャネル33-2、および第3仮想チャネル33-3である。
【0096】
図6は、物理チャネル32および仮想チャネル33に3つの要求a、b、およびcが格納されている例を説明するための図である。
【0097】
要求a、b、およびcは、物理チャネル32に本来の要求順序で格納されている。また、要求a、b、およびcは、第0仮想チャネル33-0、第1仮想チャネル33-1、および第2仮想チャネル33-2にそれぞれ格納されている。
【0098】
リングバッファ31では、要求a、b、およびcにそれぞれ対応する記憶領域A1、A2、およびA3が順に割り当てられている。
【0099】
図7は、
図6の物理チャネル32および仮想チャネル33を実現する連結リストの例を示す。
【0100】
物理チャネル32の連結リストは、ヘッドポインタ50と、1つ以上のエントリとを含み得る。なお、物理チャネル32が空である場合、物理チャネル32の連結リスト内のエントリ数は0になる。ここでは、物理チャネル32の連結リストは、要求a、b、およびcにそれぞれ対応するエントリ51、52、および53を含んでいる。
【0101】
ヘッドポインタ50は、物理チャネル32に格納される先頭の要求に対応するエントリ(ここでは、要求aに対応するエントリ51)を示す情報である。
【0102】
物理チャネル32のエントリは、要求フィールドと、ポインタフィールドとを含む。ある要求に対応する物理チャネル32のエントリにおいて、要求フィールドは、その要求そのものを格納可能である。ポインタフィールドは、その要求の次の要求に対応するエントリを示すポインタを格納可能である。エントリを示すポインタは、例えば、そのエントリとして割り当てられたメモリ内の記憶領域の位置(例えば、SRAM12内の記憶位置)を示す情報である。
【0103】
具体的には、要求aに対応するエントリ51は、要求フィールド51Rと、ポインタフィールド51Pとを含む。要求フィールド51Rには、要求aが格納される。ポインタフィールド51Pには、次の要求bに対応するエントリ52を示すポインタが格納される。
【0104】
要求bに対応するエントリ52は、要求フィールド52Rと、ポインタフィールド52Pとを含む。要求フィールド52Rには、要求bが格納される。ポインタフィールド52Pには、次の要求cに対応するエントリ53を示すポインタが格納される。
【0105】
要求cに対応するエントリ53は、要求フィールド53Rと、ポインタフィールド53Pとを含む。要求フィールド53Rには、要求cが格納される。ポインタフィールド53Pは、要求cの次の要求が物理チャネル32に格納されていないので、例えば、nullになる。nullであるポインタフィールド53Pは、エントリ53が物理チャネル32の終端のエントリであることを示す。なお、図では、nullを“Φ”と表記している。
【0106】
第0仮想チャネル33-0の連結リストは、ヘッドポインタ600と、1つ以上のエントリとを含み得る。なお、第0仮想チャネル33-0が空である場合、第0仮想チャネル33-0の連結リスト内のエントリ数は0になる。ここでは、第0仮想チャネル33-0の連結リストは、要求aに対応するエントリ601を含んでいる。
【0107】
ヘッドポインタ600は、第0仮想チャネル33-0に格納される先頭の要求に対応するエントリ(ここでは、要求aに対応するエントリ601)を示す。
【0108】
仮想チャネル33のエントリは、要求フィールドと、ポインタフィールドとを含む。ある要求に対応する仮想チャネル33のエントリにおいて、要求フィールドは、その要求そのものが格納されている物理チャネル32内のエントリを示すポインタを格納可能である。つまり、この要求フィールドに格納されているポインタに基づいて、物理チャネル32内のエントリを参照することにより、要求そのものが取得される。ポインタフィールドは、その要求の次の要求に対応するエントリを示すポインタを格納可能である。
【0109】
具体的には、要求aに対応するエントリ601は、要求フィールド601Rと、ポインタフィールド601Pとを含む。要求フィールド601Rには、要求aそのものが格納されている物理チャネル32内のエントリ51を示すポインタが格納される。つまり、要求フィールド601Rに格納されているポインタに基づいて、物理チャネル32内のエントリ51を参照することにより、要求aそのものが取得される。ポインタフィールド601Pは、要求aの次の要求が第0仮想チャネル33-0に格納されていないので、例えば、nullになる。nullであるポインタフィールド601Pは、エントリ601が第0仮想チャネル33-0の終端のエントリであることを示す。
【0110】
第1仮想チャネル33-1の連結リストは、ヘッドポインタ610と、1つ以上のエントリとを含み得る。なお、第1仮想チャネル33-1が空である場合、第1仮想チャネル33-1の連結リスト内のエントリ数は0になる。ここでは、第1仮想チャネル33-1の連結リストは、要求bに対応するエントリ611を含んでいる。
【0111】
ヘッドポインタ610は、第1仮想チャネル33-1に格納される先頭の要求に対応するエントリ(ここでは、要求bに対応するエントリ611)を示す。
【0112】
要求bに対応するエントリ611は、要求フィールド611Rと、ポインタフィールド611Pとを含む。要求フィールド611Rには、要求bそのものが格納されている物理チャネル32内のエントリ52を示すポインタが格納される。ポインタフィールド611Pは、要求bの次の要求が第1仮想チャネル33-1に格納されていないので、例えば、nullになる。
【0113】
第2仮想チャネル33-2の連結リストは、ヘッドポインタ620と、1つ以上のエントリとを含み得る。なお、第2仮想チャネル33-2が空である場合、第2仮想チャネル33-2の連結リスト内のエントリ数は0になる。ここでは、第2仮想チャネル33-2の連結リストは、要求cに対応するエントリ621を含んでいる。
【0114】
ヘッドポインタ620は、第2仮想チャネル33-2に格納される先頭の要求に対応するエントリ(ここでは、要求cに対応するエントリ621)を示す。
【0115】
要求cに対応するエントリ621は、要求フィールド621Rと、ポインタフィールド621Pとを含む。要求フィールド621Rには、要求cそのものが格納されている物理チャネル32内のエントリ53を示すポインタが格納される。ポインタフィールド621Pは、要求cの次の要求が第2仮想チャネル33-2に格納されていないので、例えば、nullになる。
【0116】
第3仮想チャネル33-3の連結リストは、ヘッドポインタ630と、1つ以上のエントリとを含み得る。なお、第3仮想チャネル33-3が空である場合、第3仮想チャネル33-3の連結リスト内のエントリ数は0になる。ここでは、第3仮想チャネル33-3の連結リストは、いずれのエントリも含んでいない。
【0117】
ヘッドポインタ630は、第3仮想チャネル33-3に格納されている要求がないので、いずれのエントリも示していない。ヘッドポインタ630には、例えば、nullが設定される。
【0118】
このような連結リストにより、(1)要求a、b、およびcが本来の要求順序で格納されている物理チャネル32と、(2)要求a、b、およびcがそれぞれ格納されている第0仮想チャネル33-0、第1仮想チャネル33-1、および第2仮想チャネル33-2と、を実現できる。連結リストによって物理チャネル32と仮想チャネル33とが実現される場合、要求そのものはメモリ(例えば、SRAM12)上に自由に配置される。そのため、本来の要求順序の途中の要求が取得され、その要求に対応するエントリを連結リストから削除する場合にも、連結リストにおけるポインタを修正すればよく、メモリの利用効率を向上できる。なお、各チャネルの連結リストは、終端のエントリを固定時間で特定できるように、連結リストの終端を示すtailポインタを含んでいてもよい。この場合、例えば、終端のエントリのポインタフィールドには、tailポインタを示すポインタが格納される。物理チャネルの連結リストは双方向リストであってもよい。この場合、2つめのポインタフィールドには前の要求のエントリへのポインタが格納される。
【0119】
ここで、アービタ131が物理チャネル32および仮想チャネル33の連結リストから要求を取得する動作の例について説明する。
【0120】
アービタ131は、例えば、物理チャネル32の先頭から要求を取得する場合、物理チャネル32のヘッドポインタ50を用いて、要求aのエントリ51を特定する。アービタ131は、特定されたエントリ51の要求フィールド51Rから、要求a(すなわち、要求aの実体)を取得する。
【0121】
このように、アービタ131は、物理チャネル32のヘッドポインタ50に基づく一段階の連想で、物理チャネル32の先頭のエントリ51から要求aを取得できる。
【0122】
また、アービタ131は、例えば、第0仮想チャネル33-0の先頭から要求を取得する場合、第0仮想チャネル33-0のヘッドポインタ600を用いて、要求aのエントリ601を特定する。アービタ131は、特定されたエントリ601の要求フィールド601Rから、要求aが記憶されている物理チャネル32内のエントリ51を示すポインタを取得する。アービタ131は、取得されたポインタを用いて、要求aのエントリ51を特定する。アービタ131は、特定されたエントリ51の要求フィールド51Rから、要求aを取得する。
【0123】
アービタ131は、例えば、第1仮想チャネル33-1の先頭から要求を取得する場合、第1仮想チャネル33-1のヘッドポインタ610を用いて、要求bのエントリ611を特定する。アービタ131は、特定されたエントリ611の要求フィールド611Rから、要求bが記憶されている物理チャネル32内のエントリ52を示すポインタを取得する。アービタ131は、取得されたポインタを用いて、要求bのエントリ52を特定する。アービタ131は、特定されたエントリ52の要求フィールド52Rから、要求bを取得する。
【0124】
アービタ131は、例えば、第2仮想チャネル33-2の先頭から要求を取得する場合、第2仮想チャネル33-2のヘッドポインタ620を用いて、要求cのエントリ621を特定する。アービタ131は、特定されたエントリ621の要求フィールド621Rから、要求cが記憶されている物理チャネル32内のエントリ53を示すポインタを取得する。アービタ131は、取得されたポインタを用いて、要求cのエントリ53を特定する。アービタ131は、特定されたエントリ53の要求フィールド53Rから、要求cを取得する。
【0125】
なお、アービタ131は、第3仮想チャネル33-3のヘッドポインタ630がいずれのエントリも示していないので、例えば、第3仮想チャネル33-3から要求を取得する動作を行わない。
【0126】
このように、アービタ131は、仮想チャネル33のヘッドポインタに基づいて先頭のエントリ(すなわち、仮想チャネル33の先頭のエントリ)を特定し、その先頭のエントリの要求フィールドに格納されているポインタが示す物理チャネル32のエントリから、要求の実体を取得できる。つまり、仮想チャネル33から要求を取得しようとする場合には、仮想チャネル33のヘッドポインタと、仮想チャネル33の先頭のエントリの要求フィールドに格納されているポインタとの二段階の連想で、仮想チャネル33の先頭から要求を取得できる。
【0127】
次いで、
図8および
図9を参照して、連結リストを用いて実現されるエンキュー動作について説明する。
【0128】
図8は、エンキュー動作の例を説明するための図である。ここでは、
図6に示した物理チャネル32および仮想チャネル33に、ホスト2のサブミッションキュー221から取得した要求dを追加するエンキュー動作を例示する。また、要求dが対象とするメモリチップ41は、第1仮想チャネル33-1が関連付けられたプロセスに対応するものとする。
【0129】
要求dを追加するエンキュー動作は、物理チャネル32に要求dを追加するための動作と、第1仮想チャネル33-1に要求dを追加するための動作とを含む。要求dは、物理チャネル32に格納されている要求の末尾(ここでは、要求cの後)に追加される。また、要求dは、第1仮想チャネル33-1に格納されている要求の末尾(ここでは、要求bの後)に追加される。
【0130】
リングバッファ31では、要求dに対応する記憶領域A4が新たに割り当てられる。
【0131】
図9は、
図8の物理チャネル32および仮想チャネル33を実現する連結リストの例を示す。
【0132】
エンキュー動作において、要求管理部141は、物理チャネル32の連結リストの末尾に要求dのエントリ54を追記し(
図9中の(1))、第1仮想チャネル33-1の連結リストの末尾に要求dのエントリ612を追記する(
図9中の(2))。
【0133】
具体的には、要求管理部141は、SRAM12上の記憶領域を、要求dに対応する物理チャネル32のエントリ54として割り当てる。要求管理部141は、エントリ54の要求フィールド54Rに要求dを格納する。そして、要求管理部141は、物理チャネル32の終端のエントリを、要求dの直前の要求cに対応するエントリ53から、要求dのエントリ54に変更するために、要求cのエントリ53のポインタフィールド53Pに、要求dのエントリ54を示すポインタを格納する。なお、要求dのエントリ54のポインタフィールド54Pはnullである。
【0134】
次いで、要求管理部141は、要求dが振り分けられる第1仮想チャネル33-1を特定する。例えば、要求管理部141は、要求dに対応するプロセス(より詳しくは、要求dが対象とするメモリチップ41)を特定し、特定されたプロセスに対応する第1仮想チャネル33-1を決定する。要求管理部141は、SRAM12上の記憶領域を、要求dに対応する第1仮想チャネル33-1のエントリ612として割り当てる。要求管理部141は、エントリ612の要求フィールド612Rに、要求dそのものが格納された物理チャネル32のエントリ54を示すポインタを格納する。そして、要求管理部141は、第1仮想チャネル33-1の終端のエントリを、要求dの直前の要求bに対応するエントリ611から、要求dのエントリ612に変更するために、要求bのエントリ611のポインタフィールド611Pに、要求dのエントリ612を示すポインタを格納する。なお、要求dのエントリ612のポインタフィールド612Pはnullである。
【0135】
このように、要求管理部141は、物理チャネル32および仮想チャネル33のそれぞれに要求を追加するエンキュー動作を、物理チャネル32の連結リストと仮想チャネル33の連結リストのそれぞれにエントリを追記する操作により実現できる。
【0136】
次いで、
図10から
図13を参照して、連結リストを用いて実現されるデキュー動作について説明する。
【0137】
図10は、デキュー動作の第1の例を説明するための図である。ここでは、
図8に示したエンキュー動作後の物理チャネル32および仮想チャネル33から要求bを削除するデキュー動作を例示する。このデキュー動作は、例えば、並列プロセス管理の自由度が閾値未満である場合に、アービタ131が第1仮想チャネル33-1を選択して、第1仮想チャネル33-1の先頭から要求bを取得し、要求実行部132が要求bに応じた処理を実行した後に行われる。並列プロセス管理の自由度が閾値未満である場合には、要求に応じた処理を並列に実行するアウトオブオーダ処理により、複数のメモリチップ41全体の動作性能が最適化される。
【0138】
要求bを削除するデキュー動作は、第1仮想チャネル33-1から要求bを削除するための動作と、物理チャネル32から要求bを削除するための動作とを含む。要求bは、第1仮想チャネル33-1の先頭から削除される。また、要求bは、物理チャネル32において要求aと要求cの間から削除される。
【0139】
リングバッファ31では、要求bに対応する記憶領域A2が解放される。
【0140】
図11は、
図10の物理チャネル32および仮想チャネル33を実現する連結リストの例を示す。
【0141】
デキュー動作の第1の例において、要求管理部141は、第1仮想チャネル33-1の連結リストから要求bのエントリ611を削除し(
図11中の(1))、物理チャネル32の連結リストから要求bのエントリ52を削除する(
図11中の(2))。
【0142】
具体的には、要求管理部141は、要求bのエントリ611を示していた第1仮想チャネル33-1のヘッドポインタ610を、要求bのエントリ611の次の要求dのエントリ612を示すように変更する。これにより、第1仮想チャネル33-1の連結リストから、要求bのエントリ611が削除される。
【0143】
また、要求管理部141は、第1仮想チャネル33-1内の要求bのエントリ611を用いて、物理チャネル32内の要求bのエントリ52の記憶位置を特定する。
図9に示したように、エントリ611の要求フィールド611Rは、要求bそのものが格納されている物理チャネル32内のエントリ52を示すポインタを格納している。そのため、要求管理部141は、要求フィールド611Rに格納されたポインタを用いて、物理チャネル32内の要求bのエントリ52の記憶位置を特定する。要求管理部141は、物理チャネル32において、要求aのエントリ51のポインタフィールド51Pが、特定された要求bのエントリ52を示すポインタを格納していることを特定する。そして、要求管理部141は、このポインタフィールド51Pに格納されているポインタを、要求bのエントリ52の次の要求cのエントリ53を示すポインタに変更する。これにより、物理チャネル32の連結リストから、要求bのエントリ52が削除される。例えば、物理チャネルが双方向リストで実現されていた場合は、
図11の物理チャネル削除操作に係る時間が短縮される効果も得られる。
【0144】
このように、要求管理部141は、第1仮想チャネル33-1から要求bを削除して、物理チャネル32から要求bを削除するデキュー動作を、第1仮想チャネル33-1の連結リストから要求bのエントリ611を削除し、物理チャネル32の連結リストから要求bのエントリ52を削除する操作により実現できる。
【0145】
図12は、デキュー動作の第2の例を説明するための図である。ここでは、
図10に示したデキュー動作後の物理チャネル32および仮想チャネル33から要求aをさらに削除するデキュー動作を例示する。このデキュー動作は、並列プロセス管理の自由度が閾値以上である場合に、アービタ131が物理チャネル32の先頭から要求aを取得し、要求実行部132が要求aに応じた処理を実行した後に行われる。並列プロセス管理の自由度が閾値以上である場合には、本来の要求順序に従う要求のインオーダ処理により、要求に対する応答のレイテンシと、資源の解放とが最適化される。
【0146】
要求aを削除するデキュー動作は、物理チャネル32から要求aを削除するための動作と、第0仮想チャネル33-0から要求aを削除するための動作とを含む。要求aは、第0仮想チャネル33-0の先頭から削除される。また、要求aは、物理チャネル32の先頭から削除される。
【0147】
リングバッファ31では、要求aに対応する記憶領域A1が解放される。
【0148】
図13は、
図12の物理チャネル32および仮想チャネル33を実現する連結リストの例を示す。
【0149】
デキュー動作の第2の例において、要求管理部141は、物理チャネル32の連結リストから要求aのエントリ51を削除し(
図13中の(1))、第0仮想チャネル33-0の連結リストから要求aのエントリ601を削除する(
図13中の(2))。
【0150】
具体的には、要求管理部141は、要求aのエントリ51を示していた物理チャネル32のヘッドポインタ50を、要求aのエントリ51の次の要求cのエントリ53を示すように変更する。これにより、物理チャネル32の連結リストから、要求aのエントリ51が削除される。
【0151】
次いで、要求管理部141は、要求aに対応するプロセスに基づいて、その要求が振り分けられる第0仮想チャネル33-0を特定する。物理チャネル32の先頭に格納されていた要求aは、第0仮想チャネル33-0で先頭に格納されていることが保証される。そのため、要求管理部141は、第0仮想チャネル33-0の先頭にある要求aのエントリ601を、第0仮想チャネル33-0のヘッドポインタ600を用いて特定する。そして、要求管理部141は、特定された要求aのエントリ601に後続するエントリがないので、第0仮想チャネル33-0のヘッドポインタ600をいずれのエントリも示さないように変更する。例えば、要求管理部141は、第0仮想チャネル33-0のヘッドポインタ600をnullに設定する。これにより、第0仮想チャネル33-0の連結リストから、要求aのエントリ601が削除される。
【0152】
このように、要求管理部141は、物理チャネル32から要求aを削除して、第0仮想チャネル33-0から要求aを削除するデキュー動作を、物理チャネル32の連結リストから要求aのエントリ51を削除し、第0仮想チャネル33-0の連結リストから要求aのエントリ601を削除する操作により実現できる。
【0153】
次いで、並列プロセス管理の自由度が閾値未満であり、且つ実行可能なプロセスが複数存在する場合のアービトレーションからデキューまでの動作(以下、アービトレーション-デキュー動作)について説明する。並列プロセス管理の自由度が閾値未満であり、且つ実行可能なプロセスが複数存在する場合、アービタ131は、例えば、それら複数のプロセスにそれぞれ対応する複数の仮想チャネル33に格納されている要求の内、本来の要求順序においてより先の要求を取得するように構成される。これは、例えば、アービタ131が物理チャネル32を先頭から順に探索して、実行可能なプロセスに対応する要求を見つけ出すことにより実現される。
【0154】
図14は、アービトレーション-デキュー動作の例を説明するための図である。ここでは、並列プロセス管理の自由度が閾値未満であり、且つ奇数番目の仮想チャネル33(すなわち、第1仮想チャネル33-1、および第3仮想チャネル33-3)に対応するプロセスが実行可能である場合に、
図8に示したエンキュー動作後の物理チャネル32および仮想チャネル33から要求を取得することを想定する。偶数番目の仮想チャネル33(すなわち、第0仮想チャネル33-0、および第2仮想チャネル33-2)に対応するプロセスは実行可能でない。奇数番目の仮想チャネル33に対応するプロセスを、奇数番目のプロセスとも称する。
【0155】
まず、アービタ131は、物理チャネル32を先頭から順に探索して、奇数番目のプロセスに対応する最初の要求を特定する。
図14に示す例では、アービタ131は、物理チャネル32において、1番目のプロセスに対応する要求bを特定する。アービタ131は、特定された要求bを物理チャネル32から取得して、要求実行部132へ送出する。なお、要求bは、1番目のプロセスに対応する第1仮想チャネル33-1の先頭に格納されている。つまり、物理チャネル32の先頭から順に探索して特定された最初の要求bは、対応する第1仮想チャネル33-1の先頭に格納されていることが保証される。したがって、アービタ131が、物理チャネル32を先頭から順に探索して、実行可能な奇数番目のプロセスに対応する最初の要求を取得することは、本来の要求順序を考慮して、実行可能なプロセスに対応するいずれかの仮想チャネル33の先頭から要求を取得することに相当する。
【0156】
要求実行部132は、アービタ131から受け取った要求bに応じた処理を実行する。要求実行部132は、例えば、要求bに応じた処理の完了を要求管理部141に通知する。
【0157】
要求管理部141は、要求実行部132による通知に応じて、対応する要求を物理チャネル32と第1仮想チャネル33-1の双方から削除するデキュー動作を行う。また、要求管理部141は、要求bに応じた処理が完了したことに応じ、リングバッファ31において、要求bに対応する記憶領域A2を解放する。
【0158】
このように、アービタ131は、物理チャネル32を先頭から順に探索して、実行可能なプロセスに対応する最初の要求を取得できる。つまり、アービタ131は、並列プロセス管理の自由度が閾値未満であり、且つ奇数番目の仮想チャネル33に対応する複数のプロセスが実行可能である場合に、それら複数のプロセスにそれぞれ対応する複数の仮想チャネル33に格納されている要求の内、本来の要求順序においてより先の要求を取得できる。これにより、並列プロセス管理の自由度が閾値未満である場合でも、本来の要求順序においてより先の要求に応じた処理が優先して実行されるので、インオーダ処理を前提とする資源(例えば、リングバッファ31)の利用効率を向上し得る。
【0159】
図15は、
図14の物理チャネル32および仮想チャネル33を実現する連結リストの例を示す。
【0160】
アービトレーション-デキュー動作において、まず、アービタ131は、物理チャネル32の連結リストのヘッドポインタ50に基づき、エントリ51、52、53、および54を先頭から順に探索して、エントリ52から、第1仮想チャネル33-1に仮想的に格納されている要求b(すなわち、実行可能なプロセスに対応する最初の要求b)を特定する(
図15中の(1))。アービタ131は、特定された要求bを物理チャネル32のエントリ52から取得して、要求実行部132へ送出する。
【0161】
そして、要求管理部141は、物理チャネル32と第1仮想チャネル33-1の双方から、要求bを削除する。
【0162】
図16は、
図15に示した物理チャネル32および仮想チャネル33の連結リストから要求bが削除された例を示す。
【0163】
要求管理部141は、物理チャネル32の連結リストから要求bのエントリ52を削除し(
図16中の(1))、第1仮想チャネル33-1の連結リストから要求bのエントリ611を削除する(
図16中の(2))。
【0164】
具体的には、要求管理部141は、要求bのエントリ52を示していた、要求aのポインタフィールド51P内のポインタを、要求bのエントリ52の次の要求cのエントリ53を示すように変更する。これにより、物理チャネル32の連結リストから、要求bのエントリ52が削除される。
【0165】
次いで、要求管理部141は、要求bに対応する1番目のプロセスに基づいて、要求bが振り分けられた第1仮想チャネル33-1を特定する。物理チャネル32の先頭から順に探索された要求bは、第1仮想チャネル33-1で先頭に格納されていることが保証される。そのため、要求管理部141は、第1仮想チャネル33-1の先頭にある要求bのエントリ611を、第1仮想チャネル33-1のヘッドポインタ610を用いて特定する。そして、要求管理部141は、第1仮想チャネル33-1のヘッドポインタ610を、特定された要求bのエントリ611の次の要求dのエントリ612を示すように変更する。これにより、第1仮想チャネル33-1の連結リストから、要求bのエントリ611が削除される。
【0166】
このように、要求管理部141は、物理チャネル32から要求bを削除して、第1仮想チャネル33-1から要求bを削除するデキュー動作を、物理チャネル32の連結リストから要求bのエントリ52を削除し、第1仮想チャネル33-1の連結リストから要求bのエントリ611を削除する操作により実現できる。
【0167】
以上説明したように、本実施形態によれば、処理の効率を向上できる。
【0168】
複数のメモリチップ41は、並列に動作可能である。SRAM12は、ホスト2から発行される要求を格納順に記憶可能な物理チャネル32と、ホスト2から発行される要求を格納順にそれぞれ記憶可能である複数の仮想チャネル33とを含む。要求管理部141は、ホスト2から発行される1つ以上の要求を、ホスト2から取得した順に物理チャネル32に格納する。要求管理部141は、1つ以上の要求のそれぞれを、複数の仮想チャネル33のいずれか1つに格納する。複数の仮想チャネル33のそれぞれは、1つ以上の要求に従って複数のメモリチップ41に対してそれぞれ実行される複数のプロセスの1つと対応する。
【0169】
複数のプロセスの並列化の自由度が所定の閾値以上である場合、アービタ131および要求実行部132は、物理チャネル32を用いてプロセスを実行する。より具体的には、アービタ131は、例えば、物理チャネル32の先頭に格納されている1つ以上の要求の内の第1要求を取得する。要求実行部132は、第1要求に応じた処理を実行する。その後、要求管理部141は、物理チャネル32に格納されている第1要求を削除し、複数の仮想チャネル33の内の第1仮想チャネルに格納されている第1要求を削除する。これにより、本来の要求順序に従う要求のインオーダ処理により、要求に対する応答のレイテンシを短縮できると共に、資源の利用効率を向上できる。
【0170】
複数のプロセスの並列化の自由度が閾値未満である場合、アービタ131および要求実行部132は、複数の仮想チャネル33を用いてプロセスを実行する。より具体的には、アービタ131は、例えば、複数の仮想チャネル33の内の第2仮想チャネル33の先頭に格納されている1つ以上の要求の内の第2要求を取得する。要求実行部132は、第2要求に応じた処理を実行する。その後、要求管理部141は、第2仮想チャネル33に格納されている第2要求を削除し、物理チャネル32に格納されている第2要求を削除する。これにより、複数のメモリチップ41全体の動作性能を向上できる。
【0171】
したがって、メモリシステム3では、並列プロセス管理の自由度に応じた物理チャネル32と仮想チャネル33の使い分けにより、メモリシステム3における処理の効率を向上できる。
【0172】
本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【0173】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0174】
1…情報処理システム、2…ホスト、3…メモリシステム、4…不揮発性メモリ、5…コントローラ、11…ホストI/F、12…SRAM、13…メモリコントローラ、14…CPU、21…CPU、22…RAM、31…リングバッファ、32…物理チャネル、33…仮想チャネル、41…メモリチップ、131…アービタ、132…要求実行部、141…要求管理部、221…サブミッションキュー。