▶ 株式会社日立製作所の特許一覧
特開2023-54829ストレージ装置及びデータ処理方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023054829
(43)【公開日】2023-04-14
(54)【発明の名称】ストレージ装置及びデータ処理方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20230407BHJP
G06F 13/12 20060101ALI20230407BHJP
【FI】
G06F3/06 301W
G06F3/06 301N
G06F13/12 340C
【審査請求】有
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2023017247
(22)【出願日】2023-02-08
(62)【分割の表示】P 2020156106の分割
【原出願日】2020-09-17
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】長尾 尚
(72)【発明者】
【氏名】吉原 朋宏
(72)【発明者】
【氏名】山本 彰
(72)【発明者】
【氏名】清田 雄策
(57)【要約】
【課題】I/O性能を低下させることなく、データ削減効果が高いストレージ装置を実現する。
【解決手段】ストレージ装置は、プロセッサ、アクセラレータ、メモリ、及び記憶装置を備え、記憶装置は、重複排除され、かつ、圧縮されたデータを格納する。プロセッサは、読出要求を受信した場合、重複排除処理によって削除されたデータを参照先から取得し、読出データ列を構成するデータから生成された圧縮データを記憶装置から取得し、圧縮データを伸張したデータ列を構成する複数のデータの各々の読出データ列における位置を示す位置情報を含む伸張指示を、アクセラレータに送信する。アクセラレータは、圧縮データを伸張してデータ列を生成し、位置情報に基づいて、読出データ列を構成するようにデータ列を構成する複数のデータの各々をメモリに格納する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
プロセッサ、アクセラレータ、メモリ、及び記憶装置を備えたストレージ装置であって、
前記記憶装置は、重複排除され、かつ、圧縮されたデータを格納し、
前記ストレージ装置は、重複排除処理によって削除されたデータと、当該データを取得するために参照する参照先とを対応づけた重複排除データ管理情報を保持し、
前記プロセッサは、
読出要求を受信した場合、前記重複排除データ管理情報に基づいて、前記読出要求の対象となる読出データ列を構成するデータであって、前記重複排除処理によって削除されたデータを参照先から取得し、前記メモリに格納し、
前記読出データ列を構成するデータから生成された圧縮データを前記記憶装置から取得して、前記メモリに格納し、
前記圧縮データを伸張したデータ列を構成する複数のデータの各々の前記読出データ列における位置を示す第1位置情報を含む伸張指示を、前記アクセラレータに送信し、
前記アクセラレータは、
前記伸張指示を受信した場合、前記取得した圧縮データを伸張することによって第1データ列を生成し、
前記第1位置情報に基づいて、前記読出データ列を構成するように、前記第1データ列を構成する複数のデータの各々を前記メモリに格納することを特徴とするストレージ装置。
【請求項2】
請求項1に記載のストレージ装置であって、
前記プロセッサは、
前記メモリに格納されるデータのうち前記記憶装置に格納するデータである圧縮対象データを特定し、
前記圧縮対象データに関する情報を含む圧縮指示を、前記アクセラレータに送信し、
前記アクセラレータは、
前記圧縮指示を受信した場合、前記メモリから連続する複数の前記データを読み出し、
前記プロセッサから受信した前記圧縮対象データに関する情報に基づいて、前記複数のデータのうち圧縮対象ではないデータを除いた複数の前記圧縮対象データを圧縮することによって、前記記憶装置に格納する圧縮データを生成することを特徴とするストレージ装置。
【請求項3】
請求項2に記載のストレージ装置であって、
前記プロセッサは、前記メモリに格納される、複数のデータから構成されるデータ列に対して前記重複排除処理を実行し、
前記圧縮対象ではないデータは、前記重複排除処理によって前記記憶装置への格納対象ではなくなったデータであることを特徴とするストレージ装置。
【請求項4】
請求項3に記載のストレージ装置であって、
前記プロセッサは、第2データ列に対する前記重複排除処理の結果に基づいて、前記第2データ列を構成するデータの中から前記圧縮対象データを特定し、
前記第2データ列における前記圧縮対象データの位置を示す第2位置情報を前記圧縮対象データに関する情報として生成し、
前記アクセラレータは、前記圧縮指示を受信した場合、前記メモリから前記第2データ列を読み出し、前記第2位置情報に基づいて、前記第2データ列から前記圧縮対象データを取得することを特徴とするストレージ装置。
【請求項5】
請求項3に記載のストレージ装置であって、
前記プロセッサは、
複数の前記データ列に対する前記重複排除処理の結果に基づいて、前記複数のデータ列の各々の前記圧縮対象データを特定し、
前記複数のデータ列の各々における前記圧縮対象データの位置を示す第3位置情報を前記圧縮対象データに関する情報として生成し、
前記アクセラレータは、前記圧縮指示を受信した場合、前記メモリから前記複数のデータ列を読み出し、前記第3位置情報に基づいて、前記複数のデータ列から所定の数の前記圧縮対象データを取得することを特徴とするストレージ装置。
【請求項6】
請求項5に記載のストレージ装置であって、
第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記プロセッサは、
新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納し、
前記第1圧縮データの伸張指示を前記アクセラレータに送信し、
前記アクセラレータは、前記第1圧縮データを伸張することによって第3データ列を生成し、前記メモリに格納し、
前記プロセッサは、前記第1データに関する情報を含む圧縮指示を前記アクセラレータに送信し、
前記アクセラレータは、
前記第3データ列を構成するデータの中から、前記第1データを除くデータを取得し、
前記取得されたデータから構成される第4データ列を圧縮して、第2圧縮データを生成することを特徴とするストレージ装置。
【請求項7】
請求項5に記載のストレージ装置であって、
第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記プロセッサは、
新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納し、
前記第1データに関する情報を含む再圧縮指示を前記アクセラレータに送信し、
前記アクセラレータは、
前記再圧縮指示を受け付けた場合、前記第1圧縮データを伸張することによって第3データ列を生成し、前記メモリに格納し、
前記第3データ列を構成するデータの中から、前記第1データを除くデータを取得し、
前記取得されたデータから構成される第4データ列を圧縮して、第2圧縮データを生成することを特徴とするストレージ装置。
【請求項8】
ストレージ装置が実行するデータ処理方法であって、
前記ストレージ装置は、プロセッサ、アクセラレータ、メモリ、及び記憶装置を有し、
前記記憶装置は、重複排除され、かつ、圧縮されたデータを格納し、
前記ストレージ装置は、重複排除処理によって削除されたデータと、当該データを取得するために参照する参照先とを対応づけた重複排除データ管理情報を保持し、
前記データ処理方法は、
前記プロセッサが、読出要求を受信した場合、前記重複排除データ管理情報に基づいて、前記読出要求の対象となる読出データ列を構成するデータであって、前記重複排除処理によって削除されたデータを参照先から取得し、前記メモリに格納するステップと、
前記プロセッサが、前記読出データ列を構成するデータから生成された圧縮データを前記記憶装置から取得して、前記メモリに格納するステップと、
前記プロセッサが、前記圧縮データを伸張したデータ列を構成する複数のデータの各々の前記読出データ列における位置を示す第1位置情報を含む伸張指示を、前記アクセラレータに送信するステップと、
前記アクセラレータが、前記取得した圧縮データを伸張することによって第1データ列を生成するステップと、
前記アクセラレータが、前記第1位置情報に基づいて、前記読出データ列を構成するように、前記第1データ列を構成する複数のデータの各々を前記メモリに格納するステップと、
を含むことを特徴とするデータ処理方法。
【請求項9】
請求項8に記載のデータ処理方法であって、
前記プロセッサが、前記メモリに格納されるデータのうち前記記憶装置に格納するデータである圧縮対象データを特定する第1のステップと、
前記プロセッサが、前記圧縮対象データに関する情報を含む圧縮指示を、前記アクセラレータに送信する第2のステップと、
前記アクセラレータが、前記圧縮支持を受信した場合、前記メモリから連続する複数の前記データを読み出し、前記プロセッサから受信した前記圧縮対象データに関する情報に基づいて、前記複数のデータのうち圧縮対象ではないデータを除いた複数の圧縮対象データを圧縮することによって、前記記憶装置に格納する圧縮データを生成する第3のステップと、
を含むことを特徴とするデータ処理方法。
【請求項10】
請求項9に記載のデータ処理方法であって、
前記プロセッサが、前記メモリに格納される、複数のデータから構成されるデータ列に対して前記重複排除処理を実行するステップを含み、
前記圧縮対象ではないデータは、前記重複排除処理によって前記記憶装置への格納対象ではなくなったデータであることを特徴とするデータ処理方法。
【請求項11】
請求項10に記載のデータ処理方法であって、
前記第1のステップは、
前記プロセッサが、第2データ列に対する前記重複排除処理の結果に基づいて、前記第2データ列を構成するデータの中から前記圧縮対象データを特定するステップと、
前記プロセッサが、前記第2データ列における前記圧縮対象データの位置を示す第2位置情報を前記圧縮対象データに関する情報として生成するステップと、を含み、
前記第3のステップは、前記アクセラレータが、前記メモリから前記第2データ列を読み出し、前記第2位置情報に基づいて、前記第2データ列から前記圧縮対象データを取得するステップを含むことを特徴とするデータ処理方法。
【請求項12】
請求項10に記載のデータ処理方法であって、
前記第1のステップは、
前記プロセッサが、複数の前記データ列に対する前記重複排除処理の結果に基づいて、前記複数のデータ列の各々の前記圧縮対象データを特定するステップと、
前記プロセッサが、前記複数のデータ列の各々における前記圧縮対象データの位置を示す第3位置情報を前記圧縮対象データに関する情報として生成するステップと、を含み、
前記第3のステップは、前記アクセラレータが、前記メモリから前記複数のデータ列を読み出し、前記第3位置情報に基づいて、前記複数のデータ列から所定の数の前記圧縮対象データを取得するステップを含むことを特徴とするデータ処理方法。
【請求項13】
請求項12に記載のデータ処理方法であって、
前記ストレージ装置は、第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記データ処理方法は、
前記プロセッサが、新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納するステップと、
前記プロセッサが、前記第1圧縮データの伸張指示を前記アクセラレータに送信するステップと、
前記アクセラレータが、前記第1圧縮データを伸張することによって第3データ列を生成し、前記メモリに格納するステップと、
前記プロセッサが、前記第1データに関する情報を含む圧縮指示を前記アクセラレータに送信するステップと、
前記アクセラレータが、前記第3データ列を構成するデータの中から、前記第1データを除くデータを取得し、前記取得されたデータから構成される第4データ列を圧縮して、第2圧縮データを生成するステップと、を含むことを特徴とするデータ処理方法。
【請求項14】
請求項12に記載のデータ処理方法であって、
前記ストレージ装置は、第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記データ処理方法は、
前記プロセッサが、新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納するステップと、
前記プロセッサが、前記第1データに関する情報を含む再圧縮指示を前記アクセラレータに送信するステップと、
前記アクセラレータが、前記再圧縮指示を受け付けた場合、前記第1圧縮データを伸張することによって第3データ列を生成し、前記メモリに格納するステップと、
前記アクセラレータが、前記第3データ列を構成するデータの中から、前記第1データを除くデータを取得し、前記取得されたデータから構成される第4データ列を圧縮して、第2圧縮データを生成するステップと、を含むことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、容量削減機能を有するストレージ装置に関する。
【背景技術】
【0002】
近年、IoT(Internet of Things)及びAI(Artifical Inteligence)に代表されるように、膨大なデータを分析することによって、新たな価値を生み出す技術が普及している。膨大なデータを格納するストレージ装置には、低いデータ保持コスト(容量当たりの価格)と高いI/O(Input/Output)性能が求められる。
【0003】
データ保持コストは、ビットコスト(容量当たりの価格)及び格納するデータ量の積として算出される。格納するデータ量を削減することによってデータ保持コストの削減を実現する技術として、重複排除及び圧縮がある。重複排除は、ストレージ装置内の同じデータを検索し、一方のデータを削除し、他方のデータを参照するように制御する機能である。圧縮は、データのビット列を符号化することによって、短いビット列に置換する機能である。
【0004】
近年、重複排除及び圧縮を組み合わせて、データ保持コストが低いストレージ装置が普及している。
【0005】
しかし、ビット列の符号化は、演算負荷の大きい処理であるため、膨大なデータを扱うストレージ装置において、I/O性能の低下を引き起こす。
【0006】
I/O性能の低下への対処として、例えば、特許文献1に記載の技術が知られている。特許文献1には、データの圧縮及び伸張を専用ハードウェアで高速に行うことができるアクセラレータをCPUバス上に搭載し、メモリに保持したデータ及びバス上で入出力されるデータの圧縮及び伸張をアクセラレータにオフロードし、CPUの負荷を減らすシステムが開示されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】米国公開特許第2017/0147624号
【発明の概要】
【発明が解決しようとする課題】
【0008】
重複排除及び圧縮のデータ削減効果は処理単位の大きさによって異なる。
【0009】
重複排除では、処理単位が小さいほどデータ削減効果が高い。なぜならば、処理単位が小さいと、ストレージ装置内に同一データが存在する確率が高くなるためである。例えば、ABCDとDCBAというデータがあるとき、処理単位が4文字である場合、二つのデータは異なるデータとして扱われ、重複排除されない。一方で、処理単位が1文字であれば、A、B、C、Dの各部分が同じデータとして扱われ、重複排除できる。
【0010】
一方で、圧縮では、処理単位が大きいほどデータ削減効果が高い。例えば、8kBのデータが8個ある状況を想定した場合、各データを個別に圧縮するよりも、8個のデータを一つに結合した64kBのデータを圧縮するほうがデータ削減率は高い。ストレージ装置で用いる可逆圧縮アルゴリズムは一般にスライド辞書方式であり、圧縮単位が大きいほどより広い辞書探索空間があり、文字列が一致する確率が高まるためである。
【0011】
高いデータ削減効果を得るためには、処理単位が小さい重複排除と処理単位が大きい圧縮を組み合わせる必要がある。まず、データ列のうち、小さい処理単位で同じデータを検索し、重複排除する。次に、重複排除によって削除されたデータを除いたデータ列を圧縮する。ここで、重複排除によって削除したデータを除くために、プロセッサによるデータ列の操作が必要となり、I/O性能が低下する課題がある。
【課題を解決するための手段】
【0012】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、プロセッサ、アクセラレータ、メモリ、及び記憶装置を備えたストレージ装置であって、前記記憶装置は、重複排除され、かつ、圧縮されたデータを格納し、前記ストレージ装置は、重複排除処理によって削除されたデータと、当該データを取得するために参照する参照先とを対応づけた重複排除データ管理情報を保持し、前記プロセッサは、読出要求を受信した場合、前記重複排除データ管理情報に基づいて、前記読出要求の対象となる読出データ列を構成するデータであって、前記重複排除処理によって削除されたデータを参照先から取得し、前記メモリに格納し、前記読出データ列を構成するデータから生成された前記圧縮データを前記記憶装置から取得して、前記メモリに格納し、前記圧縮データを伸張したデータ列を構成する複数のデータの各々の前記読出データ列における位置を示す第1位置情報を含む伸張指示を、前記アクセラレータに送信し、前記アクセラレータは、前記伸張指示を受信した場合、前記取得した圧縮データを伸張することによって第1データ列を生成し、前記第1位置情報に基づいて、前記読出データ列を構成するように、前記第1データ列を構成する複数のデータの各々を前記メモリに格納する。
【発明の効果】
【0013】
本発明によれば、I/O性能を低下させることなく、データ削減効果が高いストレージ装置を実現できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0014】
【
図1】実施例1のストレージ装置が実行する処理の概要を説明する図である。
【
図2】実施例1のストレージ装置が実行する処理の概要を説明する図である。
【
図3】実施例1のストレージ装置の構成の一例を示す図である。
【
図4】実施例1の圧縮データ管理情報の一例を示す図である。
【
図5】実施例1の重複排除データ管理情報の一例を示す図である。
【
図6】実施例1のプロセッサが実行するデータ削減処理の一例を説明するフローチャートである。
【
図7】実施例1のアクセラレータが実行する圧縮処理の一例を説明するフローチャートである。
【
図8】実施例1のプロセッサが実行するデータ列の読出処理の一例を説明するフローチャートである。
【
図9】実施例1のアクセラレータが実行する伸張処理の一例を説明するフローチャートである。
【
図10】実施例2のストレージ装置が実行する処理の概要を説明する図である。
【
図11】実施例2のストレージ装置が実行する処理の概要を説明する図である。
【
図12】実施例2の圧縮データ管理情報の一例を示す図である。
【
図13】実施例2のホストデータ管理情報の一例を示す図である。
【
図14A】実施例2のプロセッサが実行するデータ削減処理の一例を説明するフローチャートである。
【
図14B】実施例2のプロセッサが実行するデータ削減処理の一例を説明するフローチャートである。
【
図15】実施例2のアクセラレータが実行する圧縮処理の一例を説明するフローチャートである。
【
図16】実施例2のプロセッサが実行するガベージコレクションの一例を説明するフローチャートである。
【発明を実施するための形態】
【0015】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0016】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【0017】
本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【実施例0018】
まず、実施例1のストレージ装置100が実行する処理の概要を
図1及び
図2を用いて説明する。
図1及び
図2は、実施例1のストレージ装置100が実行する処理の概要を説明する図である。
【0019】
ストレージ装置100は、ホスト200(
図3参照)に記憶領域を提供する装置であり、プロセッサ111、アクセラレータ112、及びメモリ113を含むストレージコントローラ101と、記憶媒体102とを備える。ホスト200は、提供される記憶領域を論理的なボリュームとして認識し、当該ボリュームを用いてデータの読出し及びデータの書込みを行う。
【0020】
まず、
図1を用いて実施例1のストレージ装置100が実行する書込処理の概要について説明する。ここでは、ホスト200が、アドレス(論理アドレス)順に整列された複数のデータから構成されるデータ列をボリュームに対して書き込んだ場合の処理について説明する。
【0021】
まず、ホスト200が書き込んだデータ列はメモリ113に格納される。
図1では、データ列XBYZが書き込まれた後、データ列ABCDが書き込まれたものとする。
【0022】
なお、データ列XBYZは、データX、B、Y、Zから構成されるデータ列であり、データ列ABCDは、データA、B、C、Dから構成されるデータ列である。データ列の各データは論理アドレスの順に並べられている。
【0023】
プロセッサ111は、メモリ113にデータ列ABCDが格納された後、所定の処理単位で、メモリ113に格納されるデータ列XBYZとデータ列ABCDとを比較する。処理単位は、例えば、データ列の最小データサイズ、すなわち、データX、Aといった単位でデータを比較する。プロセッサ111は、前述の比較の結果、データ列ABCDのデータBが他のデータ列XBYZのデータBと一致しているため、データBは記憶媒体102への格納が不要なデータであると判定する。プロセッサ111は、データA、C、Dが圧縮対象データであることを示す情報を生成する。
【0024】
プロセッサ111は、アクセラレータ112に対して、メモリ113上のデータ列ABCDのアドレス及び圧縮対象データに関する情報とともに、圧縮を指示する。ここで、圧縮対象データに関する情報は、例えば、ビットマップ及びアドレス範囲のリスト等である。ビットマップは、データ列を構成するデータの数と同数のビット列であり、圧縮対象データに対応するビットに1が格納される。
【0025】
アクセラレータ112は、データ列ABCDのアドレスに基づいて、メモリ113からデータ列ABCDを取得する。また、アクセラレータ112は、圧縮対象データに関する情報に基づいて、データ列ABCDからデータA、C、Dを取得し、取得したデータA、C、Dをアドレス順に並べてデータ列ACDを生成し、圧縮アルゴリズムに基づいてデータ列ACDを圧縮することによって圧縮データacdを生成する。アクセラレータ112は、圧縮データacdをメモリ113に格納する。その後、プロセッサ111は、メモリ113上の圧縮データacdを記憶媒体102に格納する。
【0026】
重複排除では、プロセッサ111は小さい処理単位で重複するデータを検索する。これによって、重複したデータを効率的に検索し、削除できるため、データ削減効果を高めることができる。圧縮では、アクセラレータ112は、圧縮対象データを並べて生成されたデータ列、すなわち、重複排除より大きい処理単位のデータ(データ列)を圧縮する。これによって、圧縮率が高い圧縮データを生成できるため、データ削減効果を高めることができる。
【0027】
以上が、書込処理の概要である。
【0028】
次に、
図2を用いて実施例1のストレージ装置100が実行する読出処理の概要について説明する。ここでは、ホスト200が、ストレージ装置100に対して、データ列ABCDの読出要求を送信した場合の処理について説明する。なお、読出要求には、ボリュームにおけるデータ列ABCDの論理アドレスが含まれる。
【0029】
プロセッサ111は、記憶媒体102から、重複排除処理によって削除されたデータBを読み出し、メモリ113に格納する。また、プロセッサ111は、記憶媒体102から、圧縮データacdを読み出し、メモリ113に格納する。プロセッサ111は、アクセラレータ112に対して、メモリ113上の圧縮データacdのアドレス、メモリ113上のデータ列ABCDの格納位置(アドレス)、及び伸張されたデータA、C、Dの配置に関する情報とともに、伸張を指示する。ここで、伸張されたデータの配置に関する情報は、例えば、ビットマップ及びアドレスのリスト等である。ビットマップは、データ列を構成するデータの数と同数のビット列であり、データを配置する位置に対応するビットに1が格納される。
【0030】
アクセラレータ112は、圧縮データacdのアドレスに基づいて、メモリ113から圧縮データacdを取得し、圧縮データacdを伸張することによってデータ列ACDを生成する。また、アクセラレータ112は、伸張されたデータの配置に関する情報に基づいて、データ列ACDのデータA、C、Dをメモリ113の所定のアドレスに格納する。
【0031】
例えば、伸張されたデータの配置に関する情報がビットマップである場合、アクセラレータ112は、データ列ACDにおけるデータの順番にしたがって、1が格納されるビットに対応するデータ列の位置にデータを格納する。つまり、アクセラレータ112は、データ列ABCDのメモリ113の配置場所の1番目の位置にデータAを格納し、3番目の位置にデータCを格納し、4番目の位置にデータDを格納する。
【0032】
なお、データBをメモリ113に格納した後に、データA、C、Dがメモリ113に格納されているが、メモリ113へのデータの格納順は異なっていてもよい。
【0033】
以上が、読出処理の概要である。
【0034】
次に、実施例1のストレージ装置100の詳細について説明する。
【0035】
図3は、実施例1のストレージ装置100の構成の一例を示す図である。
【0036】
ストレージ装置100は、SAN(Storage Area Network)及びLAN(Local Area Network)等のネットワークを介して、記憶領域を提供するホスト200と接続する。ホスト200は、例えば、パーソナルコンピュータ及びスマートフォン等である。
【0037】
ストレージ装置100は、ストレージコントローラ101及び記憶媒体102を備える。
【0038】
ストレージコントローラ101は、コマンドに応じた処理を実行する。ストレージコントローラ101は、プロセッサ111、アクセラレータ112、メモリ113、及びホストインタフェース114を有する。各ハードウェアは内部ネットワークを介して相互に接続される。
【0039】
ホストインタフェース114は、ホスト200と接続するためのインタフェースである。ホストインタフェース114は、ストレージ装置100及びホスト200の間でコマンド及びデータの送受信処理を実行する。
【0040】
プロセッサ111は、メモリ113に格納されるプログラムを実行する。実施例1のプロセッサ111は、コマンドに応じて各種処理を実行する演算部又は制御部として機能する。
【0041】
アクセラレータ112は、本発明の特徴的な要素であり、プロセッサ111の指示に従って圧縮処理及び伸張処理を実行する。アクセラレータ112は、圧縮処理及び伸張処理を高速に実行できるように設計されたハードウェアであり、例えば、FPGA(Field Programmable Gate Array)を用いて実装される。
【0042】
メモリ113は、DRAM(Dynamic Random Access Memory)等の記憶装置であり、プロセッサ111が実行するプログラム及びプログラムが使用する情報を格納する。また、メモリ113は、プログラムが使用するワークエリアとしても利用される。メモリ113は、揮発性のメモリ及び不揮発性のメモリのいずれでもよい。
【0043】
本実施例のメモリ113は、圧縮データ管理情報300及び重複排除データ管理情報310を格納する。また、メモリ113は、演算部又は制御部を実現するプログラム(図示省略)を格納する。圧縮データ管理情報300及び重複排除データ管理情報310の詳細については、
図4及び
図5を用いて説明する。
【0044】
記憶媒体102は、不揮発性の記憶装置である。記憶媒体102は、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)等の半導体メモリである。記憶媒体102は、内部ネットワークを介してストレージコントローラ101と接続し、プロセッサ111との間のコマンドの送受信処理、メモリ113との間のデータの送受信処理を実行する。なお、記憶媒体102は、内部ネットワークを介して、直接ストレージコントローラ101と接続しているが、内部ネットワークに接続された記憶媒体用のインタフェースを介して、ストレージコントローラ101と接続してもよい。
【0045】
図4は、実施例1の圧縮データ管理情報300の一例を示す図である。
【0046】
圧縮データ管理情報300は、圧縮データを管理するための情報である。圧縮データ管理情報300は、論理アドレス301、物理アドレス302、及びデータサイズ303から構成されるエントリを格納する。一つのエントリは、一つの圧縮データに対応する。
【0047】
論理アドレス301は、ホスト200に提供されたボリュームにおける、データ列の格納場所を示す論理アドレスを格納するフィールドである。
【0048】
物理アドレス302は、ストレージ装置100における、圧縮データの格納場所を示すアドレスを格納するフィールドである。ここで、圧縮データは、重複排除処理が実行されたデータ列を圧縮することによって生成されたデータである。
【0049】
データサイズ303は、圧縮データのデータサイズを格納するフィールドである。
【0050】
圧縮データのデータサイズは、もとのデータ列のサイズ及び格納される値等に依存する。したがって、各圧縮データのサイズは一般的に異なる。データ削減効果を高めるためには、隙間がないように圧縮データを記憶媒体102に格納する必要がある。そこで、プロセッサ111は、圧縮データ管理情報300を用いて、記憶媒体102上の圧縮データの配置を制御する。
【0051】
なお、記憶媒体102の物理アドレスの代わりに、記憶媒体102がストレージコントローラ101に提供するアドレス、又は複数の記憶媒体102を用いた生成されたRAID(Redundant Arrays of Inexpensive Disks)ボリュームのアドレス、容量仮想化機構によって提供される外接のストレージ装置100のアドレスであってもよい。
【0052】
図5は、実施例1の重複排除データ管理情報310の一例を示す図である。
【0053】
重複排除データ管理情報310は、重複排除によってデータ列から削除されたデータを管理するための情報である。重複排除データ管理情報310は、論理アドレス311及び参照論理アドレス312から構成されるエントリを格納する。一つのエントリは、重複排除によって削除された一つのデータに対応する。
【0054】
論理アドレス311は、ボリュームにおける、重複排除によってデータ列から削除されたデータの格納場所を示すアドレスを格納するフィールドである。
【0055】
参照論理アドレス312は、ボリュームにおける、削除されたデータに一致するデータの格納場所を示すアドレスを格納するフィールドである。
【0056】
重複排除の処理単位は、圧縮の処理単位より小さいため、あるデータ列に含まれるデータが、他のデータ列に含まれるデータと一致する場合がある。
【0057】
図6は、実施例1のプロセッサ111が実行するデータ削減処理の一例を説明するフローチャートである。
【0058】
プロセッサ111は、書込処理の実行時又は周期的にデータ削減処理を実行する。書込処理は、ストレージ装置100が、ホスト200からデータ列を受信した場合に実行される。ここでは、書込処理の実行時にデータ削減処理が実行されるものとして説明する。なお、書込処理では、ストレージ装置100は、メモリ113にデータ列を格納し、ホスト200に書込処理の完了通知を送信する。
【0059】
プロセッサ111は、重複排除の処理単位に基づいてデータ列を分割する(ステップS101)。このとき、プロセッサ111は、圧縮対象データに関する情報を初期化する。例えば、プロセッサ111は、分割されたデータの数と同数のビット列(ビットマップ)を生成する。
【0060】
次に、プロセッサ111は、分割されたデータの中からターゲットデータを選択する(ステップS102)。
【0061】
次に、プロセッサ111は、ターゲットデータに一致するデータを検索する(ステップS103)。
【0062】
例えば、プロセッサ111は、ターゲットデータからフィンガープリントと呼ばれる小サイズの検索キーワードを算出し、他のデータのフィンガープリントと比較する。ターゲットデータのフィンガープリントと同じフィンガープリントのデータが存在する場合、プロセッサ111は、検索されたデータを伸長し、ターゲットデータと伸長したデータとを比較する。
【0063】
なお、比較するデータはメモリ113及び記憶媒体102に格納されるデータである。
【0064】
次に、プロセッサ111は、検索の結果に基づいて、ターゲットデータに一致するデータが存在するか否かを判定する(ステップS104)。
【0065】
ターゲットデータに一致するデータが存在する場合、プロセッサ111は、ターゲットデータに関するエントリを重複排除データ管理情報310に登録する(ステップS105)。その後、プロセッサ111はステップS107に進む。
【0066】
具体的には、プロセッサ111は、重複排除データ管理情報310にエントリを追加し、追加されたエントリの論理アドレス311にターゲットデータの論理アドレスを格納し、追加されたエントリの参照論理アドレス312にターゲットデータに一致するデータの論理アドレスを格納する。
【0067】
なお、ターゲットデータの論理アドレスは、ターゲットデータを含むデータ列のアドレス、ターゲットデータの先頭からの順番(オフセット)、及び重複排除の処理単位に基づいて算出できる。
【0068】
ターゲットデータに一致するデータが存在しない場合、プロセッサ111は、ターゲットデータを圧縮対象データとして登録する(ステップS106)。その後、プロセッサはステップS107に進む。
【0069】
例えば、プロセッサ111は、ビットマップのターゲットデータに対応するビットに1を設定する。
【0070】
ステップS107では、プロセッサ111は、データ列の全てのデータについて処理が完了したか否かを判定する(ステップS107)。
【0071】
データ列の全てのデータについて処理が完了していない場合、プロセッサ111は、ステップS102に戻り、同様の処理を実行する。
【0072】
データ列の全てのデータについて処理が完了した場合、プロセッサ111は、アクセラレータ112に対して、メモリ113上のデータ列の格納位置(アドレス)及び圧縮対象データに関する情報を含む圧縮指示を送信する(ステップS108)。プロセッサ111は、アクセラレータ112から完了通知を受信するまで待ち状態に移行する。なお、完了通知には、メモリ113上の圧縮データの格納場所(アドレス)及び圧縮データのデータサイズが含まれる。
【0073】
アクセラレータ112から完了通知を受信した場合、プロセッサ111は、記憶媒体102における圧縮データの格納場所を決定し(ステップS109)、その後、データ削減処理を終了する。具体的には、以下のような処理が実行される。
【0074】
(S109-1)プロセッサ111は、圧縮データ管理情報300を参照し、論理アドレス301に、データ列の論理アドレスが格納されるエントリを検索する。該当するエントリが存在しない場合、プロセッサ111は、圧縮データ管理情報300にエントリを追加し、追加されたエントリの論理アドレス301にデータ列の論理アドレスを格納する。
【0075】
(S109-2)プロセッサ111は、圧縮データ管理情報300の物理アドレス302を参照し、記憶媒体102の圧縮データが格納される記憶領域の最後尾の位置(アドレス)を特定する。プロセッサ111は、当該アドレスに基づいて、圧縮データを格納する記憶領域のアドレスを決定する。
【0076】
(S109-3)プロセッサ111は、論理アドレス301に、データ列の論理アドレスが格納されるエントリの物理アドレス302に決定されたアドレスを格納し、また、当該エントリのデータサイズ303に、通知された圧縮データのデータサイズを格納する。これによって、圧縮データは記憶媒体102の記憶領域に前詰めに格納される。
【0077】
以上がステップS109の処理の説明である。
【0078】
周期的にデータ削減処理を実行する場合、プロセッサ111は、各データ列に対して
図6で説明した処理を実行する。
【0079】
プロセッサ111は、データ削減処理を実行された後、任意のタイミングで、記憶媒体102の決定されたアドレスに圧縮データを格納する。例えば、データ削減処理と圧縮データの格納処理が連続的に実行されてもよいし、周期的に圧縮データの格納処理が実行されてよい。周期的に圧縮データの格納処理を実行する場合、プロセッサ111は、メモリ113に格納される圧縮データを検索し、検索された圧縮データを記憶媒体102に格納する。
【0080】
図7は、実施例1のアクセラレータ112が実行する圧縮処理の一例を説明するフローチャートである。
【0081】
アクセラレータ112は、プロセッサ111から圧縮指示を受信した場合、圧縮処理を開始する。
【0082】
アクセラレータ112は、プロセッサ111から通知されたメモリ113上のデータ列の格納位置(アドレス)からデータ列を取得する(ステップS201)。
【0083】
アクセラレータ112は、プロセッサ111から通知された圧縮対象データに関する情報に基づいて、データ列から圧縮対象データを抽出する(ステップS202)。
【0084】
例えば、圧縮対象データに関する情報がビットマップである場合、アクセラレータ112は、1が設定されたビットに対応する位置のデータを圧縮対象データとして抽出する。
【0085】
アクセラレータ112は、圧縮対象データを論理アドレス順に並べることによってデータ列を生成する(ステップS203)。
【0086】
次に、アクセラレータ112は、生成されたデータ列に対して圧縮アルゴリズムを適用することによって、圧縮データを生成する(ステップS204)。
【0087】
次に、アクセラレータ112は、メモリ113に圧縮データを格納する(ステップS205)。
【0088】
次に、アクセラレータ112は、メモリ113上の圧縮データの格納場所(アドレス)及び圧縮データのデータサイズを含む完了通知をプロセッサ111に送信する(ステップS206)。その後、アクセラレータ112は圧縮処理を終了する。
【0089】
アクセラレータ112がデータ列を圧縮することによってプロセッサ111の処理負荷を低減できる。
【0090】
図8は、実施例1のプロセッサ111が実行するデータ列の読出処理の一例を説明するフローチャートである。
【0091】
ストレージ装置100は、ホスト200からデータ読出要求を受信した場合、又は、データ読出要求の傾向に基づいて予測されたデータを先読みする場合、データ列の読出処理を開始する。
【0092】
ここでは、データ読出要求を受信した場合を例に読出処理を説明する。なお、データ読出要求には、ボリュームにおけるデータ列の論理アドレスが含まれる。
【0093】
プロセッサ111は、論理アドレス、ホスト200が扱うデータ列のサイズ、及び重複排除の処理単位に基づいて、データ列を構成するデータのアドレスリストを生成する(ステップS301)。アドレスリストは、データ列を構成するデータが格納される先頭アドレス(論理アドレス)のリストである。このとき、プロセッサ111は、メモリ113上のデータ列の配置場所(アドレス範囲)を決定する。また、プロセッサ111は、伸張されたデータ列を構成するデータの配置に関する情報を初期化する。例えば、プロセッサ111は、アドレスリストに登録されているアドレスの数と同数のビット列(ビットマップ)を生成する。
【0094】
次に、プロセッサ111は、リストの中からターゲットアドレスを選択する(ステップS302)。
【0095】
プロセッサ111は、重複排除データ管理情報310を参照し、ターゲットアドレスに対応するデータが重複排除により削除されたか否かを判定する(ステップS303)。
【0096】
具体的には、プロセッサ111は、論理アドレス311を参照して、ターゲットアドレス及びデータのサイズ(重複排除の処理単位)によって特定されたアドレス範囲に含まれる論理アドレスが設定されたエントリを検索する。プロセッサ111は、前述の条件に該当するエントリが存在する場合、ターゲットデータが重複排除により削除されたと判定する。
【0097】
ターゲットアドレスに対応するデータが重複排除により削除されたデータであると判定された場合、プロセッサ111は、ターゲットアドレスに対応するデータを読み出し、メモリ113に格納する(ステップS304)。その後、プロセッサ111はステップS306に進む。具体的には、以下のような処理が実行される。
【0098】
(S304-1)プロセッサ111は、ホスト200が扱うデータ列のサイズ、データ列の論理アドレス、及びターゲットデータの論理アドレスに基づいて、メモリ113上のターゲットアドレスに対応するデータの配置場所(アドレス)を決定する。
【0099】
(S304-2)プロセッサ111は、ステップS303において検索されたエントリの参照論理アドレス312に対応するデータがメモリ113に格納されているか否かを判定する。
【0100】
(S304-3)データがメモリ113に格納されている場合、プロセッサ111は、当該データを決定された配置場所にコピーする。
【0101】
(S304-4)データがメモリ113に格納されていない場合、プロセッサ111は、圧縮データ管理情報300を参照し、論理アドレス301に、検索されたアドレスを含むアドレス範囲の先頭アドレスが格納されるエントリを検索する。プロセッサ111は、検索されたエントリの物理アドレス302に格納されるアドレスに基づいて、記憶媒体102から圧縮データを読み出し、メモリ113に格納する。プロセッサ111は、アクセラレータ112に、メモリ113上の圧縮データの格納場所(アドレス)及び伸張されたデータ列の配置場所を含む、伸張指示を送信する。アクセラレータ112から完了通知を受信した場合、プロセッサ111は、伸張されたデータ列に含まれる、ターゲットアドレスに対応するデータを、配置場所にコピーする。
【0102】
なお、アクセラレータ112は、伸張指示を受信した場合、圧縮データを伸張し、伸張されたデータ列をメモリ113の指定された配置場所に格納する。
【0103】
以上がステップS304の処理の説明である。
【0104】
ターゲットアドレスに対応するデータが重複排除により削除されたデータではないと判定された場合、プロセッサ111は、ターゲットアドレスをデータ配置位置として登録する(ステップS305)。その後、プロセッサ111はステップS306に進む。
【0105】
具体的には、プロセッサ111は、ビットマップのターゲットアドレスに対応するビットに1を設定する。
【0106】
ステップS306では、プロセッサ111は、アドレスリストの全てのアドレスについて処理が完了したか否かを判定する(ステップS306)。
【0107】
アドレスリストの全てのアドレスについて処理が完了していないと判定された場合、プロセッサ111は、ステップS302に戻り、同様の処理を実行する。
【0108】
アドレスリストの全てのアドレスについて処理が完了したと判定された場合、プロセッサ111は、記憶媒体102からデータ列に関連する圧縮データを読み出す(ステップS307)。
【0109】
具体的には、プロセッサ111は、圧縮データ管理情報300を参照し、論理アドレス301に、読出要求によって指定されたアドレス範囲のアドレスが格納されたエントリを検索する。プロセッサ111は、検索されたエントリの物理アドレス302に格納されるアドレスに基づいて、記憶媒体102から圧縮データを読み出し、メモリ113に格納する。
【0110】
次に、プロセッサ111は、アクセラレータ112に対して、圧縮データのメモリ113上の格納場所(アドレス)、データ列の配置場所(アドレス)、及びデータ列の各データの配置場所を示す情報を含む伸張指示を送信する(ステップS308)。その後、プロセッサ111はデータ列の読出処理する。
【0111】
プロセッサ111は、アクセラレータ112から完了通知を受信した後、任意のタイミングで、データ列をホスト200に送信する。
【0112】
図9は、実施例1のアクセラレータ112が実行する伸張処理の一例を説明するフローチャートである。
【0113】
アクセラレータ112は、プロセッサ111から伸張指示を受信した場合、伸張処理を開始する。
【0114】
アクセラレータ112は、圧縮データのメモリ113上の配置場所に基づいて、メモリ113から圧縮データを取得する(ステップS401)。
【0115】
次に、アクセラレータ112は、圧縮データに対して伸張アルゴリズムを適用することによって、圧縮データを伸張する(ステップS402)。
【0116】
次に、アクセラレータ112は、データ列の配置場所(アドレス)及びデータ列の各データの配置場所を示す情報に基づいて、伸張されたデータ列に含まれるデータをメモリ113に配置する(ステップS403)。
【0117】
例えば、データ列の各データの配置場所を示す情報がビットマップである場合、アクセラレータ112は、1が設定されたビットに対応する位置に、データ列に含まれるデータを配置する。なお、データ列に含まれるデータの順番にしたがってデータが配置される。
【0118】
次に、アクセラレータ112は、完了通知をプロセッサ111に送信する(ステップS404)。その後、アクセラレータ112は伸張処理を終了する。
【0119】
実施例1によれば、ストレージ装置100は、アクセラレータ112にデータのアライメントの調整処理とともに、圧縮処理及び伸張処理を実行させることによって、プロセッサ111の処理負荷を低減できる。また、圧縮処理及び重複排除処理の処理単位は、それぞれの処理に適した処理単位に調整できるため、データ削減効果を高めることができる。
【実施例0120】
実施例2では、ストレージ装置100は、複数のデータ列をまとめて圧縮する点が実施例1と異なる。以下、実施例1との差異を中心に実施例2について説明する。
【0121】
まず、実施例1のストレージ装置100が実行する処理の概要を
図10及び
図11を用いて説明する。
図10及び
図11は、実施例2のストレージ装置100が実行する処理の概要を説明する図である。
【0122】
まず、
図10を用いて実施例1のストレージ装置100が実行する書込処理の概要について説明する。ここでは、ホスト200が、異なるボリュームに対してデータ列1000、1010、1020を書き込んだ場合の処理について説明する。なお、各データ列1000、1010、1020のサイズは同一であるものとする。
【0123】
まず、ホスト200が書き込んだデータ列1000、1010、1020はメモリ113に格納される。プロセッサ111は、メモリ113にデータ列1000、1010、1020が格納された後、各データ列1000、1010、1020に対して重複排除処理を実行する。
図10では、データ列1000はデータAが残り、データ列1010はデータB、Cが残り、データ列1020はデータDが残ったものとする。
【0124】
プロセッサ111は、メモリ113に格納されるデータ列から、圧縮の処理単位分のデータを選択する。ここでは、4つ分のデータのサイズを圧縮の処理単位としている。したがって、データA、B、C、Dが選択される。プロセッサ111は、アクセラレータ112に対して、データA、B、C、Dの圧縮指示を送信する。
【0125】
アクセラレータ112は、データA、B、C、Dからデータ列ABCDを生成し、当該データ列を圧縮することによって圧縮データabcdを生成する。アクセラレータ112は、圧縮データabcdをメモリ113に格納する。その後、プロセッサ111は、メモリ113上の圧縮データabcdを記憶媒体102に格納する。記憶媒体102には、圧縮データを隙間なく格納される。
【0126】
ホスト200によってデータ列の一部のデータが更新された場合、本実施例の圧縮データの格納方式では、元の圧縮データは削除されず、更新されたデータを含むデータ列を圧縮した圧縮データが記憶媒体102に新たに格納される。これにともなって、論理アドレスに対応づけられる物理アドレスも更新される。論理アドレスとの対応づけが解除されたデータをガベージと呼ぶ。
【0127】
ボリュームへのデータ列の書込に伴ってガベージが大量に発生する。そこで、実施例2のストレージ装置100は、ガベージコレクションと呼ばれる処理を実行することによって、ガベージを削除する。さらに、ストレージ装置100は、ガベージが削除された後、記憶媒体102の圧縮データを配置し直す。これによって、記憶媒体102へのホスト200が利用するボリュームへ提供する記憶領域を確保する。
【0128】
以上が、書込処理の概要である。
【0129】
次に、
図11を用いて実施例1のストレージ装置100が実行するガベージコレクションの概要について説明する。ここでは、ホスト200が、ストレージ装置100に対して、データCに対応する更新データC’を含むデータ列が書き込まれた場合の処理について説明する。このとき、圧縮データabcdのデータCはガベージとなる。
【0130】
プロセッサ111は、記憶媒体102から圧縮データabcdを読み出し、メモリ113に格納する。プロセッサ111は、アクセラレータ112に伸張指示を送信する。アクセラレータ112は、圧縮データabcdを伸張し、データ列ABCDをメモリ113に格納する。
【0131】
プロセッサ111は、アクセラレータ112に対して、データCを除く、データA、B、Dの圧縮指示を送信する。アクセラレータ112は、データA、B、Dからデータ列ABCを生成し、圧縮アルゴリズムを適用することによって圧縮データabdを生成する。アクセラレータ112は、圧縮データabdをメモリ113に格納する。プロセッサ111は、記憶媒体102の圧縮データが格納される記憶領域の最後尾の位置の次の位置に圧縮データabdを書き込む。
【0132】
以上が、ガベージコレクションの概要である。前述のように、アクセラレータ112は、データ列からガベージを取り除いたデータを再度圧縮する。プロセッサ111は直接データ列を処理する必要がないため、負荷を低減できる。
【0133】
実施例2のストレージ装置100のハードウェア構成は実施例1と同一である。実施例2では、ストレージ装置100が保持する管理情報が異なる。
【0134】
図12は、実施例2の圧縮データ管理情報1200の一例を示す図である。
【0135】
圧縮データ管理情報1200は、圧縮データを管理するための情報である。圧縮データ管理情報300は、ブロック番号1201、物理アドレス1202、及びデータサイズ1203から構成されるエントリを格納する。一つのエントリは、一つの圧縮データに対応する。
【0136】
ブロック番号1201は、圧縮データを識別するためのブロック番号を格納するフィールドである。実施例2では、複数のデータ列のデータをまとめて圧縮しているため、圧縮するデータの論理アドレスは連続していない。したがって、論理アドレスの代わりに、ブロック番号を用いて圧縮データを識別する。
【0137】
物理アドレス1202及びデータサイズ1203は、物理アドレス302及びデータサイズ303と同一のフィールドである。
【0138】
図13は、実施例2のホストデータ管理情報1300の一例を示す図である。
【0139】
ホストデータ管理情報1300は、重複排除処理によってデータ列から削除されたデータを管理するための情報である。ホストデータ管理情報1300は、論理アドレス1301、ブロック番号1302、及びオフセット1303から構成されるエントリを格納する。一つのエントリは、重複排除処理によって削除された一つのデータに対応する。
【0140】
論理アドレス1301は、論理アドレス311と同一のフィールドである。
【0141】
ブロック番号1302は、データを含むデータ列を圧縮した圧縮データに付与されたブロック番号を格納するフィールドである。
【0142】
オフセットは、圧縮前のデータ列におけるデータの位置を示す値を格納するフィールドである。
【0143】
図14A及び
図14Bは、実施例2のプロセッサ111が実行するデータ削減処理の一例を説明するフローチャートである。
【0144】
プロセッサ111は、書込処理の実行時又は周期的にデータ削減処理を実行する。書込処理は、ストレージ装置100が、ホスト200からデータ列を受信した場合に実行される。ここでは、書込処理の実行時にデータ削減処理が実行されるものとして説明する。なお、書込処理では、ストレージ装置100は、メモリ113にデータ列を格納し、ホスト200に書込処理の完了通知を送信する。
【0145】
プロセッサ111は、メモリ113に格納されるデータ列の中からターゲットデータ列を選択する(ステップS501)。
【0146】
プロセッサ111は、重複排除の処理単位に基づいてデータ列を分割する(ステップS502)。
【0147】
次に、プロセッサ111は、分割されたデータの中からターゲットデータを選択する(ステップS503)。
【0148】
次に、プロセッサ111は、ターゲットデータに一致するデータを検索する(ステップS504)。データの検索方法はステップS103と同一である。
【0149】
なお、比較するデータはメモリ113及び記憶媒体102に格納されるデータである。
【0150】
次に、プロセッサ111は、検索の結果に基づいて、ターゲットデータに一致するデータが存在するか否かを判定する(ステップS505)。
【0151】
ターゲットデータに一致するデータが存在する場合、プロセッサ111は、ターゲットデータに関する情報をホストデータ管理情報1300に登録する(ステップS506)。その後、プロセッサ111はステップS508に進む。
【0152】
具体的には、プロセッサ111は、ホストデータ管理情報1300にエントリを追加し、追加されたエントリの論理アドレス1301にターゲットデータの論理アドレスを格納する。検索されたデータが含まれる圧縮データのブロック番号及び当該データのオフセットを、追加されたエントリのブロック番号1302及びオフセット1303に格納する。
【0153】
ターゲットデータに一致するデータが存在しない場合、プロセッサ111は、ターゲットデータを圧縮対象データとして登録する(ステップS507)。その後、プロセッサはステップS508に進む。
【0154】
具体的には、プロセッサ111は、メモリ113上のターゲットデータ列のアドレス及びターゲットデータ列におけるデータの位置(オフセット)を対応づけたデータをリストに登録する。
【0155】
ステップS508では、プロセッサ111は、ターゲットデータ列の全てのデータの処理が完了したか否かを判定する(ステップS508)。
【0156】
ターゲットデータ列の全てのデータの処理が完了していないと判定された場合、プロセッサ111は、ステップS503に戻り、同様の処理を実行する。
【0157】
ターゲットデータ列の全てのデータの処理が完了したと判定された場合、プロセッサ111は、圧縮対象データのデータ量が閾値以上である否かを判定する(ステップS509)。
【0158】
具体的には、プロセッサ111は、リストに登録されたデータの数及び重複排除の処理単位に基づいて圧縮対象のデータ量を算出する。プロセッサ111は、当該データ量が閾値より大きいか否かを判定する。ここで、閾値は圧縮の処理単位である。
【0159】
圧縮対象データのデータ量が閾値より小さいと判定された場合、プロセッサ111は、ステップS501に戻り、同様の処理を実行する。
【0160】
圧縮対象データのデータ量が閾値以上であると判定された場合、プロセッサ111は、アクセラレータ112に対して、リストを含む圧縮指示を送信する(ステップS510)。プロセッサ111は、アクセラレータ112から完了通知を受信するまで待ち状態に移行する。なお、完了通知には、メモリ113上の圧縮データの格納場所(アドレス)、圧縮前のデータ列における各データのオフセット、及び圧縮データのデータサイズが含まれる。
【0161】
アクセラレータ112から完了通知を受信した場合、プロセッサ111は、記憶媒体102における圧縮データの格納場所を決定する(ステップS511)。具体的には、以下のような処理が実行される。
【0162】
(S511-1)プロセッサ111は、圧縮データ管理情報1200の物理アドレス1202を参照し、記憶媒体102の圧縮データが格納される記憶領域の最後尾の位置(アドレス)を特定する。プロセッサ111は、当該アドレスに基づいて、圧縮データを格納する記憶領域のアドレスを決定する。
【0163】
(S511-2)プロセッサ111は、圧縮データ管理情報1200にエントリを追加し、ブロック番号1201にブロック番号を格納する。プロセッサ111は、追加されたエントリの物理アドレス1202に、決定されたアドレスを格納する。また、プロセッサ111は、当該エントリのデータサイズ1203に、通知された圧縮データのデータサイズを格納する。
【0164】
以上がステップS511の処理の説明である。
【0165】
次に、プロセッサ111は、ホストデータ管理情報1300を更新する(ステップS512)。その後、プロセッサ111はデータ削減処理を終了する。具体的には以下のような処理が実行される。
【0166】
(S512-1)プロセッサ111は、リストに登録された圧縮対象データの中からターゲットデータを選択する。
【0167】
(S512-2)プロセッサ111は、ホストデータ管理情報1300を参照し、ターゲットデータに対応するエントリを検索する。具体的には、プロセッサ111は、論理アドレス1301に、ターゲットデータのアドレスが格納されるエントリを検索する。
【0168】
(S512-3)プロセッサ111は、ホストデータ管理情報1300にターゲットデータに対応するエントリが存在しないと判定された場合、すなわち、ターゲットデータがボリュームに対して初めて書き込まれたデータである場合、プロセッサ111は、ホストデータ管理情報1300にエントリを追加する。プロセッサ111は、追加されたエントリの論理アドレス1301に、ターゲットデータの論理アドレスを格納する。また、プロセッサ111は、追加されたエントリのブロック番号1302に圧縮データのブロック番号を格納し、オフセット1303にターゲットデータのオフセットを格納する。
【0169】
(S512-4)プロセッサ111は、ホストデータ管理情報1300にターゲットデータに対応するエントリが存在すると判定された場合、すなわち、データを更新する場合、プロセッサ111は、検索されたエントリのブロック番号1302に圧縮データのブロック番号を格納し、当該エントリのオフセット1303にターゲットデータのオフセットを格納する。
【0170】
(S512-5)プロセッサ111は、全ての圧縮対象データの処理が完了したか否かを判定する。全ての圧縮対象データの処理が完了していない場合、プロセッサ111は、S512-1に戻り、同様の処理を実行する。全ての圧縮対象データの処理が完了した場合、プロセッサ111はステップS512の処理を終了する。
【0171】
以上がステップS512の処理の説明である。ステップS512の処理の結果、更新されたデータのブロック番号1302及びオフセット1303は更新される。これにともなって、論理アドレスとの対応づけが解除された物理アドレスをガベージと呼び、ガベージでない物理アドレスを有効状態と呼ぶ。ガベージコレクションでは、有効状態の物理アドレスに格納された圧縮対象データを読み出し、前詰めに記憶媒体102に格納する。これによって、記憶媒体102の未使用の記憶領域を確保することができる。
【0172】
プロセッサ111は、データ削減処理を実行された後、任意のタイミングで、記憶媒体102の決定されたアドレスに圧縮データを格納する。例えば、データ削減処理と圧縮データの格納処理が連続的に実行されてもよいし、周期的に圧縮データの格納処理が実行されてよい。周期的に圧縮データの格納処理を実行する場合、プロセッサ111は、メモリ113に格納される圧縮データを検索し、検索された圧縮データを記憶媒体102に格納する。
【0173】
図15は、実施例2のアクセラレータ112が実行する圧縮処理の一例を説明するフローチャートである。
【0174】
アクセラレータ112は、プロセッサ111から圧縮指示を受信した場合、圧縮処理を開始する。
【0175】
アクセラレータ112は、プロセッサ111から通知されたリストに基づいて、メモリ113から圧縮対象データを取得する(ステップS601)。
【0176】
アクセラレータ112は、圧縮対象データからデータ列を生成する(ステップS602)。このとき、アクセラレータ112は、データ列における各圧縮対象データの位置(オフセット)を示すデータを生成する。
【0177】
次に、アクセラレータ112は、生成されたデータ列に対して圧縮アルゴリズムを適用することによって、圧縮データを生成する(ステップS603)。
【0178】
次に、アクセラレータ112は、メモリ113に圧縮データを格納する(ステップS604)。
【0179】
次に、アクセラレータ112は、メモリ113上の圧縮データの格納場所(アドレス)、圧縮前のデータ列における各データのオフセット、及び圧縮データのデータサイズを含む完了通知をプロセッサ111に送信する(ステップS605)。その後、アクセラレータ112は圧縮処理を終了する。
【0180】
アクセラレータ112がデータ列を圧縮することによってプロセッサ111の処理負荷を低減できる。
【0181】
実施例2のデータ読出処理は、実施例1と同様の処理であるため詳細な説明は省略する。
【0182】
次に、実施例2のガベージコレクションについて説明する。
【0183】
図16は、実施例2のプロセッサ111が実行するガベージコレクションの一例を説明するフローチャートである。
【0184】
ガベージコレクションはガベージの発生時に実行してもよいし、周期的に実行してもよい。
【0185】
プロセッサ111は、ターゲット物理アドレスを選択する(ステップS701)。本実施例では、データ量が大きいガベージ物理アドレスが選択される。これは、格納し直すデータ量を少なくするためである。
【0186】
例えば、プロセッサ111は、有効状態からガベージに遷移する場合に、ガベージに遷移する物理アドレスに格納される圧縮データのデータ量をガベージ量として記憶する。プロセッサ111はガベージ量に基づいて物理アドレスを選択する。
【0187】
プロセッサ111は、ターゲット物理アドレスに基づいて記憶媒体102から圧縮データを取得し、メモリ113に格納する(ステップS702)。
【0188】
プロセッサ111は、アクセラレータ112に対して、メモリ113上の圧縮データのアドレスを含む伸張指示を送信する(ステップS703)。プロセッサ111は、アクセラレータ112から完了通知を受信するまで待ち状態に移行する。なお、完了通知には、メモリ113上のデータ列の格納場所(アドレス)が含まれる。
【0189】
プロセッサ111は、伸張されたデータ列を構成するデータの中からターゲットデータを選択する(ステップS704)。このとき、プロセッサ111は、伸張されたデータ列に含まれるデータの数と同数のビット列(ビットマップ)を生成する。
【0190】
プロセッサ111は、ターゲットデータは有効状態であるか否かを判定する(ステップS705)。すなわち、ターゲットデータを保持する必要があるか否かが判定される。有効状態でないターゲットデータは保持する必要がないと判定される。
【0191】
具体的には、プロセッサ111は、圧縮データ管理情報1200を参照して、ターゲット物理アドレスに対応するエントリのブロック番号1201の値を取得する。プロセッサ111は、ホストデータ管理情報1300を参照し、ブロック番号1302に取得したブロック番号が格納され、かつ、オフセット1303に、データ列におけるターゲットデータのオフセットが格納されるエントリを検索する。前述のエントリが少なくとも一つ存在する場合、ターゲットデータは有効状態であると判定される。
【0192】
ターゲットデータがガベージであると判定された場合、プロセッサ111はステップS707に進む。
【0193】
ターゲットデータが有効状態であると判定された場合、プロセッサ111は、ターゲットデータを圧縮対象データとして登録する(ステップS706)。その後、プロセッサ111はステップS707に進む。
【0194】
具体的には、プロセッサ111は、ビットマップのターゲットデータに対応するビットに1を設定する。
【0195】
ステップS707では、プロセッサ111は、伸張されたデータ列の全てのデータについて処理が完了したか否かを判定する(ステップS707)。
【0196】
伸張されたデータ列の全てのデータについて処理が完了していないと判定された場合、プロセッサ111は、ステップS704に戻り、同様の処理を実行する。
【0197】
伸張されたデータ列の全てのデータについて処理が完了したと判定された場合、プロセッサ111は、アクセラレータ112に対して、メモリ113上のデータ列の格納位置(アドレス)及び圧縮対象データに関する情報を含む圧縮指示を送信する(ステップS708)。プロセッサ111は、アクセラレータ112から完了通知を受信するまで待ち状態に移行する。なお、完了通知には、メモリ113上の圧縮データの格納場所(アドレス)、圧縮前のデータ列における各データのオフセット、及び圧縮データのデータサイズが含まれる。
【0198】
アクセラレータ112から完了通知を受信した場合、プロセッサ111は、記憶媒体102における圧縮データの格納場所を決定し(ステップS709)、その後、ガベージコレクションを終了する。具体的には、以下のような処理が実行される。
【0199】
(S709-1)プロセッサ111は、圧縮データ管理情報1200にエントリを追加し、追加されたエントリのブロック番号1201に圧縮データのブロック番号を格納する。また、プロセッサ111は、追加されたエントリのデータサイズ1203に圧縮データのデータサイズを格納する。
【0200】
(S709-2)プロセッサ111は、圧縮データ管理情報1200の物理アドレス1202を参照し、記憶媒体102の圧縮データが格納される記憶領域の最後尾の位置(アドレス)を特定する。プロセッサ111は、当該アドレスに基づいて、圧縮データを格納する記憶領域のアドレスを決定する。プロセッサ111は、追加されたエントリの物理アドレス1202に、決定されたアドレスを格納する。
【0201】
(S709-3)プロセッサ111は、ホストデータ管理情報1300を参照して、論理アドレス1301に圧縮対象データの論理アドレスが格納されるエントリを検索する。プロセッサ111は、検索された全エントリのブロック番号1302に、圧縮データのブロック番号を格納する。プロセッサ111は、検索された各エントリのオフセット1303に、圧縮前のデータ列における各データのオフセットを格納する。
【0202】
以上がステップS709の処理の説明である。
【0203】
なお、アクセラレータ112が圧縮処理及び伸張処理を一連の処理として実行できる場合、伸張指示及び圧縮指示は逐次的に送信しなくてもよい。すなわち、アクセラレータ112は、S401、S402の処理の後、S601からS605の処理を実行する。この場合、プロセッサ111は、S701、S702、S704からS707の処理を実行し、その後、アクセラレータ112に処理の実行を送信する。これによって、同様の結果を得ることができる。
【0204】
実施例2のストレージ装置100は、アクセラレータ112にデータのアライメントの調整処理とともに、圧縮処理及び伸張処理を実行させることによって、プロセッサ111の処理負荷を抑えることができる。また、圧縮処理及び重複排除処理の処理単位は、それぞれの処理に適した処理単位に調整できるため、データのデータ削減効果を高めることができる。
【0205】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【0206】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0207】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Python、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
【0208】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【0209】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【0210】
特許請求の範囲に記載した以外の発明の観点の代表的なものとして、次のものがあげられる。
(1)プロセッサ、アクセラレータ、メモリ、及び記憶装置を備えたストレージ装置であって、
前記プロセッサは、
前記メモリに格納される、複数のデータから構成されるデータ列に対して重複排除処理を実行し、当該重複排除処理の結果に基づいて、前記データ列を構成するデータの中から、前記記憶装置に格納するデータである圧縮対象データを特定し、
前記データ列における前記圧縮対象データの位置を示す第1位置情報を、前記圧縮対象データに関する情報として生成し、
前記圧縮対象データに関する情報を含む圧縮指示を、前記アクセラレータに送信し、
前記アクセラレータは、
前記圧縮指示を受信した場合、前記メモリから前記データ列を読み出し、
前記第1位置情報に基づいて、前記データ列から複数の前記圧縮対象データを取得し、
複数の前記圧縮対象データを圧縮することによって、前記記憶装置に格納する圧縮データを生成することを特徴とするストレージ装置。
(2)(1)に記載のストレージ装置であって、
前記重複排除処理によって削除されたデータと、当該データを取得するために参照する参照先とを対応づけた重複排除データ管理情報を保持し、
前記プロセッサは、
読出要求を受信した場合、前記重複排除データ管理情報に基づいて、前記読出要求の対象となる読出データ列を構成するデータであって、前記重複排除処理によって削除されたデータを参照先から取得し、前記メモリに格納し、
前記読出データ列を構成するデータから生成された前記圧縮データを前記記憶装置から取得して、前記メモリに格納し、
前記圧縮データを伸張したデータ列を構成する複数のデータの各々の前記読出データ列における位置を示す第2位置情報を含む伸張指示を、前記アクセラレータに送信し、
前記アクセラレータは、
前記第2位置情報を含む伸張指示を受信した場合、前記取得した圧縮データを伸張することによって第1データ列を生成し、
前記第2位置情報に基づいて、前記読出データ列を構成するように、前記第1データ列を構成する複数のデータの各々を前記メモリに格納することを特徴とするストレージ装置。
(3)(1)に記載のストレージ装置であって、
前記プロセッサは、
複数のデータ列に対する前記重複排除処理の結果に基づいて、前記複数のデータ列の各々の前記圧縮対象データを特定し、
前記複数のデータ列の各々における前記圧縮対象データの位置を示す第3位置情報を、前記圧縮対象データに関する情報として生成し、
前記アクセラレータは、前記圧縮指示を受信した場合、前記メモリから前記複数のデータ列を読み出し、前記第3位置情報に基づいて、前記複数のデータ列から所定の数の前記圧縮対象データを取得することを特徴とするストレージ装置。
(4)(3)に記載のストレージ装置であって、
第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記プロセッサは、
新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納し、
前記第1圧縮データの伸張指示を前記アクセラレータに送信し、
前記アクセラレータは、前記第1圧縮データの伸張指示を受信した場合、前記第1圧縮データを伸張することによって第2データ列を生成し、前記メモリに格納し、
前記プロセッサは、前記第1データに関する情報を含む圧縮指示を前記アクセラレータに送信し、
前記アクセラレータは、
前記第1データに関する情報を含む圧縮指示を受信した場合、前記第2データ列を構成するデータの中から、前記第1データを除くデータを取得し、
前記取得されたデータから構成される第3データ列を圧縮して、第2圧縮データを生成することを特徴とするストレージ装置。
(5)(3)に記載のストレージ装置であって、
第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記プロセッサは、
新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納し、
前記第1データに関する情報を含む再圧縮指示を前記アクセラレータに送信し、
前記アクセラレータは、
前記再圧縮指示を受け付けた場合、前記第1圧縮データを伸張することによって第2データ列を生成し、前記メモリに格納し、
前記第2データ列を構成するデータの中から、前記第1データを除くデータを取得し、
前記取得されたデータから構成される第3データ列を圧縮して、第2圧縮データを生成することを特徴とするストレージ装置。
(6)ストレージ装置が実行するデータ処理方法であって、
前記ストレージ装置は、プロセッサ、アクセラレータ、メモリ、及び記憶装置を有し、
前記データ処理方法は、
前記プロセッサが、前記メモリに格納される、複数のデータから構成されるデータ列に対して重複排除処理を実行し、当該重複排除処理の結果に基づいて、前記データ列を構成するデータの中から、前記記憶装置に格納するデータである圧縮対象データを特定する第1のステップと、
前記プロセッサが、前記データ列における前記圧縮対象データの位置を示す第1位置情報を、前記圧縮対象データに関する情報として生成する第2のステップと、
前記プロセッサが、前記圧縮対象データに関する情報を含む圧縮指示を、前記アクセラレータに送信する第3のステップと、
前記アクセラレータが、前記圧縮指示を受信した場合、前記メモリから前記データ列を読み出す第4のステップと、
前記アクセラレータが、前記第1位置情報に基づいて、前記データ列から複数の前記圧縮対象データを取得する第5のステップと、
前記アクセラレータが、複数の前記圧縮対象データを圧縮することによって、前記記憶装置に格納する圧縮データを生成する第6のステップと、
を含むことを特徴とするデータ処理方法。
(7)(6)に記載のデータ処理方法であって、
前記ストレージ装置は、前記重複排除処理によって削除されたデータと、当該データを取得するために参照する参照先とを対応づけた重複排除データ管理情報を保持し、
前記データ処理方法は、
前記プロセッサが、読出要求を受信した場合、前記重複排除データ管理情報に基づいて、前記読出要求の対象となる読出データ列を構成するデータであって、前記重複排除処理によって削除されたデータを参照先から取得し、前記メモリに格納するステップと、
前記プロセッサが、前記読出データ列を構成するデータから生成された前記圧縮データを前記記憶装置から取得して、前記メモリに格納するステップと、
前記プロセッサが、前記圧縮データを伸張したデータ列を構成する複数のデータの各々の前記読出データ列における位置を示す第2位置情報を含む伸張指示を、前記アクセラレータに送信するステップと、
前記アクセラレータが、前記第2位置情報を含む伸張指示を受信した場合、前記取得した圧縮データを伸張することによって第1データ列を生成するステップと、
前記アクセラレータが、前記第2位置情報に基づいて、前記読出データ列を構成するように、前記第1データ列を構成する複数のデータの各々を前記メモリに格納するステップと、を含むことを特徴とするデータ処理方法。
(8)(6)に記載のデータ処理方法であって、
前記第1のステップは、前記プロセッサが、複数のデータ列に対する前記重複排除処理の結果に基づいて、前記複数のデータ列の各々の前記圧縮対象データを特定するステップを含み、
前記第2のステップは、前記プロセッサが、前記複数のデータ列の各々における前記圧縮対象データの位置を示す第3位置情報を前記圧縮対象データに関する情報として生成するステップを含み、
前記第4のステップは、前記アクセラレータが、前記メモリから前記複数のデータ列を読み出すステップを含み、
前記第5のステップは、前記アクセラレータが、前記第3位置情報に基づいて、前記複数のデータ列から所定の数の前記圧縮対象データを取得するステップを含むことを特徴とするデータ処理方法。
(9)(8)に記載のデータ処理方法であって、
前記ストレージ装置は、第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記データ処理方法は、
前記プロセッサが、新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納するステップと、
前記プロセッサが、前記第1圧縮データの伸張指示を前記アクセラレータに送信するステップと、
前記アクセラレータが、前記第1圧縮データの伸張指示を受信した場合、前記第1圧縮データを伸張することによって第2データ列を生成し、前記メモリに格納するステップと、
前記プロセッサが、前記第1データに関する情報を含む圧縮指示を前記アクセラレータに送信するステップと、
前記アクセラレータが、前記第1データに関する情報を含む圧縮指示を受信した場合、前記第2データ列を構成するデータの中から、前記第1データを除くデータを取得し、前記取得されたデータから構成される第3データ列を圧縮して、第2圧縮データを生成するステップと、を含むことを特徴とするデータ処理方法。
(10)(8)に記載のデータ処理方法であって、
前記ストレージ装置は、第1データから構成されるデータ列から生成された第1圧縮データを格納し、
前記データ処理方法は、
前記プロセッサが、新たなデータ列の書込によって前記第1データを保持する必要がなくなった場合、前記第1圧縮データを前記記憶装置から読み出して前記メモリに格納するステップと、
前記プロセッサが、前記第1データに関する情報を含む再圧縮指示を前記アクセラレータに送信するステップと、
前記アクセラレータが、前記再圧縮指示を受け付けた場合、前記第1圧縮データを伸張することによって第2データ列を生成し、前記メモリに格納するステップと、
前記アクセラレータが、前記第2データ列を構成するデータの中から、前記第1データを除くデータを取得し、前記取得されたデータから構成される第3データ列を圧縮して、第2圧縮データを生成するステップと、を含むことを特徴とするデータ処理方法。