JP2023045456A - コンピュテーショナルストレージドライブ - Google Patents

コンピュテーショナルストレージドライブ Download PDF

Info

Publication number
JP2023045456A
JP2023045456A JP2021153872A JP2021153872A JP2023045456A JP 2023045456 A JP2023045456 A JP 2023045456A JP 2021153872 A JP2021153872 A JP 2021153872A JP 2021153872 A JP2021153872 A JP 2021153872A JP 2023045456 A JP2023045456 A JP 2023045456A
Authority
JP
Japan
Prior art keywords
cprg
host
unit
event
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021153872A
Other languages
English (en)
Inventor
文子 辻
Fumiko Tsuji
一成 住吉
Kazunari Sumiyoshi
勁人 多井
Keito Tai
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Kioxia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kioxia Corp filed Critical Kioxia Corp
Priority to JP2021153872A priority Critical patent/JP2023045456A/ja
Priority to US17/654,912 priority patent/US20230088291A1/en
Publication of JP2023045456A publication Critical patent/JP2023045456A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】内部イベントに連動して演算処理を実行するコンピュテーショナルストレージドライブを提供すること。【解決手段】実施形態によれば、コンピュテーショナルストレージドライブは、プログラムを保存する第1メモリと、プログラムが実行される際にアクセス可能な第2メモリと、ホストから送られたデータを保存するストレージメディアと、プログラムを実行して、第2メモリあるいはストレージメディアに保存されたデータに対するデータ処理を行うプロセッサと、ホストからの要求を受け、ストレージメディアへのデータ書き込み又はストレージメディアからのデータ読出しを行う、ストレージメディアの管理を行う、データ処理の制御を行う、又はホストからの要求とは独立した処理である非同期イベンドの実行を制御するコントローラと、を具備する。コントローラは、ホストにより設定された非同期イベントの発生時にホストに対して非同期イベント発生通知を送信する。【選択図】図1

Description

本発明の実施形態は、演算機能を有するストレージドライブに関する。
ストレージドライブ内部に演算機能を持たせることにより、ストレージドライブの内部で演算処理を実行することを可能としたコンピュテーショナルストレージドライブ(Computational Storage Drive、以降CSDと呼ぶ)が知られている。演算機能を持たないストレージドライブが接続されたホストにおいて、ホストのCPUで実施せざるを得なかったような演算処理を、CSDはストレージドライブの内部で実行することができる。これにより、ホストとストレージドライブ間のデータ伝送のオーバーヘッドの削減やホストのCPUの負荷軽減を図ることができる。
従来のCSDは、その内部で実行される内部イベントに連動して演算処理を実行することができなかった。
特開2019-175292号公報 特表2016-526716号公報 特開2021-28762号公報 米国特許第10,338,832号明細書
本発明の目的は、内部イベントに連動して演算処理を実行するコンピュテーショナルストレージドライブを提供することである。
実施形態によれば、コンピュテーショナルストレージドライブは、プログラムを保存する第1メモリと、プログラムが実行される際にアクセス可能な第2メモリと、ホストから送られたデータを保存するストレージメディアと、プログラムを実行して、第2メモリあるいはストレージメディアに保存されたデータに対するデータ処理を行うプロセッサと、ホストからの要求を受け、ストレージメディアへのデータ書き込み又はストレージメディアからのデータ読出しを行う、ストレージメディアの管理を行う、データ処理の制御を行う、又はホストからの要求とは独立した処理である非同期イベンドの実行を制御するコントローラと、を具備する。コントローラは、ホストにより設定された非同期イベントの発生時にホストに対して非同期イベント発生通知を送信する。
実施形態に係るCSDとホストを含む情報処理システムの一例を説明するためのブロック図。 実施形態に係るCSDの詳細を説明するための図。 実施形態に係るホストがCSDから非同期通知を受け取り、情報を取得する例を説明するための図。 実施形態に係るCSD内のユニットの状態を説明するための図。 実施形態に係るCSDにおけるホストライトの一例を説明するための図。 実施形態に係るCSDにおけるホストライトにより無効データ保有ユニットが発生する一例を説明するための図。 実施形態に係るCSDにおけるガベージコレクション開始時の一例を説明するための図。 実施形態に係るCSDにおけるガベージコレクションにおいて有効データ保有ユニットのデータ移動の一例を説明するための図。 実施形態に係るCSDにおけるガベージコレクションにおいてルックアップテーブルの更新の一例を説明するための図。 実施形態に係るCSDにおけるガベージコレクションにおいてゾーンをフリー状態にする一例を説明するための図。 実施形態に係るCSDにおける非同期通知設定の一例を説明するためのブロック図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能の一例を説明するためのブロック図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能の一例を説明するためのタイミング図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能の他の例を説明するためのタイミング図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能のさらに他の例を説明するためのタイミング図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能のさらに他の例を説明するためのタイミング図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能の一例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能の他の例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能のさらに他の例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能のさらに他の例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能のさらに他の例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDにおける内部イベントに連動してプログラムを起動する機能のさらに他の例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDにおけるガベージコレクションに連動してプログラムを起動する機能の一例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDにおけるガベージコレクションに連動してプログラムを起動する機能の一例を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るガベージコレクションに連動してプログラムを起動する機能の一例を説明するための図。 データ改変あり時の実施形態に係るCSDの状態の一例を説明するための図。 データ改変なし時の実施形態に係るCSDの状態の一例を説明するための図。 データ改変あり時の実施形態に係るCSDの状態の他の例を説明するための図。 データ改変なし時の実施形態に係るCSDの状態の他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能の他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能を実現するためのホストコマンドの一例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する処理の一例を説明するためのフロー図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能の他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例における処理を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例における他の処理を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例におけるさらに他の処理を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDのガベージコレクションに連動してプログラムを起動する機能のさらに他の例を説明するための図。 実施形態に係るCSDによるデータ変換の一例について説明するための図。 実施形態に係るCSDによるデータ変換の他の例について説明するための図。 実施形態に係るCSDによるログのコンパクションの一例について説明するための図。 実施形態に係るCSDによる物理アドレスのオーダー変更の一例について説明するための図。
以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介した接続も含む場合もある。
以下、図面を参照しながら本実施の形態について詳細に説明する。
実施形態は、コンピュテーショナルストレージドライブ(Computational Storage Drive、以降CSDと呼ぶ)における演算機能を実行するコンピューテーショナルプログラム(Computational Program、以下:CPRGと呼ぶ)の起動を、CSD内部で実行される各種の内部イベントに連動させるようにするものである。このことにより、CSDユーザにとってCPRGの起動タイミングの設計自由度を上げる効果がある。また、タイムセンシティブでないCPRGの実行を、ストレージドライブの内部イベントの発生タイミングまで遅延することにより、ストレージドライブの消費電力削減効果を得ることができる。
また、実施形態は、内部イベントのうちでも特に、内部にフラッシュトランスレーションレイヤ(Flash Translation Layer、以降FTLと呼ぶ)を備えるCSDにおける、ガベージコレクション(Garbage Collection、以降GCと呼ぶ)にCPRG起動を連動させるものである。
従来技術では、アプリケーションがCSDに保存した大量のデータに対して、データの読出し・処理・書き戻しを行う必要がある場合に、GCによるデータ読出し・書き戻しと処理がオーバーラップすることがあった。GCにCPRG起動を連動させることにより、このオーバーラップを除去することが可能となり、CSDの性能向上、延命化を図ることが可能となる。
図1は、実施形態に係るCSD2とホスト4を含む情報処理システムの一例を説明するためのブロック図である。図1を参照して、CSD2とCPRG、FTLとGCに関する背景技術を、各々、以下に説明する。なお、これらの技術を構成する各要素を表現する言葉は、一般に通用する統一用語が存在するという状況になく、また、同じ名称であっても利用者によって異なった意味で用いられることが多い状況である。このため、ここでは、本発明書としての用語定義の目的もかねて説明を行うこととする。つまり、ここで「~と呼ぶ」とは「~と呼ぶこととする」の意味である。
ホスト4は、機能モジュールとして、CPU6とホストメモリ(Host Memory:以降HMと呼ぶ)を備える。
CSD2は、複数の機能モジュールを備える。CSD2が備える機能モジュールの例は、ストレージメディア10、フロントエンドコントローラ(FrontEnd Controller、以降FEと称する)12、バックエンドコントローラ(BackEnd Controller、以降BEと称する)14、スロット16、コンピュテーショナルストレージエンジン(Computational Storage Engine、以降CSEと称する)18、コンピュテーショナルプログラムメモリ(Computational Program Memory、以降CPMと称する)20、ストレージコントローラメモリ(Storage Controller Memory、以降SCMと称する)22である。
ストレージメディア10は、ホスト4から書き込まれたデータを保存する物理媒体である。ストレージメディア10の例は、不揮発性メモリ(Non Volatile Memory:以降NVMと呼ぶ)がある。不揮発性メモリの一例は、NAND型のフラッシュメモリ、磁気ディスク、である。
FE12は、ホスト4との通信を制御を行うモジュールである。FE12は、ホスト4から受信したコマンドを解析し、後段のBE14やCSE18に振り分けを行う。FE12は、BE14やCSEが行わないCSD全体の管理も担う。FE12は、これらの処理を実行するためのプログラムに基づいて動作するプロセッサを含む。FE12は、これらの処理の一部を実行するハードウェアを備えていてもよい。
BE14は、ストレージメディア10の制御を行うモジュールである。BE14は、ホスト4からのライト要求に応じてホスト4から渡されたデータをストレージメディア10に保存したり、ホスト4からの読出し要求に応じてストレージメディア10からデータを読み出したりする制御を行う。BE14は、FTLの制御を実行する。BE14は、これらの処理を実行するためのプログラムに基づいて動作するプロセッサを含む。BE14は、これらの処理の一部を実行するハードウェアを備えていてもよい。
スロット16は、CPRG24を格納する領域である。スロット16は、CSD2内に1つ、あるいは複数設けられる。スロット16は、その数分のCPRG24を格納することができる。CPRG24の区別はスロット番号で行われる。スロット16は、例えばDRAMにより構成される。
CSE18は、ホスト4からのコンピューテーショナルストレージ制御コマンド(以降CSコマンドと呼ぶ)や、BE14やFE12からのCS制御要求に応じてコンピューテーショナルストレージ制御(以降CS制御と呼ぶ)を行う。CSD2内に1つ、あるいは、複数個のCSE18が設けられる。CSE18は、CPRG24を実行するハードウェアである。CSE18は、一例ではプロセッサである。CPRG24を実行すると、メモリ上にプログラム実行に必要となるスタック等の情報群が展開されることとなる。この、展開されたメモリイメージをCPRGインスタンスと呼ぶ。同一のCPRG24を用いて、同時に複数個のCPRGインスタンスを起動してもよい。複数個のCSE18が設けられる場合、同時にCSE18の個数分のCPRGインスタンスを実行可能である。同一CPRGを同時に複数個のCPRGインスタンスとして実行してもよい。
CPRG24はスロット16に格納され、CSE18上で実行されるプログラムである。CPRG24は、CSD2のベンダーが予め固定的にCSD2に実装する固定(Fixed)CPRGと、CSD2のユーザがCSD2にダウンロードして利用するダウンロード可能(Downloadable)CPRGを含む。CPRG24の引数や返り値の扱いや、起動方式については、後述する。
CPM20は、CPRG24からアクセス可能なRAM領域である。CPM20を利用して、HM8との間のデータ転送や、ストレージメディア10との間のデータ転送が可能である。CPM20は、例えばDRAMにより構成される。
SCM22は、FE12やBE14の処理に必要なRAM領域である。SCM22は、例えばSRAMにより構成される。
なお、BE14、FE12、SCM22、CSE18を区別せず、CSDC(CSD Controller)28と呼ぶこともある。CSDC28は、1のパッケージデバイスとして構成されてもよい。CSDC28は、例えばSoCととして構成される。
図2は、実施形態に係るCPRG24とCSDC28の関係を説明するための図である。CSDC28がCPRG24の実行を開始することを、「起動」と呼ぶ。「起動」には引数を伴うことができる。CPRG24は、実行を終了する際、CSDC28に返り値を返すことができる。
CPRG24が実行中にCSDC28に対して設定を行ったり、問い合わせを行ったりするための制御インタフェースのことを、CPRGヘルパー関数と呼ぶ。
[CPRG24の引数・返り値]
CPRG24は引数を用いることが可能である。この引数をCPRGパラメータと呼ぶ。CPRGパラメータには、ホスト4から渡すホストパラメータと、CSDC28から渡すCSDパラメータの、いずれか、あるいは、両方を含むことができる。
CPRGパラメータの構造例を以下に示す。

host_param,
csd_param

host_paramは、ホスト4からCSD2に渡すホストパラメータであり、CPM20に配置されたパラメータセットへのポインタとしてもよい。ホストパラメータとして何を渡すかは、CSDユーザが、CPRG24設計時に自由に決めることができる。
csd_paramは、CSD2からホスト4に渡すCSDパラメータであり、CPM20に配置したパラメータセットへのポインタとしてもよい
本明細書では、これ以降に詳述する以下の機能で、ホストパラメータが使用される。
[ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動機能]
[GCドリブンCPRG起動機能(基本形)]
H_SET_GC_DRIVEN_CPRG_HOST_PARAM()
[SRC単一ユニット・GCドリブンCPRG起動機能]
これらの機能を、ホストパラメータの設定機能と組み合わせると、ホスト4とCSD2との間で、どのLUA範囲に対する要求時に処理を行うかという条件判定等をより柔軟に行うことが可能となる。LUAは論理アドレスの一種であり、詳細は後述する。
本機能では、ホストパラメータに、例えば、CPRG24がデータ変換処理を行うLUAの範囲情報を渡す等の利用方法が考えられる。
CPRG24は、終了時に返り値を返してもよい。
ここでは、従来型CSDのCPRGが以下の返り値を返すものと定義する。従来型CSDは内部イベントに連動してCPRGを起動する仕組みを備えないCSDである。

host_ret
csd_ret

host_retは、CSD2からホスト4に渡すリターン値であり、CPM20に配置したパラメータセットへのポインタとしてもよい。
csd_retは、ホスト4からCSD2に渡すリターン値であり、CPM20に配置されたパラメータセットへのポインタとしてもよい。
ここで、CPRG起動方式とは、CSD2がCPRG24を実行する方式のことである。従来型CSDにおけるCPRG起動方式の例は以下がある。
(1)CPRG実行コマンドドリブン起動方式
CPRG実行コマンドドリブン起動方式は、CPRG実行コマンドによって実行される方式である。CPRG実行コマンドとは、ホスト4がCSD2に対して発行するコマンドである。
(2)IOコマンドドリブン起動方式
IOコマンドドリブン起動方式は、ストレージメディア10のアクセスのためのライトやリードのIOコマンドに連動してCPRG24が実行される方式である。IOコマンドは、ホスト4がCSD2に対して発行するコマンドである。
[ホストコマンド]
ホストコマンドは、ホスト4がCSD2に対して発行するコマンドである。以降の説明の便宜のため、従来型CSDには下記コマンド群があると定義する。なお、ここで行う定義は、あくまで、明細書の説明で利用するための便宜目的で定義するものである。実際には、ここに記述する通りのコマンドインターフェース(IF)でなくても同等機能を実現できるものについては従来機能と位置付ける。
[共通事項]
ホストコマンドに対するCSD2からホスト4への応答は、特別に説明記載のあるコマンド以外はRET(status)とする。この応答は、success,errorのステータスを返す。successはホストコマンドに対する処理が成功したことを示し、errorはホストコマンドに対する処理が失敗したことを示す。
[Adminコマンド]
これは、ホスト4がCSD2を管理するためのコマンド群である。ストレージドライブの能力の問い合わせや、状態の問い合わせ、状態管理等のためのコマンドが存在する。ここでは、非同期通知の情報取得に関連する、下記の3コマンドを定義する。
(1)非同期通知設定コマンド:H_CONF_ASYNC(event_flag)
このコマンドは、event_flagで指定したCSD2の非同期イベント発生時に、ホスト4から設定した非同期通知要求コマンドに対する応答を返すことを設定するためのコマンドである。非同期イベントとは、ホストからの要求とは独立した処理である。
(2)非同期通知要求コマンド:H_REQ_ASYNC()
このコマンドは、非同期通知を要求するコマンドである。
このコマンドに対して、success,errorのステータスと、非同期イベント種別と、詳細情報を格納したログIDとを返す応答:RET(status,event,log_id)が定義される。
(3)ログ取得コマンド:H_GET_LOG(log_id,hm_addr)
このコマンドは、log_idで指定したログIDの情報を、アドレスhm_addrの指し示すHM8の領域に取得するためのコマンドである。
図3は、実施形態に係るホスト4がCSD2から非同期通知を受け取り、情報を取得する例を説明するための図である。
CSD2において非同期イベント(Async Evnet)Aが発生する(#1)。この時点ではCSD2は、特段の応答をしない。
ホスト4がコマンドH_CONF_ASYNC()を発行して、非同期イベントA、Cに対しては通知応答有り、非同期イベントBに対しては通知応答無しを設定する(#2)。CSD2はこのコマンドに対する応答RET()を返す。
ホスト4が、コマンドH_REQ_ASYNC()を送信する(#3)。
ホスト4が、コマンドH_REQ_ASYNC()を送信する(#4)。
CSD2において非同期イベントCが発生する(#5)。非同期イベントAについては、通知応答有りが設定されれているので、CSD2は、#3のコマンドH_REQ_ASYNC()の応答RET(C,log_c)をホスト4に返す。
ホスト4は、応答RET(C,log_c)を確認し、詳細情報を取得するためのコマンドH_GET_LOG()を発行する(#6)。CSD2は、このコマンドに対する応答RET()を返す。
CSD2において非同期イベントBが発生する(#7)。非同期イベントBについては、通知応答無しが設定されれているので、CSD2は特段の動作をしない。
CSD2において非同期イベントAが発生する(#8)。非同期イベントAについては、通知応答有りが設定されれているので、CSD2は、#4のコマンドH_REQ_ASYNC()の応答RET(A,log_a)をホスト4に返す。
ホスト4は応答RET(A,log_a)を確認し、詳細情報を取得するためのコマンドH_GET_LOG()コマンドを発行する(#9)。CSD2は、このコマンドに対する応答RET()を返す。
[IOコマンド]
これは、ストレージメディア10にアクセスするためのコマンド群である。ホスト4からのアクセス単位は論理ブロック(Logical Block:以降LBとも呼ぶ)であり、アクセス位置は論理ブロックアドレス(Logical Block Address:以降LBAとも呼ぶ)で指定する。
下記2つのコマンドを定義する。
(1)ライトコマンド:H_WRITE(lba,hm_addr,lbn)
このコマンドは、論理ブロックアドレスlbaから連続するlbn個のLB領域に、HM8内のアドレスhm_addrのデータを書き込むためのコマンドである。
(2)リードコマンド:H_READ(hm_addr,lba,lbn)
このコマンドは、論理ブロックアドレスlbaから連続するlbn個のLB領域から、HM8内のアドレスhm_addrにデータを読み出すためのコマンドである。
[CSコマンド]
これは、CS制御を行うコマンド群である。下記コマンドを定義する。
(1)CPM TXコマンド:H_TX (cpm_addr,hm_addr,size)
このコマンドは、CPM20内のアドレスcpm_addrに、HM8内のアドレスhm_addrから、size分のデータを転送するためのコマンドである。
(2)CPM RXコマンド:H_RX (hm_addr,cpm_addr,size)
このコマンドは、CPM20内のアドレスcpm_addrから、HM8内のアドレスhm_addrに、size分のデータを転送するためのコマンドである。
(3)CPRGロードコマンド:H_LOAD (slot,hm_addr)
このコマンドは、スロット番号slotにHM8内のアドレスhm_addrから、CPRG24をダウンロードするためのコマンドである。
(4)CPRG実行コマンド:H_EXEC(slot,cpm_addr)
このコマンドは、スロット番号slotに格納されたCPRG24を実行するためのコマンドである。CPRG24の起動に際して、H_EXEC()コマンドは、CPRG24の引数host_paramに、コマンドで指定されたCPM20内のアドレスであるcpm_addrを指定する。
このコマンドに対して、success,errorのステータスと、CPRG24の返り値であるhost_retとを返すコマンド:RET(status,host_ret)が定義される。
[CPM利用IOコマンド]
これは、ストレージメディア10にアクセスするIOコマンドの転送元と転送先のバッファとしてCPM20を指定するためのコマンドである。
(1)CPM利用ライトコマンド:H_WRITE_WC(lba,cpm_addr,lbn)
このコマンドは、論理ブロックアドレスlbaから連続するlbn個のLB領域に、CPM20内のアドレスcpm_addrのデータを書き込むためのコマンドである。
(2)CPM利用リードコマンド:H_READ_WC(cpm_addr,lba,lbn)
このコマンドは、論理ブロックアドレスlbaから連続するlbn個のLB領域から、CPM20内のアドレスcpm_addrにデータを読み出すためのコマンドである。
実施形態に係るCPRG起動方式は、従来型CSDに係る(1)CPRG実行コマンドドリブン起動方式や(2)IOコマンドドリブン起動方式とは異なり、イベントに連動する方式である。実施形態に係るCPRG起動方式を説明する前に、前提として、FTLとGCの概略を説明する。
[FTL・LUT・ゾーン・LUA・PUA]
CSD2は、ホスト4からの論理ブロック単位でのランダムライト、ランダムリードの要求に応える必要がある。また、CSD2はストレージメディア10を内蔵するが、このストレージメディア10の特性として、NAND型のフラッシュメモリのように、書き込み順序や消去単位に制約がある場合、CSD2は、ホスト4が指定する論理的なアドレスと、ストレージメディア10内の物理的なアドレスの対応関係を管理する必要が生じる。この、論理アドレスと物理アドレスのマッピング管理のことを、FTLと呼ぶ。
ここでは、以下のメディア特性を持つストレージメディア10に対して、FTLとGCに関する用語定義を兼ねた説明を行う。
・書き込み単位はユニットである
・消去単位はゾーンである
・ゾーンは複数ユニットよりなる
・ユニットへの書き込みは、ゾーン消去後、ゾーンの先頭ユニットよりシーケンシャルに行う必要がある
・データの読出しはユニット単位でランダム実行可能である
FTLは、このメディア特性に則り、論理アドレスと物理アドレスのマッピングをユニット単位で管理する。
ユニット単位の論理アドレスをLUA(Logical Unit Address)と呼ぶ。
ユニット単位の物理アドレスをPUA(Phisical Unit Address)と呼ぶ。PUAは、ゾーン番号と、ゾーン内ユニット番号の組合せよりなる。
LUAからPUAへの変換テーブルをLUT(Look Up Table)と呼ぶ。
なお、ここで、ユニットサイズは、所謂、NAND型のフラッシュメモリに対する1回のプログラムコマンドによる書き込みサイズ(いわゆるページ)と一致する必要があるというわけではない。また、ユニットサイズは、ホスト4が指定する論理ブロックのサイズと一致する必要があるわけでもない。ユニットの説明は、FTLのアドレス変換管理上、論理的にユニット単位で扱うことができるということを意図している。
いわゆるページや論理ブロックのサイズがユニットサイズと差がある場合は、FTLによるアドレス変換機構の外で調整がなされることを意図する。例えば、以下のような処理を想定する。
(1)N個の連続する論理ブロックを1つのユニットとしてまとめて扱うこととし、論理ブロックアドレスからLUAへの変換は1つのユニットをNによる除算により得るものとする。ホスト4からのユニットに満たないサイズの書き込み要求は、ユニット単位のリード・モディファイ・ライトに置き換えて処理をすることとする。ユニットに満たないサイズの読出し要求は、ユニット単位のリードを行い、必要部分を切り出してホスト4に返すこととする。
(2)複数の連続するユニットをまとめて一つのページとして扱うこととし、フラッシュメモリへの書き込みは、ページサイズ分のユニットの書き込み要求をまとめて1回のプログラムコマンドとすることとする。
次に、ホスト4からの要求とストレージメディア10へのアクセスとも、ユニット単位のアドレス空間上のものとしてFTLとGCの説明をする。
[ゾーン・ユニットの状態]
ゾーンの状態は、全ユニットが未書き込みの状態、いずれかのユニットが書き込み中の状態、及び全ユニットが書き込み済みの状態が存在する。各状態をfree、dst、usedと呼ぶ。
ホストライトの書き込み対象のゾーンと、GCの書き込み対象のゾーンを区別する場合、ホストライトの書き込み対象のゾーンの状態をhost_dst、GCの書き込み対象のゾーンの状態をgc_dstと呼ぶ。書き込み対象のゾーンとは、ホストライトの書き込み対象として選択され、これから書き込みをしようとしているゾーンと、書き込み対象として選択され、既に途中まで書き込まれており、引き続き書き込みをしようとしているゾーンを含む。また、GCの読出し対象のゾーンの状態をgc_srcと呼ぶ。
ユニットの状態は、未書き込みの状態、有効データを保有する状態、及び無効データを保有する状態が存在する。図4は、本実施形態の図面内のユニットの状態を説明するための図である。有効データとは、LUTの指し示すユニットの値であることを意味する。無効データとは、有効データ以外のデータである。無効データは非有効データとも呼ぶ。無効データの例は、FTLの管理情報でもよい。これ以降の図の説明では、図4に示すように、有効データも無効データも格納されていない状態の未書き込みユニットと、有効データが格納(保有)されている状態の有効データ保有ユニットと、無効データが格納(保有)されている状態の無効データ保有ユニットと、はそれぞれ区別可能に表示される。
[FTL・GCの動作]
ゾーンあたり0x80個のユニットを持ち、0x30個のゾーンを持つFTLを例に動作を説明する。数字の前に「0x」がつく場合、その数字が16進数表記であることを示す。zone=XXの表記で、XXに数字が記載された場合、XXは16進数の値であり、XX番目のゾーンであるということを示す。PUA=YY_ZZの表記で、YY、ZZに数字が記載された場合、YY、ZZはともに16進数の値であり、YY番目のゾーンのZZ番目のユニットであるということを示す。
[ステップ1:ホストライトによるLUT管理]
図5は、ステップ1において、実施形態に係るFTLが、LUTによりゾーンの状態を管理する一例を説明するための図である。全ゾーンがfreeの状態で、ホスト4からLUA=a、b、cの順にデータA、B、Cの書き込みがあると、FTLは、freeゾーンから一つ(ここではゾーン=00)をdstとして選択し、シーケンシャルにデータを書き込む。
このように、ホスト4からの書き込み要求(ホストライト)の書き込み先のゾーンの状態を、host_dstと呼ぶ。
[ステップ2:無効データ保有ユニットの発生]
図6は、ステップ2において、実施形態に係るFTLが、LUTによりゾーンの状態を管理する一例を説明するための図である。ステップ1の後、LUA=bにデータB´の書き込みがあると、FTLはデータB´の値をPUA=00_03に書き込み、LUTのb番地に00_03を設定する。これにともない、PUA=00_01のユニットへの参照がなくなり、該当ユニットの状態は無効データ保有ユニットに遷移する。
[ステップ3:GC]
書込みを続けると、ゾーン内に無効データ保有ユニットを内包するusedのゾーンが複数存在する状況となる。freeのゾーン数が一定数を下回ると、ホスト4からの書き込み要求時にhost_dstにするためのゾーンの捻出が出来なくなる。
このため、FTLは、usedのゾーンから有効データ保有ユニットのデータだけを集めて別のゾーンに書き直しするとともに、移動の終わった古いゾーンを必要に応じて消去してfreeに戻すという処理を行う。これがGCである。
以下に、gc_dstの状態のゾーンにはゾーン=20が割り当てられている場合に、usedのゾーン=10がgc_srcに選択されたという例を利用して、GCがどのように進むかを説明する。
[ステップ3-1:GCスタート]
図7は、GCスタート時において、実施形態に係るFTLが、LUTによりゾーンの状態を管理する一例を説明するための図である。図7は、ゾーン=20がgc_dstとして書き込み中、ゾーン=10がusedだった状態からgc_srcとして選択された状態(#a1)を図示する。“inv”は無効データを示す。
ゾーン=10には、PUA=10_00,10_02,10_1f,…と飛び飛びに有効データ保有ユニットが存在している。LUTのLUA=d、e、f番地は、各々、ゾーン=10の該当ユニットのPUAを指している。ゾーン=20は、PUA=20_00,…20_10が、有効データ保有ユニットである。
[ステップ3-2:有効データ保有ユニットのデータ移動]
図8は、有効データ保有ユニットのデータ移動時において、実施形態に係るFTLが、LUTによりゾーンの状態を管理する一例を説明するための図である。
FTLは、gc_src(zone=10)から有効データ保有ユニット(0x00番目のユニット)のデータ(PUA=00_00のデータDの値)をSCM22に読出し(#a2)、gc_dst(zone=20)のユニット(PUA=20_11)に書き込む(#a3)。
このとき、LUTのLUA=d番地のPUAは10_00を指しているため、PUA=20_11はまだ無効データである。
[ステップ3-3:LUTの更新]
図9は、LUTの更新時において、実施形態に係るFTLが、LUTによりゾーンの状態を管理する一例を説明するための図である。
FTLは、コピー元のユニットのデータが有効データのままであるか(LUA=dのPUAが10_00のままであるか)を確認する。コピー元のユニットのデータが有効データであった場合は、FTLは、LUA=dの指し先をコピー先のアドレス(PUA=20_11)に書き換える(#a4)。
これにより、PUA=10_00のユニットは無効データ保有ユニットとなり、PUA=20_11のユニットが有効データ保有ユニットとなる。
コピー元のユニットのデータが有効データのままではなかった場合は、FTLは、ステップ3-2の実行中にLUA=dのアドレスにホストライトが発生したものと見做して、LUTの更新は行わない。これにより、ホスト4からの書き込みとGCによる書き込みの排他処理がなされる。
[ステップ3-4:gc_srcのfree]
図10は、gc_srcをfreeにする際、実施形態に係るFTLが、LUTによりゾーンの状態を管理する一例を説明するための図である。
[ステップ3-2,3-3]と同様のユニットデータの移動とLUTの更新が繰り返されることで、gc_srcの全ユニットが無効データ保有の状態となる。この状態となったら、gc_srcのゾーンのデータを消去して、gc_srcのゾーンをfreeのゾーンにする(#a5)。
[GCの目的と特性]
GCは、以下のような目的で実行される。
(1)GC目的。すなわち、無効領域の解放による書き込み可能領域の獲得。
(2)リフレッシュ目的。ストレージメディア10のデータリテンション特性、すなわち、或るゾーンに書いたデータは、時間とともに信頼性が劣化するという特性に合わせ、書き込み終了から時間の経過したゾーンのデータを別のゾーンへの移動。
(3)ウェアレベリング目的。ストレージメディア10のゾーンの消去回数による寿命劣化特性に合わせ、ストレージメディア10の全ゾーンの消去回数の平準化による製品寿命の延伸。
(1)GC目的のGCでは、gc_srcは、無効データ保有ユニットが多く含まれるゾーンの中から選択される。これは、hotデータを多く含むゾーンは比較的短い期間のうちにgc_srcとして選択されることを意味している。
一方、(2)リフレッシュ目的や(3)ウェアレベリング目的の場合、gc_srcは、書き込み後の経過時間が長いゾーンの中から選択される。これは、ホスト4が一旦書き込んだデータは、仮にそれがcoldデータであったとしても、ある頻度においてGCによる場所移動がなされるということを意味している。
GCの開始タイミングは、間接的にはホスト4からの書き込みが関係しているといえるが、直接的には、CSD2内でホスト制御とは非同期に決定される。
[データ属性に応じたゾーンの使い分け]
書き込むデータの属性にあわせて、書き込み先のゾーンを使い分けることでFTLの性能向上の見込まれる技術があることが知られている。以下に例をあげる。
書き込み頻度の高いもの同士、低いもの同士を同一ゾーンにまとめることにより、無効データの多く発生するゾーンと、ほとんど発生しないゾーンに使い分けることが可能となり、GC効率を上げて書込み倍率(Write Amplification Factor:WAF)の改善につなげることができる。書込み倍率とは、ホスト4から供給されるデータに対して何倍のデータをストレージメディア10に書き込んでいるかを示す指標である。
SLC/TLC/QLCの使い分けといった類の技術の活用により、「容量コストは高いが高速アクセス可能なゾーン」と「容量コストは低いが低速アクセスしかできないゾーン」を使い分けることができる。読出し頻度の高いデータを前者に割り当て、読出し頻度の低いデータを後者に割り当てることで、システム全体でみたときに「読出し頻度が高いデータの読出し応答が速く、かつ、読出し頻度の低いデータの大容量保存が可能」といった適材化を図ることが可能となる。
SLC/TLC/QLCとは、ストレージメディア10のメモリセルに何ビットのデータが書き込まれるかに関する書き込みモードである。ストレージメディア10は、メモリセル当たりに何ビットのデータが書き込まれるかにより異なる複数の書き込みモードにより書き込み動作を実行することができる。メモリセル当たりに1ビットのデータが書き込まれる書き込みモードはSLC(Single Level Cell)モードと呼ぶ。メモリセル当たりに3ビットのデータが書き込まれる書き込みモードはTLC(Triple Level Cell)モードと呼ぶ。メモリセル当たりに4ビットのデータが書き込まれる書き込みモードはQLC(Quad Level Cell)モードと呼ぶ。メモリセル当たりに2ビットのデータが書き込まれる書き込みモードがあってもよい。
[アプリケーションとGCのオーバーラップ]
ストレージドライブを利用するアプリケーションの中には、例えば以下のような処理を行うものがある。
ストレージドライブに保存したデータを読出して、特定のルールに沿ったデータ変更を行い、ストレージドライブに書き戻しを行いたい場合がある。書き戻しは、急いで行う必要はないものの、大量のデータを書き戻す場合がある。
従来技術で、これを実現する場合、以下のいずれかの手段をとることとなる。
(1)非CSDのストレージドライブの場合
ステップ1:ホストがストレージドライブからホストメモリにデータを読出す。
ステップ2:ホストのCPUがホストメモリのデータに対して処理を施す。
ステップ3:ホストがストレージドライブに対してホストメモリのデータを書き戻す。
(2)従来型CSDの場合
ステップ1:CSDCがCPM20にストレージメディアからデータを読み出す。
ステップ2:CPRGがCPM20上のデータに対して処理を施す。
ステップ3:CSDCがストレージメディアに対してCPM20上のデータを書き戻す。
一方で、FTLを内部に持つストレージドライブは、GCの処理の中でホスト処理とは非同期に「データの読出し」と「データの書き戻し」を大量に行っている。
[GCの目的と特性]で説明した理由により、書き込まれたデータがcoldデータであったとしてもある頻度でGCが実行される。
つまり、非CSDのストレージドライブでも、従来型CSDでも、GC(すなわち、ストレージドライブによる制御)とアプリケーション(すなわち、ホストによる制御)による大量のデータ読出し、大量のデータ書き戻しが重複して実行されている。このことは、以下の現象を引き起こす。
(1)ストレージドライブが備えるストレージメディアのIOバンド幅を消費し、本来行いたいアプリケーション処理の性能低下につながる
(2)ストレージメディアの特性としてゾーンの消去回数に上限があるということがある。このため、消去回数が増えるとエラー率が上がったり、ストレージメディアの読み書きに時間を要するようになったり、利用できるストレージメディアの容量が減ったりするようになる。複数の書き込みの重複は、ストレージドライブの短命化につながる。
なお、大量のデータ読出し、大量のデータ書き戻しが重複して実行される例は以下も含む。
(例1)データ変換(単一ユニット・同一LUA)
ストレージメディアの或るLUAに保存した単一ユニットサイズのデータを読出して、特定のルールに沿ったデータ変更を行い、同一のLUAに書き戻す場合がある。データ変換は、急いで行う必要はないものの、大量に行う必要がある。
(例2)データ変換(複数ユニット・同一LUA)
ストレージメディアの或るLUA群に保存した複数ユニットサイズのデータを読出して、特定のルールに沿ったデータ変更を行い、同一のLUA群に書き戻す場合がある。データ変換は、急いで行う必要はないものの、大量に行う必要がある。
(例3)コンパクション
ストレージメディアに保存したデータの中に不要扱いとなったデータが存在する時、ストレージメディアの使用量削減や性能向上のため、ホストのアプリケーションはコンパクションを行う場合がある。コンパクションはGCと似ているが、GCはドライブ内のFTLが実行するのに対して、コンパクションはホストが実行する違いがある。コンパクションが実行されると、不要データに割り当てられている(allocate)LUAを解放する(deallocate)。コンパクションは、急いで行う必要はない。
(例4)PUAアドレスオーダー変更
LUAでは連続するはずの一連のデータであってもPUAでは非連続となることがある。ホストがデータ書き込み時にランダムオーダーで書き込んだ場合や、LUAに対してシーケンシャルに書いたとしても、同時に別のデータの書き込みも行ったような場合に起こり得る。
ストレージ性能を考慮すると、PUAベースでも連続するようPUAアドレスオーダーを変更したい場合がある。
(例5)データ属性の振るい分け
ストレージメディアに保存したデータの内容を確認し、属性によりデータ格納位置を振るい分けすることで、該当データをストレージメディア内のデータ属性に適した位置に配置できるようにしたい場合がある。データをHot/Cold等の属性に適した位置に配置することで、ストレージメディアの性能が向上する効果が得られることがある。
(例6)データ移動
ストレージメディアと或るLUAに保存したデータを、別のLUAに移動したい場合がある。
(例7)データ変換(複数ユニット・非同一LUA)
ストレージメディアの或るLUA群に保存した複数ユニットサイズのデータを読出して、特定のルールに沿ったデータ変換を行い、読み出したLUA群とは異なるLUA群に書き戻したい場合がある。
[ストレージドライブ内部イベントにCPRGを連動させる仕組みの不在]
ストレージドライブは、GC以外にも各種内部イベントを管理している。内部イベントには、タイマーイベントや、温度の閾値超えの検出イベント、エラー発生イベント、ストレージメディアに保存したデータ信頼性維持のための定期的なデータスキャンリード処理イベント等がある。
従来型CSDでは、こうした内部イベントに連動してCPRGを起動する仕組みがないため、以下の課題があった。
(1)CPRG起動するタイミングの自由度が限定的であった。
ホストからのCPRG起動コマンド実行時や、リードやライト等のIOコマンド実行時に連動してCPRGを起動することしかできず、従来型CSDのユーザにとって、CPRGの設計自由度が低かった。
(2)内部イベントに連動した処理を行うためのオーバーヘッドが大きかった。
CPRGはイベントに連動した処理を行うことができないため、ホスト側のアプリケーションがイベントに連動した処理を行う必要があった。このためには、従来型CSDがイベント発生をホストに通知して、ホストが所望の処理を行う必要があった。
これにより、イベント発生毎のホストへの通知というオーバーヘッドが発生し、処理をホストで行うことによるホストリソースの消費を招くことになる。さらに、イベントに連動する処理内容が従来型CSDの状態問い合わせを含む場合、さらなるホスト/CSD間の通信オーバーヘッドを生じることとなっていた。
(3)消費電力の無駄が生じていた。
従来型CSDは、ホストからの要求がなく、かつ、ストレージドライブの内部イベント処理が不要な期間は、電力消費を抑える目的でスリープモードに設定されていることがある。
内部イベントに連動してCPRGを起動するためには、ホストがCPRG起動のためのホストコマンドを従来型CSDに送信する。この送信タイミングで従来型CSDがスリープモードであった場合、従来型CSDはCPRG実行のためにスリープモードから通常モードに切り替える処理をする必要があった。もし、CPRGの内容がタイムセンシティブでない場合であっても、従来型CSDはCPRGの実行のために自身の関連回路に通電する必要が生じ、消費電力に無駄が生じていた。
実施形態に係るCSDが、内部イベントにCPRG起動を連動させる仕組みに必要な機能について説明する。
[1.非同期通知設定機能]
[1.1.CPRG24からホスト4への非同期通知設定機能]
CPRG24は、ホスト4の処理とは非同期なタイミングで、ホスト4に対して非同期通知を送信する。
図11は、実施形態に係るCSD2における非同期通知設定機能の一例を説明するためのブロック図である。
CSDC28は、ホスト4に対する非同期通知と情報取得の機能を備えている。CSDC28は、非同期通知機能モジュールとして、ホストコマンドH_CONF_ASYNC()、H_REQ_ASYNC()に応答する機能モジュールである非同期イベントコントローラ(Asynchronous Event Controller、以降AECと呼ぶ)42を備える。CSDC28は、情報取得機能モジュールとして、ホストコマンドのH_GET_LOG()に応答する機能モジュールであるログコントローラ(Log Controller、以降LOGCと呼ぶ)を備える。
ホスト4がホストコマンドA_CONF_ASYNC()で指定可能なeventは、「CPRG非同期通知」を含む。
ホスト4がホストコマンドH_GET_LOG()で指定可能なlog_idは、「CPRGログ」を含む。
AEC42は、CPRG24から「CPRG非同期通知」を設定するためのCPRGヘルパー関数:c_set_async_notice()を含む。
LOGC44は、CPRG24から「CPRGログ」を設定するためのCPRGヘルパー関数:c_set_log()を含む。
CPRGヘルパー関数:c_set_log()は、CPRG24がCPM20上に作成したログ46をLOGC44に取り込めるよう、cpm_addrとsizeを引数で指定できる。
なお、ここでは単純な例として、ホストコマンドA_CONF_ASYNC()で指定可能なeventとして「CPRG非同期通知」を1種類、ホストコマンドH_GET_LOG()で指定可能なlog_idとして「CPRGログ」を1種類含む例を示した。
この発展形として、CPRG起動要因に応じてeventやlog_idを使い分ける等、event、log_idとも、複数種類を指定することとしてもよい。
従来型CSDでも、ホストコマンドA_CONF_ASYNC()、H_REQ_ASYNC()、H_GET_LOG()が定義される場合がある。その場合、ホストコマンドインタフェースとしては、実施形態に係るホストコマンドA_CONF_ASYNC()、H_REQ_ASYNC()、H_GET_LOG()をこれらの従来型のホストコマンドと同じコマンドを使って、引数で区別しても良いし、別のコマンドとして定義してもよい。
[1.非同期通知設定機能]によれば、CPRG24がホスト4に対して非同期の通知を送ることができるようになる。
[2.内部イベントドリブンCPRG起動機能(基本形)]
CSD2が内部イベントに連動してCPRG24を起動する機能を説明する。
内部イベントとは、CSD2内のタイマーからの通知、CSD2内の温度センサーからの通知、CSD2内のストレージメディア10使用量の閾値到達の通知等、ホスト4からの制御とは非同期に発生するイベントであればなんでもよい。ここでは、基本形として、イベントは1種類、対象となるスロット(CPRG)は1つという構成を説明する。
[2.1.内部イベントドリブンCPRG起動機能]
図12は、実施形態に係るCSD2における内部イベントドリブンCPRG起動機能の一例を説明するためのブロック図である。
CSDC28は、内部イベント54に連動してCPRG24を起動するイベントドリブンCPRGコントローラ(Event Driven CPRG Controller、以降EDCCと呼ぶ)52を含む。
EDCC52は以下の機能を備える。
(1)ホスト4からの、内部イベントドリブンCPRG起動を有効とするか無効とするかの設定コマンドに対応する機能。
ホスト4は、ホストコマンドとして、内部イベントに連動してCPRG24を起動する機能をイネーブルする内部イベントドリブン機能イネーブルコマンド:H_ENABLE_EVENT_DRIVEN_CPRG()を備える。
ホスト4は、ホストコマンドとして、内部イベントに連動してCPRG24を起動する機能をディセーブルする内部イベントドリブン機能ディセーブルコマンド:H_DISABLE_EVENT_DRIVEN_CPRG()を備える。
(2)内部イベントドリブン機能がイネーブルの状態の時、CSD2の内部イベント発生器からのイベント発生通知を受けると、CPRG24を起動する機能。
図13は、実施形態に係る、[1.内部イベントドリブンCPRG起動機能(基本形)]と[1.1.CPRG24からホスト4への非同期通知設定機能部]の組合せた場合の、ホスト4、CSDC28、CPRG24間の制御の一例を説明するためのタイミング図である。
CSDC28の中で内部イベントが発生する(#b1)。この時点では、内部イベントドリブン機能がディセーブル状態であり、特段の処理は行われない。
#b1の処理とは非同期であるが、ホスト4は「CPRG非同期通知」を設定するコマンドH_CONF_ASYNC()をCSDC28に対して発行する(#b2)。
ホスト4はコマンドH_REQ_ASYNC()をCSDC28に対して発行する(#b3、#b4)。
ホスト4が内部イベントドリブン機能を有効にするコマンドH_ENABLE_EVENT_DRIVEN_CPRG()をCSDC28に対して発行する(#b5)。
#b5の処理とは非同期であるが、CSDC28の中で内部イベントが発生する(#b6)。この時点では、内部イベントドリブン機能がイネーブル状態であるため、すぐに#b7の処理が行われる。
CSDC28は、CPRG24を起動する(#b7)。CPRG24は演算処理を行い、ホスト4に対して通知したいことがあったとする。そのとき、#b8、#b9が実行される。
CPRG24は、ホスト4に伝えたいログをコマンドc_set_log()を使ってCSDC28に設定する(#b8)。
CPRG24は、ホスト4に「CPRG非同期通知」を伝えるコマンドc_set_async_notice()を使ってCSDC28に非同期通知要を設定する(#b9)。
#b9の設定に伴い、CSDC28は、#b3のコマンドH_REQ_ASYNC()に対する応答(非同期通知)を、ホスト4に返す(#b3´)。CPRG24は終了する(#b7´)。
ホスト4は、CPRG24からの非同期通知を受け取り、必要に応じてホストGET_LOG()を発行して詳細ログを取得する(#b10)。
#b10の処理とは非同期であるが、CSDC28の中で内部イベントが発生する(#b11)。この時点では、内部イベントドリブン機能がイネーブル状態であるため、すぐに#b12の処理が行われる。
CSDC28は、CPRG24を起動する(#b12)。CPRG24は演算処理を行い、ホスト4に対して通知したいことがなかったとする。#b13が実行される。CPRG24は終了する(#b12´)。
#b12の処理とは非同期であるが、ホスト4は、内部イベントドリブン機能を無効にするコマンドH_DISABLE_EVENT_DRIVEN_CPRG()をCSDC28に対して発行する(#b13)。
#b13の処理とは非同期であるが、CSDC28の中で内部イベントが発生する(#b14)。この時点では、内部イベントドリブン機能がディセーブル状態となっているため、特段の処理は行われない。
図14は、実施形態に係る、ホスト4、CSDC28、CPRG24間の制御の他の一例を説明するためのタイミング図である。
図13の制御例において、CPRG24の実行中に内部イベントドリブン機能ディセーブルコマンドH_DISABLE_EVENT_DRIVEN_CPRG()が発行された際、図14に示すように、CPRG24の実行終了を待ち合わせてから応答を返すこととしてもよい。
CPRG24の実行中に、ホスト4がコマンドH_DISABLE_EVENT_DRIVEN_CPRG()を発行する(#c1)。
CSDC28はCPRG24の実行終了を待ち合わせる。CPRG24の実行が終了すると(#c2)、CSDC28はホスト4にコマンドH_DISABLE_EVENT_DRIVEN_CPRG()の応答を返す(#c3)。
これにより、ホスト4はCPRG24の実行が完全に終了したことを認識することができる。
[2.2.マルチインスタンス対応・内部イベントドリブンCPRG起動機能]
CSDC28が備えるEDCC52は、マルチインスタンスに対応した内部イベントドリブンCPRG起動機能を備えてもよい。マルチインスタンス対応の内部イベントドリブンCPRG起動機能とは、内部イベント発生に伴うCPRG24の起動によりCPRG24を実行中に、次の内部イベントが発生した場合に、CSE18のリソースに空きがあれば次のCPRG24を実行開始するという機能である。
図15は、実施形態に係るCSD2におけるマルチインスタンス対応・内部イベントドリブンCPRG起動機能の一例を説明するためのタイミング図である。図15は、CSE18の数が2つである場合の、マルチインスタンス対応・内部イベントドリブンCPRG起動を図示する。
CSDC28の中で内部イベントが発生する(#d1)。この時点では、CPRG24のインスタンス数は0である。利用可能なCSE18があるため、CSDC28は、CPRG24を起動し、CPRGインスタンス1を生成する。インスタンス数は1となる。
CSDC28の中で内部イベントが発生する(#d2)。この時点では、CPRG24のインスタンス数は1である。利用可能なCSE18があるため、CSDC28は、CPRG24を起動し、CPRGインスタンス2を生成する。インスタンス数は2となる。
CSDC28の中で内部イベントが発生する(#d3)。この時点では、CPRG24のインスタンス数は2である。利用可能なCSE18はないため、CSDC28は、CPRG24を起動しない。
#1の処理で起動したCPRGインスタンス1の処理が終了する(#d1´)。この時点で、CSDC28のインスタンス数は1となる。
CSDC28の中で内部イベントが発生する(#d4)。この時点では、CPRG24のインスタンス数は1である。利用可能なCSE18があるため、CSDC28は、CPRG24を起動し、CPRGインスタンス1を生成する。
図15は、は単純な例として、イベント発生時にリソースがない場合、単純にそのイベントを無視するという方式を説明した。
EDCC52がイベントの発生を覚えておいて、CSE18のリソースに空きができた時点までCPRG24の起動を遅延させるという方式としてもよい。
なお、CPRG24は、演算処理を実行する際、CPM20等のリソースを利用することが想定される。
複数のCPRGインスタンスが同時に起動する際、各CPRGインスタンスがどのリソースを利用すればよいのかを知るために、EDCC52は、CPRG24の引数のcsd_paramにCSDインスタンス番号(CSDインスタンスを一意に特定するための番号)を渡すこととしてもよい。
また、ホスト4は、CPM20のリソース割り当て都合等により、CSE18の数より少ない数のインスタンスしか同時起動して欲しくないというケースが考えられる。これに対処するために、内部イベントドリブンのCPRG24の同時起動数の上限を設定する機能を設けてもよい。
[2.2.マルチインスタンス対応・内部イベントドリブンCPRG起動機能]によれば、CPRGインスタンス実行中に内部イベントが発行された際、CSE18のリソースに余裕がある場合は、次のCPRG24が起動される。
なお、CPRGインスタンスを上限の数だけ実行中に、次の内部イベントが発行された際、内部イベントの発生を記憶しておき、現在実行中のCPRGインスタンスが終了するのを待ち合わせてCPRG24が起動されてもよい。
CPRG24の起動時にCPRG24は、CSDインスタンス番号を含むCSDパラメータcsd_paramをホスト4に渡してもよい。
ホスト4は、同時実行可能な内部イベントドリブンのCPRGインスタンス数の上限を設定する内部イベントドリブンCPRG同時実行上限数設定コマンド:H_SET_MAX_EVENT_DRIVEN_CPRG(num)を発行してもよい。
[2.3.ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動機能]
CSDC28が備えるEDCC52は、CPRG24の起動時にCPRG24に渡すホストパラメータをホスト4から設定される機能を備える。
従来型CSDにおいては、ホストが発行するCPRG実行コマンドやIOコマンドに同期してCPRGが起動される。この場合、ホストはCPRGの起動コマンドの引数にホストパラメータを設定することが可能であった。
実施形態に係るCSDの場合、ホストコマンドとは非同期にCPRGインスタンスが生成されるため、CSD2へホストパラメータを別途渡す必要がある。ホストパラメータの渡し方の幾つかの方式を示す。
(1)ホストパラメータ固定方式
最も単純なホストパラメータ設定方式である。この方式では、内部イベントドリブン機能イネーブルコマンドに、host_paramが追加される。イネーブル中に起動される全インスタンスのホストパラメータに同じ値が設定される。
内部イベントドリブン機能イネーブルコマンド(host_param拡張):H_ENABLE_EVENT_DRIVEN_CPRG(host_param)は、内部イベントドリブン機能をイネーブルし、CPRG24の起動時に、host_paramを引数としてCSD2に渡す。
(2)ホストパラメータ設定コマンド方式
ホストパラメータ設定コマンドを設ける方式である。この方式では、内部イベントドリブン機能イネーブル中に、CPRGインスタンスのホストパラメータの値が動的に変更できる。
内部イベントドリブン機能ホストパラメータ設定コマンド:H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM (host_param)は、内部イベントで起動するCPRGインスタンスのホストパラメータを設定する。
(3)インスタンス番号毎ホストパラメータ設定コマンド方式
CPRGインスタンス番号毎にホストパラメータ設定の可能なコマンドを設ける方式である。この方式では、内部イベントドリブン機能イネーブル中に、CPRGインスタンス毎にホストパラメータの値が動的に変更できる。
内部イベントドリブン機能ホストパラメータ設定コマンド(インスタンス番号毎拡張):H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM (instance_no,host_param)は、インスタンス番号instance_noで指定した内部イベントで起動するCPRGイスタンスのホストパラメータを設定する。
図16は、実施形態に係るCSD2におけるホストパラメータ設定コマンド方式によるホストパラメータ設定の一例を説明するためのタイミング図である。
ホスト4は、コマンドH_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(A)をCSDC28に発行し、内部イベントで起動するCPRG24のホストパラメータに“A”を設定する(#e1)。ホストパラメータ“A”は数値でも、文字列でも、あるいはさらに複雑なデータ構造のデータでもよい。
ホスト4は、コマンドH_SET_ENABLE_EVENT_DRIVEN_CPRG()をCSDC28に発行し、内部イベントドリブン機能をイネーブルにする(#e2)。
#e2の処理とは非同期であるが、CSDS28の中で内部イベントが発生する(#e3)。CSDC28はCPRG24を起動する。このとき、CSDC28は起動したCPRG24のインスタンスの引数host_paramに“A”を指定する。
#e3の処理とは非同期であるが、CSDS28の中で内部イベントが発生する(#e4)。CSDC28はCPRG24を起動する。このとき、CSDC28は起動したCPRG24のインスタンスの引数host_paramに“A”を指定する。
CSDS28の中で内部イベントが発生する(#e5)。CSDC28はCPRG24を起動する。このとき、CSDC28は起動したCPRG24のインスタンスの引数host_paramに“A”を指定する。
#e5の処理とは非同期であるが、ホスト4は、コマンドH_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(B)をCSDC28に発行し、内部イベントで起動するCPRGのホストパラメータにBを設定する(#e6)。
#e6の処理とは非同期であるが、CSDS28の中で内部イベントが発生する(#e7)。CSDC28はCPRG24を起動する。このとき、CSDC28は起動したCPRG24のインスタンスの引数host_paramに“B”を指定する。
#e7の処理で生成したCPRGインスタンス実行中に、ホスト4は、コマンドH_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(C)をCSDC28に発行し、内部イベントで起動するCPRGのホストパラメータに“C”を設定する(#e8)。CSDC28は、ホスト4への応答を返す(#e8´)前に、切り替え前のhost_param=Bを伴って実行中のCPRGインスタンスの終了を待ち合わせる。
CPRGインスタンスの終了待ち合わせ中に、CSDS28の中で内部イベントが発生する(#e9)。CSDC28はCPRG24を起動する。このとき、CSDC28は引数host_paramに“C”を指定する。
引数host_param=Bで実行中のCPRGインスタンスが終了する(#e7´)。
#e7´の処理後、CSDC28は、#e8のコマンドH_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()に対する応答をホスト4に返す(#e8´)。
なお、コマンドH_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()の発行時に、前のパラメータで実行中のCPRGインスタンスがあった場合、該当CPRGインスタンスの終了を待ち合わせることについては省略してもよい。
[2.4.コンフィグレーション機能付き・内部イベントドリブンCPRG起動機能]
CSDC28が備えるEDCC52は、内部イベントドリブン機能のコンフィグレーションをホスト4から設定する機能を備える。
EDCC52は、例えば、「温度変化検出」というイベントに対して、「温度がしきい値を超えたときのみCPRGを起動する」、タイマーイベントに対して「イベント検出時からインターバル時間が経過したらCPRGを起動する」等の起動条件をコンフィグレーションとして設定するためのインタフェースを持つ。コンフィグレーションの幾つかの設定方式を示す。
(1)コンフィグレーション固定方式
最も単純なコンフィグレーション設定方式である。この方式では、内部イベントドリブン機能イネーブルコマンドに、コンフィグレーション値configurationが追加される。イネーブル中は同じコンフィグレーション値が適用される。
内部イベントドリブン機能イネーブルコマンド(configuration拡張):H_ENABLE_EVENT_DRIVEN_CPRG(configuration)は、configurationを指定して、内部イベントドリブン機能をイネーブルにする。
(2)コンフィグレーション設定コマンド方式
コンフィグレーション設定コマンドを設ける方式である。この方式では、内部イベントドリブン機能イネーブル中に、コンフィグレーション値が動的に変更できる。
内部イベントドリブン機能コンフィグレーション設定コマンド:H_SET_EVENT_DRIVEN_CPRG_CONFIG (configuration)は、内部イベントドリブン機能のコンフィグレーションを設定する。
なお、この方式におけるコンフィグレーションの設定タイミングについては、[2.3.ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動機能]の(2)ホストパラメータ設定コマンド方式におけるタイミングの説明(図16)と同じであるるため、説明は省略する。
[2.内部イベントドリブンCPRG起動機能]によれば、CSD2のユーザにとって、CPRG24の起動タイミングの設計自由度を上げることが可能となる。内部イベントに連動した処理を、ホスト4で行うのではなく、CPRG24で行うことができるようになり、CSD2とホスト4間の通信量の削減効果を得ることが可能となる。タイムセンシティブでないCPRG24の起動を内部イベント処理発生に伴うCSD2のウェイクアップタイミングまで遅延させることによる、消費電力量の削減効果を得ることが可能となる。複数のCPRGインスタンスを、内部イベントに連動して、同時に起動することが可能となる。内部イベントに連動するCPRG24へのホスト4からのパラメータ設定を、ホスト4の所望するタイミングで行うことが可能となる。内部イベントに連動するCPRG起動のコンフィグレーション設定を、ホスト4の所望するタイミングで行うことが可能となる。
[3.内部イベントドリブンCPRG起動機能(マルチイベント・マルチスロット)]
前掲の[2.内部イベントドリブンCPRG起動機能(基本形)]で説明した例は、イベントは1種類、対象となるスロットは1つという構成である。以降に、スロット数やイベント種類が複数である場合の例を示す。
[3.1.シングルイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能]
この機能は、CPRG起動の元となる内部イベントの種類は1つで、起動対象のスロット数は複数で、イベントあたりに接続可能なスロット数は1つである内部イベントドリブンCPRG起動機能である。
この機能は、[2.内部イベントドリブンCPRG起動機能(基本形)]に示したホストコマンドを拡張することにより実現される。
図17は、CSD2がシングルイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能を実現するためのホストコマンドの一例を説明するための図である。
ホストコマンドH_ENABLE_EVENT_DRIVEN_CPRG()は、そのパラメータにslotが追加される。
ホストコマンドH_DISABLE_EVENT_DRIVEN_CPRG()、H_SET_MAX_EVENT_DRIVEN_CPRG()、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_DRIVEN_CPRG_CONFIG()は変更無しである。
[3.2.シングルイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]
この機能は、CPRG起動の元となる内部イベントの種類は1つで、起動対象のスロット数は複数で、イベントあたりに接続可能なスロット数は複数である内部イベントドリブンCPRG起動機能である。
この機能を実現する方式には、大きく分けて2種類の方式が存在する。
(1)1回のイベントに対して、指定されたスロット毎に複数の異なるCPRGインスタンスを起動する方式(独立インスタンス型)。
(2)1回のイベントに対して、CPRGインスタンスを1つ立上げ、指定されたスロットのCPRG24を順次実行する方式(同一インスタンス型)。
前述したように、インスタンスとは、プログラムを実行した時、メモリ上に展開される、プログラムの引数やプログラム実行中の中間状態などを保持するメモリ領域やその内容を指す。プログラムAを実行すると、プログラムAが終了するまでの間、インスタンスが1つ存在する。プログラムAの実行中にもう一度プログラムAを実行すると、2つの実行が並行している間は、2つのインスタンスが存在する。
そのため、独立インスタンス型とは、各スロットに格納されている1個のCPRGに対して1つのインスタンスが生成される方式である。例えば、スロットαにCPRG_Aが格納され、スロットβにCPRG_Bが格納され、1つのイベントが2つの接続を備えるとする。1つの接続にスロットαが指定され、他の接続にスロットβが指定されていると、イベント発生時に、CSDC28は、CPRG_Aを実行するインスタンス1と、CPRG_Bを実行するインスタンス2を並行して起動する。つまり、CPRG_AとCPRG_Bが平行して実行される。
同一インスタンス型とは、指定した複数のスロットに格納されている複数のCPRGを、1つのインスタンスの中で順番に実行する方式である。例えば、スロットαにCPRG_Aが格納され、スロットβにCPRG_Bが格納され、1つのイベントが1つの接続を備えるとする。スロットαとスロットβからなる1つのリストを1回の接続の引数に渡して、イベントと接続する。イベントが発生すると、CSDC28は、インスタンス1を生成し、そのインスタンス1上で、CPRG_Aが実行され、CPRG_Aの実行が終了すると、CPRG_Bが実行される。
[3.2.1.シングルイベント・マルチスロット・マルチコネクション(独立インスタンス型)・内部イベントドリブンCPRG起動機能]
この機能は、[2.内部イベントドリブンCPRG起動機能(基本形)]に示したホストコマンドを拡張することにより実現される。
図18は、CSD2がシングルイベント・マルチスロット・マルチコネクション(独立インスタンス型)・内部イベントドリブンCPRG起動機能を実現するためのホストコマンドの一例を説明するための図である。
ホストコマンドH_CONNECT_EVENT_DRIVEN_CPRG()が新規に定義される。このコマンドの引数にはスロット番号が指定される。このコマンドは、内部イベント発生時に、スロット番号で指定されるスロット16との接続、すなわちCPRG24の起動をさせることを行うことをCSD2に設定する。CSD2は、接続番号(connect番号)をこのコマンドの応答RET()にてホスト4に返す。引数で、接続済みのスロット番号と異なるスロット番号が指定された場合、CSD2は、応答RET()にて新しい接続番号をホスト4に返す。接続番号は、内部イベントとスロットの接続(connect)を一意に特定するために割り振られる番号である。シングルイベントの場合、接続番号は省略可能であるが、マルチイベントの場合とコマンド体系を揃えるためにホスト4に返送される。
ホストコマンドH_UNCONNECT_EVENT_DRIVEN_CPRG()が新規に定義される。このコマンドの引数には接続番号が指定される。このコマンドは、内部イベント発生時に、接続番号で指定されるスロット16との接続を解消することをCSD2に設定する。
ホストコマンドH_ENABLE_EVENT_DRIVEN_CPRG()、H_DISABLE_EVENT_DRIVEN_CPRG()、H_SET_MAX_EVENT_DRIVEN_CPRG()、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_DRIVEN_CPRG_CONFIG()は、それらのパラメータに接続番号が追加される。
[3.2.2.シングルイベント・マルチスロット・マルチコネクション(同一インスタンス型)・内部イベントドリブンCPRG起動機能]
この機能は、[2.内部イベントドリブンCPRG起動機能(基本形)]に示したホストコマンドを拡張することにより実現される。
図19は、CSD2がシングルイベント・マルチスロット・マルチコネクション(同一インスタンス型)・内部イベントドリブンCPRG起動機能を実現するためのホストコマンドの一例を説明するための図である。
ホストコマンドH_CONNECT_EVENT_DRIVEN_CPRG()が新規に定義される。このコマンドの引数にはスロット番号のリストが指定される。このコマンドは、内部イベント発生時に、スロット番号のリストで指定される複数のスロット16との接続を行うことをCSD2に設定する。CSD2は、接続番号をこのコマンドの応答RET()にてホスト4に返す。例えば、1つのイベントに、slot=1、slot=3、slot=8の3つのCRRGを接続すると、1つの接続番号がホスト4に返される。その接続番号を指定して、ホストコマンドH_UNCONNECT_EVENT_DRIVEN_CPRG()を発行すると、3つのCPRGとも同時に接続が解消される。接続が解消する前に再設定された場合は、CSD2は、応答RET()にて新しい接続番号のリストをホスト4に返す。
接続番号の一例を説明する。
例えば、以下のように、H_CONNECT_EVENT_DRIVEN_CPRGを3回呼び出すとする。
H_CONNECT_EVENT_DRIVEN_CPRG(event=event_a,slot=1)
H_CONNECT_EVENT_DRIVEN_CPRG(event=event_b,slot=2)
H_CONNECT_EVENT_DRIVEN_CPRG(event=event_c,slot=1)
接続番号は、それぞれのホストコマンドで作られた接続を区別するための番号であり、1つ目の接続番号として1が、2つ目の接続番号として2が、3つ目の接続番号として3が返される。
この例では、event_aにslot=1が、event_cにもslot=1が指定され、同じslot=1のCPRGが複数のイベントに接続される。そのため、1つ目の接続を解消したい場合、slot番号を使って解消する接続を指定することはできず、接続番号を使って解消する接続を指定する必要がある。
ホストコマンドH_UNCONNECT_EVENT_DRIVEN_CPRG()が新規に定義される。このコマンドの引数には接続番号が指定される。このコマンドは、内部イベント発生時に、接続番号で指定されるスロット16との接続を解消することをCSD2に設定する。
ホストコマンドH_ENABLE_EVENT_DRIVEN_CPRG()、H_DISABLE_EVENT_DRIVEN_CPRG()、H_SET_MAX_EVENT_DRIVEN_CPRG()、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_DRIVEN_CPRG_CONFIG()は、それらのパラメータに接続番号が追加される。
[3.3.マルチイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能]
この機能は、CPRG起動の元となる内部イベントの種類は複数で、起動対象のスロット数は複数で、イベントあたりに接続可能なスロット数は単数である内部イベントドリブンCPRG起動機能である。
この機能は、[2.内部イベントドリブンCPRG起動機能(基本形)]に示したホストコマンドを拡張することにより実現される。
図20は、CSD2がマルチイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能を実現するためのホストコマンドの一例を説明するための図である。
ホストコマンドH_ENABLE_EVENT_DRIVEN_CPRG()、H_DISABLE_EVENT_DRIVEN_CPRG()、H_SET_MAX_EVENT_DRIVEN_CPRG()、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_DRIVEN_CPRG_CONFIG()は、それぞれホストコマンドH_ENABLE_EVENT_X_DRIVEN_CPRG()、H_DISABLE_EVENT_X_DRIVEN_CPRG()、H_SET_MAX_EVENT_X_DRIVEN_CPRG()、H_SET_EVENT_X_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_X_DRIVEN_CPRG_CONFIG()に拡張される。
ホストコマンドH_ENABLE_EVENT_X_DRIVEN_CPRG()は、コマンドを分割して、コマンドをイベント毎に設けるものである。例えば、EVENT_XにはEVENT_Xが、EVENT_YにはEVENT_Yが設定され、パラメータにslotが追加される。
ホストコマンドH_DISABLE_EVENT_X_DRIVEN_CPRG()、H_SET_MAX_EVENT_X_DRIVEN_CPRG()、H_SET_EVENT_X_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_X_DRIVEN_CPRG_CONFIG()も、同様に、コマンドを分割して、コマンドをイベント毎に設けるものである。
図21は、CSD2がマルチイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能を実現するためのホストコマンドの他の例を説明するための図である。
ホストコマンドH_ENABLE_EVENT_DRIVEN_CPRG()は、そのパラメータにイベント種別とslotが追加されるように拡張される。
ホストコマンドH_DISABLE_EVENT_DRIVEN_CPRG()、H_SET_MAX_EVENT_DRIVEN_CPRG()、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_DRIVEN_CPRG_CONFIG()は、それらのパラメータにイベント種別が追加されるように拡張される。
[3.4.マルチイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]
この機能は、[3.2.シングルイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]と[3.3.マルチイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能]の組合せにより実現できる。
以降、[3.2.シングルイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]として[3.2.1.シングルイベント・マルチスロット・マルチコネクション(独立インスタンス型)・内部イベントドリブンCPRG起動機能]を採用した場合の[3.4.マルチイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]を説明する。
図22は、CSD2がマルチイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能を実現するためのホストコマンドの一例を説明するための図である。
ホストコマンドH_CONNECT_EVENT_X_DRIVEN_CPRG()、H_UNCONNECT_EVENT_X_DRIVEN_CPRG()が新規に定義される。
ホストコマンドH_CONNECT_EVENT_X_DRIVEN_CPRG()のコマンドの引数にはスロット番号が指定される。このコマンドは、内部イベント発生時に、スロット番号で指定されるスロット16との接続を行うことをCSD2に設定する。CSD2は、接続した接続番号をこのコマンドの応答RET()にてホスト4に返す。
ホストコマンドH_UNCONNECT_EVENT_X_DRIVEN_CPRG()の引数には接続番号が指定される。このコマンドは、内部イベント発生時に、接続番号で指定されるスロット16との接続を解消することをCSD2に設定する。
ホストコマンドH_ENABLE_EVENT_X_DRIVEN_CPRG()は、コマンドを分割して、コマンドをイベント毎に設けるものである。このコマンドのパラメータにはconnectが追加される。
ホストコマンドH_DISABLE_EVENT_X_DRIVEN_CPRG()は、コマンドを分割して、コマンドをイベント毎に設けるものである。
ホストコマンドH_SET_MAX_EVENT_DRIVEN_CPRG()、H_SET_EVENT_X_DRIVEN_CPRG_HOST_PARAM()、及びH_SET_EVENT_X_DRIVEN_CPRG_CONFIG()は、コマンドを分割して、コマンドをイベント毎に設けるものである。これらのコマンドのパラメータにはconnectが追加される。
[3.内部イベントドリブンCPRG起動機能(マルチイベント・マルチスロット)]によれば、内部イベントに連動するCSD2として、以下のうち1つ、あるいは、複数の効果を同時に得ることが可能となる。マルチスロットの場合、内部イベントに連動して起動する複数種のプログラムをホスト4から登録することが可能となる。マルチコネクションの場合、1つのイベントに対して紐づけするプログラムを複数種指定することが可能となる。独立インスタンス型の場合、1つのイベントに対して紐づけされた1つのプログラムごとに、独立したインスタンスを起動することが可能となる。同一インスタンスの場合、1つのイベントに対して紐づけされた複数のプログラムを、一つのインスタンス上で順番に起動することが可能となる。マルチイベントの場合、CPRG24の起動を連動させる内部イベントを複数種指定することが可能となる。
[4.GCドリブンCPRG起動機能]
前掲の内部イベントドリブンCPRG起動機能のうち、特に、GCに連動してCPRG24を起動する機能を説明する。
GCドリブンCPRG起動機能では、内部イベントに伴うCPRG24の起動機能に加えて、GC自体にも新機能を加えることで、単なる内部イベントドリブンCPRG起動機能にはなかった新たな効果を得ることができる。
GCドリブンCPRG起動機能は前掲のどの内部イベントドリブンCPRG起動機能と組合せてもよいが、ここでは説明単純のため、[2.内部イベントドリブンCPRG起動機能(基本形)]と組み合わせた例を元に説明を行う。
[4.1.GCドリブンCPRG起動機能(基本形)]
図23は、[2.内部イベントドリブンCPRG起動機能(基本形)]とGCドリブンCPRG起動機能の組み合わせ機能を実現するためのホストコマンドの一例を説明するための図である。
ホストコマンドH_ENABLE_GC_DRIVEN_CPRG()は、GCドリブン機能をイネーブルにする。
ホストコマンドH_DISABLE_GC_DRIVEN_CPRG()は、GCドリブン機能をディセーブルにする。
なお、GCドリブンCPRG起動は、内部イベントドリブンCPRG起動の基本形である[2.内部イベントドリブンCPRG起動機能(基本形)]に加えて、その展開型の[2.2.マルチインスタンス対応・内部イベントドリブンCPRG起動機能]乃至[3.4.マルチイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]のいずれか、あるいは、その複数の展開機能との組み合わせも可能である。この場合、前掲のホストコマンドのEVENT又EVENT_XがGCに置き換えらえる。
図24は、[2.2.マルチインスタンス対応・内部イベントドリブンCPRG起動機能]乃至[3.4.マルチイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]とGCドリブンCPRG起動機能の組み合わせ機能を実現するためのホストコマンドの一例を説明するための図である。
ホストコマンドH_CONNECT_GC_DRIVEN_CPRG()は、ホストコマンドH_CONNECT_EVENT_DRIVEN_CPRG()と同様に、引数にはスロット番号が指定される。ホストコマンドH_CONNECT_GC_DRIVEN_CPRG()は、GC時に、スロット番号で指定されるスロット16との接続、すなわちCPRG24の起動をさせることを行うことをCSD2に設定する。CSD2は、接続番号をこのコマンドの応答RET()にてホスト4に返す。引数で、接続済みのスロット番号と異なるスロット番号が指定された場合、CSD2は、応答RET()にて新しい接続番号をホスト4に返す。
ホストコマンドH_UNCONNECT_GC_DRIVEN_CPRG()は、ホストコマンドH_UNCONNECT_EVNET_DRIVEN_CPRG()と同様に、引数には接続番号が指定される。 ホストコマンドH_UNCONNECT_GC_DRIVEN_CPRG()は、GC時に、接続番号で指定されるスロット16との接続を解消することをCSD2に設定する。
ホストコマンドH_ENABLE_GC_DRIVEN_CPRG()は、ホストコマンドH_ENABLE_EVENT_DRIVEN_CPRG()と同様に、GCドリブン機能をイネーブルにする。
ホストコマンドH_DISABLE_GC_DRIVE_CPRG()は、ホストコマンドH_DISABLE_EVENT_DRIVE_CPRG()と同様に、GCドリブン機能をディセーブルする。
ホストコマンドH_SET_MAX_GC_DRIVEN_CPRT()は、ホストコマンドH_SET_MAX_EVENT_DRIVEN_CPRT()と同様に、同時実行可能なGCドリブンCPRGインスタンスの上限数を設定する。
ホストコマンドH_SET_GC_DRIVEN_CPRG_HOST_PARAM()は、ホストコマンドH_SET_EVENT_DRIVEN_CPRG_HOST_PARAM()と同様に、GCドリブンCPRG24のホストパラメータを設定する。
ホストコマンドH_SET_GC_DRIVEN_CPRG_CONFIG()は、ホストコマンドH_SET_EVENT_DRIVEN_CPRG_CONFIG()と同様に、GCドリブン機能のコンフィグレーションを設定する。
なお、[2.内部イベントドリブンCPRG起動機能]で定義されるコマンドは、H_ENABLE_EVENT_DRIVEN_CPRG()、H_DISABLE_EVENT_DRIVEN_CPRG()である。
[2.2.マルチインスタンス対応・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、H_SET_MAX_EVENT_DRIVEN_CPRT(num)である。
[2.3.ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、(1)H_ENABLE_EVENT_DRIVEN_CPRG(host_param)、(2)H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(host_param)、(3)H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(instance_no,host_param)である。
[2.4.コンフィグレーション機能付き・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、(1)H_ENABLE_EVENT_DRIVEN_CPRG(configuration)、(2)H_SET_EVENT_DRIVEN_CPRG_CONFIG(configuration)である。
[3.1.シングルイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、H_ENABLE_EVENT_DRIVEN_CPRG(*,slot)、H_DISABLE_EVENT_DRIVEN_CPRG(*)、H_SET_MAX_EVENT_DRIVEN_CPRG(*)、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(*)、H_SET_EVENT_DRIVEN_CPRG_CONFIG(*)である。
[3.2.1.シングルイベント・マルチスロット・マルチコネクション(独立インスタンス型)・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、H_CONNECT_EVENT_DRIVEN_CPRG()、H_UNCONNECT_EVENT_DRIVEN_CPRG()、H_ENABLE_EVENT_DRIVEN_CPRG(*,connect)、H_DISABLE_EVENT_DRIVEN_CPRG(*,connect)、H_SET_MAX_EVENT_DRIVEN_CPRG(*,connect)、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(*,connect)、H_SET_EVENT_DRIVEN_CPRG_CONFIG(*,connect)である。
[3.2.2.シングルイベント・マルチスロット・マルチコネクション(同一インスタンス型)・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、H_CONNECT_EVENT_DRIVEN_CPRG()、H_UNCONNECT_EVENT_DRIVEN_CPRG()、H_ENABLE_EVENT_DRIVEN_CPRG(*,connect)、H_DISABLE_EVENT_DRIVEN_CPRG(*,connect)、H_SET_MAX_EVENT_DRIVEN_CPRG(*,connect)、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(*,connect)、H_SET_EVENT_DRIVEN_CPRG_CONFIG(*,connect)である。
[3.3.マルチイベント・マルチスロット・シングルコネクション・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、(1)H_ENABLE_EVENT_X_DRIVEN_CPRG()、H_DISABLE_EVENT_X_DRIVEN_CPRG()、H_SET_MAX_EVENT_X_DRIVEN_CPRG()、H_SET_EVENT_DRIVEN_X_CPRG_HOST_PARAM()、H_SET_EVENT_DRIVEN_X_CPRG_CONFIG()、(2)H_ENABLE_EVENT_DRIVEN_CPRG(*,event,slot)、H_DISABLE_EVENT_DRIVEN_CPRG(*,event)、H_SET_MAX_EVENT_DRIVEN_CPRG(*,event)、H_SET_EVENT_DRIVEN_CPRG_HOST_PARAM(*,event)、H_SET_EVENT_DRIVEN_CPRG_CONFIG(*,event)である。
[3.4.マルチイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]で定義されるコマンドは、H_CONNECT_EVENT_X_DRIVEN_CPRG()、H_UNCONNECT_EVENT_X_DRIVEN_CPRG(*,connect)、H_ENABLE_EVENT_X_DRIVEN_CPRG(*,connect)、H_DISABLE_EVENT_X_DRIVEN_CPRG(*,connect)、H_SET_MAX_EVENT_X_DRIVEN_CPRG(*,connect)、H_SET_EVENT_X _DRIVEN _CPRG_HOST_PARAM(*,connect)、H_SET_EVENT_X _DRIVEN _CPRG_CONFIG(*,connect)である。
FTLが行うGCは、前掲の[FTL・GCの動作]の「ステップ3:GC」で説明した。本実施形態では、ステップ3の処理のうち「ステップ3-2:有効データ保有ユニットのデータ移動」の処理を、GCドリブン機能がイネーブルのときに次のように変更される。
図25は、[4.GCドリブンCPRG起動機能]を説明するための図である。
CSDC28は、gc_srcから読み出した有効データ“D”をCPM20に格納する(#f1)。
CSDC28は、GCドリブン機能に紐づけられたCPRG24を起動する(#f2)。
CPRG24は、gc_srcから読み出されたCPM20上のデータ“D”を入力として、演算処理を行い、処理結果“D´”をCPM20に出力する(#f3)。
なお、CPRG24の処理結果が変更なしという結果でも構わない。この場合、入力データと同様のデータを出力するのではなく、「変更なし」という情報を返す方法でも構わない。
CSDC28は、CPRG24の出力結果“D´”をgc_dstのゾーンに格納する(#f4)。
なお、CPRG24の処理結果が変更なしであった場合は、gc_srcから読み出したデータと同じデータがgc_dstのゾーンに格納される。
この後の[ステップ3-3:LUTの更新]に相当する処理以降については、前掲の[FTL・GCの動作]の[ステップ3:GC]で説明した内容と同じである。
本実施形態に係るCSD2は、GCによる有効データのゾーン移動のタイミングで、アプリケーションの希望するデータ変更を行うことが可能となる。
なお、入力データと出力データはCPM20上に格納されるが、これらデータ格納領域の利用開始タイミングと利用終了タイミングはCSDC28が認識している。このため、バッファエリア獲得や解放の管理はCSDC28が行う。CPRG24は、CSDC28から利用が許容されたバッファエリア内に出力データを配置する。
CSDC28によるバッファ管理方法については、特に限定しない。CPRGインスタンス番号により固定的なバッファエリアを割り当てておいてもよいし、CPRGインスタンス起動毎に動的にバッファエリアを割り当ててもよい。CPRGインスタンスは、csd_param等により、自身に割り当てられたバッファエリアがどこであるかを知ることができる。
以降、説明単純化のため、csd_paramを使って渡されるCSDC28からCPRG24への入力と、csd_paramやcsd_retを使って渡されるCPRG24からCSDC28への出力の各データをCPM20内のどのアドレスに配置したかをcpmバッファ番号で区別できるものとする。ただし、cpmバッファ番号の代わりにcpmアドレス(cpm_address)で区別する方法を採用してもよい。cpmアドレスは、0x123456789abc0000のように桁数の大きい整数で表されるが、cpmバッファ番号は、1~10のように桁数の少ない整数で表すことができる。
CSDC28は、CPRG24に対して、入力データを格納したcpmバッファ番号をcsd_paramを介して渡すものとする。CPRG24は、CSDC28に対して、CPRG24の演算処理によるデータ改変の有無と、改変ありの場合は出力データを格納したcpmバッファ番号をcsd_paramやcsd_retを介して、返すものとする。
以下に、実施形態に係るCSD2おけるCPRG24によるデータ改変あり時と、改変なし時のcsd_paramの構成と、cpmバッファの状態を説明する。
図26は、データ改変あり時のcsd_paramの構成と、cpmバッファの状態を説明するための図である。
図27は、データ改変なし時のcsd_paramの構成と、cpmバッファの状態を説明するための図である。
CPRG24への入力データ(INPUT)のcsd_paramは、CPM20のcpmバッファ番号src_cpm_buff_idを含む。CPRG24の出力データ(OUTPUT)のcsd_paramは、状態(status)とCPM20のcpmバッファ番号dst_cpm_buff_idを含む。改変ありの場合は、CPRG24からのcsd_paramの状態(status)には改変あり(modified)が設定される。改変なしの場合は、CPRG24からのcsd_paramの状態(status)には改変なし(none)が設定される。改変ありの場合は、CPRG24からのcsd_paramのcpmバッファ番号dst_cpm_buff_idは、出力データのCPM20内の格納位置を示す(out1)が設定される。改変なしの場合は、CPRG24からのcsd_paramのcpmバッファ番号dst_cpm_buff_idは、入力力データのCPM20内の格納位置を示す(in1)が設定される。
ここでは、入力データと出力データのCPM20内の格納位置をcpmバッファ番号で指定するとしたが、CPRGインスタンスが利用可能なバッファ番号が別の方法で一意に決定される場合、これらのパラメータを省略することが可能である。CPRGインスタンスが利用可能なバッファ番号が複数あり、そのうちのどの部分を使ったかということを指定する必要がある場合は、図26、図27に示したように、利用したバッファ位置をcsd_param等で引き渡す必要がある。
また、改変有無の情報と、dstのcpmバッファ番号がsrcのcpmバッファ番号と一致するか否かという情報は、CSDC28にとっては同値のことである。このため、改変有無のパラメータをなくすか、改変なしという指定の場合にdst cpm_buff_idの値の指定を省略することとしてもかまわない。
以降、[4.1.GCドリブンCPRG起動機能(基本形)]の発展機能である[4.2.1.SRC単一ユニット・GCドリブンCPRG起動]乃至[4.3.5.DSTアドレス追加機能付き・GCドリブンCPRG起動]を説明する。
[4.2.SRCユニット関連機能]
[4.2.1.SRC単一ユニット・GCドリブンCPRG起動機能]
本機能は、[4.1.GCドリブンCPRG起動機能(基本形)」の発展機能の一つである。
ここでは、1回のGCドリブンCPRG起動にあたり、GCの読み出し対象として選択されたSRCユニットの数は1つ、GCの書き込み対象として選択されたDSTユニットの数は1つの場合を考える。SRCユニットとDSTユニットのLUAは変化しないというケースを考える。
[4.1.GCドリブンCPRG起動機能(基本形)」では、CPRG24に渡されるデータの大きさは未定義であった。本機能では、CPRG24に渡されるデータのサイズはユニットに揃えられるとする。そのため、入力データのサイズは一律になる。さらに、本機能では、入力データのパラメータにLUAが追加される。
図28は、CPRG24によるデータ改変あり時のcsd_paramの構成と、cpmバッファの状態を説明するための図である。
図29は、CPRG24によるデータ改変なし時のcsd_paramの構成と、cpmバッファの状態を説明するための図である。
CPRG24への入力データのcsd_paramは、CPM20のcpmバッファ番号src_cpm_buff_idとLUAを含む。CPRG24の出力データのcsd_paramは、状態(status)とCPM20のcpmバッファ番号dst_cpm_buff_idを含む。改変ありの場合は、CPRG24からのcsd_paramの状態(status)には改変あり(modified)が設定される。改変なしの場合は、CPRG24からのcsd_paramの状態(status)には改変なし(none)が設定される。
本機能によれば、LUT更新の排他処理が容易となる。データ更新単位がLUTによるアドレス変換単位であるユニットと一致するため、CSDC28はLUT更新において、従来のGCにおけるLUT更新相当の処理を行うことで、ホスト書き込みとGC書き込みの排他をとることができる。
なお、従来のGCにおけるLUT更新時の排他処理とは、更新の直前にLUTの該当LUAの指し示す先がgc_srcのPUAを指したままであるか否かを確認することで実現される。
さらに、本機能によれば、CPRG24が、GC対象であるgc_srcとgc_dstのLUAを知ることができる。そのため、CPRG24が、GC対象LUAに応じてデータ処理を変えることが可能となり、処理の柔軟性が向上する。
また、本機能を[2.3.ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動]と組み合わせると、ホスト4とCPRG24に跨るユーザアプリケーションは、ホスト4とCPRG24の間で、どのLUA範囲の時に処理を行うかという条件指定等をより柔軟に行うことが可能となる。
なお、本機能を[2.3.ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動機能]と組み合わせることで得られる効果は、本機能を以下の[4.2.2.SRC複数ユニット毎GCドリブンCPRG起動機能]~[4.3.5.DSTアドレス追加機能付き・GCドリブンCPRG起動機能])と組合せた場合も、同様に得られる。
[4.2.2.SRC複数ユニット毎GCドリブンCPRG起動機能]
本機能は、[4.2.1.SRC単数ユニット・GCドリブンCPRG起動機能]に対して、1回のGCドリブンCPRG起動にあたって、複数のユニットをsrcユニットに指定できるように変形したものである。
ここでは、DSTユニットの数はSRCユニットの数に一致し、各DSTユニットのLUAは、各SRCユニットのLUAから変更がないものとする。
図30は、CPRG24への入力データのパラメータとCPRG24からの出力データのパラメータの一例を説明するための図である。
CSDC28は、CPRG24に対して複数個のLUAとsrc cmpバッファ番号を指定することができる。CPRG24は、入力されたユニット毎に、改変の有無と出力データの格納先を指定するものとする。重複する情報についてパラメータを省略できる旨は、[4.1.GCドリブンCPRG起動機能]や[4.2.1.SRC単一ユニット・GCドリブンCPRG起動機能]に同じである。
本機能は、[4.2.1.SRC単一ユニット・GCドリブンCPRG起動機能]に対して以下のメリットを有する。
(1)CPRG24は複数個のユニットに跨ったデータに対する改変を施すことが可能となる
(2)同じデータのGCを行うにあたって、CPRG起動回数を減らすことができるため、CPRG起動のオーバーヘッドを削減できる
一度に渡すユニット数については、システムで決まった値としてもよいし、ホスト4がGCドリブンCPRG起動に対してコンフィグレーションする形としてもよい。
なお、本実施形態では、LUT更新については従来FTLと同等であることを想定する。つまり、ホスト4とGCによるデータ更新の排他の単位はユニット単位の扱いとなる。
[4.2.3.SRC LUAアドレス条件指定付き・GCドリブンCPRG起動機能]
[4.2.3.1.SRC LUAアドレス条件指定付き・GCドリブンCPRG起動(コンフィグレーション方式)]
本機能は、GCドリブン機能のコンフィグレーションとして、CPRG24を起動するLUAの条件を指定するものである。
[2.4.コンフィグレーション機能付き・内部イベントドリブンCPRG起動機能]で説明したコンフィグレーション設定機能を利用して、ホスト4は、CSD2に対して、GCドリブンCPRG起動のLUA条件を設定する。LUA条件の指定方法は、CSD2とホスト4間で事前に取り決めておくこととなる。例えば、「GCドリブンを有効にするLUA範囲のリスト」等の方法を決めておいてもよい。
図31は、SRCアドレス条件のコンフィグレーション例を説明するための図である。ソースユニットのarea毎に開始LUAの値と、LUAの数が設定される。
なお、[2.4.コンフィグレーション機能付き・内部イベントドリブンCPRG起動機能]で説明したように、コンフィグレーションの値は、コンフィグレーション設定コマンドと設けて、GCイベントドリブンCPRG起動が有効である期間中に、動的に切り替えを許してもよい。動的な切り替えを許すことで対象となる領域を動的に切り替えやすくなり、利便性が上がることとなる。
また、[3.2.シングルイベント・マルチスロット・マルチコネクション・内部イベントドリブンCPRG起動機能]の機能と組み合わせて、LUA条件Aのときはslot_a、LUA条件Bのときはslot_b、等というように、LUA条件に応じて起動するCPRG24を切り替えるような方法をとることで、多種類のGCドリブンCPRG24処理を効率よくこなすことができるようになる。
[4.2.3.2.SRC LUAアドレス条件指定付き・GCドリブンCPRG起動(2段階CPRG方式)]
本機能は、[4.1.GCドリブンCPRG起動機能]に対して、2つのCPRG24を接続できるようにして、1つ目のCPRG24がアドレス条件の判定を行い、CSDC28にbool値を返すこととし、2つ目のCPRG24が1つ目のCPRG24の返り値に従って起動の有無を切り替えるような機能を追加するものである。
1つ目のCPRG24を、第一段階CPRG24と呼び、2つ目のCPRG24を第二段階CPRG24と呼ぶ。各々のCPRG24を格納するスロットを、第一段階スロット、第二段階スロットと呼ぶ。
本機能のホストコマンドは、GCドリブン機能で使用されるホストコマンドを多少拡張することに得られる。
図32は、本機能で使用されるホストコマンドの一例を説明するための図である。
ホストコマンドH_CONNECT_GC_DRIVEN_CPRG()は拡張され、第一段階スロットのCPRG1と第二段階スロットのCPRG2をGC時に起動するようにGCに接続することを指示する。
他のホストコマンドH_UNCONNECT_GC_DRIVEN_CPRG()、H_ENABLE_GC_DRIVEN_CPRG()、H_DISABLE_GC_DRIVE_CPRG()、H_SET_MAX_GC_DRIVEN_CPRT()、H_SET_GC_DRIVEN_CPRG_HOST_PARAM()、H_SET_GC_DRIVEN_CPRG_CONFIG()は拡張なしである。
本機能では、CSDC28は、[4.1.GCドリブンCPRG起動機能(基本形)]で説明した「CPRG起動」に替わって、以下の処理を行うこととなる。
図33は、[4.2.3.2.SRC LUAアドレス条件指定付き・GCドリブンCPRG起動(2段階CPRG方式)]におけるCPRG起動機能の一例を説明するためのフロー図である。
CSDC28は、GC対象のユニットのLUAリストを作成する(S102)。 CSE18は、LUAリストを引数に指定して第1CPRGを起動する(S104)。
CSE18は、第1CPRGの返り値がtrue(第1CPRGが正常に実行された)であるかを判定する(S106)。
第1CPRGの返り値がtrueの場合、CSE18は、LUAリストを引数に指定して第2CPRGを起動する(S108)。
CSE18は、第2CPRGの結果に応じて、DSTユニットデータあるいはSRCユニットデータをgc_dstのゾーンに格納する(S110)。
第1CPRGの返り値がtrueではない場合、CSE18は、SRCユニットデータをgc_dstのゾーンに格納する(S112)。
S110又はS112の後、CPRG起動は終了する。
このフロー図では、以下の2つの処理の記載は省略されている。
(処理1)gc_srcからのユニットデータのSCM22への読出し。
(処理2)第二CPRG24に渡すSRCユニットデータのCPM20への格納。
これらの2つの処理は、以下の条件を満たせばいずれのタイミングで行ってもよい。
(処理1)は、S112より前
(処理2)は、S108より前
実際の処理タイミングは、CSDの実装上からくる以下の条件等により異なる可能性が考えられる。
(条件1)gc_srcから読み出したユニットデータをCPM20に格納するにあたって、直接CPM20に転送することができるか、一旦、SCMへの転送を行った後CPM20に転送するのかの違い。
(条件2)gc_srcの各ユニットが有効か否かの判定に、ユニットデータを読み出す必要があるか否かの違い。
(条件3)第二段階CPRG24の呼出し有無にかかわらずユニットデータの展開先としてCPMを20利用するのか否かの違い。CPM20を利用する場合、(条件1)と(条件2)は同一ステップで兼ねることが可能となる。
本機能は、[4.2.3.1.SRC LUAアドレス条件指定付き・GCドリブンCPRG起動(コンフィグレーション方式)]に比べて、LUA条件の判定をより柔軟に行うことが可能となるという利点があげられる。
ただし、2段階のCPRG起動が入る分、[4.2.3.1.SRC LUAアドレス条件指定付き・GCドリブンCPRG起動(コンフィグレーション方式)]に比べてオーバーヘッドが大きくなるといえる。
[4.2.4.SRC PUAアドレス逆順指定付き・GCドリブンCPRG起動]
本機能は、[4.1.1.GCドリブンCPRG起動機能]に対して、gc_srcから有効データ保有ユニットを読み出す順番を、ゾーン内のPUA昇順ではなく、PUA降順で行うことが可能にする機能を追加するものである。本機能は、GCドリブンCPRG機能に対するコンフィグレーション機能の一つである。
1回のGCドリブンCPRG起動時のSRCユニットの数が1つであっても複数であってもかまわないが、複数の場合の方がより効果を得やすいといえる。
GCは、一つのゾーン中の有効データ保有ユニットを順に処理する。1回のGCドリブンCPRG起動時のSRCユニットの数が1つの例では、1つのゾーンにN個の有効データ保有ユニットがある場合、該当ゾーンに対してN回、CPRG24が起動される。このCPRG24の起動のたびに渡されるユニットが、ゾーン内の先頭のユニットからとなるか、後ろのユニットからとなるかが、この機能による変わる。
以下に、SRCユニットの数が3つの場合のGCドリブンCPRG起動を説明する。
図34は、SRC PUAアドレス逆順指定付き・GCドリブンCPRG起動を説明するための図である。
ゾーン=10がgc_srcに選択される。
CSDC28は、gc_srcの有効データ保有ユニットのうち、PUAの後ろから順に、CPRG24に引き渡すのに必要な数分の有効データ保有ユニットのデータ“P”、“O”、“M”を読み出して、CPM20に保存する(#g1)。
CSDC28は、GCドリブン機能に紐づけられたCPRG24を起動する(#g2)。
CPRG24は、gc_srcから読み出されたCPM20上のデータを入力として、演算処理を行い、処理結果“P´”、“O´”、“M´”をCPM20に出力する(#g3)。
なお、CPRG24の処理結果が変更なしという結果でも構わない。この場合、入力データと同じデータを出力するのではなく、「変更なし」という情報を返す方法で構わない。
CSDC28は、CPRG24の出力結果“P´”、“O´”、“M´”をgc_dstのゾーンに格納する(#g4)。
なお、CPRG24の処理結果が変更なしであった場合は、gc_srcから読み出したデータと同じデータがgc_dstのゾーンに格納される。
本機能は、GC時のPUAの処理オーダーが昇順固定のGCドリブンCPRG起動に比較して、CPRG24のデータ処理の柔軟性の向上するメリットがある。
すなわち、複数ユニットに跨るデータに対するデータ処理を行うに際して、昇順と降順の両選択肢があることにより、実施できるデータ処理のバリエーションが広がる。特に、複数ユニットに跨るデータで、かつ、データの内容を指し示すメタデータがPUAの後方に配置されるようなケースで効力を発揮する。
メタデータのような管理データがPUAの後方にあるという配置は、比較的あり得る。データがコンテンツと、コンテンツの内容を説明するメタデータとを含むケースで、ホスト4がCSD2に対する書き込み順として、コンテンツを先に書いて最後にメタデータを書くという手順を踏むと、メタデータのPUAは後方に配置されることとなる。LUA空間上でのメタデータの配置位置が仮に前方であったとしても、書き込み順に従ってPUAが割り当てられる。
例えば、ホスト4が一連のログデータの書き込みを行った後、ログデータの内容を示すメタデータの書き込みを最後に行うというようなアプリケーションがこれに該当する。
本機能の具体例を、「5.5.2.2 (実施形態 CASE_C) ログのコンパクション」で後述する。
コンフィグレーションの指定方法については、様々な実施方法が考えられるが、以下に2例を示す。
第1例:gc_src PUAに対するオーダー指定方式
コンフィグレーションで「正」、「逆」の指定が可能である。「正」、「逆」は、gc_src PUAに対して、昇順とするか降順とするかを指定するものと定義される。ホスト4から動的にコンフィグレーションの切り替え要求があった場合、gc_srcやgc_dstの書き込み途中で切り替え要求があったとしても、CSDC28は、できるだけ速やかにオーダー切換を行う。
第2例:ホスト書き込みに対するオーダー指定方式
コンフィグレーションで「正」、「逆」の指定が可能である。「正」、「逆」は、ホスト書き込み時のPUAに対して、昇順とするか降順とするかを指定するものと定義される。1つのgc_dstは、「正」か「逆」のいずれかのオーダーで書ききるものとして、ゾーン毎に書き込みが「正」でなされたか「逆」でなされたかのゾーン属性が管理される。ホスト4から動的にコンフィグレーションの切り替え要求があった場合、それまで書き込み中のgc_dstのオーダーは変更せず、次のgc_dstへの書き込みが始まるタイミングで、gc_srcのスキャンオーダーを切り替えることとする。
第1例と第2例を比べると、第1例の方が、ゾーン毎の属性管理を行う必要がない分、実装リソースが少なくて済むというメリットがある。一方、第2例の方が、「ホスト4が、後で書いたデータを先に知りたいか、先に書いたデータを先に知りたいか」をアプリケーションが意図的に選択することが可能となり、ホスト4にとって意図通りのオーダー処理を明示的に指定することができるようになるというメリットがある。
[4.3.DSTユニット関連機能]
[4.3.1.DSTアロケート機能付き・GCドリブンCPRG起動]
本機能は、[4.1.GCドリブンCPRG起動機能]に対して、以下の2点の変更により、CPRG24からCSDC28に対して、処理対象のユニットのデアロケートの指定ができる機能を設けるものである。
(変更1)CPRG24からCSDC28に返す情報に、デアロケートか否かを示すパラメータを追加する。
(変更2)CSDC28は、CPRG24からデアロケート指定のあったユニットに対して、以下の処理を行う。
(処理1)gc_dstへの書き込みは省略する
(処理2)LUT更新処理において、対象ユニットのPUAが有効のままであるか(LUTの対象LUAの示すPUAがgc_srcの該当ユニットのままであるか)をチェックし、有効のままであれば、該当LUAのPUAをdeallocateに変更する。有効性チェック時点で、無効であった(他のPUAを指し示していた)場)、LUT更新は行われない。
本機能は、[4.1.GCドリブンCPRG起動機能]のどの機能に組み合わせることも可能である。
図35は、本機能を[4.2.1.SRC単一ユニット・GCドリブンCPRG起動機能]に組み合わせた場合のパラメータ例を示す。
図36は、本機能を[4.2.2.SRC複数ユニット毎GCドリブンCPRG起動機能]に組み合わせた場合のパラメータ例を示す。
いずれも、CPRG24からのパラメータのstatusに、デアロケートを示すdeallocateの指定が加わっている。また、statusがdeallocateの時、dst cpm_buff_idの値は無効となる。
本機能により、GCのタイミングでストレージメディア10の使用量のコンパクションをより一層進めることが可能となる。
[4.3.2.DSTアドレスオーダー変更機能付き・GCドリブンCPRG起動]
本機能は、[4.1.GCドリブンCPPG起動機能]に対して、以下の2点の変更により、CPRG24からCSDC28へのリターン時に、処理対象のユニットのgc_dstへの書き込み順序の入替の設定ができる機能を設けるものである。
(変更1)CPRG24からCSDC28に返す情報のエントリー順に、LUAを設定するパラメータを追加する。CPRG24は入力のLUAオーダーに対して出力のLUAオーダーを入れ替えてよいものとする。
CPRG24からCSDC28に返す情報は、図30のOUTPUTに示すようなテーブル構造となっている。このテーブルのエントリー順にgc_dstのユニットに書き込むことを想定し、テーブルのエントリーにLUAを設定するためのパラメータを追加すると、CPRG24からCSDC28に返す情報は、後述する図38のOUTPUTのテーブルのようになる。
(変更2)CSDC28は、CPRG24から出力されたエントリー順に、gc_dstへの書き込みとLUTの更新を実施する。
本機能は、[4.1.GCドリブンCPRG起動機能]のどの機能に組み合わせることも可能である。例として、本機能を[4.2.2.SRC複数ユニット毎GCドリブンCPRG起動機能]に組み合わせた場合の2つの例を説明する。
(例1)アドレスオーダー変更なし時
DSTアドレスオーダー変更機能つきGCドリブン機能を使うものの、CPRG24がアドレスオーダーを入れ替えずにGCドリブン機能を利用した場合の例を示す。
図37は、GCドリブンCPRG起動開始時のLUTとgc_srcの状態を説明するための図である。
図38は、LUA=“a”、“b”、“c”の3つのユニットを入力としてCPRG24を起動した際の、CPRG24の入力・出力の例を説明するための図である。ここでは、入力のLUAの順序“a”、“b”、“c”が、出力のLUAの順序でも保たれている。
この出力を受けて、CSDC28がgc_dstにユニットデータの書き込みを行う順番は、LUA=a、b、cの順となる。図39は、この順で、gc_dst(ゾーン=20)へのユニットデータの保存とLUT更新を行った後のLUTとgc_dstの状態を説明するための図である。
LUA=aの指し先であるPUA=20_11には“A”が、LUA=bの指し先であるPUA=20_12には“B´”が、LUA=cの指し先であるPUA=20_13には“C´”が格納されている。
(2)アドレスオーダー変更あり時
DSTアドレスオーダー変更機能つきGCドリブン機能により、CPRG24がアドレスオーダーを入れ替えた場合の例を示す。
GCドリブン機能によるCPRG起動処理の開始時点のLUTとgc_srcの状態は、使用例1で示した図37と同じであったとする。
図40は、使用例1と同様にLUA=“a”、“b”、“c”の3つのユニットを入力としてCPRG24を起動した際の、CPRG24の入力・出力の例を説明するための図である。
本例では、入力のLUAの順序“a”、“b”、“c”に対し、出力のLUAの順序は“a”、“c”、“b”に置き換わっている。
この出力を受けてCSDC28がgc_dstにユニットの書き込みを行う順番は、LUA=a、c、bの順となる。図41は、この順でgc_dst(ゾーン=0x20)へのユニットデータの保存とLUT更新を行った後の、LUTとgc_dstの状態を以下に示す。
LUA=cの指し先はPUA=20_12となり、“C´”が格納されている。また、LUA=bの指し先はPUA=20_13となり、“B´”が格納されている。
使用例1から、DSTアドレスオーダー変更機能があっても、使用例1のように、オーダー入替をしないことも可能であることがわかる。
また、使用例1、2の結果を比較することにより、本機能の使い方次第で、CPRG24が、LUA毎のコンテンツはそのままにPUAの配置順序を変更することが可能となることがわかる。
本機能により、アプリケーションは、意味のある一連のデータをPUA上で連続配置する等の対応が可能となる。
これにより、一連のPUA上に配置されたデータの読出し速度の向上効果を得ることが可能となる。また、属性の近いデータは書き込みワークロードも均一化する傾向にあると考えると、後々のGC効率化につながる効果を得ることが可能となる。
[4.3.3.DSTユニット属性指定機能付き・GCドリブンCPRG起動機能]
本機能は、[4.1.GCドリブンCPRG起動機能]に対して、以下の2点の変更により、CPRG24からCSDC28へのリターン時に、処理対象のユニットのデータの属性情報の設定ができる機能を設けるものである。
(変更1)CPRG24からCSDC28に返す情報のユニット毎のエントリーに、データの属性情報の設定が可能なパラメータを設ける。
(変更2)CSDC28は、CPRG24から出力されたユニット毎のデータの属性情報に従って、該当ユニットのデータを、データの属性に応じたゾーンのgc_dstに書き込む。データの属性には、例えば、書き込み属性や読出し属性を定義することができる。
FTLがデータ属性に応じてゾーンを使い分けるという技術は、前掲の[データ属性に応じたゾーンの使い分け」で説明した。本機能では、その技術に利用するための属性情報を、GCドリブンのCPRG24にて判定し、判定結果をCSDC28にフィードバックする。
図42は、本機能を[4.3.2.DSTアドレスオーダー変更機能付き・GCドリブンCPRG起動機能]に適用した場合のパラメータ例を説明するための図である。
ここでは、データ属性(attribute)として、ユニット毎に、書き込み属性がw_hot/w_normal/w_coldであるか、読出し属性がr_hot/r_noral/r_coldであるかを指定できるようにしている。書き込み属性は、対象となるLUAデータをどれほど頻繁に上書きする又は書き込むかを表し、書き込み属性は、対象となるデータをどれだけ頻繁に読み出すかを表す。なお、データ属性の分類はこれに限定されず、他の分け方であってもよい。
[4.3.4.DSTユニット繰り越し機能付き・GCドリブンCPRG起動]
[4.3.4.1.概要説明]
本機能は、[4.1.GCドリブンCPRG起動機能]に対して、以下の3機能を追加するものである。
(機能1)CPRG24が、入力に指定されたユニットの処理の繰り越しを、CSDC28に対して設定する機能
(機能2)CPRG24が、処理の繰り越しをしていたユニットの処理を完了した際、CSDC28に対して払い出しの設定をする機能
(機能3)CSDC28が、CPRG24に対して、処理繰り越し中のユニットの払い出しを要求する機能。
処理の繰り越しとは、現在のCPRGの呼出しの中では処理結果を出せないが、次以降のどこかのCPRGの呼出しにおいて、処理結果を確定させるという意味である。
以降に、「繰り越し・払い出し」と、「払い出し要求」の順に説明する。
[4.3.4.2.繰り越し・払い出し]
図43は、どのようなCPRGが処理の繰り越しを必要とするのかの例を説明するための図である。
LUA=a、b、c、d、e、fの一連のデータがあり、先頭のa番地に、b~fに関するメタデータが格納されている状態を考える。ここでは、単純のため、LUAの順番通りにPUA上でも配置されていたとする。ホスト書き込み時にa~fをシーケンシャルに書きこむことで、PUA上でもシーケンシャルである可能性が高いと期待できる。
CPRGによって、まず、b~fに格納されていたデータの改変を行った後に、その結果を用いて生成されたメタデータをaに格納したいとする。
1回目に起動したCPRGで、LUA=a~fのユニットがすべて入力されればこの対応は可能となる。
しかし、1回目に起動したCPRGで、3つのユニットしか入力されなかった場合は、1回目のCPRGではLUA=a、b、cが入力され、2回目に起動されるのCPRGで、d、e、fが入力されることとなる。
こうしたケースにおいて、1回目のCPRGで、LUA=b、cの処理を行うとともに、LUA=aのユニット処理の繰り越しを行い、2回目のCPRGで、LUA=d、e、fの処理を行うとともに、LUA=aのユニット処理を完了させて払い出しをするという使い方が、ユニットの繰り越しと払い出しとなる。
図44は、1回目のCPRGと繰り越し設定を説明するための図である。
図45は、2回目のCPRGと払い出し設定を説明するための図である。
図46は、1回目のCPRGのcsd_paramの入出力とcpmバッファの利用状況を説明するための図である。1回目のCPRG起動において、CPRG24は、出力csd_paramのLUA=aのエントリーのstatusに、繰り越し(carry_over)を設定する。
図47は、2回目のCPRGのcsd_paramの入出力とcpmバッファの利用状況を説明するための図である。2回目のCPRG起動において、CPRG24は、出力csd_paramにLUA=aのエントリーを追加して、statusに、払い出し(pay_off)とともに、処理結果、すなわち、status=modifiedを設定し、DSTのcpmバッファ番号に出力先の番号out4を記入している。
繰り越しの設定を行ったLUA=aの入力データを格納するcpmバッファ番号in1は、そのまま確保されている。理由は、CPRG24、CSDC28の両者にとって処理の完了していないLUA=aの入力データは、CPRG24の1回目の呼出しの後も解放できないからである。
該当の入力バッファが解放されるのは、CPRG24による払い出しが完了し、CSDC28がそれに対応する処理を終えた後となる。
また、ここでは明示的に示されていないが、CSDC28は、LUA=aのデータの処理中であり、gc_src中のPUAがいくつであるかという情報を内部で管理している。この情報についても、LUA=aの払い出しに伴う処理が完了するまで、CSDC28内で保持を続けることとなる。
ユニット処理の繰り越しを行うには、これらリソースの解放遅延を伴うこととなるため、実質的には、同時に繰り越し可能な数の上限値の制約等を伴うこととなる。
[4.3.4.3.払い出し要求]
[4.3.4.1.繰り越し・払い出し]の例では、1回目のCPRGで繰り越し設定したLUA=aのユニットの払い出しを、2回目のCPRGで行った。一連のデータの大きさによっては、1回目のCPRGで繰り越したユニットのデータ確定が、2回目のCPRG起動時に完了せず、3回目、4回目へと繰り越しが続く可能性がある。
一方で、CSDCにとっては、gc_srcのゾーン中の全有効データ保有ユニットの処理を終え次第、gc_srcのゾーンをfreeに戻したいという都合がある。
このため、CSDC28が、「今回のCPRGは繰り越しができない。繰り越し中ユニットの払い出しを行うように」という指定をすることが、払い出し要求となる。
CPRGは、払い出し要求を受けた回の起動では、繰り越し中のユニットを確定させて、払い出しを行わなければならない。
つまり、CPRGは、繰り越し機能の利用にあたっては、「繰り越すユニットは、いつ払い出し要求をうけたとしても、そのタイミングでデータを確定させられること」というCSD2が設定した前提の元で利用する必要がある。
[4.3.5.DSTアドレス追加機能付き・GCドリブンCPRG起動機能]
本機能は、[4.1.GCドリブンCPRG起動機能]に対して、以下の2点を変更することにより、CPRG24からCSDC28に対して、入力として指定されていないLUAに対してユニットデータを書くことを指定する機能を追加するものである。
(変更1)CPRG24からCSDC28に返す情報に、新規LUAへの書き込みのエントリーを設定することが可能な機能
(変更2)CSDC28は、CPRG24から新規LUAへの書き込み指定されたユニットに対して以下の処理を行う。
(処理1)gc_dstに書き込む
(処理2)LUT更新処理において、対象ユニットのPUAが有効のままであるかのチェック(LUTの対象LUAの示すPUAがgc_srcの該当ユニットのままであるかをチェック)は「省略」し、該当LUAのPUAを更新する。
本機能は、DSTユニットの属性指定を伴う[4.3.1.DSTアロケート機能付き・GCドリブンCPRG起動]、[4.3.2.DSTアドレスオーダー変更機能付き・GCドリブンCPRG起動]、[4.3.3.DSTユニット属性指定機能付き・GCドリブンCPRG起動][4.3.4.DSTユニット繰り越し機能付き・GCドリブンCPRG起動]と、パラメータ構成は類似するものの、大きく性質の異なる実施形態となる。
何故ならば、本機能は、LUT更新処理におけるホスト書き込みとCPRG24の書き込みとの排他チェックを行うすべがないという点である。つまり、本機能では、ホスト4書き込みとCPRG24の書き込みの排他は、ホスト4とCPRG24を跨るアプリケーションレベルで行う必要があることを意味している。
図48は、本機能に係るcsd_paramとcpmバッファの例を説明するための図である。
本機能により、CPRG24の自由度が上がる。例えば、入力データの改変でデータサイズが大きくなる改変に対応することができるようになる。
本機能と[4.3.1.DSTアロケート機能付き・GCドリブンCPRG起動]と組み合わせることにより、ユニットのLUAの移動に対応することができるようになる。
[4.GCドリブンCPRG起動機能]によれば、アプリケーションによるデータ読出し・データ書き込みとGCによるデータ読出し・データ書き込みのオーバーラップが削減される。オーバーラップの削減に伴いWAFが改善され、CSD2の延命化を図ることができる。オーバーラップの削減に伴いIO処理現象による性能が改善される。1つのGC連動CPRG上で複数ユニットにまたがるデータ処理を行うことができるようになる。SRCアドレスを指定してGC連動CPRGを起動することができるようになる。ゾーン内のGC実行を、PUA昇順以外に、降順でも実行することができるようにすることで、GC連動CPRGにおいて、PUAの値の大きい順からデータ処理を行うことができるようになる。データのデアロケート機能による、WAFの改善とCSD2の延命化を図ることが可能となる。GC後のデータ配置順を指定することで、同一種のデータを連続アドレスに寄せ集める等の処理を施すことが可能となり、性能改善を図ることが可能となる。データ属性指定機能による、ゾーンの使い分けに伴うWAFの改善と、それに伴う性能改善が可能となる。1つのGC連動CPRGへの入力データだけではデータ変換処理が完結しないときに、複数のGC連動CPRGに対する入力データを利用したデータ変換処理を施すことが可能となる。GC連動CPRGによって、入力データよりも出力データの方がサイズが大きいというデータ変換処理を実行することができるようになる。
[応用例]
[基本例]
[4.2.1.SRC単一ユニット・GCドリブンCPRG起動機能]乃至[4.3.5.DSTアドレス追加機能付き・GCドリブンCPRG起動機能]のGCドリブンCPRG起動機能を、どのようなデータ構成、どのようなCPRGで使用するとメリットがあるかの応用例を説明する。
前掲した(例1)乃至(例7)のように、大量のデータ読出し、大量のデータ書き戻しが重複して実行される場合に、GCドリブンCPRG起動機能はメリットがある。
(例1)データ変換(単一ユニット・同一LUA)
1つのLUA単位で、ある意味を持つータが完結するようなフォーマットで格納され、かつ、同類のフォーマットにおけるデータが大量に存在するというユースケースを考える。
多くのデータシステムで採用されるBツリー構造は、こうしたユースケースの最たる例となる。
図49は、Bツリーのリーフページをイメージして模式的に表したユニット構造を示す。
例えば、このユニット構造が、或る会の会員名簿として利用され、indexに「会員番号」、valueに「氏名,住所」が記入されていたとする。或る会は、膨大な数の会員を抱える会であり、この構造を持ったユニットが大量に存在するとする。
或る日、区画整理によりいくつかの住所名変更が行われた。名簿内の住所も更新したいが、しばらくは旧住所でも通用するため、急ぐ必要はない。
このようなデータ変換を、GCドリブンCPRG起動機能により実施することとする。
個々のvalueサイズは、変換により大きくなったり小さくなったりするものの、ユニットには十分なサイズのゆとりが設けてあるため、変換によりユニットサイズを超えることはほとんどなく、あったとしてもごく稀であるとする。
このケースでは、以下の機能が効力を発揮する。
[4.2.1.SRC単一ユニット・GCドリブンCPRG起動機能]
以下の機能も併せて利用するとより効果がある。
[1.1.CPRG24からホスト4への非同期通知設定機能]
[2.3.ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動機能]
ホスト4は、GCドリブンにより起動されたCPRGに対して、[2.3.ホストパラメータ設定機能付き・内部イベントドリブンCPRG起動機能]を用いて設定するhost_paramで、処理対象となるユニットのLUA範囲を指定する。
CPRG24は、ユニット毎に処理を行い、処理の進捗状況を記録(処理が完了したLUAのリストを作成)する。
CPRG24は進捗状況がある程度たまったところで、[1.1.CPRG24からホスト4への非同期通知設定機能]の機能を用いて、ホスト4に対して非同期通知により進捗を報告する。この際、変換によりユニットサイズを超えてしまうためCPRG24による変換は行わなかったという記録があればその旨もホスト4に通知する。
ホスト4は、進捗状況を確認し、CPRG24による変換が据え置かれたデータに対してのみ自身で変換を行えばよい。これを行うには、例えばBツリーであればリーフの分割や、上位ノードの内容更新等、複数ユニットに跨る複雑な処理が必要となる。
GCの進捗に伴い、処理対象のユニットはいずれ一通り変換がなされることとなる。
ホスト4は、処理対象の全ユニット変換の完了を確認した時点で、GCドリブン機能の停止を行えばよい。
もし、処理対象のユニットがcoldデータの多いゾーンに格納されている等の理由でgc_srcになかなか選択されず、ホスト4が所望する期間内に全データの変換が終わらないという場合には、ホスト4は、CPRG24による全ユニット処理の完了を待つことなくGCドリブン機能の停止を行い、未処理のデータのみホスト4で変換することとしてもよい。
[データコンテンツとアドレス着目例]
(例2)データ変換(複数ユニット・同一LUA)
本例は、処理対象のデータが複数ユニットに跨る場合の使用例である。
図50は、一つの意味のあるデータのかたまりが、複数ユニットに跨っているケースを説明するための図である。
図50の例では、複数ユニットに跨るpayload内のデータが確定して初めて、先頭ユニット内のlengthの値が決定する。図50の例が名簿の場合、payloadに、会員番号、名前、住所、電話番号、…のような情報が入っていたとして、あるとき区画整理が生じたため、住所を新しいものに置換したい場合がある。
このようなケースでは、以下の機能が効力を発揮する。
[4.2.2.SRC複数ユニット毎GCドリブンCPRG起動機能]
また、データと処理の区切りによっては、以下の機能も効力を発揮する。
[4.3.4.DSTユニット繰り越し機能付き・GCドリブンCPRG起動]
(例3)コンパクション
本例は、処理対象のデータ中に不要データが多量に存在する場合の使用例である。不要データの例は、重複するログデータである。図51は、多くのデータシステムで採用される、logストラクチャードデータ構造を説明するための図である。
ここでは、時系列に従って、複数ユニットに跨るlog領域に、key,value(図の****)の組みよりなるトランザクションログがシーケンシャルに書きこまれている。ここで、同一keyを持つトランザクションは、書き込み時期の新しいもののみ有効になるとする。
メタデータには、log sectionと呼ばれるlogの一塊に対して、key毎の有効データの位置を指し示すポインタが配置される。メタデータは、log sectionを書ききった後にCSDに書き込まれるため、PUA空間上はlog sectionより後方に配置されることとなる。
アプリケーションによるlog sectionのコンパクションは、このようなログに対して、重複するkeyのデータを除去し、各keyの最新データだけを集めた新しいlogを生成するとともに、オリジナルのlog sectionを破棄することである。
しかし、このアプリケーションのコンパクションを待たずとも、メタデータから、図51のユニット_1、ユニット_Mは不要データしか含まないため、参照されることがないということがわかる。
この場合、GCでユニット_1、ユニット_Mのゾーン移動を省略し、LUT上、deallocate扱いをすると効率がよいといえる。
本ケースでは、以下の機能の組み合わせが効力を発揮するといえる。
[4.2.4.SRC PUAアドレス逆順指定付き・GCドリブンCPRG起動]
[4.3.1.DSTアロケート機能付き・GCドリブンCPRG起動]
(例4)PUAアドレスオーダー変更
本例では、意味合いの異なる複数種類のデータがPUA上でランダムに入り乱れ混在するといったケースを考える。
ホスト4上の或るアプリケーションがデータ書き込み中に、別のアプリケーションがデータ書き込みを行った場合、CSDに対して、これら2つのアプリケーションからの書き込み要求が入り乱れて発行されることとなる。
この結果、仮に各アプリケーションがシーケンシャル書き込みを行っていたとしても、PUA上は、2つのデータが入り乱れて格納される結果となる。
図52は、例4のPUAアドレスオーダー変更を説明するための図である。
このようなケースで、種類の近いもの同士、あるいは、LUAの近いもの同士(あるいはnamespaceが同一のもの同士)をPUA上で連続配置するよう配置変換することにより、ストレージの性能向上を期待することができる。
本ケースでは、以下の機能の組み合わせが効力を発揮するといえる。
[4.2.2.SRC複数ユニット毎GCドリブンCPRG起動機能]
[4.3.2.DSTアドレスオーダー変更機能付き・GCドリブンCPRG起動機能]
(例5)データ属性の振るい分け
本例は、データによってhot/coldの属性が存在するといったデータが対象となる。
key,valueの組みよりなる、ソーシャルネットワークサービスの呟きシステムのデータを考える。keyにユーザID、valueに該当ユーザの呟きが格納される。
人気ユーザの呟きは、読出しhotという属性を付して、読出し応答の早いゾーンに振るい分けることで、コスト上昇は抑えつつシステム性能の向上を図ることができる。
本ケースでは、以下の機能が効力を発揮するといえる。
[4.3.3.DSTユニット属性指定機能付き・GCドリブンCPRG起動機能]
(例6)データ移動
データをLUA上で移動したい場合、以下の機能が効力を発揮するといえる。
[4.3.1.DSTアロケート機能付き・GCドリブンCPRG起動]
[4.3.5.DSTアドレス追加機能付き・GCドリブンCPRG起動機能]
(例7-1)データ変換(データフォーマット変更・サイズ縮小)
複数ユニットに跨るデータのフォーマット変換をした結果、変換後のデータのユニット数が変換前より少なくなるようなデータ構成を考える。
本ケースでは、以下の機能が効力を発揮するといえる。
[4.3.1.DSTアロケート機能付き・GCドリブンCPRG起動]
(例7-2)データ変換(データフォーマット変更・サイズ拡大)
複数ユニットに跨るデータのフォーマット変換をした結果、変換後のデータのユニット数が変換前より多くなるようなデータ構成を考える。
本ケースでは、以下の機能が効力を発揮するといえる。
[4.3.5.DSTアドレス追加機能付き・GCドリブンCPRG起動機能]
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…CSD、4…ホスト、6…CPU、8…HM、10…ストレージメディア、12…FE、14…B、16…スロット、18…CSE、20…CPM、22…SCM、24…CPRG、28…CSDC、52…EDCC

Claims (28)

  1. プログラムを保存する第1メモリと、
    前記プログラムが実行される際にアクセス可能な第2メモリと、
    ホストから送られたデータを保存するストレージメディアと、
    前記プログラムを実行して、前記第2メモリあるいは前記ストレージメディアに保存されたデータに対するデータ処理を行うプロセッサと、
    前記ホストからの要求を受け、前記ストレージメディアへのデータ書き込み又は前記ストレージメディアからのデータ読出しを行う、前記ストレージメディアの管理を行う、前記データ処理の制御を行う、又は前記ホストからの要求とは独立した処理である非同期イベンドの実行を制御するコントローラと、
    を具備し、
    前記コントローラは、前記ホストにより設定された非同期イベントの発生時に前記ホストに対して非同期イベント発生通知を送信する、コンピュテーショナルストレージドライブ。
  2. 前記非同期イベント発生通知はログを含む、請求項1記載のコンピュテーショナルストレージドライブ。
  3. 複数のプログラムを保存する第1メモリと、
    前記複数のプログラムの何れかが実行される際にアクセス可能な第2メモリと、
    ホストから送られたデータを保存するストレージメディアと、
    前記複数のプログラムを実行して、前記第2メモリあるいは前記ストレージメディアに保存されたデータに対するデータ処理を行うプロセッサと、
    前記ホストからの要求を受け、前記ストレージメディアへのデータ書き込み又は前記ストレージメディアからのデータ読出しを行う、前記ストレージメディアの管理を行う、前記データ処理の制御を行う、又は前記ホストからの要求とは独立した処理である非同期イベンドの実行を制御するコントローラと、
    を具備し、
    前記コントローラは、前記ホストにより設定された非同期イベントの発生時に前記複数のプログラムの中の前記非同期イベントに関連したプログラムを前記プロセッサに実行させる、コンピュテーショナルストレージドライブ。
  4. 前記コントローラは、前記非同期イベントの発生時に前記複数のプログラムの中の前記ホストにより指定された少なくとも1つのプログラムを前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  5. 前記コントローラは、前記ホストによりイベント連動のプログラム起動が有効と設定された場合、前記非同期イベントの発生時に前記非同期イベントに関連したプログラムを前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  6. 前記コントローラは、前記非同期イベントの発生時に前記複数のプログラムの中の前記ホストにより設定された複数のプログラムを前記プロセッサに同時に実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  7. 前記コントローラは、前記非同期イベントの発生時に前記複数のプログラムの中の前記ホストにより指定された少なくとも1つのプログラムを、前記ホストにより設定された起動パラメータに従って前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  8. 前記コントローラは、前記ホストによりイベント連動のプログラム起動が有効と設定された場合、前記非同期イベントの発生時に前記複数のプログラムの中の前記ホストにより指定された少なくとも1つのプログラムを、前記ホストにより設定された起動パラメータに従って前記プロセッサに実行させ、
    前記起動パラメータは、前記ホストによりイベント連動のプログラム起動が有効と設定されている間に、前記ホストにより動的に変更される、請求項3記載のコンピュテーショナルストレージドライブ。
  9. 前記コントローラは、前記ホストにより前記起動パラメータの変更要求を受けた場合、実行中のプログラムが終了するまで、前記起動パラメータの変更を保留する、請求項8記載のコンピュテーショナルストレージドライブ。
  10. 前記コントローラは、前記ホストにより設定された非同期イベントの発生時に前記ホストにより設定された条件が満たされると、前記複数のプログラムの中の前記非同期イベントに関連したプログラムを前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  11. 前記コントローラは、前記ホストによりイベント連動のプログラム起動が有効と設定された場合、前記非同期イベントの発生時に前記ホストにより設定された条件が満たされると、前記複数のプログラムの中の前記ホストにより指定された少なくとも1つのプログラムを前記プロセッサに実行させ、
    前記条件は、前記ホストによりイベント連動のプログラム起動が有効と設定されている間に、前記ホストにより動的に変更される、請求項3記載のコンピュテーショナルストレージドライブ。
  12. 前記コントローラは、前記ホストにより前記条件の変更要求を受けた場合、実行中のプログラムが終了するまで、前記条件の変更を保留する、請求項11記載のコンピュテーショナルストレージドライブ。
  13. 前記コントローラは、1つの非同期イベントの発生時に1つのプログラムを前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  14. 前記コントローラは、1つの非同期イベントの発生時に複数のプログラムを前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  15. 前記コントローラは、複数の非同期イベントの各々の発生時に1つのプログラムを前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  16. 前記コントローラは、複数の非同期イベントの各々の発生時に複数のプログラムを前記プロセッサに実行させる、請求項3記載のコンピュテーショナルストレージドライブ。
  17. 複数のプログラムを保存する第1メモリと、
    前記複数のプログラムが実行される際にアクセス可能な第2メモリと、
    ホストから送られたデータを保存するストレージメディアと、
    前記複数のプログラムを実行して、前記第2メモリあるいは前記ストレージメディアに保存されたデータに対するデータ処理を行うプロセッサと、
    前記ホストからの要求を受け、前記ストレージメディアへのデータ書き込み又は前記ストレージメディアからのデータ読出しを行う、及び前記ホストからの要求とは独立して前記ストレージメディアのガベージコレクション又は前記データ処理の制御を行うコントローラと、
    を具備し、
    前記コントローラは、前記ガベージコレクションの動作中に前記複数のプログラムの中の前記ガベージコレクションに関連したプログラムを前記プロセッサに実行させる、コンピュテーショナルストレージドライブ。
  18. 前記ストレージメディアは、複数のゾーンを備え、
    前記複数のゾーンの各々は複数のユニットを備え、
    前記複数のゾーンの各々は前記ストレージメディアのデータ消去単位であり、
    前記複数のユニットの各々は前記ストレージメディアのデータ書き込み単位であり、
    前記複数のユニットの各々は前記ホストから指定される論理アドレスと、前記コントローラにより指定される物理アドレスを備え、
    前記コントローラは、前記論理アドレスと前記物理アドレスの対応関係を管理するルックアップテーブルを備え、
    前記ガベージコレクションは、第1ゾーンの第1ユニットから読み出した有効データを第2ゾーンの第2ユニットへ書き込む動作と、前記書き込む動作と前記ホストからの前記第2ユニットへの書き込み動作が重複しない場合、前記第1ユニットの論理アドレスを前記第2ユニットの物理アドレスに対応させるよう前記ルックアップテーブルを更新する動作と、前記読み出し元ーンの全ての有効データの前記第2ゾーンへの書き込みが完了すると、前記第1ゾーンの全てのユニットをデータ書き込み可能なフリーユニットとする動作を含む、請求項17記載のコンピュテーショナルストレージドライブ。
  19. 前記ガベージコレクションは、第1ゾーンの1つの第1ユニットから読み出した有効データを第2ゾーンの1つの第2ユニットへ書き込む動作と、前記書き込む動作と前記ホストからの前記第2ユニットへの書き込み動作が重複しない場合、前記第1ユニットの論理アドレスを前記第2ユニットの物理アドレスに対応させるよう前記ルックアップテーブルを更新する動作と、前記読み出し元ーンの全ての有効データの前記第2ゾーンへの書き込みが完了すると、前記第1ゾーンの全てのユニットをデータ書き込み可能なフリーユニットとする動作を含み、
    前記第1ユニットの論理アドレスと前記第2ユニットの論理アドレスは同じである、請求項18記載のコンピュテーショナルストレージドライブ。
  20. 前記ガベージコレクションは、第1ゾーンの複数の第1ユニットから読み出した有効データを第2ゾーンの複数の第2ユニットへ書き込む動作と、前記書き込む動作と前記ホストからの前記第2ユニットへの書き込み動作が重複しない場合、前記第1ユニットの論理アドレスを前記第2ユニットの物理アドレスに対応させるよう前記ルックアップテーブルを更新する動作と、前記読み出し元ーンの全ての有効データの前記第2ゾーンへの書き込みが完了すると、前記第1ゾーンの全てのユニットをデータ書き込み可能なフリーユニットとする動作を含み、
    前記複数の第1ユニットの論理アドレスと前記複数の第2ユニットの論理アドレスは同じである、請求項18記載のコンピュテーショナルストレージドライブ。
  21. 前記ガベージコレクションは、第1ゾーンの第1論理アドレス範囲内の第1ユニットから読み出した有効データを第2ゾーンの第2ユニットへ書き込む動作と、前記書き込む動作と前記ホストからの前記第2ユニットへの書き込み動作が重複しない場合、前記第1ユニットの論理アドレスを前記第2ユニットの物理アドレスに対応させるよう前記ルックアップテーブルを更新する動作と、前記読み出し元ーンの全ての有効データの前記第2ゾーンへの書き込みが完了すると、前記第1ゾーンの全てのユニットをデータ書き込み可能なフリーユニットとする動作を含み、
    前記第1論理アドレス範囲は、前記ホストにより設定される、請求項18記載のコンピュテーショナルストレージドライブ。
  22. 前記コントローラは、
    前記ガベージコレクションの動作中に前記複数のプログラムの中の前記ガベージコレクションに関連した第1プログラムを前記プロセッサに実行させ、
    前記第1プログラムの実行結果が正常である場合、前記複数のプログラムの中の前記ガベージコレクションに関連した第2プログラムを前記プロセッサに実行させる、請求項17記載のコンピュテーショナルストレージドライブ。
  23. 前記ガベージコレクションは、第1ゾーンの複数の第1ユニットから読み出した有効データを第2ゾーンの複数の第2ユニットへ書き込む動作と、前記書き込む動作と前記ホストからの前記第2ユニットへの書き込み動作が重複しない場合、前記第1ユニットの論理アドレスを前記第2ユニットの物理アドレスに対応させるよう前記ルックアップテーブルを更新する動作と、前記読み出し元ーンの全ての有効データの前記第2ゾーンへの書き込みが完了すると、前記第1ゾーンの全てのユニットをデータ書き込み可能なフリーユニットとする動作を含み、
    前記有効データが読み出される前記複数の第1ユニットの物理アドレスの順番は前記ホストにより昇順又は降順に設定される、請求項18記載のコンピュテーショナルストレージドライブ。
  24. 前記コントローラは、前記複数のプログラムの中の前記ガベージコレクションに関連したプログラムが前記第2ゾーンの前記第2ユニットをデアロケートユニットとして指定した場合、前記第1ゾーンの前記第1ユニットから読み出した前記有効データを前記第2ゾーンの前記ユニットに対して書き込むことを省略し、前記第2ユニットの状態をデアロケートとするように前記ルックアップテーブルを更新する、請求項18記載のコンピュテーショナルストレージドライブ。
  25. 前記コントローラは、前記第1ゾーンの第1ユニットから読み出した前記有効データを前記第2ゾーンの前記第2ユニットへ、前記複数のプログラムの中の前記ガベージコレクションに関連したプログラムにより指定されたアドレス順に書き込む、請求項18記載のコンピュテーショナルストレージドライブ。
  26. 前記コントローラが前記第1ゾーンの第1ユニットから読み出した前記有効データを書き込む前記第2ゾーンの前記第2ユニットは、前記有効データの属性に応じて選ばれる、請求項18記載のコンピュテーショナルストレージドライブ。
  27. 前記コントローラは、
    前記複数のプログラムの中の前記ガベージコレクションに関連したプログラムが前記第2ゾーンの前記第2ユニットの繰り越しを指定した場合、前記第1ゾーンの第1ユニットから読み出した前記有効データを前記第2ゾーンの前記第2ユニットへ書き込むことを遅延し、
    前記複数のプログラムの中の前記ガベージコレクションに関連したプログラムが前記第2ゾーンの前記第2ユニットの払い出しを指定した場合、前記ルックアップテーブルの更新を遅延する、請求項18記載のコンピュテーショナルストレージドライブ。
  28. 前記コントローラは、
    前記複数のプログラムの中の前記ガベージコレクションに関連したプログラムが前記第2ゾーンの第3ユニットを指定した場合、前記第1ゾーンの第1ユニットから読み出した前記有効データを前記第2ゾーンの前記第3ユニットへ書き込む、請求項18記載のコンピュテーショナルストレージドライブ。
JP2021153872A 2021-09-22 2021-09-22 コンピュテーショナルストレージドライブ Pending JP2023045456A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2021153872A JP2023045456A (ja) 2021-09-22 2021-09-22 コンピュテーショナルストレージドライブ
US17/654,912 US20230088291A1 (en) 2021-09-22 2022-03-15 Computational storage drive

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021153872A JP2023045456A (ja) 2021-09-22 2021-09-22 コンピュテーショナルストレージドライブ

Publications (1)

Publication Number Publication Date
JP2023045456A true JP2023045456A (ja) 2023-04-03

Family

ID=85572216

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021153872A Pending JP2023045456A (ja) 2021-09-22 2021-09-22 コンピュテーショナルストレージドライブ

Country Status (2)

Country Link
US (1) US20230088291A1 (ja)
JP (1) JP2023045456A (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11836374B1 (en) * 2022-05-31 2023-12-05 Western Digital Technologies, Inc. Storage system and method for data placement in zoned storage
US11947834B2 (en) 2022-07-15 2024-04-02 Micron Technology, Inc. Data storage devices with reduced buffering for storage access messages
US11983434B2 (en) * 2022-07-15 2024-05-14 Micron Technology, Inc. Network-ready storage products with computational storage processors
US20240069806A1 (en) * 2022-08-30 2024-02-29 Micron Technology, Inc. Managing data compaction for zones in memory devices
US20240201856A1 (en) * 2022-12-15 2024-06-20 Dell Products L.P. Provide host applications ability to dynamically manage application specific functionality on storage application

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8713268B2 (en) * 2010-08-05 2014-04-29 Ut-Battelle, Llc Coordinated garbage collection for raid array of solid state disks

Also Published As

Publication number Publication date
US20230088291A1 (en) 2023-03-23

Similar Documents

Publication Publication Date Title
JP2023045456A (ja) コンピュテーショナルストレージドライブ
US20230315342A1 (en) Memory system and control method
US11151029B2 (en) Computing system and method for controlling storage device
US11467955B2 (en) Memory system and method for controlling nonvolatile memory
US10248322B2 (en) Memory system
US9183136B2 (en) Storage control apparatus and storage control method
WO2017000658A1 (zh) 存储系统、存储管理装置、存储器、混合存储装置及存储管理方法
US20030229761A1 (en) Memory compression for computer systems
US10140031B2 (en) Hierarchical flash translation layer structure and method for designing the same
WO2010055937A1 (ja) 計算機システム、データ保存方法およびプログラム
CN101968755B (zh) 一种自适应应用负载变化的快照生成方法
US8930732B2 (en) Fast speed computer system power-on and power-off method
US11907129B2 (en) Information processing device, access controller, information processing method, and computer program for issuing access requests from a processor to a sub-processor
CN104866428A (zh) 数据存取方法和数据存取装置
CN103942011A (zh) 一种差量快照系统及其使用方法
KR20200124070A (ko) 멀티 코어 솔리드 스테이트 드라이브의 운용 방법
US20240086092A1 (en) Method for managing namespaces in a storage device and storage device employing the same
KR101392062B1 (ko) 고속 컴퓨터 시스템 파워 온 및 파워 오프 방법
CN107861887B (zh) 一种串行易失性存储器的控制方法
JP6860722B2 (ja) メモリシステムの制御方法
JP2011018237A (ja) ディスクアレイ装置及びその制御方法
JPH04134523A (ja) キャッシュ制御方法
KR20040005275A (ko) 캐쉬 메모리 참조의 최적화 방법
JP2003122606A (ja) キャッシュバッファ管理装置、その方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240313