IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特許-メモリシステム 図1
  • 特許-メモリシステム 図2
  • 特許-メモリシステム 図3
  • 特許-メモリシステム 図4
  • 特許-メモリシステム 図5
  • 特許-メモリシステム 図6
  • 特許-メモリシステム 図7
  • 特許-メモリシステム 図8
  • 特許-メモリシステム 図9
  • 特許-メモリシステム 図10
  • 特許-メモリシステム 図11
  • 特許-メモリシステム 図12
  • 特許-メモリシステム 図13
  • 特許-メモリシステム 図14
  • 特許-メモリシステム 図15
  • 特許-メモリシステム 図16
  • 特許-メモリシステム 図17
  • 特許-メモリシステム 図18
  • 特許-メモリシステム 図19
  • 特許-メモリシステム 図20
  • 特許-メモリシステム 図21
  • 特許-メモリシステム 図22
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-21
(45)【発行日】2022-01-31
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/06 20060101AFI20220124BHJP
   G06F 12/00 20060101ALI20220124BHJP
【FI】
G06F12/06 550A
G06F12/00 571A
G06F12/00 597U
【請求項の数】 20
(21)【出願番号】P 2018051233
(22)【出願日】2018-03-19
(65)【公開番号】P2019164487
(43)【公開日】2019-09-26
【審査請求日】2020-09-15
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】野田 優子
【審査官】後藤 彰
(56)【参考文献】
【文献】国際公開第2016/117190(WO,A1)
【文献】特表2012-523612(JP,A)
【文献】米国特許出願公開第2016/0004479(US,A1)
【文献】特開2006-85428(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/06
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
並列に動作可能であって、第1メモリチップと第2メモリチップを含む複数のメモリチップを含む不揮発性メモリと、
前記第1メモリチップに関連付けられた第1キューと前記第2メモリチップに関連付けられた第2キューとを含む複数のキューを含み、
前記第1メモリチップによって実行されるべき第1コマンドと、前記第2メモリチップによって実行されるべき第2コマンドとを生成し、
前記第1キューに前記第1コマンドを格納し、
前記第2キューに前記第2コマンドを格納し、
複数の第3コマンドそれぞれの前記第1メモリチップへの転送を開始してから前記第1メモリチップによる当該コマンドの実行が完了するまでの処理時間を計測することによって取得した、前記複数の第3コマンドにそれぞれ対応する複数の第1処理時間の最大値と最小値の少なくとも一つに基づいて第1コマンド処理速度を算出し
複数の第4コマンドそれぞれの前記第2メモリチップへの転送を開始してから前記第2メモリチップによる当該コマンドの実行が完了するまでの処理時間を計測することによって取得した、前記複数の第4コマンドにそれぞれ対応する複数の第2処理時間の最大値と最小値の少なくとも一つに基づいて第2コマンド処理速度を算出し、
前記第1コマンド処理速度が前記第2コマンド処理速度よりも遅いならば、前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1メモリチップへ転送した後に、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2メモリチップへ転送し、
前記第2コマンド処理速度が前記第1コマンド処理速度よりも遅いならば、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2メモリチップへ転送した後に、前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1メモリチップへ転送するように構成されるコントローラと、を具備するメモリシステム。
【請求項2】
前記コントローラは、さらに、
前記第1メモリチップによって実行されるべき第コマンドと、前記第2メモリチップによって実行されるべき第コマンドとを生成し、
前記第1キューに前記第コマンドを格納し、
前記第2キューに前記第コマンドを格納し、
前記第1キューから前記第コマンドを取得し、前記取得された第コマンドを前記第1メモリチップへ転送してから、前記第1メモリチップによる前記第コマンドの実行が完了するまでの時間に基づいて前記第1コマンド処理速度を算出し、
前記第2キューから前記第コマンドを取得し、前記取得された第コマンドを前記第2メモリチップへ転送してから、前記第2メモリチップによる前記第コマンドの実行が完了するまでの時間に基づいて前記第2コマンド処理速度を算出するように構成される請求項1記載のメモリシステム。
【請求項3】
前記第1コマンドと前記第2コマンドとはそれぞれ、プログラムコマンドとリードコマンドとイレーズコマンドのいずれかである請求項1記載のメモリシステム。
【請求項4】
前記第1コマンドは、前記第1メモリチップに第1データを書き込むためのプログラムコマンドであり、
前記第2コマンドは、前記第2メモリチップに第2データを書き込むためのプログラムコマンドであり、
前記コントローラは、さらに、
前記第1コマンド処理速度が前記第2コマンド処理速度よりも遅いならば、前記第1データを前記第1メモリチップに転送して前記第1メモリチップにプログラムを指示した後に、前記第2データを前記第2メモリチップに転送して前記第2メモリチップにプログラムを指示し、
前記第2コマンド処理速度が前記第1コマンド処理速度よりも遅いならば、前記第2データを前記第2メモリチップに転送して前記第2メモリチップにプログラムを指示した後に、前記第1データを前記第1メモリチップに転送して前記第1メモリチップにプログラムを指示するように構成される請求項1記載のメモリシステム。
【請求項5】
並列に動作可能であって、第1メモリチップと第2メモリチップを含む複数のメモリチップを含む不揮発性メモリと、
第1キューと、前記第1キューよりも後にコマンドが転送される対象となる第2キューとを含む複数のキューを含み、
前記第1メモリチップへコマンドの転送を開始してから前記第1メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第1コマンド処理速度が、前記第2メモリチップへコマンドの転送を開始してから前記第2メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第2コマンド処理速度よりも遅いならば、前記第1キューに前記第1メモリチップを関連付け、前記第2キューに前記第2メモリチップを関連付け、
前記第2コマンド処理速度が前記第1コマンド処理速度よりも遅いならば、前記第1キューに前記第2メモリチップを関連付け、前記第2キューに前記第1メモリチップを関連付け、
前記第1キューに関連付けられたメモリチップによって実行されるべき第1コマンドと、前記第2キューに関連付けられたメモリチップによって実行されるべき第2コマンドとを生成し、
前記第1キューに前記第1コマンドを格納し、
前記第2キューに前記第2コマンドを格納し、
前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1キューに関連付けられたメモリチップへ転送した後に、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2キューに関連付けられたメモリチップへ転送するように構成されるコントローラと、を具備するメモリシステム。
【請求項6】
前記コントローラは、さらに、
前記第1キューが前記第1メモリチップに関連付けられ、且つ前記第2キューが前記第2メモリチップに関連付けられているときに、前記第1メモリチップによって実行されるべき第3コマンドと、前記第2メモリチップによって実行されるべき第4コマンドとを生成し、
前記第1キューに前記第3コマンドを格納し、
前記第2キューに前記第4コマンドを格納し、
前記第1キューから前記第3コマンドを取得し、前記取得された第3コマンドを前記第1メモリチップへ転送してから、前記第1メモリチップによる前記第3コマンドの実行が完了するまでの時間に基づいて前記第1コマンド処理速度を計測し、
前記第2キューから前記第4コマンドを取得し、前記取得された第4コマンドを前記第2メモリチップへ転送してから、前記第2メモリチップによる前記第4コマンドの実行が完了するまでの時間に基づいて前記第2コマンド処理速度を計測するように構成される請求項5記載のメモリシステム。
【請求項7】
前記コントローラは、ファームウェアを実行することによって、前記第1コマンド処理速度と前記第2コマンド処理速度とを計測するように構成される請求項6記載のメモリシステム。
【請求項8】
前記コントローラは、ファームウェアを実行することによって、
前記第1コマンド処理速度が前記第2コマンド処理速度よりも遅いならば、前記第1キューに前記第1メモリチップを関連付け、前記第2キューに前記第2メモリチップを関連付け、
前記第2コマンド処理速度が前記第1コマンド処理速度よりも遅いならば、前記第1キューに前記第2メモリチップを関連付け、前記第2キューに前記第1メモリチップを関連付けるように構成される請求項5記載のメモリシステム。
【請求項9】
前記第1コマンドと前記第2コマンドとはそれぞれ、プログラムコマンドとリードコマンドとイレーズコマンドのいずれかである請求項5記載のメモリシステム。
【請求項10】
前記第1コマンドは、前記第1キューに関連付けられたメモリチップに第1データを書き込むためのプログラムコマンドであり、
前記第2コマンドは、前記第2キューに関連付けられたメモリチップに第2データを書き込むためのプログラムコマンドであり、
前記コントローラは、さらに、
前記第1キューに前記第1コマンドを格納し、
前記第2キューに前記第2コマンドを格納し、
前記第1キューから前記第1コマンドを取得し、前記第1データを前記第1キューに関連付けられたメモリチップに転送して当該メモリチップにプログラムを指示した後に、前記第2データを前記第2キューに関連付けられたメモリチップに転送して当該メモリチップにプログラムを指示するように構成される請求項5記載のメモリシステム。
【請求項11】
並列に動作可能であって、第1メモリチップと第2メモリチップを含む複数のメモリチップを含む不揮発性メモリと、
前記第1メモリチップに関連付けられた第1キューと前記第2メモリチップに関連付けられた第2キューとを含む複数のキューを含み、
前記第1メモリチップによって実行されるべき第1コマンドと、前記第2メモリチップによって実行されるべき第2コマンドとを生成し、
前記第1キューに前記第1コマンドを格納し、
前記第2キューに前記第2コマンドを格納し、
第1期間において前記第1メモリチップへ転送されたコマンドの数に基づく第1コマンド転送速度が、前記第1期間において前記第2メモリチップへ転送されたコマンドの数に基づく第2コマンド転送速度よりも遅いならば、前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1メモリチップへ転送した後に、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2メモリチップへ転送し、
前記第2コマンド転送速度が前記第1コマンド転送速度よりも遅いならば、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2メモリチップへ転送した後に、前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1メモリチップへ転送するように構成されるコントローラと、を具備するメモリシステム。
【請求項12】
前記コントローラは、さらに、
前記第1メモリチップによって実行されるべき複数の第3コマンドと、前記第2メモリチップによって実行されるべき複数の第4コマンドとを生成し、
前記第1期間において、前記第1キューに格納される前記複数の第3コマンドの内、前記第1メモリチップへ転送されたコマンドの第1の数をカウントし、
前記第1期間において、前記第2キューに格納される前記複数の第4コマンドの内、前記第2メモリチップへ転送されたコマンドの第2の数をカウントし、
前記第1の数に基づいて前記第1コマンド転送速度を決定し、
前記第2の数に基づいて前記第2コマンド転送速度を決定するように構成される請求項11記載のメモリシステム。
【請求項13】
前記コントローラは、さらに、
前記第1メモリチップによって実行されるべき複数の第3コマンドと、前記第2メモリチップによって実行されるべき複数の第4コマンドとを生成し、
前記第1期間において、前記第1キューに格納される前記複数の第3コマンドの内、前記第1メモリチップへ転送されたコマンドの処理開始位置の数と前記第1メモリチップによる実行が完了したコマンドの処理終了位置の数の少なくとも一方を含む第1の数をカウントし、
前記第1期間において、前記第2キューに格納される前記複数の第4コマンドの内、前記第2メモリチップへ転送されたコマンドの処理開始位置の数と前記第2メモリチップによる実行が完了したコマンドの処理終了位置の数の少なくとも一方を含む第2の数をカウントし、
前記第1の数に基づいて前記第1コマンド転送速度を決定し、
前記第2の数に基づいて前記第2コマンド転送速度を決定するように構成される請求項11記載のメモリシステム。
【請求項14】
前記第1コマンドと前記第2コマンドとはそれぞれ、プログラムコマンドとリードコマンドとイレーズコマンドのいずれかである請求項11記載のメモリシステム。
【請求項15】
前記第1コマンドは、前記第1メモリチップに第1データを書き込むためのプログラムコマンドであり、
前記第2コマンドは、前記第2メモリチップに第2データを書き込むためのプログラムコマンドであり、
前記コントローラは、さらに、
前記第1コマンド転送速度が前記第2コマンド転送速度よりも遅いならば、前記第1データを前記第1メモリチップに転送して前記第1メモリチップにプログラムを指示した後に、前記第2データを前記第2メモリチップに転送して前記第2メモリチップにプログラムを指示し、
前記第2コマンド転送速度が前記第1コマンド転送速度よりも遅いならば、前記第2データを前記第2メモリチップに転送して前記第2メモリチップにプログラムを指示した後に、前記第1データを前記第1メモリチップに転送して前記第1メモリチップにプログラムを指示するように構成される請求項11記載のメモリシステム。
【請求項16】
並列に動作可能であって、第1メモリチップと第2メモリチップを含む複数のメモリチップを含む不揮発性メモリと、
第1キューと、前記第1キューよりも後にコマンドが転送される対象となる第2キューとを含む複数のキューを含み、
第1期間において前記第1メモリチップへ転送されたコマンドの数に基づく第1コマンド転送速度が、前記第1期間において前記第2メモリチップへ転送されたコマンドの数に基づく第2コマンド転送速度よりも遅いならば、前記第1キューに前記第1メモリチップを関連付け、前記第2キューに前記第2メモリチップを関連付け、
前記第2コマンド転送速度が前記第1コマンド転送速度よりも遅いならば、前記第1キューに前記第2メモリチップを関連付け、前記第2キューに前記第1メモリチップを関連付け、
前記第1キューに関連付けられたメモリチップによって実行されるべき第1コマンドと、前記第2キューに関連付けられたメモリチップによって実行されるべき第2コマンドとを生成し、
前記第1キューに前記第1コマンドを格納し、
前記第2キューに前記第2コマンドを格納し、
前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1キューに関連付けられたメモリチップへ転送した後に、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2キューに関連付けられたメモリチップへ転送するように構成されるコントローラと、を具備するメモリシステム。
【請求項17】
前記コントローラは、さらに、
前記第1キューが前記第1メモリチップに関連付けられ、且つ前記第2キューが前記第2メモリチップに関連付けられているときに、前記第1メモリチップによって実行されるべき複数の第3コマンドと、前記第2メモリチップによって実行されるべき複数の第4コマンドとを生成し、
前記第1期間において、前記第1キューに格納される前記複数の第3コマンドの内、前記第1メモリチップへ転送されたコマンドの第1の数をカウントし、
前記第1期間において、前記第2キューに格納される前記複数の第4コマンドの内、前記第2メモリチップへ転送されたコマンドの第2の数をカウントし、
前記第1の数に基づいて前記第1コマンド転送速度を決定し、
前記第2の数に基づいて前記第2コマンド転送速度を決定するように構成される請求項16記載のメモリシステム。
【請求項18】
前記コントローラは、さらに、
前記第1キューが前記第1メモリチップに関連付けられ、且つ前記第2キューが前記第2メモリチップに関連付けられているときに、前記第1メモリチップに対して実行されるべき複数の第3コマンドと、前記第2メモリチップに対して実行されるべき複数の第4コマンドとを生成し、
前記第1期間において、前記第1キューに格納される前記複数の第3コマンドの内、前記第1メモリチップへ転送されたコマンドの処理開始位置の数と前記第1メモリチップによる実行が完了したコマンドの処理終了位置の数の少なくとも一方を含む第1の数をカウントし、
前記第1期間において、前記第2キューに格納される前記複数の第4コマンドの内、前記第2メモリチップへ転送されたコマンドの処理開始位置の数と前記第2メモリチップによる実行が完了したコマンドの処理終了位置の数の少なくとも一方を含む第2の数をカウントし、
前記第1の数に基づいて前記第1コマンド転送速度を決定し、
前記第2の数に基づいて前記第2コマンド転送速度を決定するように構成される請求項16記載のメモリシステム。
【請求項19】
前記第1コマンドと前記第2コマンドとはそれぞれ、プログラムコマンドとリードコマンドとイレーズコマンドのいずれかである請求項16記載のメモリシステム。
【請求項20】
前記第1コマンドは、前記第1メモリチップに第1データを書き込むためのプログラムコマンドであり、
前記第2コマンドは、前記第2メモリチップに第2データを書き込むためのプログラムコマンドであり、
前記コントローラは、さらに、
前記第1コマンド転送速度が前記第2コマンド転送速度よりも遅いならば、前記第1データを前記第1メモリチップに転送して前記第1メモリチップにプログラムを指示した後に、前記第2データを前記第2メモリチップに転送して前記第2メモリチップにプログラムを指示し、
前記第2コマンド転送速度が前記第1コマンド転送速度よりも遅いならば、前記第2データを前記第2メモリチップに転送して前記第2メモリチップにプログラムを指示した後に、前記第1データを前記第1メモリチップに転送して前記第1メモリチップにプログラムを指示するように構成される請求項16記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【0003】
このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【0004】
SSDのようなストレージには、複数のフラッシュメモリのチップが搭載されている。このようなストレージでは、各メモリチップに対するアクセスが並列に実行されるチップインタリーブ実行により、ストレージ全体のアクセス性能が向上する。
【先行技術文献】
【特許文献】
【0005】
【文献】米国特許第9639280号明細書
【文献】特許第5296041号公報
【文献】特許第5292813号公報
【文献】特開2013-200692号公報
【文献】米国特許第8868851号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明が解決しようとする課題は、複数のメモリチップを備える不揮発性メモリに対するアクセス性能を向上できるメモリシステムを提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、不揮発性メモリと、コントローラとを具備する。前記不揮発性メモリは、並列に動作可能であって、第1メモリチップと第2メモリチップを含む複数のメモリチップを含む。前記コントローラは、前記第1メモリチップに関連付けられた第1キューと前記第2メモリチップに関連付けられた第2キューとを含む複数のキューを含み、前記第1メモリチップによって実行されるべき第1コマンドと、前記第2メモリチップによって実行されるべき第2コマンドとを生成し、前記第1キューに前記第1コマンドを格納し、前記第2キューに前記第2コマンドを格納する。前記コントローラは、複数の第3コマンドそれぞれの前記第1メモリチップへの転送を開始してから前記第1メモリチップによる当該コマンドの実行が完了するまでの処理時間を計測することによって取得した、前記複数の第3コマンドにそれぞれ対応する複数の第1処理時間の最大値と最小値の少なくとも一つに基づいて第1コマンド処理速度を算出する。前記コントローラは複数の第4コマンドそれぞれの前記第2メモリチップへの転送を開始してから前記第2メモリチップによる当該コマンドの実行が完了するまでの処理時間を計測することによって取得した、前記複数の第4コマンドにそれぞれ対応する複数の第2処理時間の最大値と最小値の少なくとも一つに基づいて第2コマンド処理速度を算出する。前記コントローラは、前記第1コマンド処理速度が前記第2コマンド処理速度よりも遅いならば、前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1メモリチップへ転送した後に、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2メモリチップへ転送する。前記コントローラは、前記第2コマンド処理速度が前記第1コマンド処理速度よりも遅いならば、前記第2キューから前記第2コマンドを取得し、前記取得された第2コマンドを前記第2メモリチップへ転送した後に、前記第1キューから前記第1コマンドを取得し、前記取得された第1コマンドを前記第1メモリチップへ転送する。
【図面の簡単な説明】
【0008】
図1】第1実施形態に係るメモリシステムの構成例を示すブロック図。
図2】第1実施形態のメモリシステム内のフラッシュコントローラエンジンと複数のNAND型フラッシュメモリチップとの構成を示すブロック図。
図3図2のフラッシュコントローラエンジンによって用いられるアービトレーションルールの例と、アービトレーションルールに従って各キュー(コマンドキュー)から転送されたコマンドが複数のメモリチップで並列に実行される例とを示す図。
図4】第1実施形態のメモリシステムにおいて、メモリチップのコマンド実行速度に関係しない順序のアービトレーションルールに基づいて、複数のメモリチップでコマンドが並列に実行される例を示す図。
図5】第1実施形態のメモリシステムにおいて、コマンド処理速度が遅いメモリチップから順にコマンドが並列に実行される例を示す図。
図6】第1実施形態のメモリシステムにおいて、コマンド処理速度に関係しない順序で複数のメモリチップにコマンドを並列に実行させる例と、コマンド処理速度が遅いメモリチップから順にコマンドを並列に実行させる例との比較を示す図。
図7】第1実施形態のメモリシステムによって、単位期間内におけるコマンドの処理開始位置の数と処理終了位置の数とがカウントされる第1の例を示す図。
図8図7のコマンド処理終了位置の数が小さいキューから順に、コマンドが転送される例を示す図。
図9】第1実施形態のメモリシステムによって、単位期間内におけるコマンドの処理開始位置の数と処理終了位置の数とがカウントされる第2の例を示す図。
図10図9のコマンド処理終了位置の数が小さいキューから順に、コマンドが転送される例を示す図。
図11】第1実施形態のメモリシステムにおいて、フラッシュコントローラエンジンが複数のコマンドを受け付ける例を示す図。
図12図11の複数のコマンドがキューに格納される例を示す図。
図13図12のキューに格納されたコマンドが、アービトレーションルールに基づく順序で転送される例を示す図。
図14図12のキューに格納されたコマンドが、キューのコマンド転送速度に応じて変更されたアービトレーションルールに基づく順序で転送される例を示す図。
図15】第1実施形態のメモリシステムによって実行されるコマンド転送制御処理の手順の例を示すフローチャート。
図16】第2実施形態に係るメモリシステムの構成例を示すブロック図。
図17】第2実施形態のメモリシステム内のフラッシュコントローラエンジンと複数のNAND型フラッシュメモリチップとの構成を示すブロック図。
図18】第2実施形態のメモリシステムにおいて、キュー-チップテーブルに基づいて、フラッシュコントローラエンジンが受け付けた複数のコマンドがキューに格納される例を示す図。
図19図18のキューに格納されたコマンドが、アービトレーションルールに基づいて転送される例を示す図。
図20図18のキューに、キューのコマンド転送速度に応じて変更されたキュー-チップテーブルに基づいてコマンドが格納される例を示す図。
図21図20のキューに格納されたコマンドが、アービトレーションルールに基づいて転送される例を示す図。
図22】第2実施形態のメモリシステムによって実行されるコマンド転送制御処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0009】
以下、実施の形態について図面を参照して説明する。
【0010】
(第1実施形態)
まず、図1および図2を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
【0011】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NAND型フラッシュメモリを備えたソリッドステートドライブ(SSD)3として実現されている。
【0012】
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、SSD3にアクセスする情報処理装置(コンピューティングデバイス)である。ホスト2は、大量且つ多様なデータをSSD3に保存するサーバ(ストレージサーバ)であってもよいし、パーソナルコンピュータであってもよい。
【0013】
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【0014】
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等が使用され得る。
【0015】
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現され得る。SSD3は、揮発性メモリであるランダムアクセスメモリ、例えば、DRAM6を備えていてもよい。あるいは、SRAMのようなランダムアクセスメモリがコントローラ4に内蔵されていてもよい。DRAM6等のランダムアクセスメモリには、例えば、NAND型フラッシュメモリ5に書き込まれるデータを一時的に格納するためのバッファ領域であるライトバッファ(WB)31と、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)32のキャッシュ領域とが設けられている。LUT32は、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。なお、DRAM6は、コントローラ4の内部に設けられていてもよい。
【0016】
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。このNAND型フラッシュメモリ5は、二次元構造のNAND型フラッシュメモリであってもよいし、三次元構造のNAND型フラッシュメモリであってもよい。
【0017】
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックB0~Bm-1を含む。ブロックB0~Bm-1の各々は複数のページ(ここではページP0~Pn-1)を含む。ブロックB0~Bm-1は、最小の消去単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。ページP0~Pn-1の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0~Pn-1は、データ書き込み動作およびデータ読み出し動作の単位である。なお、ワード線をデータ書き込み動作およびデータ読み出し動作の単位としてもよい。
【0018】
コントローラ4は、Toggle DDR、Open NAND Flash Interface(ONFI)のようなインタフェースコントローラ423,433を含むフラッシュコントローラエンジン13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。フラッシュコントローラエンジン13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。
【0019】
NAND型フラッシュメモリ5は、図2に示すように、複数のNAND型フラッシュメモリチップを含む。個々のNAND型フラッシュメモリチップは独立して動作可能である。このため、NAND型フラッシュメモリチップは、並列動作可能な単位として機能する。以下では、NAND型フラッシュメモリチップをメモリチップとも称する。
【0020】
フラッシュコントローラエンジン13は、一つ以上のチャネルを介して、NAND型フラッシュメモリ5内の一つ以上のメモリチップにそれぞれ接続されている。図2においては、コマンドディスパッチャ41に複数のチャネルCH0,CH1,……が接続され、これら複数のチャネルCH0,CH1,……の各々に、複数のNAND型フラッシュメモリチップが接続されている場合が例示されている。
【0021】
より具体的には、チャネルCH0には、NAND型フラッシュメモリチップMC0~MCx-1が接続されている。また、チャネルCH1には、NAND型フラッシュメモリチップMCx~MCy-1が接続されている。図2の構成例においては、NAND型フラッシュメモリチップMC0~MCy-1を並列動作させることができる。
【0022】
次に、図1のコントローラ4の構成について説明する。
【0023】
コントローラ4は、複数のチャネルを介して複数のNAND型フラッシュメモリチップに電気的に接続される。コントローラ4は、NAND型フラッシュメモリ5(複数のNAND型フラッシュメモリチップ)を制御する。
【0024】
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、論理ブロックアドレス(論理ブロックアドレッシング)が使用される。
【0025】
論理ブロックアドレス(LBA)それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するLUT32を用いて実行される。コントローラ4は、LUT32を使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNAND型フラッシュメモリ5内の物理記憶位置を示す。LUT32は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
【0026】
一つのページへのデータ書き込みは、一つのプログラム/イレーズ(P/E)サイクル当たり1回のみ可能である。このため、コントローラ4は、あるLBAに対応する更新データを、このLBAに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、LUT32を更新してこのLBAをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。LUT32から参照されているデータ(すなわち、論理アドレスと紐付けられているデータ)は有効データとも称する。また、どの論理アドレスとも紐付けられていないデータは無効データとも称する。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性がないデータである。
【0027】
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション(GC)等が含まれる。ウェアレベリングは、物理ブロックそれぞれの消耗を均一化するための動作である。ガベージコレクションは、データを書き込むことが可能なフリーブロック(フリー論理ブロック)の個数を増やすため、有効データと無効データとが混在するいくつかの対象ブロック(対象論理ブロック)内の有効データを別のブロック(例えばフリー論理ブロック)に移動する。
【0028】
そして、コントローラ4は、LUT32を更新して、移動された有効データのLBAそれぞれを移動先の物理アドレスにマッピングする。有効データが別のブロックに移動されることによって無効データのみになったブロック(論理ブロック)はフリーブロック(フリー論理ブロック)として解放される。これによって、この論理ブロックはその消去後に再利用することが可能となる。
【0029】
コントローラ4は、ホストインタフェース11、CPU12、フラッシュコントローラエンジン13、DRAMインタフェース14等を含んでもよい。これらホストインタフェース11、CPU12、フラッシュコントローラエンジン13、DRAMインタフェース14は、バス10を介して相互接続されていてもよい。
【0030】
ホストインタフェース11は、ホスト2から様々なコマンド、例えば、I/Oコマンド、各種制御コマンド、等を受信する回路として機能する。I/Oコマンドには、ライトコマンド、リードコマンド、アンマップコマンド(トリムコマンド)、フォーマットコマンド、フラッシュコマンド等が含まれ得る。フォーマットコマンドは、メモリシステム(SSD3)全体をアンマップするためのコマンドである。フラッシュコマンドは、メモリシステム内にキャッシュされている(バッファされている)ダーティデータ(ユーザデータおよび関連する管理データ)をNAND型フラッシュメモリ5に書き込むことで全てクリーンな状態にするためのコマンドである。
【0031】
DRAMインタフェース14は、DRAM6のアクセスを制御するように構成されたDRAMコントローラとして機能する。DRAM6の記憶領域は、上述したように、WB31、LUT32等を格納するために利用される。DRAM6の記憶領域は、GCに用いられるGCバッファをさらに格納するために利用されてもよい。
【0032】
CPU12は、ホストインタフェース11、フラッシュコントローラエンジン13、およびDRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、図示しないROM等に格納されているファームウェア(制御プログラム)20を実行することによって様々な処理を行う。このCPU12は、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェア20によって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行されてもよい。
【0033】
CPU12は、ファームウェア20を実行することによって、コマンド制御部21として機能することができる。
【0034】
コマンド制御部21は、ホスト2からコマンドを受信し、そのコマンドに応じてコントローラ4内の各部を制御する。ホスト2から受信されるコマンドは、上述したように、ライトコマンド、リードコマンド、等である。コマンド制御部21は、受信されたコマンドがNAND型フラッシュメモリ5に対するアクセスを要求するコマンドである場合、そのアクセスの内容に応じたコマンドをフラッシュコントローラエンジン13に送出する。また、コマンド制御部21は、ガベージコレクション動作のようなSSD3内の動作により、NAND型フラッシュメモリ5に対するアクセスが要求される場合に、そのアクセスの内容に応じたコマンドをフラッシュコントローラエンジン13に送出することもできる。フラッシュコントローラエンジン13に送出されるコマンドは、例えば、プログラムコマンド、リードコマンド、イレーズコマンド、等である。
【0035】
より具体的には、例えば、ホスト2からライトコマンドを受信した場合、コマンド制御部21は、そのライトコマンドで指定されたLBA範囲(例えば、開始LBAと、終了LBAまたはサイズ)に対応する物理アドレス(物理アドレス範囲)を決定し、またそのライトコマンドに応じて受信されたユーザデータをDRAM6上のライトバッファ31に蓄積する。そして、コマンド制御部21は、指定されたLBA範囲に対応する物理アドレスに、受信されたユーザデータを書き込むためのプログラムコマンドをフラッシュコントローラエンジン13に送出する。ユーザデータの書き込みが完了した場合、コマンド制御部21は、ライトコマンドで指定されたLBA範囲と、ユーザデータが書き込まれた物理アドレスとの対応を示すように、LUT32を更新する。
【0036】
また、ホスト2からリードコマンドを受信した場合、コマンド制御部21は、LUT32を用いて、そのリードコマンドで指定されたLBA範囲(例えば、開始LBAと、終了LBAまたはサイズ)を物理アドレスに変換する。そして、コマンド制御部21は、この変換により得られた物理アドレスに格納されたデータを読み出すためのリードコマンドをフラッシュコントローラエンジン13に送出する。データの読み出しが完了したならば、コマンド制御部21は、読み出されたデータをホスト2に送信する。
【0037】
さらに、例えば、有効データを格納していないフリーブロック(フリー論理ブロック)の一つが選択され、書き込み先ブロックとして用いられる場合に、コマンド制御部21は、選択されたフリーブロックにイレーズ処理を施すために、当該フリーブロックに含まれる各物理ブロック内の全てのメモリセルを消去状態にするためのイレーズコマンドをフラッシュコントローラエンジン13に送出する。イレーズコマンドでは、消去動作が実行されるべき物理ブロックのアドレスが指定される。フリーブロックは、イレーズ処理を経ることで、書き込み先ブロックとして割り当てられる。
【0038】
図2は、フラッシュコントローラエンジン13の構成を示す。フラッシュコントローラエンジン13は、コマンドディスパッチャ41と、一つ以上のチャネルCH0,CH1とを備える。各チャネルCH0,CH1は、NAND型フラッシュメモリ5内の複数のメモリチップに接続される。
【0039】
図2に示す例では、チャネルCH0は、複数のメモリチップMC0,MC1,MC2,……,MCx-1に接続され、チャネルCH1は、複数のメモリチップMCx,MCx+1,……,MCy-1に接続されている。フラッシュコントローラエンジン13は、チャネルCH0,CH1毎のチップインタリーブ実行により、各チャネルCH0,CH1に接続された複数のメモリチップを並列に動作させることができる。
【0040】
チャネルCH0は、複数のキュー(コマンドキュー)Q0,Q1,Q2,……,Qx-1、アービタ422、インタフェースコントローラ(I/Fコントローラ)423、およびキューモニタ部424を含む。また、チャネルCH1は、複数のキューQx,Qx+1,Qx+2,……,Qy-1、アービタ432、I/Fコントローラ433、およびキューモニタ部434を含む。
【0041】
複数のキューQ0,Q1,Q2,……,Qx-1は、チャネルCH0のI/Fコントローラ423に接続される複数のメモリチップMC0,MC1,MC2,……,MCx-1にそれぞれ対応する。すなわち、キューQ0とメモリチップMC0とが相互に関連付けられ、キューQ1とメモリチップMC1とが相互に関連付けられ、キューQ2とメモリチップMC2とが相互に関連付けられ、またキューQx-1とメモリチップMCx-1とが相互に関連付けられる。
【0042】
同様に、複数のキューQx,Qx+1,Qx+2,……,Qy-1は、チャネルCH1のI/Fコントローラ433に接続される複数のメモリチップMCx,MCx+1,……,MCy-1にそれぞれ対応する。すなわち、キューQxとメモリチップMCxとが相互に関連付けられ、キューQx+1とメモリチップMCx+1とが相互に関連付けられ、キューQx+2とメモリチップMCx+2とが相互に関連付けられ、またキューQy-1とメモリチップMCy-1とが相互に関連付けられる。
【0043】
各キューは、対応するメモリチップに転送(送出)されるコマンドシーケンスを格納することができる。各チャネルCH0,CH1では、複数のメモリチップにそれぞれ対応する複数のキューを設けることにより、チップインタリーブ実行を効率化させることができる。
【0044】
なお、一つのキューに対して、複数のメモリチップが関連付けられてもよい。その場合、一つのキューは、対応する複数のメモリチップに対して転送されるコマンドシーケンスを格納する。
【0045】
コマンドディスパッチャ41は、フラッシュコントローラエンジン13に対して送出されたコマンドを受け付け、そのコマンドに応じてアクセスされるメモリチップに対応するキューに格納する。より具体的には、コマンドディスパッチャ41は、受け付けたコマンドで指定された物理アドレスに基づいて、その物理アドレスによって示される物理記憶位置(領域)を含むメモリチップを特定する。そして、コマンドディスパッチャ41は、特定されたメモリチップに対応するいずれかのキューに、そのコマンドを格納する。
【0046】
例えば、メモリチップMC0内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMC0に対応するキューQ0に格納する。メモリチップMC1内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMC1に対応するキューQ1に格納する。メモリチップMC2内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMC2に対応するキューQ2に格納する。また、メモリチップMCx-1内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMCx-1に対応するキューQx-1に格納する。
【0047】
同様に、メモリチップMCx内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMCxに対応するキューQxに格納する。メモリチップMCx+1内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMCx+1に対応するキューQx+1に格納する。メモリチップMCx+2内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMCx+2に対応するキューQx+2に格納する。また、メモリチップMCy-1内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMCy-1に対応するキューQy-1に格納する。
【0048】
これにより、各チャネルCH0,CH1に設けられる複数のキューの各々には、コマンドが格納(蓄積)される。
【0049】
アービタ422,432は、各チャネルCH0,CH1における、コマンドが転送される対象(転送元)となるキューの順序を示すアービトレーションルール422A,432Aを管理する。アービタ422,432は、アービトレーションルール422A,432Aとして規定されたキューの順序に則り、各キューに格納されたコマンドの一つを、そのキューに対応するメモリチップに、I/Fコントローラ423,433を介して順次転送する。なお、アービトレーションルール422A,432Aは、例えば、各チャネルCH0,CH1内に設けられる特定の記憶領域に格納され、また、SSD3の電源オン時にNAND型フラッシュメモリ5からその特定の記憶領域にロードされてもよい。
【0050】
I/Fコントローラ423,433は、転送されたコマンドが、当該コマンドで指定された物理アドレスを含むいずれかのメモリチップに送出されるように制御する。転送されたコマンドは、格納されていたキューから削除される。また、I/Fコントローラ423,433は、接続されているメモリチップのレディ/ビジー信号(RY/BY)を監視することにより、メモリチップによるコマンドの実行の完了を検出し、またステータスリードコマンドをメモリチップに送出することにより、コマンドに応じた動作の成功/失敗等を検出することもできる。
【0051】
転送されたコマンドを受信したメモリチップは、そのコマンドを実行し、当該コマンドに応じた動作を行う。より具体的には、例えば、プログラムコマンドを受信したメモリチップは、そのプログラムコマンドに応じて受信されたユーザデータを、指定された物理アドレス(物理記憶位置)に書き込むデータ書き込み動作を行う。リードコマンドを受信したメモリチップは、指定された物理アドレスからデータを読み出すデータ読み出し動作を行う。また、イレーズコマンドを受信したメモリチップは、指定された物理アドレスのデータを消去する消去動作を行う。
【0052】
以上により、あるチャネルに設けられた複数のキューにそれぞれ対応する複数のメモリチップにおいて、コマンドが並列に実行される。
【0053】
キューモニタ部424,434は、例えば、キューから対応するメモリチップにコマンドの転送を開始してから、そのメモリチップによる当該コマンドの実行が完了するまでの時間に基づくコマンド処理速度を、相互に関連付けられたキューとメモリチップの組毎に、計測する。キューモニタ部424,434は、各キューについて、チップインタリーブ実行中のある単位期間内に、対応するメモリチップにコマンドの転送を開始してから、そのメモリチップによる当該コマンドの実行が完了するまでのコマンド処理時間をコマンド毎に計測する。そして、その単位期間内に計測された幾つかのコマンド処理時間の平均値、最大値、最小値等に基づいて、キューとメモリチップの組毎のコマンド処理速度を算出する。なお、以下では、キューとメモリチップの組のコマンド処理速度を、キューのコマンド処理速度、あるいはメモリチップのコマンド処理速度とも称する。
【0054】
キューモニタ部424,434は、キューから対応するメモリチップにコマンドが転送される時点を示す処理開始位置と、メモリチップによる当該コマンドの実行が完了した時点を示す処理終了位置とを検出することができる。コマンド処理時間は、処理開始位置から処理終了位置までの経過時間に相当する。キューモニタ部424,434は、例えば、各キューや、キューに対応するメモリチップの状態を示すレジスタを読み取ることにより、コマンドの処理開始位置や処理終了位置を検出する。
【0055】
あるいは、キューモニタ部424,434は、キューから対応するメモリチップに転送されるコマンドの転送速度(コマンド転送速度)を、キュー毎に計測してもよい。キューモニタ部424,434は、キュー毎に、例えば、チップインタリーブ実行中のある単位期間内に、そのキューから対応するメモリチップに転送されたコマンドの数をカウントする。そして、キューモニタ部424,434は、カウントされたコマンドの数を用いてコマンド転送速度を算出(決定)する。
【0056】
より具体的には、キューモニタ部424,434は、単位期間において、あるキューから対応するメモリチップに対して転送されたコマンドの処理開始位置の数と処理終了位置の数の少なくとも一方をカウントする。そして、キューモニタ部424,434は、カウントされたコマンドの処理開始位置の数と処理終了位置の数の少なくとも一方を用いて、コマンド転送速度を決定(算出)する。
【0057】
なお、一つのキューに対して複数のメモリチップが関連付けられる場合にも、キューモニタ部424,434は、同様にして、関連付けられたキューとメモリチップの組毎のコマンド処理速度またはコマンド転送速度を算出することができる。
【0058】
アービタ422,432は、キューモニタ部424,434によって取得された各キューのコマンド処理速度またはコマンド転送速度に基づいて、コマンドが転送される対象となるキューの順序が、コマンド処理速度またはコマンド転送速度が遅い順に対応するように、アービトレーションルール422A,432Aを変更することもできる。
【0059】
例えば、チャネルCH0に接続される並列に動作可能な複数のメモリチップに、第1メモリチップと第2メモリチップとが含まれる場合を想定する。コマンド制御部21は、ホスト2から受信されるコマンド等に応じて、第1メモリチップによって実行されるべき第1コマンドと、第2メモリチップによって実行されるべき第2コマンドとを生成し、フラッシュコントローラエンジン13に送出する。
【0060】
コマンドディスパッチャ41は、第1コマンドを、第1メモリチップに関連付けられた第1キューに格納し、第2コマンドを、第2メモリチップに関連付けられた第2キューに格納する。そして、アービタ422は、アービトレーションルール422Aに従うことによって、以下のように動作する。
【0061】
アービタ422は、(1)第1メモリチップへコマンドの転送を開始してから第1メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第1コマンド処理速度が、第2メモリチップへコマンドの転送を開始してから第2メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第2コマンド処理速度よりも遅いならば、第1キューから第1コマンドを取得し、取得された第1コマンドを第1メモリチップへ転送した後に、第2キューから第2コマンドを取得し、取得された第2コマンドを第2メモリチップへ転送する。また、アービタ422は、(2)第2コマンド処理速度が第1コマンド処理速度よりも遅いならば、第2キューから第2コマンドを取得し、取得された第2コマンドを第2メモリチップへ転送した後に、第1キューから第1コマンドを取得し、取得された第1コマンドを第1メモリチップへ転送する。
【0062】
これら第1処理速度と第2処理速度とは、第1メモリチップによって実行されるべき第3コマンドと第2メモリチップによって実行されるべき第4コマンドとが処理される際に計測され得る。より具体的には、コマンドディスパッチャ41は、第3コマンドを第1キューに格納し、第4コマンドを第2キューに格納する。キューモニタ部424は、第1キューから第3コマンドを取得し、取得された第3コマンドを第1メモリチップへ転送してから、第1メモリチップによる第3コマンドの実行が完了するまでの時間に基づいて第1コマンド処理速度を計測する。また、キューモニタ部424は、第2キューから第4コマンドを取得し、取得された第4コマンドを第2メモリチップへ転送してから、第2メモリチップによる第4コマンドの実行が完了するまでの時間に基づいて第2コマンド処理速度を計測する。
【0063】
あるいは、アービタ422は以下のように動作してもよい。
【0064】
アービタ422は、(1)第1期間において第1メモリチップへ転送されたコマンドの数に基づく第1コマンド転送速度が、その第1期間において第2メモリチップへ転送されたコマンドの数に基づく第2コマンド転送速度よりも遅いならば、第1キューから第1コマンドを取得し、取得された第1コマンドを第1メモリチップへ転送した後に、第2キューから第2コマンドを取得し、取得された第2コマンドを第2メモリチップへ転送する。また、アービタ422は、(2)第2コマンド転送速度が第1コマンド転送速度よりも遅いならば、第2キューから第2コマンドを取得し、取得された第2コマンドを第2メモリチップへ転送した後に、第1キューから第1コマンドを取得し、取得された第1コマンドを第1メモリチップへ転送する。
【0065】
これら第1転送速度と第2転送速度とは、第1メモリチップによって実行されるべき複数の第3コマンドと第2メモリチップによって実行されるべき複数の第4コマンドとが処理される際に計測され得る。より具体的には、キューモニタ部424は、第1期間において、第1キューに格納される複数の第3コマンドの内、第1メモリチップへ転送されたコマンドの第1の数をカウントし、第2キューに格納される複数の第4コマンドの内、第2メモリチップへ転送されたコマンドの第2の数をカウントする。キューモニタ部424は、カウントされた第1の数に基づいて第1コマンド転送速度を決定し、カウントされた第2の数に基づいて第2コマンド転送速度を決定する。
【0066】
なお、第1コマンドが第1データを第1メモリチップに書き込むためのプログラムコマンドであり、第2コマンドが第2データを第2メモリチップに書き込むためのプログラムコマンドである場合、アービタ422は以下のように動作する。すなわち、アービタ422は、(1)第1コマンド処理速度が第2コマンド処理速度よりも遅いならば、あるいは第1コマンド転送速度が第2コマンド転送速度よりも遅いならば、第1データを第1メモリチップに転送して第1メモリチップにプログラムを指示した後に、第2データを第2メモリチップに転送して第2メモリチップにプログラムを指示する。また、アービタ422は、(2)第2コマンド処理速度が第1コマンド処理速度よりも遅いならば、あるいは第2コマンド転送速度が第1コマンド転送速度よりも遅いならば、第2データを第2メモリチップに転送して第2メモリチップにプログラムを指示した後に、第1データを第1メモリチップに転送して第1メモリチップにプログラムを指示する。
【0067】
以下では、説明を分かりやすくするために、図3に示すように、チャネルCH0に4個のキューQ0~Q3が設けられる場合について主に例示する。これら4個のキューQ0~Q3は、NAND型フラッシュメモリ5に設けられる4個のメモリチップMC0~MC3にそれぞれ対応する。図3は、アービトレーションルール422Aの例と、当該アービトレーションルール422Aに規定されたキューの順序に従って転送されたコマンドが、メモリチップMC0~MC3で並列に実行される例とを示す。
【0068】
図3(A)は、アービトレーションルール422Aで規定された、コマンドが転送される対象となるキューの順序の例を示す。図3(A)では、キューQ0、キューQ1、キューQ2、キューQ3の順序であるラウンドロビンのコマンドアービトレーションルールが規定されている。
【0069】
また、図3(B)は、アービトレーションルール422Aに示されるキューの順序に従って、各々のキューに格納されたコマンドの一つが、対応するメモリチップに対して転送されることを示す。各キューから転送されるコマンドは、例えば、そのキューに格納されている一つ以上のコマンド(コマンドシーケンス)の内、当該キューに格納されたタイミングが最も早いコマンドである。
【0070】
より具体的には、図3(B)に示すように、アービトレーションルール422Aに従って、最初のキューQ0に格納されたコマンド(例えば、プログラムコマンド)が、対応するメモリチップMC0に対して転送される場合、そのコマンドに応じたデータがメモリチップMC0に転送されるデータ転送期間T00の後、メモリチップMC0は当該コマンドに応じた動作(例えば、データ書き込み動作)の期間T01、ビジー状態(チップビジー)となる。つまり、キューQ0からメモリチップMC0に転送された一つのコマンドの処理には、データ転送期間T00と、当該コマンドに応じた動作期間T01とを含む時間(コマンド処理時間)を要する。動作期間は、メモリチップによるコマンド実行時間であり、チップビジー期間とも称する。
【0071】
次いで、メモリチップMC0へのデータ転送期間T00が完了したことに応じて、キューQ0に後続するキューQ1に格納されたコマンドが、対応するメモリチップMC1に転送される。この場合、そのコマンドに応じたデータがメモリチップMC1に転送されるデータ転送期間T10の後、メモリチップMC1は当該コマンドに応じた動作の期間T11、ビジー状態となる。つまり、キューQ1からメモリチップMC1に転送された一つのコマンドの処理には、データ転送期間T10と、当該コマンドに応じた動作期間T11とを含む時間を要する。
【0072】
そして、メモリチップMC1へのデータ転送期間T10が完了したことに応じて、キューQ1に後続するキューQ2に格納されたコマンドが、対応するメモリチップMC2に転送される。この場合、そのコマンドに応じたデータがメモリチップMC2に転送されるデータ転送期間T20の後、メモリチップMC2は当該コマンドに応じた動作の期間T21、ビジー状態となる。つまり、キューQ2からメモリチップMC2に転送された一つのコマンドの処理には、データ転送期間T20と、当該コマンドに応じた動作期間T21とを含む時間を要する。
【0073】
さらに、メモリチップMC2へのデータ転送期間T20が完了したことに応じて、キューQ2に後続するキューQ3に格納されたコマンドが、対応するメモリチップMC3に転送される。この場合、そのコマンドに応じたデータがメモリチップMC3に転送されるデータ転送期間T30の後、メモリチップMC3は当該コマンドに応じた動作の期間T31、ビジー状態となる。つまり、キューQ3からメモリチップMC3に転送された一つのコマンドの処理には、データ転送期間T30と、当該コマンドに応じた動作期間T31とを含む時間を要する。
【0074】
上述した例では、アービタ422は、転送順序が連続するキュー間で、コマンドの処理開始(転送開始)のタイミングをデータ転送期間だけずらして、複数のキューから各々に対応する複数のメモリチップに転送されるコマンドを並列に処理(チップインタリーブ実行)している。つまり、あるキューから転送されるコマンドのデータ転送期間と、後続するキューから転送されるコマンドのデータ転送期間とが連続し、これら二つのデータ転送期間の間に遅延はない。
【0075】
これに対して、図4に示すように、ある種類のコマンド(例えば、プログラムコマンド)の実行に応じた動作期間T01,T11,T21,T31が、メモリチップMC0~MC3毎に異なり、ばらつきがある場合を想定する。より具体的には、複数のメモリチップMC0~MC3のコマンド実行速度(例えば、プログラム速度)が、メモリチップMC3、メモリチップMC1、メモリチップMC0、メモリチップMC2の順に遅い場合(MC3<MC1<MC0<MC2)を想定する。
【0076】
図4に示す例では、キューQ0からメモリチップMC0に2番目のコマンドが転送されたときに、このコマンドに応じたデータがメモリチップMC0に転送されるデータ転送期間T02が完了したにも関わらず、後続するキューQ1からメモリチップMC1に2番目のコマンドを転送することができていない。これは、データ転送期間T02が完了したときに、キューQ1に対応するメモリチップMC1による1番目のコマンドの実行が完了しておらず、メモリチップMC1がビジー状態(T11)であるためである。
【0077】
そのため、後続するキューQ1からメモリチップMC1への2番目のコマンドは、メモリチップMC1による1番目のコマンドの実行が完了したこと(すなわち、1番目のコマンドに応じた動作期間T11が完了したこと)に応じて転送が開始されることになる。したがって、メモリチップMC0に対するデータ転送期間T02が完了してからメモリチップMC1に対するデータ転送期間T12が開始されるまでに、遅延時間L1が生じることになる。
【0078】
同様に、キューQ2からメモリチップMC2に2番目のコマンドが転送されたときに、このコマンドに応じたデータがメモリチップMC2に転送されるデータ転送期間T22が完了したにも関わらず、後続するキューQ3からメモリチップMC3に2番目のコマンドを転送することができていない。これは、データ転送期間T22が完了したときに、キューQ3に対応するメモリチップMC3による1番目のコマンドの実行が完了しておらず、メモリチップMC3がビジー状態(T31)であるためである。
【0079】
そのため、後続するキューQ3からメモリチップMC3への2番目のコマンドは、メモリチップMC3による1番目のコマンドの実行が完了したこと(すなわち、1番目のコマンドに応じた動作期間T31が完了したこと)に応じて転送が開始されることになる。したがって、メモリチップMC2に対するデータ転送期間T22が完了してからメモリチップMC3に対するデータ転送期間T32が開始されるまでに、遅延時間L2が生じることになる。
【0080】
このように、対応するキューQ1,Q3が新たなコマンドを転送可能な順番になっても、コマンド実行速度が遅いメモリチップMC1,MC3がビジー状態であるので、キューQ1,Q3からメモリチップMC1,MC3に新たなコマンドを転送することができない。これにより生じる遅延時間L1,L2により、チャネルCH0に接続された複数のメモリチップMC0~MC3全体のアクセス性能が低下する。すなわち、コマンド実行速度が遅いメモリチップMC1,MC3は、チャネルCH0に接続された複数のメモリチップMC0~MC3全体でのアクセス性能を低下させるボトルネックとなる。
【0081】
そのため、本実施形態では、コマンドが転送される対象となるキューの順序(アービトレーションルール)を、キュー毎のコマンド処理速度またはコマンド転送速度に基づいて動的に変更する。上述したように、コマンド処理速度は、キューから対応するメモリチップにコマンドの転送が開始されてから、メモリチップによる当該コマンドの実行が完了するまでの時間に基づく速度である。また、コマンド転送速度は、単位期間内にキューからメモリチップに転送されたコマンドの数に基づく速度である。
【0082】
図5に示す例では、複数のメモリチップのコマンド実行速度(例えば、プログラム速度)が、メモリチップMC3、メモリチップMC1、メモリチップMC0、メモリチップMC2の順に遅い場合(MC3<MC1<MC0<MC2)に、キューQ3、キューQ1、キューQ0、キューQ2の順序であるラウンドロビンのコマンドアービトレーションルールが規定されている。コマンドが転送される対象となるキューの順序は、対応するメモリチップのコマンド実行速度が遅い順序に対応している。したがって、データ転送期間が一定であるとするならば、コマンドが転送される対象となるキューの順序は、コマンド処理速度が遅い順序に対応している。
【0083】
この場合、キューQ3から対応するメモリチップMC3に2番目のコマンド(2番目のコマンドに応じたデータ)が転送されるデータ転送期間T32が完了したことに応じて、後続するキューQ1からメモリチップMC1に2番目のコマンドを転送することができる。つまり、データ転送期間T32が完了したときに、後続するキューQ1に対応するメモリチップMC1による1番目のコマンドの実行が完了しているので、遅延時間を生じることなく、後続するキューQ1からメモリチップMC1に2番目のコマンドを転送することができる。
【0084】
順序が連続する他のキュー間でも同様のことが云える。
【0085】
したがって、コマンドが転送される対象となるキューの順序を、対応するメモリチップのコマンド実行速度が遅い順序に対応させることにより、図4に示した例の場合よりも、チャネルCH0に接続された複数のメモリチップMC0~MC3全体でのアクセス性能を向上させることができる。
【0086】
図6は、コマンド処理速度(コマンド実行速度)に基づいて、コマンドが転送される対象となるキューの順序を変更した場合に、チャネルCH0に接続された複数のメモリチップMC0~MC3全体でのアクセス性能が向上する具体的な例を示す。ここでは、キューQ0~Q3からメモリチップMC0~MC3にプログラムコマンドが転送される場合を例示する。
【0087】
また、コマンドに応じたデータがメモリチップMC0~MC3に転送されるデータ転送期間が一定の80マイクロ秒(μs)であり、メモリチップMC0によるプログラム時間が280μsであり、メモリチップMC1によるプログラム時間が320μsであり、メモリチップMC2によるプログラム時間が240μsであり、メモリチップMC3によるプログラム時間が360μsであることを想定する。なお、プログラム時間は、転送されたプログラムコマンドを実行するメモリチップの動作期間である。つまり、プログラム時間は、プログラムコマンドが転送されたことに応じて、対応するメモリチップが動作することによりビジー状態に維持される期間である。したがって、メモリチップMC0~MC3のプログラム速度(コマンド実行速度)は、メモリチップMC3、メモリチップMC1、メモリチップMC0、メモリチップMC2の順に遅い。また、コマンド処理速度も、メモリチップMC3(キューQ3)、メモリチップMC1(キューQ1)、メモリチップMC0(キューQ0)、メモリチップMC2(キューQ2)の順に遅い。
【0088】
まず、(a)コマンド処理速度に関係なく、キューQ0、キューQ1、キューQ2、キューQ3の順に、対応するメモリチップMC0,MC1,MC2,MC3にそれぞれプログラムコマンドが転送される場合について説明する。この場合、図4に示した例と同様に、対応するキューQ1,Q3から新たなコマンドを転送可能な順番になっても、プログラム速度が遅いメモリチップMC1,MC3がビジー状態であるので、キューQ1,Q3からメモリチップMC1,MC3に新たなコマンドを転送することができない状況が生じる。
【0089】
図6に示す例では(a)の場合に、このような状況が、データ転送期間T02が終了してからデータ転送期間T12が開始されるまで、データ転送期間T22が終了してからデータ転送期間T32が開始されるまで、データ転送期間T04が終了してからデータ転送期間T14が開始されるまで、およびデータ転送期間T24が終了してからデータ転送期間T34が開始されるまでにおいて生じている。そして、メモリチップMC0~MC3にそれぞれ3個のコマンドが転送される場合に要する全体の処理時間は1560μsになる。
【0090】
次いで、(b)コマンドが転送される対象となるキューの順序を、コマンド処理速度が遅い順序に対応させる場合、すなわち、キューQ3、キューQ1、キューQ0、キューQ2の順に、対応するメモリチップMC3,MC1,MC0,MC2にそれぞれプログラムコマンドが転送される場合について説明する。この場合には、キューQ0~Q3が新たなコマンドを転送可能な順番になったときに、対応するメモリチップMC0~MC3がビジー状態であるという状況を無くすか、あるいは低減することができる。
【0091】
図6に示す例では(b)の場合において、キューQ1,Q0,Q2が新たなコマンドを転送可能な順番になったときに、各々に対応するメモリチップMC1,MC0,MC2がビジー状態であることがないので、キューQ1,Q0,Q2から対応するメモリチップMC1,MC0,MC2に新たなコマンドを遅延なく転送することができる。これにより、メモリチップMC0~MC3にそれぞれ3個のコマンドが転送される場合に要する全体の処理時間は1440μsになる。
【0092】
したがって、図6に示すように、コマンドが転送される対象となるキューの順序を、コマンド処理速度が遅い順序に対応させるように変更した場合、キューQ0~Q3からメモリチップMC0~MC3にコマンドを転送して実行する全体の処理時間を120μsだけ短縮することができる。
【0093】
なお、上述したコマンド処理速度の代わりに、単位期間内に各キューから対応するメモリチップに転送されたコマンドの数に基づくコマンド転送速度が用いられてもよい。各キューQ0~Q3のコマンド転送速度は、例えば、キューQ0~Q3毎にカウントされる、単位期間内に転送されたコマンドの数に基づいて決定され得る。また、各キューQ0~Q3のコマンド転送速度は、キューQ0~Q3毎にカウントされる、単位期間内にコマンドの転送が開始された位置(処理開始位置)の数と、メモリチップによるコマンドの実行が終了した位置(処理終了位置)の数の少なくとも一方に基づいて決定されてもよい。
【0094】
図7は、キューQ0~Q3毎に、単位期間内のコマンドの処理開始位置と処理終了位置とがカウントされる例を示す。ここでは、コマンドに応じたデータがメモリチップMC0~MC3に転送されるデータ転送期間が一定の80μsであり、メモリチップMC0によるプログラム時間(チップビジー期間)が320μsであり、メモリチップMC1によるプログラム時間が280μsであり、メモリチップMC2によるプログラム時間が240μsであり、メモリチップMC3によるプログラム時間が360μsであることを想定する。図7に示す例では、図6を参照して上述した(a)の場合と同様に、コマンド実行速度が遅いメモリチップMC3がビジー状態であるので、対応するキューQ3が新たなコマンドを転送可能な順番になっても、キューQ3からメモリチップMC3に新たなコマンドを転送することができない状況が生じている。
【0095】
キューモニタ部424は、単位期間内において、例えば、キューからメモリチップにデータ転送が開始された時点(例えば、データ転送期間T02の先頭位置)をコマンドの処理開始位置としてカウントし、メモリチップによる当該コマンドの実行が完了した時点(例えば、チップビジー期間T03の終端位置)を処理終了位置としてカウントする。メモリチップによる当該コマンドの実行が完了した時点は、例えば、メモリチップから実行完了の応答があった時点や、メモリチップがビジー状態からレディ状態に戻った時点である。
【0096】
キューモニタ部424は、例えば、キューQ0について、単位期間に含まれるデータ転送期間T02およびT04の先頭位置を二つのコマンド処理開始位置としてカウントし、プログラム時間T01およびT03の終端位置を二つのコマンド処理終了位置としてカウントする。図7では、キューQ0の単位期間内における処理開始位置の数と処理終了位置の数とが(2,2)と示されている。
【0097】
同様にして、キューQ1とキューQ2の各々について、二つのコマンド処理開始位置と二つのコマンド処理終了位置(すなわち、(2,2))がカウントされる。また、キューQ3について、単位期間に含まれるデータ転送期間T30およびT32の先頭位置が二つのコマンド処理開始位置としてカウントされ、プログラム時間T31の終端位置が一つのコマンド処理終了位置としてカウントされる。図7では、キューQ3の単位期間内における処理開始位置の数と処理終了位置の数とが(2,1)と示されている。
【0098】
アービタ422は、カウントされたキュー毎のコマンド処理開始位置の数とコマンド処理終了位置の数の少なくとも一方を用いて、アービトレーションルール422Aの変更が必要であるか否かを判定し、必要であればアービトレーションルール422Aを変更する。
【0099】
より具体的には、アービタ422は、カウントされたコマンド処理開始位置の数が小さい順、カウントされたコマンド処理終了位置の数が小さい順、またはカウントされたコマンド処理開始位置とコマンド処理終了位置との和が小さい順に、コマンドが転送される対象となるキューの順序を入れ替える。図7に示す例では、アービタ422は、カウントされたコマンド処理終了位置の数(=1)が最も小さいキューQ3が、コマンドが転送される対象となる順序の先頭となるようにアービトレーションルール422Aを変更する。変更後のアービトレーションルール422Aは、例えば、キューQ3、キューQ0、キューQ1、キューQ2の順に、対応するメモリチップMC3,MC0,MC1,MC2にそれぞれコマンドが転送されることを示す。このキューQ3、キューQ0、キューQ1、キューQ2の順は、コマンド処理時間が長い順、すなわち、コマンド処理速度が遅い順に対応している。
【0100】
図8は、この変更後のアービトレーションルール422Aに基づいてコマンドが転送される例を示す。図8に示す例では、キューQ0,Q1,Q2が新たなコマンドを転送可能な順番になったときに、各々に対応するメモリチップMC0,MC1,MC2がビジー状態であることがないので、キューQ0,Q1,Q2から対応するメモリチップMC0,MC1,MC2に新たなコマンドを即座に転送することができる。つまり、あるキューに対応するメモリチップに対するデータ転送期間が完了してから、次のキューに対応するメモリチップに対するデータ転送期間が開始されるまでに、遅延時間が生じない。このような構成において、メモリチップMC0~MC3にそれぞれ3個のコマンドが転送される場合に要する全体の処理時間は1440μsになる。
【0101】
したがって、図7に示した例と図8に示した例とを比較すると、コマンドが転送される対象となるキューの順序を、単位期間内にカウントされたコマンド処理終了位置の数が小さい順序に対応させるように変更した場合、複数のメモリチップMC0~MC3の全体の処理時間を120μsだけ短縮することができる。
【0102】
なお、図8に示した例では、単位期間において、キューQ0~Q3のコマンド処理開始位置の数が全て同じであり、またコマンド処理終了位置の数も全て同じである((2,2))。したがって、アービトレーションルール422Aは変更されない。
【0103】
次いで、図9は、メモリチップMC0~MC3のプログラム時間が、図7および図8で示した例とは異なる場合を示す。図9に示す例では、コマンドに応じたデータがメモリチップMC0~MC3に転送されるデータ転送期間が一定の80μsであり、メモリチップMC0によるプログラム時間(チップビジー期間)が280μsであり、メモリチップMC1によるプログラム時間が320μsであり、メモリチップMC2によるプログラム時間が240μsであり、メモリチップMC3によるプログラム時間が360μsであることを想定する。この場合、対応するキューQ1,Q3が新たなコマンドを転送可能な順番になっても、コマンド実行速度が遅いメモリチップMC1,MC3がビジー状態であるので、キューQ1,Q3からメモリチップMC1,MC3に新たなコマンドを転送することができない状況が生じている。
【0104】
キューモニタ部424は、キューQ0について、単位期間に含まれるデータ転送期間T02およびT04の先頭位置を二つのコマンド処理開始位置としてカウントし、プログラム時間T01およびT03の終端位置を二つのコマンド処理終了位置としてカウントする。図9では、キューQ0の単位期間内における処理開始位置の数と処理終了位置の数とが(2,2)と示されている。
【0105】
同様にして、キューQ1とキューQ2の各々について、二つのコマンド処理開始位置と二つのコマンド処理終了位置(すなわち、(2,2))がカウントされる。また、キューQ3について、単位期間に含まれるデータ転送期間T30およびT32の先頭位置が二つのコマンド処理開始位置としてカウントされ、プログラム時間T31の終端位置が一つのコマンド処理終了位置としてカウントされる。図9では、キューQ3の単位期間内における処理開始位置の数と処理終了位置の数とが(2,1)と示されている。
【0106】
アービタ422は、カウントされたキュー毎のコマンド処理開始位置の数とコマンド処理終了位置の数の少なくとも一方を用いて、アービトレーションルール422Aの変更が必要であるか否かを判定し、必要であればアービトレーションルール422Aを変更する。
【0107】
より具体的には、アービタ422は、カウントされたコマンド処理開始位置の数が小さい順、カウントされたコマンド処理終了位置の数が小さい順、またはカウントされたコマンド処理開始位置とコマンド処理終了位置との和が小さい順に、コマンドが転送される対象となるキューの順序を入れ替える。図9に示す例では、アービタ422は、カウントされたコマンド処理終了位置の数(=1)が最も小さいキューQ3が、コマンドが転送される対象となる順序の先頭となるようにアービトレーションルール422Aを変更する。変更後のアービトレーションルール422Aは、例えば、キューQ3、キューQ0、キューQ1、キューQ2の順に、対応するメモリチップMC3,MC0,MC1,MC2にそれぞれコマンドが転送されることを示す。
【0108】
図10は、この変更後のアービトレーションルール422Aに基づいてコマンドが転送される例を示す。図10に示す例では、キューQ0,Q1,Q2が新たなコマンドを転送可能な順番になったときに、各々に対応するメモリチップMC0,MC1,MC2がビジー状態であることがないので、キューQ0,Q1,Q2から対応するメモリチップMC0,MC1,MC2に新たなコマンドを即座に転送することができる。つまり、あるキューに対応するメモリチップに対するデータ転送期間が完了してから、次のキューに対応するメモリチップに対するデータ転送期間が開始されるまでに、遅延時間が生じない。このような構成において、メモリチップMC0~MC3に対してそれぞれ3個のコマンドが転送される場合に要する全体の処理時間は1440μsになる。
【0109】
したがって、図9に示した例と図10に示した例とを比較すると、コマンドが転送される対象となるキューの順序を、単位期間内にカウントされたコマンド処理終了位置の数が小さい順序に対応させるように変更した場合、キューQ0~Q3からメモリチップMC0~MC3にコマンドを転送して実行する全体の処理時間を120μsだけ短縮することができる。
【0110】
なお、図10に示した例では、変更後のアービトレーションルール422Aに示されるキューQ3、キューQ0、キューQ1、キューQ2の順は、コマンド処理時間が長い順(キューQ3,Q1,Q0,Q2の順)とは一部が対応していない。しかし、キューQ0~Q3からのメモリチップMC0~MC3にコマンドを転送して実行する全体の処理時間は、変更後のアービトレーションルール422Aに示されるキューの順序が、コマンド処理時間が長い順と一致する図8の例と同様に短縮されている。このように、コマンド処理時間の関係によっては、必ずしもキューQ0~Q3の順序をコマンド処理時間が長い順に完全に対応させなくても、同様の短縮の効果を得ることができる場合もある。
【0111】
また、図10に示した例では、キューQ0~Q3のコマンド処理開始位置の数が全て同じであり、またコマンド処理終了位置の数も全て同じである((2,2))。したがって、アービトレーションルール422Aは変更されない。
【0112】
次いで、図11から図14を参照して、フラッシュコントローラエンジン13の動作について説明する。ここでは、一例として、チャネルCH0における動作について説明するが、他のチャネルにおける動作も同様である。
【0113】
図11に示すように、コマンドディスパッチャ41は、コマンド制御部21(CPU12)により送出されたコマンドC0~C4を受け付ける。上述したように、コマンドC0~C4は、ホスト2から受信される様々なコマンド(例えば、ライトコマンド、リードコマンド等)を処理することや、ガベージコレクション動作のようなSSD3内の動作により生成された、メモリチップMC0~MC3によって実行されるコマンドである。
【0114】
コマンドディスパッチャ41が受け付ける各コマンドC0~C4は、例えば、プログラムコマンド、リードコマンド、およびイレーズコマンドのいずれかである。プログラムコマンドでは、データが書き込まれるべき物理アドレス(例えば、チップ、ブロック、およびページ)が指定されている。リードコマンドでは、データが読み出されるべき物理アドレスが指定されている。また、イレーズコマンドでは、データが消去されるべき物理アドレスが指定されている。
【0115】
コマンドディスパッチャ41が受け付けるコマンドC0~C4には、例えば、シーケンシャルライトのためのプログラムコマンドも含まれ得る。また、コマンドC0~C4には、様々な種類のコマンドが混在していてもよい。
【0116】
コマンドディスパッチャ41は、各コマンドC0~C4で指定された物理アドレスに基づき、コマンドC0~C4をキューQ0~Q3に振り分ける。より具体的には、コマンドディスパッチャ41は、メモリチップMC0~MC3から、指定された物理アドレスによって示される物理記憶位置を含むメモリチップを特定する。そして、コマンドディスパッチャ41は、キューQ0~Q3の内の、特定されたメモリチップに対応するキューにコマンドを格納(蓄積)する。
【0117】
例えば、メモリチップMC0内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMC0に対応するキューQ0に格納する。メモリチップMC1内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMC1に対応するキューQ1に格納する。メモリチップMC2内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMC2に対応するキューQ2に格納する。また、メモリチップMC3内の物理アドレスを指定するコマンドを受け付けた場合、コマンドディスパッチャ41は、そのコマンドをメモリチップMC3に対応するキューQ3に格納する。
【0118】
図12は、コマンドディスパッチャ41による振り分けによって、各キューQ0~Q3にコマンドが格納された例を示す。ここでは、キューQ0にコマンドC0,C4が格納され、キューQ1にコマンドC2,C5が格納され、キューQ2にコマンドC1,C7が格納され、キューQ3にコマンドC3,C6が格納されている。したがって、コマンドC0,C4は、キューQ0に対応するメモリチップMC0に転送されるコマンドであり、コマンドC2,C5は、キューQ1に対応するメモリチップMC1に転送されるコマンドであり、コマンドC1,C7は、キューQ2に対応するメモリチップMC2に転送されるコマンドであり、コマンドC3,C6は、キューQ3に対応するメモリチップMC3に転送されるコマンドである。
【0119】
アービタ422は、アービトレーションルール422Aに従って、キューQ0~Q3に格納されたコマンドを取得し、メモリチップMC0~MC3に取得したコマンドに応じた処理を実行させる。図13に示す例では、アービトレーションルール422Aは、コマンドが転送される対象となるキューの順序がキューQ0、キューQ1、キューQ2、キューQ3の順であることを示している。
【0120】
図13に示すように、アービタ422は、このアービトレーションルール422Aに従って以下のように動作する。
(1)キューQ0からコマンドC0を取得し、対応するメモリチップMC0にコマンドC0を転送する(メモリチップMC0にコマンドC0に応じた処理を実行させる)。
(2)キューQ1からコマンドC2を取得し、対応するメモリチップMC1にコマンドC2を転送する(メモリチップMC1にコマンドC2に応じた処理を実行させる)。
(3)キューQ2からコマンドC1を取得し、対応するメモリチップMC2にコマンドC2を転送する(メモリチップMC2にコマンドC1に応じた処理を実行させる)。
(4)キューQ3からコマンドC3を取得し、対応するメモリチップMC3にコマンドC3を転送する(メモリチップMC3にコマンドC3に応じた処理を実行させる)。
【0121】
また、キューモニタ部424は、上記のような動作を監視(モニタリング)することにより、各キューのコマンド転送速度、または関連付けられたキューとメモリチップの複数の組の各々のコマンド処理速度を取得する。コマンド転送速度は、上述したように、例えば、単位期間内におけるコマンドの処理開始位置の数と処理終了位置の数の少なくとも一方を、キュー毎にカウントすることによって得られる。また、コマンド処理速度は、コマンドの処理開始位置から処理終了位置までの経過時間に基づいて得られる。
【0122】
取得されたコマンド転送速度またはコマンド処理速度が、例えば、キューQ3、キューQ0、キューQ1、キューQ2の順に遅いことを示す場合、アービタ422は、コマンドが転送される対象となるキューの順序が、コマンド転送速度またはコマンド処理速度が遅い順に対応するようにアービトレーションルール422Aを変更する。したがって、図14に示すように、変更後のアービトレーションルール422Aは、コマンドが転送される対象となるキューの順序が、キューQ3、キューQ0、キューQ1、キューQ2の順であることを示す。
【0123】
そして、アービタ422は、変更後のアービトレーションルール422Aに従って、キューQ0~Q3に格納されたコマンドを取得し、メモリチップMC0~MC3に取得したコマンドに応じた処理を実行させる。図14に示すように、アービタ422は、このアービトレーションルール422Aに従って、以下のように動作する。
(1)キューQ3からコマンドC6を取得し、対応するメモリチップMC3にコマンドC6を転送する(メモリチップMC3にコマンドC6に応じた処理を実行させる)。
(2)キューQ0からコマンドC4を取得し、対応するメモリチップMC0にコマンドC4を転送する(メモリチップMC0にコマンドC4に応じた処理を実行させる)。
(3)キューQ1からコマンドC5を取得し、対応するメモリチップMC1にコマンドC5を転送する(メモリチップMC1にコマンドC5に応じた処理を実行させる)。
(4)キューQ2からコマンドC7を取得し、対応するメモリチップMC2にコマンドC7を転送する(メモリチップMC2にコマンドC7に応じた処理を実行させる)。
【0124】
このように、コマンドが転送される対象となるキューの順序が、コマンド転送速度またはコマンド処理速度が遅い順に対応するように動的に変更される。これにより、例えば、コマンド実行速度がより遅いメモリチップに対して先にコマンドが転送されるので、キューQ0~Q3からメモリチップMC0~MC3にコマンドを転送して実行する全体の処理時間を短縮することができる。したがって、メモリチップMC0~MC3を備えるNAND型フラッシュメモリ5に対するアクセス性能を向上させることができる。
【0125】
次いで、図15のフローチャートを参照して、コントローラ4によって実行されるコマンド転送制御処理の手順の例を説明する。ここでは、各キューQ0,Q1,……,Qy-1にコマンドが既に格納されていることを想定する。
【0126】
まず、アービタ422,432は、アービトレーションルール422A,432Aに従って、最初のキューに格納されたコマンドの内の一つを、当該キューに対応するメモリチップに転送する(ステップS11)。
【0127】
そして、アービタ422,432は、次のキューに格納されたコマンドの内の一つを、当該キューに対応するメモリチップに転送する(ステップS12)。同様にして、アービタ422,432は、アービトレーションルール422A,432Aに示される順序に従って、該当するキュー毎に格納されたコマンドの内の一つを対応するメモリチップに転送することにより、最後の順番のキューまでコマンドを順次転送する(ステップS13)。
【0128】
また、ステップS11からステップS13までの手順と並行して、キューモニタ部424,434は、各キューから、対応するメモリチップに転送されるコマンドの処理開始位置と処理終了位置の少なくとも一方を監視する(ステップS14)。キューモニタ部424,434は、例えば、コマンドの処理開始位置と処理開始位置の少なくとも一方を、キュー毎にカウントする。また、キューモニタ部424,434は、処理開始位置の時間および処理終了位置の時間、または処理開始位置から処理終了位置までの経過時間を計測してもよい。
【0129】
ステップS13およびステップS14が完了した後、アービタ422,432は、第1期間が経過したか否かを判定する(ステップS15)。第1期間は、キュー毎のコマンド転送速度が計測される単位期間である。第1期間が経過していない場合(ステップS15のNO)、ステップS11およびステップS14に戻り、コマンドの転送と、その処理開始位置と処理終了位置の少なくとも一方の監視とが続行される。
【0130】
第1期間が経過した場合(ステップS15のYES)、アービタ422,432は、キュー毎に、第1期間内のコマンド転送速度を取得する(ステップS16)。アービタ422,432は、キュー毎に、例えば、第1期間内に転送されたコマンド数を取得する。第1期間内にあるメモリチップに転送されたコマンド数は、例えば、ステップS14で第1期間内にカウントされたコマンドの処理開始位置の数と処理終了位置の数の少なくとも一方によって表され得る。
【0131】
次いで、アービタ422,432は、取得されたキュー毎のコマンド転送速度に基づいて、コマンドが転送される対象となるキューの順序の入れ替えが必要であるか否か、すなわち、アービトレーションルール422A,432Aの変更が必要であるか否かを判定する(ステップS17)。アービタ422,432は、例えば、コマンドが転送される対象となるキューの順序がコマンド転送速度が遅い順に対応している場合、キューの順序の入れ替えが必要でないと判断する。一方、アービタ422,432は、コマンドが転送される対象となるキューの順序がコマンド転送速度が遅い順に対応していない場合、キューの順序の入れ替えが必要であると判断する。
【0132】
キューの順序の入れ替えが必要でない場合(ステップS17のNO)、ステップS11およびステップS14に戻る。
【0133】
一方、キューの順序の入れ替えが必要である場合(ステップS17のYES)、アービタ422,432は、コマンドが転送される対象となるキューの順序がコマンド転送速度が遅い順に入れ替えられるように、アービトレーションルール422A,432Aを変更し(ステップS18)、ステップS11およびステップS14に戻る。
【0134】
なお、ステップS16の手順において、アービタ422,432は、キュー(メモリチップ)毎のコマンド処理速度を取得してもよい。アービタ422,432は、例えば、ステップS14で計測された処理開始位置の時間および処理終了位置の時間、または処理開始位置から処理終了位置までの経過時間に基づいて、キュー毎のコマンド処理速度を取得する。この場合、ステップS17およびステップS18の手順において、コマンド転送速度の代わりにコマンド処理速度が用いられる。
【0135】
以上のように、あるチャネルに接続される複数のメモリチップに対応する複数のキューのコマンド転送速度またはコマンド処理速度が遅い順に、キューから対応するメモリチップにコマンドが転送されるように、コマンドが転送される対象となるキューの順序(アービトレーションルール)が動的に変更される。これにより、コマンドが並列に実行される際に発生する遅延が低減され、複数のキューから複数のメモリチップにコマンドを転送して実行する全体の処理時間を短縮することができる。したがって、複数のメモリチップを備えるNAND型フラッシュメモリ5に対するアクセス性能を向上させることができる。
【0136】
また、アービトレーションルールが動的に変更されるので、ファームウェア20内に設けられるコマンド制御部21は、キューのコマンド転送速度やコマンド処理速度を考慮することなく、コマンドをフラッシュコントローラエンジン13に送出することができる。送出されたコマンドは、当該コマンドが実行されるメモリチップに対応するキューに格納され、キューのコマンド転送速度やコマンド処理速度が遅い順に対応するメモリチップに転送することができる。
【0137】
なお、一つのキューに対して複数のメモリチップが関連付けられる場合にも、アービタ422,432は、コマンド転送速度またはコマンド処理速度がより遅いキューほど、コマンドが転送される対象となる順序が先になるように、アービトレーションルール422A,432Aを動的に変更する。これにより、一つのキューに対して複数のメモリチップが関連付けられる場合にも同様に、それら複数のメモリチップを備えるNAND型フラッシュメモリ5に対するアクセス性能を向上させることができる。
【0138】
(第2実施形態)
第1実施形態では、各キューのコマンド処理速度またはコマンド転送速度を監視するためのキューモニタ部424,434が、フラッシュコントローラエンジン13内に設けられている。これに対して、第2実施形態では、図16に示すように、キューモニタ部22が、CPU12によって実行されるファームウェア20の一部として実現される。
【0139】
第2実施形態に係るSSD3の構成は第1実施形態のSSD3と同様であり、第2実施形態と第1実施形態とでは、ファームウェア20を実行することによってキューモニタ部22として機能するCPU12による処理の手順と、コマンドディスパッチャ41およびアービタ422,432によって実行される処理の手順のみが異なる。以下、第1実施形態と異なる点のみを説明する。
【0140】
図16に示すように、ファームウェア20には、コマンド制御部21に加えてキューモニタ部22がさらに設けられている。キューモニタ部22は、第1実施形態のキューモニタ部424,434と同様に、キューとメモリチップの複数の組の各々のコマンド処理速度、または各キューのコマンド転送速度を監視する。
【0141】
より具体的には、キューモニタ部22は、例えば、フラッシュコントローラエンジン13から、キューから対応するメモリチップへのコマンドの転送が開始された時点を示す信号(データ)や、メモリチップによるコマンドの実行が終了した時点を示す信号を受信することや、キューやメモリチップの状態を示すレジスタを読み取ること等によって、コマンドの処理開始位置と処理終了位置とを検出する。キューモニタ部22は、検出された処理開始位置から処理終了位置までの経過時間に基づいて、キューとメモリチップの組毎のコマンド処理速度を算出することができる。
【0142】
また、キューモニタ部22は、コマンドの処理開始位置の数と処理終了位置の数の少なくとも一方を、キュー毎にカウントしてもよい。キューモニタ部22は、カウントされたコマンドの処理開始位置の数と処理終了位置の数の少なくとも一方を用いて、各キューのコマンド転送速度を取得することができる。
【0143】
また、図17に示すように、アービタ422,432は、アービトレーションルール422A,432Aだけでなく、キュー-チップテーブル422B,432Bも管理する。キュー-チップテーブル422B,432Bは、キューとメモリチップとの対応関係を示す。例えば、キュー-チップテーブル422Bでは、複数のキューQ0,Q1,Q2,……,Qx-1に、複数のメモリチップMC0,MC1,MC2,……,MCx-1がそれぞれ対応することが示される。また、キュー-チップテーブル432Bでは、複数のキューQx,Qx+1,Qx+2,……,Qy-1に、複数のメモリチップMCx,MCx+1,MCx+2,……,MCy-1がそれぞれ対応することが示される。
【0144】
コマンドディスパッチャ41は、CPU12(コマンド制御部21)によってフラッシュコントローラエンジン13に送出されるコマンドを受け付け、これらコマンドの各々をキューQ0,Q1,……,Qy-1のいずれかに振り分ける。上述したように、コマンドは、例えば、プログラムコマンド、リードコマンド、およびイレーズコマンドのいずれかである。プログラムコマンドでは、データが書き込まれるべき物理アドレス(例えば、チップ、ブロック、およびページ)が指定されている。リードコマンドでは、データが読み出されるべき物理アドレスが指定されている。また、イレーズコマンドでは、データが消去されるべき物理アドレスが指定されている。
【0145】
コマンドディスパッチャ41は、各コマンドで指定された物理アドレスに基づき、コマンドをキューQ0,Q1,……,Qy-1のいずれかに振り分ける。より具体的には、コマンドディスパッチャ41は、NAND型フラッシュメモリ5内の複数のメモリチップMC0,MC1,……,MCy-1から、指定された物理アドレスによって示される物理記憶位置を含むメモリチップを特定する。そして、コマンドディスパッチャ41は、キュー-チップテーブル422B,432Bに従って、キューQ0,Q1,……,Qy-1の内の、特定されたメモリチップに対応するキューにコマンドを送出する。これにより、コマンドに応じてアクセスされるべきメモリチップに対応するキューに、当該コマンドが格納される。
【0146】
アービタ422,432は、アービトレーションルール422A,432Aに示される順序に従って、コマンドが転送される対象となるキューに格納されたコマンドの一つを取得する。そして、アービタ422,432は、そのコマンドに指定された物理アドレスに基づいて特定されるメモリチップに、当該コマンドに応じた処理を実行させる。
【0147】
さらに、アービタ422,432は、キューモニタ部22によって取得されたコマンド処理速度またはコマンド転送速度に基づいて、アービトレーションルール422A,432Aによって示される、コマンドが転送される対象となる順序が先であるキューほど、コマンド処理速度またはコマンド転送速度が遅いキューに関連付けられていたメモリチップが関連付けられるように、キュー-チップテーブル422B,432Bを変更することもできる。アービタ422,432は、各キューのコマンド処理速度またはコマンド転送速度に基づいて、キュー-チップテーブル422B,432Bを変更し、アービトレーションルール422A,432Aを変更しないように構成されてもよい。すなわち、コマンドが転送される対象となるキューの順序は固定されていてもよい。
【0148】
例えば、チャネルCH0に接続される並列動作可能な複数のメモリチップに、第1メモリチップと第2メモリチップとが含まれる場合を想定する。また、チャネルCH0には、第1キューと、この第1キューよりも後にコマンドが転送される対象となる第2キューとが含まれている。この場合に、アービタ422は、以下のようにキュー-チップテーブル422Bを変更する。すなわち、アービタ422は、(1)第1メモリチップへコマンドの転送を開始してから第1メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第1コマンド処理速度が、第2メモリチップへコマンドの転送を開始してから第2メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第2コマンド処理速度よりも遅いならば、第1キューに第1メモリチップを関連付け、第2キューに第2メモリチップを関連付ける。また、アービタ422は、(2)第2コマンド処理速度が第1コマンド処理速度よりも遅いならば、第1キューに第2メモリチップを関連付け、第2キューに第1メモリチップを関連付ける。
【0149】
コマンド制御部21は、ホスト2から受信されるコマンド等に応じて、第1キューに関連付けられたメモリチップによって実行されるべき第1コマンドと、第2キューに関連付けられたメモリチップによって実行されるべき第2コマンドとを生成し、フラッシュコントローラエンジン13に送出する。コマンドディスパッチャ41は、第1キューに第1コマンドを格納し、第2キューに第2コマンドを格納する。そして、アービタ422は、アービトレーションルール422Aに従って、第1キューから第1コマンドを取得し、取得された第1コマンドを第1キューに関連付けられたメモリチップへ転送した後に、第2キューから第2コマンドを取得し、取得された第2コマンドを第2キューに関連付けられたメモリチップへ転送する。
【0150】
これら第1コマンド処理速度と第2コマンド処理速度とは、第1メモリチップによって実行されるべき第3コマンドと第2メモリチップによって実行されるべき第4コマンドとが処理される際に計測され得る。ここでは、第1キューが第1メモリチップに関連付けられ、且つ第2キューが第2メモリチップに関連付けられていることを想定する。
【0151】
コマンドディスパッチャ41は、第3コマンドを第1キューに格納し、第4コマンドを第2キューに格納する。キューモニタ部22は、第1キューから第3コマンドを取得し、取得された第3コマンドを第1メモリチップへ転送してから、第1メモリチップによる第3コマンドの実行が完了するまでの時間に基づいて第1コマンド処理速度を計測する。また、キューモニタ部22は、第2キューから第4コマンドを取得し、取得された第4コマンドを第2メモリチップへ転送してから、第2メモリチップによる第4コマンドの実行が完了するまでの時間に基づいて第2コマンド処理速度を計測する。
【0152】
あるいは、アービタ422は、以下のようにキュー-チップテーブル422Bを変更してもよい。すなわち、アービタ422は、(1)第1期間において第1メモリチップへ転送されたコマンドの数に基づく第1コマンド転送速度が、第1期間において第2メモリチップへ転送されたコマンドの数に基づく第2コマンド転送速度よりも遅いならば、第1キューに第1メモリチップを関連付け、第2キューに第2メモリチップを関連付ける。また、アービタ422は、第2コマンド転送速度が第1コマンド転送速度よりも遅いならば、第1キューに第2メモリチップを関連付け、第2キューに第1メモリチップを関連付ける。
【0153】
これら第1コマンド転送速度と第2コマンド転送速度とは、第1メモリチップによって実行されるべき複数の第3コマンドと第2メモリチップによって実行されるべき複数の第4コマンドとが処理される際に計測され得る。キューモニタ部22は、第1期間において、第1キューに格納される複数の第3コマンドの内、第1メモリチップへ転送されたコマンドの第1の数をカウントし、カウントされた第1の数に基づいて第1コマンド転送速度を決定する。また、キューモニタ部22は、第1期間において、第2キューに格納される複数の第4コマンドの内、第2メモリチップへ転送されたコマンドの第2の数をカウントし、カウントされた第2の数に基づいて第2コマンド転送速度を決定する。
【0154】
なお、第1コマンドが第1データを第1キューに関連付けられたメモリチップに書き込むためのプログラムコマンドであり、第2コマンドが第2データを第2キューに関連付けられたメモリチップに書き込むためのプログラムコマンドである場合、アービタ422は以下のように動作する。すなわち、アービタ422は、(1)第1コマンド処理速度が第2コマンド処理速度よりも遅いならば、あるいは第1コマンド転送速度が第2コマンド転送速度よりも遅いならば、第1データを第1キューに関連付けられたメモリチップに転送してそのメモリチップにプログラムを指示した後に、第2データを第2キューに関連付けられたメモリチップに転送してそのメモリチップにプログラムを指示する。また、アービタ422は、(2)第2コマンド処理速度が第1コマンド処理速度よりも遅いならば、あるいは第2コマンド転送速度が第1コマンド転送速度よりも遅いならば、第2データを第2キューに関連付けられたメモリチップに転送してそのメモリチップにプログラムを指示した後に、第1データを第1キューに関連付けられたメモリチップに転送してそのメモリチップにプログラムを指示する。
【0155】
図18から図21を参照して、フラッシュコントローラエンジン13の動作について説明する。ここでは、一例として、チャネルCH0における動作について説明するが、他のチャネルにおける動作も同様である。
【0156】
図18は、コマンドディスパッチャ41による振り分けによって、各キューQ0~Q3にコマンドが格納されている例を示す。各キューQ0~Q3には、キュー-チップテーブル422Bに従って、対応するメモリチップMC0~MC3によって実行されるべきコマンドがそれぞれ格納される。キュー-チップテーブル422Bは、キューQ0、キューQ1、キューQ2、およびキューQ3と、メモリチップMC0、メモリチップMC1、メモリチップMC2、およびメモリチップMC3とがそれぞれ対応することを示している。
【0157】
したがって、キューQ0には、対応するメモリチップMC0によって実行されるべきコマンドC0,C4,C9が格納される。キューQ1には、対応するメモリチップMC1によって実行されるべきコマンドC2,C5,C10が格納される。キューQ2には、メモリチップMC2によって実行されるべきコマンドC1,C7,C8が格納される。また、キューQ3には、メモリチップMC3によって実行されるべきコマンドC3,C6,C11が格納される。
【0158】
アービタ422は、アービトレーションルール422Aに示される順序に従って、キューQ0~Q3に格納されたコマンドを取得し、各キューQ0~Q3に対応するメモリチップMC0~MC3に、取得されたコマンドに応じた処理を実行させる。図18に示す例では、アービトレーションルール422Aは、コマンドが転送される対象となるキューの順序がキューQ0、キューQ1、キューQ2、キューQ3の順であることを示している。
【0159】
図19に示すように、アービタ422は、このアービトレーションルール422Aに従って以下のように動作する。
(1)キューQ0からコマンドC0を取得し、対応するメモリチップMC0にコマンドC0を転送する(メモリチップMC0にコマンドC0に応じた処理を実行させる)。
(2)キューQ1からコマンドC2を取得し、対応するメモリチップMC1にコマンドC2を転送する(メモリチップMC1にコマンドC2に応じた処理を実行させる)。
(3)キューQ2からコマンドC1を取得し、対応するメモリチップMC2にコマンドC2を転送する(メモリチップMC2にコマンドC1に応じた処理を実行させる)。
(4)キューQ3からコマンドC3を取得し、対応するメモリチップMC3にコマンドC3を転送する(メモリチップMC3にコマンドC3に応じた処理を実行させる)。
【0160】
キューQ0~Q3に格納されている他のコマンドC4~C11も、同様の順序で対応するメモリチップMC0~MC3に転送される。
【0161】
キューモニタ部22は、このような動作を監視することにより、各キューのコマンド転送速度、またはキューとメモリチップの複数の組の各々のコマンド処理速度を取得する。コマンド転送速度は、上述したように、例えば、単位期間内におけるコマンドの処理開始位置の数と処理終了位置の数の少なくとも一方を、キュー毎にカウントすることによって得られる。また、コマンド処理速度は、コマンドの処理開始位置から処理終了位置までの経過時間に基づいて得られる。
【0162】
図20に示すように、取得されたコマンド転送速度またはコマンド処理速度が、例えば、キューQ3、キューQ1、キューQ0、キューQ2の順に遅いことを示す場合、アービタ422は、アービトレーションルール422Aに示される、コマンドが転送される対象となる順序が先であるキューほど、コマンド転送速度またはコマンド処理速度が遅いキューに関連付けられていたメモリチップが関連付けられるように、キュー-チップテーブル422Bを変更する。したがって、変更後のキュー-チップテーブル422Bは、キューQ0、キューQ1、キューQ2、およびキューQ3に対して、メモリチップMC3、メモリチップMC1、メモリチップMC0、およびメモリチップMC2がそれぞれ関連付けられることを示す。
【0163】
コマンドディスパッチャ41は、変更後のキュー-チップテーブル422Bに従って、フラッシュコントローラエンジン13に対して送出される各コマンドC12~C23を、そのコマンドが実行されるべきメモリチップに対応するキューに格納する。
【0164】
図21に示すように、アービタ422は、アービトレーションルール422Aに従って、キューQ0~Q3に格納されたコマンドを取得し、対応するメモリチップMC0~MC3に取得したコマンドに応じた処理を実行させる。より具体的には、アービタ422は、例えば、以下のように動作する。
(1)キューQ0からコマンドC15を取得し、対応するメモリチップMC3にコマンドC15を転送する(メモリチップMC3にコマンドC15に応じた処理を実行させる)。
(2)キューQ1からコマンドC13を取得し、対応するメモリチップMC1にコマンドC13を転送する(メモリチップMC1にコマンドC13に応じた処理を実行させる)。
(3)キューQ2からコマンドC14を取得し、対応するメモリチップMC0にコマンドC14を転送する(メモリチップMC0にコマンドC14に応じた処理を実行させる)。
(4)キューQ3からコマンドC12を取得し、対応するメモリチップMC2にコマンドC12を転送する(メモリチップMC2にコマンドC12に応じた処理を実行させる)。
【0165】
このように、キュー-チップテーブル422Bは、アービトレーションルール422Aによって示される、コマンドが転送される対象となる順序が先であるキューほど、コマンド転送速度またはコマンド処理速度が遅いキューに関連付けられていたメモリチップが関連付けられることを示すように変更される。これにより、コマンドが転送される対象となるキューの順序(アービトレーションルール)が固定された状態においても、例えば、コマンド実行速度がより遅いメモリチップに対して先にコマンドが転送されるので、キューQ0~Q3からメモリチップMC0~MC3にコマンドを転送して実行する全体の処理時間を短縮することができる。したがって、メモリチップMC0~MC3を備えるNAND型フラッシュメモリ5に対するアクセス性能を向上させることができる。
【0166】
次いで、図22のフローチャートを参照して、コントローラ4によって実行されるコマンド転送制御処理の手順の例を説明する。
【0167】
まず、コマンドディスパッチャ41は、アービトレーションルール422A,432Aに従って、最初のキューにコマンドを一定量蓄積する(ステップS21)。そして、コマンドディスパッチャ41は、次のキューにコマンドを一定量蓄積する(ステップS22)。同様にして、コマンドディスパッチャ41は、アービトレーションルール422A,432Aに示される順序に従って、該当するキューにコマンドを一定量蓄積することにより、最後の順番のキューまでコマンドを一定量蓄積する(ステップS23)。なお、ステップS21からステップS23までの手順は、並列に行われてもよい。
【0168】
次いで、アービタ422,432は、アービトレーションルール422A,432Aに従って、複数のキュー内のコマンドを対応するメモリチップにそれぞれ転送する(ステップS24)。
【0169】
ステップS24の手順と並行して、キューモニタ部22は、各キューから、対応するメモリチップに転送されるコマンドの処理開始位置と処理終了位置の少なくとも一方を監視する(ステップS25)。キューモニタ部22は、例えば、コマンドの処理開始位置と処理終了位置の少なくとも一方を、キュー毎にカウントする。また、キューモニタ部22は、処理開始位置の時間および処理終了位置の時間、または処理開始位置から処理終了位置までの経過時間を計測してもよい。
【0170】
そして、アービタ422,432は、あるチャネル内の複数のキューに格納された全てのコマンドについて、メモリチップによる実行が完了したか否かを判定する(ステップS26)。全てのコマンドの実行が完了していない場合(ステップS26のNO)、ステップS24およびステップS25に戻り、コマンドの転送と、その処理開始位置と処理終了位置の少なくとも一方の監視とが続行される。
【0171】
全てのコマンドの実行が完了した場合(ステップS26のYES)、アービタ422,432は、キュー毎に、第1期間内のコマンド転送速度を取得する(ステップS27)。アービタ422,432は、キュー毎に、例えば、第1期間内に転送されたコマンド数を取得する。第1期間内にあるメモリチップに転送されたコマンド数は、例えば、ステップS25で第1期間内にカウントされたコマンドの処理開始位置の数と処理終了位置の数の少なくとも一方によって表され得る。
【0172】
次いで、アービタ422,432は、取得されたキュー毎のコマンド転送速度に基づいて、キューとメモリチップとの対応関係の入れ替えが必要であるか否かを判定する(ステップS28)。例えば、アービタ422,432は、コマンドが転送される対象となる順序が先であるキューほど、コマンド転送速度が遅い場合、対応関係の入れ替えが必要でないと判定する。一方、アービタ422,432は、コマンドが転送される対象となるキューの順序が、コマンド転送速度が遅い順に対応していない場合、対応関係の入れ替えが必要であると判定する。
【0173】
キューとメモリチップとの対応関係の入れ替えが必要でない場合(ステップS28のNO)、ステップS21に戻り、キューへのコマンドの蓄積が続行される。
【0174】
キューとメモリチップとの対応関係の入れ替えが必要である場合(ステップS28のYES)、アービタ422,432は、コマンドが転送される対象となる順序が先であるほど、コマンド転送速度が遅いキューに関連付けられていたメモリチップが関連付けられるように、キュー-チップテーブル422B,432Bを変更し(ステップS29)、ステップS21に戻る。
【0175】
なお、ステップS27の手順において、アービタ422,432は、キュー(メモリチップ)毎のコマンド処理速度を取得してもよい。アービタ422,432は、例えば、ステップS25で計測された処理開始位置の時間および処理終了位置の時間、または処理開始位置から処理終了位置までの経過時間に基づいて、キュー毎のコマンド処理速度を取得する。この場合、ステップS28およびステップS29の手順において、コマンド転送速度の代わりにコマンド処理速度が用いられる。
【0176】
以上のように、あるチャネルに接続される複数のメモリチップに対応する複数のキューのコマンド転送速度またはコマンド処理速度が遅い順に、キューからメモリチップにコマンドが転送されるように、キューとメモリチップとの対応関係(キュー-チップテーブル)が動的に変更される。これにより、コマンドを並列に実行する際に発生する遅延を低減し、複数のキューから複数のメモリチップにコマンドを転送して実行する全体の処理時間を短縮することができる。したがって、複数のメモリチップを備えるNAND型フラッシュメモリ5に対するアクセス性能を向上させることができる。
【0177】
なお、一つのキューに対して複数のメモリチップが関連付けられる場合、アービタ422,432は、コマンドが転送される対象となる順序が先であるキューほど、コマンド実行速度またはコマンド処理速度が遅いキューに関連付けられていた複数のメモリチップが関連付けられるように、キュー-チップテーブル422B,432Bを動的に変更することができる。これにより、一つのキューに対して複数のメモリチップが関連付けられる場合にも同様に、複数のメモリチップを備えるNAND型フラッシュメモリ5に対するアクセス性能を向上させることができる。
【0178】
以上説明したように、第1および第2実施形態によれば、複数のメモリチップを備える不揮発性メモリに対するアクセス性能を向上させることができる。NAND型フラッシュメモリ5は、並列に動作可能であって、第1メモリチップと第2メモリチップを含む複数のメモリチップを含む。コントローラ4は、第1メモリチップに関連付けられた第1キューと第2メモリチップに関連付けられた第2キューとを含む複数のキューを含み、第1メモリチップによって実行されるべき第1コマンドと、第2メモリチップによって実行されるべき第2コマンドとを生成し、第1キューに第1コマンドを格納し、第2キューに第2コマンドを格納する。コントローラ4は、第1メモリチップへコマンドの転送を開始してから第1メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第1コマンド処理速度が、第2メモリチップへコマンドの転送を開始してから第2メモリチップによる当該コマンドの実行が完了するまでの時間に基づく第2コマンド処理速度よりも遅いならば、第1キューから第1コマンドを取得し、取得された第1コマンドを第1メモリチップへ転送した後に、第2キューから第2コマンドを取得し、取得された第2コマンドを第2メモリチップへ転送する。コントローラ4は、第2コマンド処理速度が第1コマンド処理速度よりも遅いならば、第2キューから第2コマンドを取得し、取得された第2コマンドを第2メモリチップへ転送した後に、第1キューから第1コマンドを取得し、取得された第1コマンドを第1メモリチップへ転送する。
【0179】
これにより、異なるアクセス時間を要する複数のメモリチップでコマンドを並列に実行(チップインタリーブ実行)する場合に、コマンド実行速度が遅いメモリチップから順にコマンドが実行されるように制御することができる。したがって、複数のメモリチップを備えるNAND型フラッシュメモリ5に対するアクセス性能を向上させることができる。
【0180】
なお、本発明のいくつかの実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、各実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、または、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0181】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0182】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、10…バス、11…ホストインタフェース、12…CPU、13…フラッシュコントローラエンジン、14…DRAMインタフェース、20…ファームウェア、21…コマンド制御部、31…ライトバッファ、32…ルックアップテーブル(LUT)、41…コマンドディスパッチャ、422,432…アービタ、423,433…インタフェースコントローラ、424,434…キューモニタ部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22