JP2017142683A - ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム - Google Patents

ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム Download PDF

Info

Publication number
JP2017142683A
JP2017142683A JP2016024057A JP2016024057A JP2017142683A JP 2017142683 A JP2017142683 A JP 2017142683A JP 2016024057 A JP2016024057 A JP 2016024057A JP 2016024057 A JP2016024057 A JP 2016024057A JP 2017142683 A JP2017142683 A JP 2017142683A
Authority
JP
Japan
Prior art keywords
unit
data
storage
address
hash
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.)
Granted
Application number
JP2016024057A
Other languages
English (en)
Other versions
JP6587953B2 (ja
Inventor
知也 児玉
Tomoya Kodama
知也 児玉
孝幸 伊東
Takayuki Ito
孝幸 伊東
勝幸 野村
Katsuyuki Nomura
勝幸 野村
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
Toshiba Memory 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 Toshiba Memory Corp filed Critical Toshiba Memory Corp
Priority to JP2016024057A priority Critical patent/JP6587953B2/ja
Priority to US15/259,657 priority patent/US10649675B2/en
Publication of JP2017142683A publication Critical patent/JP2017142683A/ja
Application granted granted Critical
Publication of JP6587953B2 publication Critical patent/JP6587953B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • 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
    • 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
    • G06F3/0613Improving I/O performance in relation to throughput
    • 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]
    • 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/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

Abstract

【課題】データの重複を効率よく検出することができるストレージコントローラ、ストレージ装置、データ処理方法およびプログラムを提供する。【解決手段】実施形態のストレージコントローラは、アドレス生成部と、読出部と、重複検出部と、を備える。アドレス生成部は、読み出すデータのアドレスの順番を規定するための特定のスキャンパターンに従って、外部から書き込まれたデータを記憶する記憶部の各記憶領域を示すスキャンアドレスを生成する。読出部は、スキャンアドレスが示す記憶部の記憶領域からデータを読み出す。重複検出部は、読出部により読み出されたデータが、過去の所定数のデータのいずれかと重複しているか否かを検出する。【選択図】図2

Description

本発明の実施形態は、ストレージコントローラ、ストレージ装置、データ処理方法およびプログラムに関する。
近年、重複排除(De−duplication)または圧縮技術により、記録するデータの量を削減し、SSD(Solid State Drive)等のストレージ装置に組み込まれたNAND(Not AND)型フラッシュメモリへの書き込み回数を削減することにより、ストレージ装置を長寿命化する技術が提案されている。このような、重複排除の技術として、データをNAND型フラッシュメモリへ書き込む際に、書き込むデータを所定の大きさに分割したチャンクと呼ばれるデータ単位毎に、ハッシュ関数等を用いた特定のアルゴリズムにより求めたハッシュ値を利用してチャンク間の重複候補を求めておく。そして、バックエンド処理でその重複候補について実際に重複の有無を確認し、重複があった場合に、一方を削除する重複排除の手法が提案されている。ここで、1チャンク分のデータからハッシュ値を求めるアルゴリズムとしては、例えば、MD5(Message Digest 5)、SHA−1(Secure Hash Algorithm 1)、またはSHA−2等の種々のアルゴリズムがある。
しかし、一般に、ハッシュ値を用いたチャンク間の重複探索には、有限の大きさを持った過去のハッシュ値を蓄積したハッシュリストを用いるが、ハッシュリストに十分な大きさがない場合には広範囲な探索が行えず、重複したデータを効率的に検出できないという問題がある。例えば、チャンクのデータ長が4[KB(バイト)]であるとし、ハッシュリストには20[B]からなるハッシュ値と、NAND型フラッシュメモリへの格納先を示す8[B]のアドレスが格納されていたとする。ハッシュリストへのハッシュ値のエントリ数が2Mエントリとすると、ハッシュリストの大きさは28[B]×2M=56[MB]となるが、このハッシュリストがカバーできるNAND型フラッシュメモリの探索範囲は原則として、2M×4[KB]=8[GB]に過ぎない。したがって、このハッシュリストは、基本的には8[GB]以上遡って過去に書き込んだデータの重複検出は極めて困難となる。
また、ハッシュリストは、頻繁にアクセスされることから、NAND型フラッシュメモリに記憶することは現実的ではない。また、SSDにはNAND型フラッシュメモリに加えてDRAM(Dynamic Random Access Memory)が搭載されている場合が多いものの、DRAMは、SSDが本来なすべきホストとNAND型フラッシュメモリとの間の制御に用いるワークメモリとして活用されているため、重複検出のために容量の大きいハッシュリストを割り当てることは困難である。
米国特許出願公開第2009/0327581号明細書
本発明は、上記に鑑みてなされたものであって、データの重複を効率よく検出することができるストレージコントローラ、ストレージ装置、データ処理方法およびプログラムを提供することを目的とする。
実施形態のストレージコントローラは、アドレス生成部と、読出部と、重複検出部と、を備える。アドレス生成部は、読み出すデータのアドレスの順番を規定するための特定のスキャンパターンに従って、外部から書き込まれたデータを記憶する記憶部の各記憶領域を示すスキャンアドレスを生成する。読出部は、スキャンアドレスが示す記憶部の記憶領域からデータを読み出す。重複検出部は、読出部により読み出されたデータが、過去の所定数のデータのいずれかと重複しているか否かを検出する。
実施形態に係るストレージ装置のハードウェア構成を示す図である。 実施形態に係るSSDコントローラの機能ブロック構成を示す図である。 アドレス変換テーブルの構成の一例を示す図である。 有効管理テーブルの構成の一例を示す図である。 実施形態のアドレス生成部の機能ブロック構成を示す図である。 スキャンパターンに従ったデータの重複検出の処理順序を説明する図である。 実施形態の重複検出部の機能ブロック構成を示す図である。 実施形態に係るSSDコントローラの重複検出処理を説明する図である。 実施形態に係るSSDコントローラの重複排除処理を示すフローチャートである。 実施形態に係るSSDコントローラの重複検出処理を示すフローチャートである。
以下に、図面を参照しながら、本発明の実施形態に係るストレージコントローラ、ストレージ装置、データ処理方法およびプログラムを詳細に説明する。また、以下の図面において、同一の部分には同一の符号が付してある。
図1は、実施形態に係るストレージ装置のハードウェア構成の一例を示す図である。図1を参照しながら、本実施形態に係るストレージ装置1のハードウェア構成について説明する。
ストレージ装置1は、PC(Personal Computer)、ワークステーション、またはサーバ装置等の情報処理装置に搭載されたCPU(Central Processing Unit)であるホストCPU2(制御装置)が、データを読み書きするためにアクセスするSSDである。ストレージ装置1は、SATA(Serial AT Attachment)、SAS(Serial Attached SCSI)、またはPCIe(Peripheral Component Interconnect Express)等のインターフェース規格でホストCPU2と接続され、論理アドレス(LBA: Logical Block Address)を用いてデータをアクセスするブロックストレージであってもよく、または、イーサーネットで接続され、キーと呼ばれる任意長のデータに紐づけられた可変長のデータをアクセスするキーバリュードライブ(Key−Value Drive)であってもよい。ストレージ装置1は、ホストCPU2から示された論理アドレスまたはキーに対し、対応する物理アドレスが示すNAND型フラッシュメモリ4の記憶領域を求め、ホストCPU2から与えられるデータの書き込み、および、読み出したデータのホストCPU2への出力を行う。ストレージ装置1は、例えば、データセンタ、クラウドシステム、または基幹システム等において、サーバ装置等のホストに接続されるSSDとして用いられる。なお、ストレージ装置1は、情報処理装置に内蔵されたOS(Operating System)等のデータが記憶されたSSDであってもよく、情報処理装置に外部から接続される外付け型のSSDであってもよい。
図1に示すように、ストレージ装置1は、SSDコントローラ3(ストレージコントローラ)と、NAND型フラッシュメモリ4と、DRAM5と、を備えている。
SSDコントローラ3は、NAND型フラッシュメモリ4およびDRAM5へのデータの読み書きを制御する制御装置である。SSDコントローラ3は、図1に示すように、CPU6と、DRAMコントローラ7と、ホストI/F8と、バッファ9と、ECC処理部10と、NANDコントローラ11と、を備えている。上述のCPU6、DRAMコントローラ7、ホストI/F8、バッファ9、ECC処理部10、およびNANDコントローラ11は、図1に示すように、アドレスバスおよびデータバス等のバスによって互いに通信可能に接続されている。また、一般的に、SSDコントローラ3は、1個または複数個のLSI(Large Scale Integrated Circuit)で構成されている。
NAND型フラッシュメモリ4は、不揮発性記憶素子で構成されたフラッシュメモリの一種である。NAND型フラッシュメモリ4は、複数のNANDメモリチップによって構成されている。NAND型フラッシュメモリ4は、ホストCPU2が実行するプログラム、およびデータ、ならびにCPU6が実行するプログラム等を記憶する。
DRAM5は、半導体記憶素子で構成された揮発性の記憶装置である。DRAM5は、揮発性であるため、供給されている電源が遮断されると記憶しているデータを消失する性質を有する。
CPU6は、SSDコントローラ3全体の動作を制御する集積回路である。DRAMコントローラ7は、DRAM5に対するデータの読み書き等のアクセス制御を行う機器である。ホストI/F8は、ストレージ装置1がホストCPU2とデータ通信するためのインターフェースである。
バッファ9は、ホストCPU2から受信したデータ、および、NANDコントローラ11を介してNAND型フラッシュメモリ4から読み出したデータを一時的に記憶しておく記憶回路である。
ECC処理部10は、ホストCPU2からホストI/F8を介して受信され、バッファ9に一時記憶されたデータに対して、誤り訂正符号(ECC:Error Correcting Code)を付与する集積回路である。ECC処理部10により誤り訂正符号が付与されたデータは、NANDコントローラ11によりNAND型フラッシュメモリ4に書き込まれる。
次に、ストレージ装置1が、ホストCPU2から受信したデータをNAND型フラッシュメモリ4に書き込む動作の概要を説明する。まず、ストレージ装置1のSSDコントローラ3は、ホストCPU2からホストI/F8を介して、論理アドレス、および書き込むデータを受信し、バッファ9に一時記憶させる。次に、バッファ9に記憶されたデータは、ECC処理部10によってそのデータに基づいて求められた誤り訂正符号が付与されて、NANDコントローラ11によって、論理アドレスに対応する物理アドレスが示すNAND型フラッシュメモリ4の記憶領域に書き込まれる。この場合、論理アドレスから物理アドレスへの変換は、後述する図3に示すDRAM5に記憶されたアドレス変換テーブル1001を参照して行われる。
また、ホストCPU2が、ストレージ装置1のNAND型フラッシュメモリ4からデータを読み出す動作の概要を説明する。まず、ストレージ装置1のSSDコントローラ3では、ホストCPU2からホストI/F8を介して、読み出すデータに対応する論理アドレスが指定される。次に、NANDコントローラ11は、上述のアドレス変換テーブル1001によって、指定された論理アドレスに対応する物理アドレスを特定し、その物理アドレスが示すNAND型フラッシュメモリ4の記憶領域から、誤り訂正符号が付与されたデータを読み出す。そして、ECC処理部10は、NANDコントローラ11により読み出されたデータに付与されている誤り訂正符号によって、読み出したデータに誤りがあるか否かを検出し、誤りがある場合は、誤り訂正符号によって誤りを訂正し、その誤り訂正符号を削除したデータ本体をバッファ9に記憶させる。また、ECC処理部10は、読み出したデータに誤りがない場合は、単に誤り訂正符号を削除してデータ本体をバッファ9に記憶させる。そして、バッファ9に記憶されたデータは、ホストI/F8を介してホストCPU2へ出力される。
なお、ECC処理部10は、図1に示すように、バスに接続された集積回路(ハードウェア回路)として実現するものとしているが、これに限定されるものではなく、CPU6がプログラムを実行することによって実現されるものとしてもよい。
図2は、実施形態に係るSSDコントローラの機能ブロック構成の一例を示す図である。図3は、アドレス変換テーブルの構成の一例を示す図である。図4は、有効管理テーブルの構成の一例を示す図である。図2〜4を参照しながら、本実施形態に係るSSDコントローラ3の機能ブロック構成および動作について説明する。
図2に示すように、SSDコントローラ3は、アドレス生成部101(アドレス生成手段)と、読出部102(読出手段)と、重複検出部103(重複検出手段)と、重複排除部104と、管理情報記憶部105と、エラー検出部106と、再書込部107と、データ記憶部108(記憶部)と、追加部109と、パターン更新部110と、を有する。
アドレス生成部101は、スキャンパターンに基づいて、NAND型フラッシュメモリ4においてスキャンするデータ、すなわち、重複検出処理の対象とするデータが記憶されているNAND型フラッシュメモリ4上の物理アドレス(以下、「NANDアドレス」という場合がある)を生成する機能部である。ここで、重複検出処理は、NAND型フラッシュメモリ4に記憶されたデータを所定の大きさに分割したチャンクと呼ばれるデータ単位毎に行われる。すなわち、アドレス生成部101により生成されたNANDアドレスは、NAND型フラッシュメモリ4において所定の大きさのデータ単位である1チャンク分のデータが記憶されている記憶領域のアドレスを示す。なお、1チャンク分のデータの長さは可変長または固定長の場合のいずれもあり得るが、ここでは、説明を簡便にするため固定長であるものとして説明する。また、アドレス生成部101により生成されたNANDアドレスを、以下、「スキャンアドレス」という場合があるものとする。アドレス生成部101は、図1に示すCPU6がプログラムを実行することによって実現される。アドレス生成部101の構成および動作の詳細は、図5および6において後述する。
読出部102は、アドレス生成部101により生成されたスキャンアドレスが示すNAND型フラッシュメモリ4の記憶領域(以下、単に「記憶領域」という場合がある)に記憶された1チャンク分のデータを読み出す機能部である。読出部102は、図1に示すCPU6がプログラムを実行することによって実現される。
重複検出部103は、NAND型フラッシュメモリ4において、読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが他の記憶領域に記憶されているか否かを検出する重複検出処理を実行する機能部である。重複検出部103は、図1に示すCPU6がプログラムを実行することによって実現される。重複検出部103の構成および動作(重複検出処理)の詳細は、図7および8において後述する。
管理情報記憶部105は、後述する図9に示す重複排除処理で使用する管理情報を記憶する機能部である。具体的には、管理情報記憶部105は、管理情報として、図3に示すアドレス変換テーブル1001と、図4に示す有効管理テーブル1002と、を記憶している。アドレス変換テーブル1001は、ホストCPU2から指定される論理アドレスと、実際にデータが記憶されている記憶領域を示す物理アドレスであるNANDアドレスとを関連付けるテーブルである。有効管理テーブル1002は、NANDアドレスと、そのNANDアドレスが示す記憶領域に記憶されたデータが有効であるか否かを示す有効フラグとを関連付けるテーブルである。例えば、図4に示すように、NANDアドレス「0000 0000 0001」(16進数表記、以下同様)が示す記憶領域に記憶されたデータは、有効フラグが「1」なので有効なデータであることを示す。ここで、有効なデータとは、過去にホストCPU2からNAND型フラッシュメモリ4に書き込まれて、その後消去または移動(実質的な上書き)等がなされていないデータを示す。
また、管理情報記憶部105は、さらに、管理情報として、後述する図8に示すハッシュテーブル1003(第2情報の一例)およびハッシュリスト1004(第1情報の一例)を記憶している。ハッシュテーブル1003およびハッシュリスト1004については、後述する。管理情報記憶部105は、図1に示すDRAM5によって実現される。なお、管理情報記憶部105が記憶する管理情報のうち少なくともいずれか1つが、DRAM5ではなくNAND型フラッシュメモリ4に記憶されるものとしてもよい。この場合、管理情報記憶部105は、図1に示すNAND型フラッシュメモリ4またはDRAM5のうち少なくともいずれか一方によって実現されることになる。
なお、図3に示すアドレス変換テーブル1001は、テーブル形式の情報に限定されるものではなく、論理アドレスとNANDアドレスとの関連付けが可能な情報であれば、どのような形式の情報であってもよい。また、図4に示す有効管理テーブル1002も、テーブル形式の情報に限定されるものではなく、NANDアドレスが示す記憶領域に記載されたデータが有効であるか否かを判別することが可能な情報であれば、どのような形式の情報であってもよい。
重複排除部104は、重複検出部103によって、読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが検出された場合、重複したデータを排除する機能部である。具体的には、重複排除部104は、例えば、図3において、スキャンアドレスが「8000 0000 0100」であった場合に、重複検出部103によりNANDアドレス「8000 0000 0000」が示す記憶領域の1チャンク分のデータと重複していることが検出されたものとする。図3に示すように、NANDアドレス「8000 0000 0100」および「8000 0000 0000」に対応する論理アドレスは、それぞれ「y」および「x」であるとすると、アドレス変換テーブル1001の論理アドレス「x」の行には、NANDアドレス「8000 0000 0000」が記憶されており、論理アドレス「y」の行には、NANDアドレス「8000 0000 0100」が記憶されている。重複検出部103によって、NANDアドレス「8000 0000 0100」および「8000 0000 0000」がそれぞれ示す記憶領域のデータは重複していることが検出されているので、論理アドレス「y」に対応するNANDアドレス「8000 0000 0100」を、「8000 0000 0000」に書き換えても、論理アドレス「x」または「y」に基づいて読み出すデータとしては何ら矛盾は生じない。したがって、この場合、重複排除部104は、論理アドレス「y」に対応するNANDアドレス「8000 0000 0100」を、論理アドレス「x」に対応するNANDアドレス「8000 0000 0000」で書き換える。すなわち、論理アドレス「x」および「y」の双方に対応するNANDアドレスが「8000 0000 0000」となり、NANDアドレス「8000 0000 0100」が示す記憶領域のデータは今後不要となる。よって、重複排除部104は、管理情報記憶部105に記憶された有効管理テーブル1002を参照し、NANDアドレス「8000 0000 0100」に対応する有効フラグを「0」に書き換えて無効であるものとする。重複排除部104は、図1に示すCPU6がプログラムを実行することによって実現される。
なお、上述では、重複排除部104は、論理アドレス「y」に対応するNANDアドレス「8000 0000 0100」(スキャンアドレス)を、論理アドレス「x」に対応するNANDアドレス「8000 0000 0000」で書き換えるものとしているが、これに限定されるものではない。すなわち、重複排除部104は、論理アドレス「x」に対応するNANDアドレス「8000 0000 0000」を、論理アドレス「y」に対応するNANDアドレス「8000 0000 0100」で書き換えるものとしてもよい。ただし、この場合、重複している論理アドレス「x」に対応するNANDアドレス「8000 0000 0000」が示す記憶領域のデータは、後述するように、ハッシュリスト1004に過去のデータ(ハッシュ値)として記憶されているので、重複排除部104は、ハッシュリスト1004に対しても、NANDアドレス「8000 0000 0000」を「8000 0000 0100」で書き換えなければならない。
エラー検出部106は、スキャンアドレスで示される記憶領域から読み出された1チャンク分のデータのエラー率rを下記の式(1)で算出し、算出したエラー率rに対して閾値判定してエラーを検出する機能部である。
r=n/N ・・・式(1)
式(1)のnは1チャンク内のエラービット数を示し、Nは1チャンクを構成するビット数を示す。エラー検出部106は、読み出された1チャンク分のデータに付与されている誤り訂正符号に基づいて訂正可能なエラービット数nを求め、式(1)によりエラー率rを算出する。一般に、NAND型フラッシュメモリ4に書き込まれたデータは、時間の経過および他の隣接するデータの読み出し動作によって少しずつ劣化する。エラー率rが大きな値をとっているということは、劣化が進んでいると判断できる。したがって、エラー検出部106は、エラー率rが所定の閾値以上であるか否かを判定する。エラー検出部106は、エラー率rが閾値以上の場合、データの劣化が進んでいると判断する。エラー検出部106は、図1に示すECC処理部10によって実現される。
再書込部107は、エラー検出部106により劣化が進んでいると判断されたデータ(エラー率rが閾値以上と判定されたデータ)を、データ記憶部108の別の記憶領域に再書き込みを行う機能部である。この場合、再書込部107は、エラーが検出されたデータについては、付与されている誤り訂正符号に基づいて誤りを訂正し、訂正したデータに新たな誤り訂正符号を付加して、データ記憶部108の別の記憶領域に再書き込みを行う。再書き込みにより、書き込まれたデータはリフレッシュされるため、ビットエラーの発生を抑制することができる。なお、誤り訂正のアルゴリズムとしては、RS(Reed−Solomon)符号、BCH符号、およびLDPC(Low Density Parity Check)符号等を用いた様々なアルゴリズムが知られている。誤り訂正アルゴリズムとしてBCH符号を用いる場合、例えば、公知の文献「H. Choi, W. Liu et al., “VLSI Implementation of BCH Error Correction for Multilevel Cell NAND Flash Memory”, IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Vol. 18, No.5, May 2010」では4096バイトのデータに対し256ビットの誤り訂正符号を加えることで16ビットまでのビット誤りを訂正可能な例が示されている。
また、再書込部107は、データの再書き込みに併せて、管理情報記憶部105に記憶されたアドレス変換テーブル1001、有効管理テーブル1002、およびハッシュリスト1004の内容を更新する。更新の内容の詳細については、図9において後述する。再書込部107は、図1に示すNANDコントローラ11によって実現される。
データ記憶部108は、ホストCPU2が実行するプログラム、およびデータ、ならびにCPU6が実行するプログラム等を記憶する機能部である。データ記憶部108は、図1に示すNAND型フラッシュメモリ4によって実現される。
追加部109は、重複検出部103によって読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが検出されない場合、読み出されたデータは新しいデータとして、ハッシュテーブル1003の内容を更新し、ハッシュリスト1004に情報を追加する機能部である。ハッシュテーブル1003の内容の更新、およびハッシュリスト1004への情報の追加の詳細については、図9において後述する。追加部109は、図1に示すCPU6がプログラムを実行することによって実現される。
パターン更新部110は、アドレス生成部101が重複検出処理の対象とするデータが記憶されている記憶領域のNANDアドレス(スキャンアドレス)を生成するためのスキャンパターンを更新する機能部である。パターン更新部110は、図1に示すCPU6がプログラムを実行することによって実現される。
なお、図2に示すSSDコントローラ3のアドレス生成部101、読出部102、重複検出部103、重複排除部104、管理情報記憶部105、エラー検出部106、再書込部107、データ記憶部108、追加部109、およびパターン更新部110は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図2に示すSSDコントローラ3で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図2に示すSSDコントローラ3で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
また、SSDコントローラ3のアドレス生成部101、読出部102、重複検出部103、重複排除部104、追加部109、およびパターン更新部110の一部または全部は、ソフトウェアであるプログラムではなく、FPGA(Field−Programmable Gate Array)またはASIC(Application Specific Integrated Circuit)等のハードウェア回路によって実現されてもよい。また、SSDコントローラ3のエラー検出部106は、ハードウェア回路(ECC処理部10)ではなく、CPU6がプログラムを実行することによって実現されてもよい。
図5は、実施形態に係るSSDコントローラのアドレス生成部の機能ブロック構成の一例を示す図である。図6は、スキャンパターンに従ったデータの重複検出の処理順序を説明する図である。図5および6を参照しながら、SSDコントローラ3のアドレス生成部101の機能ブロック構成および動作について説明する。
図5に示すように、アドレス生成部101は、カウンタ部1011と、反転部1012と、スクランブル部1013と、を有する。
カウンタ部1011は、スキャンアドレスを生成するためのカウンタ値を求める機能部である。カウンタ値のビット幅wは、下記の式(2)で決定される。
w=ceil{log(B/N)} ・・・式(2)
式(2)のBはデータ記憶部108の記憶容量を示し、Nは1チャンクを構成するビット数、すなわち1チャンクサイズを示し、ceil(x)は、x以上の最も近い整数を返す関数であるものとする。すなわち、式(2)で決定されるビット幅wにより求まるカウンタ値の最大値は、データ記憶部108のすべてのチャンクを示すNANDアドレスの個数と一致する。カウンタ部1011は、特定のカウンタ値によって、スキャンアドレスが求められた後、次のスキャンアドレスを生成する場合、そのカウンタ値をインクリメントする。
反転部1012は、特定のスキャンパターンに基づいて、カウンタ部1011から出力されたカウンタ値の各ビットを反転して、または、反転せずそのまま出力する機能部である。具体的には、反転部1012は、特定のスキャンパターンが示す反転モードが「ON」である場合、カウンタ値の各ビットを反転して出力する。例えば、カウンタ値が8ビットで構成されている場合、カウンタ部1011から「00」、「01」、「02」(16進数表記)というカウンタ値が出力された場合、反転部1012によるビット反転後のデータは、それぞれ「ff」、「fe」、「fd」(16進数表記)となり、データが降順となって出力される。一方、反転部1012は、特定のスキャンパターンが示す反転モードが「OFF」である場合、カウンタ値の各ビットを反転せずに、そのまま出力する。なお、反転部1012は、上述のように、カウンタ値の各ビットを反転する代わりに、特定のスキャンパターンに基づいて、カウンタ値の一部のビットのみを反転させるものとしてもよい。
スクランブル部1013は、反転部1012から出力されるデータの各ビットを、特定のスキャンパターンが示すスクランブルパターンに従って入れ替えて、スキャンアドレスを出力する機能部である。例えば、「00」、「01」、「02」、「03」(16進数表記)というデータに対して、1ビット目(ビット0)と4ビット目(ビット3)を入れ替えれば、スクランブル部1013から出力されるデータは、それぞれ「00」、「08」、「02」、「0a」(16進数表記)となる。
以上のように、カウンタ部1011が出力するカウンタ値と、反転部1012の反転モードと、スクランブル部1013のスクランブルパターンとに応じて、アドレス生成部101は様々な順序でスキャンアドレスを生成することができる。また、図5に示すように、反転モードおよびスクランブルパターンを含むスキャンパターンの情報は、管理情報記憶部105に記憶されており、パターン更新部110が、管理情報記憶部105から所定の方式に従って、または、ランダムに管理情報記憶部105から特定のスキャンパターンの情報を読み出す。そして、パターン更新部110は、読み出したスキャンパターンの情報に基づいて、反転部1012の反転モード、およびスクランブル部1013のスクランブルパターンを更新するためにスキャンパターン更新指令を出力する。
次に、図6を参照しながら、特定のスキャンパターンに基づいて、アドレス生成部101が生成するスキャンアドレスの順序の例を説明する。図6の例では、NAND型フラッシュメモリ4の記憶領域には、NANDアドレス「0000 0000 0000」から「ffff ffff ffff」が割り当てられているものとする。そして、アドレス生成部101は、特定のスキャンパターンにより、NAND型フラッシュメモリ4の記憶領域をN個のブロックに分けたものとした場合、各ブロックの先頭から所定の位置を示すスキャンアドレスを生成する。すなわち、図6に示すように、アドレス生成部101は、まず最初に、先頭のブロックの先頭から所定の位置(1)を示すスキャンアドレスを生成する。次に、アドレス生成部101は、先頭から次のブロックの先頭から所定の位置(2)を示すスキャンアドレスを生成する。同様に、アドレス生成部101は、スキャンアドレスを生成していき、N個目のブロックで、所定の位置(N)を示すスキャンアドレスを生成した後、次のスキャンアドレスを生成する場合、先頭のブロックの位置(1)とは異なる所定の位置(N+1)を示すスキャンアドレスを生成し、次に、先頭から次のブロックの位置(2)とは異なる所定の位置(N+2)を示すスキャンアドレスを生成する。以上のアドレス生成部101が生成するスキャンアドレスの順序は一例であるが、このようにスキャンパターンを適用することによって、飛び飛びのスキャンアドレスを生成することが可能になる。
図6において、例えば、最後のブロック(N個目のブロック)の所定の位置(N)のデータについて重複検出処理が実行され、次に、最初のブロックの所定の位置(N+1)のデータについて重複検出処理が実行されるので、その重複検出処理では位置(N)のデータと、位置(N+1)のデータとの重複の有無が判定されていることになる。例えば、管理情報記憶部105が記憶するハッシュリストのエントリ数がN個であり、かつ、Nが図6に示すNAND型フラッシュメモリ4のアドレス空間(「0000 0000 0000」〜「ffff ffff ffff」)のアドレス数よりも十分小さいものとすると、NAND型フラッシュメモリ4に対して先頭のアドレスから線形探索により重複検出処理を行った場合、位置(N)と位置(N+1)との重複の判定はできないことになる。しかし、スキャンパターンを適用し、飛び飛びのスキャンアドレスを生成することによって、離れたNANDアドレスのデータ同士の重複を検出することが可能になり、NAND型フラッシュメモリ4の全部のデータのハッシュ値を有する膨大なハッシュリストを有する必要がなく、過去の一部のハッシュ値(上述のように、例えば、N個)を記憶するハッシュリストによって、NAND型フラッシュメモリ4全体の重複の検出が可能となる。
なお、図5に示すアドレス生成部101のカウンタ部1011、反転部1012、およびスクランブル部1013は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図5に示すアドレス生成部101で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図5に示すアドレス生成部101で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
図7は、実施形態に係るSSDコントローラの重複検出部の機能ブロック構成の一例を示す図である。図8は、実施形態に係るSSDコントローラの重複検出処理を説明する図である。図7および8を参照しながら、SSDコントローラ3の重複検出部103の機能ブロックおよび動作について説明する。
図7に示すように、重複検出部103は、ハッシュ生成部1031と、抽出部1032と、取得部1033と、探索部1034と、を有する。
ハッシュ生成部1031は、読出部102により読み出された1チャンク分のデータから、ハッシュ値を生成する機能部である。1チャンク分のデータからハッシュ値を求めるアルゴリズムとしては、上述のように、例えば、MD5、SHA−1またはSHA−2等の種々のアルゴリズムを適用できる。また、SSDではフラッシュメモリのリテンション性能およびリードディスターブ等の影響によって発生するビットエラーの対策として使用される誤り訂正符号をハッシュ値として使用することも可能である。この場合、読出部102により読み出されたデータに付与されている誤り訂正符号をそのままハッシュ値として利用できるので、ハッシュ生成部1031が特定のアルゴリズムの処理を行ってハッシュ値を求める必要がなく、処理負荷が軽減される。図8に示す例では、ハッシュ生成部1031は、1チャンク分のデータからハッシュ値「0330」(16進数表記)を生成している。
抽出部1032は、ハッシュ生成部1031により生成されたハッシュ値から一部のデータ(例えば、先頭の1バイト)(以下、「部分ハッシュ」という)を抽出する機能部である。図8に示す例では、抽出部1032は、ハッシュ生成部1031により生成されたハッシュ値「0330」から、先頭の1バイト分のデータ「03」を部分ハッシュとして抽出している。なお、抽出する部分ハッシュのデータ長は1バイトに限定されるものではなく、探索速度、および管理情報記憶部105において確保可能なメモリ容量に応じて、適切に設定されるべきものである。
取得部1033は、管理情報記憶部105に記憶されたハッシュテーブル1003を参照し、抽出部1032により抽出された部分ハッシュに対応する、ハッシュリスト1004での位置を示す位置情報を取得する機能部である。ハッシュテーブル1003は、図8に示すように、部分ハッシュと、ハッシュリスト1004においてその部分ハッシュから始まるハッシュ値が記憶されている位置を示す位置情報と、を関連付けるテーブルである。ハッシュリスト1004は、図8に示すように、重複検出処理が行われた過去の所定数の1チャンク分のデータのハッシュ値と、そのデータが記憶されているNANDアドレスと、を関連付けるリスト(図8の例ではテーブル)である。図8に示す例では、部分ハッシュを1バイトとしているので、ハッシュテーブル1003は、部分ハッシュとして「00」〜「ff」と、それぞれに対応する位置情報とを関連付けている。なお、ハッシュテーブル1003は、部分ハッシュと、位置情報とを関連付けるものとしているが、ハッシュ値そのものと、位置情報とを関連付けるものとしてもよい。この場合は、抽出部1032による部分ハッシュの抽出動作は不要となる。また、説明を簡略化するために、ハッシュリスト1004には、図8に示すように、ハッシュ値が昇順に並んで記憶されているものとする。この場合、位置情報は、例えば、図8に示すように、ハッシュリスト1004において各ハッシュ値のうち部分ハッシュが共通している記憶部分の先頭位置を示す。例えば、図8の例では、抽出部1032により抽出された部分ハッシュが「03」である場合、取得部1033は、ハッシュテーブル1003から部分ハッシュ「03」に対応する位置情報を取得し、その位置情報は、ハッシュリスト1004のハッシュ値「0334」が記憶されている位置を示す。なお、ハッシュリスト1004は、上述したように、NAND型フラッシュメモリ4全体の各データのハッシュ値ではなく、重複検出処理を行った過去の一部のハッシュ値を記憶している。また、ハッシュリスト1004には、ハッシュ値が昇順に並んで記憶されていることに限定されるものではなく、例えば、降順に並んで記憶されているものとしてもよく、ハッシュ値のうち部分ハッシュが同一であるハッシュ値が連続するように記憶されているものとしてもよく、または、いわゆるリスト構造によって部分ハッシュが同一である複数のハッシュ値が関連付けられているものとしてもよい。
なお、図8に示すハッシュテーブル1003は、テーブル形式の情報に限定されるものではなく、部分ハッシュと位置情報との関連付けが可能な情報であれば、どのような形式の情報であってもよい。また、図8に示すハッシュリスト1004は、実質的にテーブル形式の情報で示されているが、テーブル形式の情報に限定されるものではなく、ハッシュ値とNANDアドレスとの関連付けが可能な情報であれば、どのような形式の情報であってもよい。
探索部1034は、管理情報記憶部105に記憶されたハッシュリスト1004を参照し、取得部1033により取得された位置情報で示されるハッシュ値の位置から、ハッシュ生成部1031により生成されたハッシュ値と重複(一致)するハッシュ値を線形探索する機能部である。探索部1034によりハッシュリスト1004において、ハッシュ生成部1031により生成されたハッシュ値と重複(一致)するハッシュ値が発見された場合、読出部102によってスキャンアドレスが示す記憶領域から読み出されたデータと重複するデータが、データ記憶部108の他の記憶領域にも記憶されていることを意味する。なお、探索部1034は、例えば、ハッシュリスト1004で、ハッシュ値のうち部分ハッシュが同一であるハッシュ値が連続するように記憶されている場合は、位置情報が示すその連続したハッシュ値の先頭の位置から線形探索を行えばよい。すなわち、探索部1034は、取得部1033により取得された位置情報で示されるハッシュ値の位置の近傍のハッシュ値を探索すればよいことになる。
探索部1034は、ハッシュ生成部1031により生成されたハッシュ値が重複していると判断すると、ハッシュリスト1004から重複しているハッシュ値に対応するNANDアドレスを取得する。そして、探索部1034は、重複の検出結果として、データの重複の有無と、重複している場合に、取得したNANDアドレスとを出力する。
以上のように、重複検出部103による重複検出処理では、まず、重複検出処理の対象となる1チャンク分のデータからハッシュ値を生成し、ハッシュテーブル1003からそのハッシュ値がハッシュリスト1004においてどのあたりに記憶されているかを大まかに特定する位置情報を取得し、ハッシュリスト1004においてその位置情報が示す位置から線形探索を行うことによって、一致するハッシュ値が存在するか探索するものとしている。これによって、一律にハッシュリストの先頭から線形探索する場合と比較して、高速にハッシュ値の探索を行うことができる。
なお、図7に示す重複検出部103のハッシュ生成部1031、抽出部1032、取得部1033、および探索部1034は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図7に示す重複検出部103で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図7に示す重複検出部103で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
図9は、実施形態に係るSSDコントローラの重複排除処理の一例を示すフローチャートである。図10は、実施形態に係るSSDコントローラの重複検出処理の一例を示すフローチャートである。図9および10を参照しながら、本実施形態に係るSSDコントローラ3の重複排除処理の流れについて説明する。
<ステップS11>
アドレス生成部101は、重複検出部103の重複検出処理の対象となる1チャンク分のデータが記憶されている記憶領域を示すスキャン位置を初期化する。すなわち、アドレス生成部101のカウンタ部1011は、カウンタ値を「0」にリセットし、カウンタ値「0」から反転部1012およびスクランブル部1013によって求まるスキャンアドレスを初期アドレスとする。そして、ステップS12へ移行する。
<ステップS12>
読出部102は、ストレージ装置1がアイドル状態であるか否かを判定する。ここで、ホストCPU2から受けた書き込みまたは読み出しの処理がストレージ装置1によって実行されている場合、その処理を優先とするため非アイドル状態とする。また、このような優先度の高い処理が実行されていない状態を、アイドル状態とする。ストレージ装置1がアイドル状態である場合(ステップS12:Yes)、ステップS14へ移行し、非アイドル状態である場合(ステップS12:No)、ステップS13へ移行する。
<ステップS13>
優先度の高いホストCPU2から受けた書き込みまたは読み出しの処理が実行されているので、読出部102は、その処理が終了するまで待機する。そして、ステップS12へ戻る。
<ステップS14>
読出部102は、アドレス生成部101により生成されたスキャンアドレスが示す記憶領域のデータが有効なデータであるか否かを判定する。具体的には、読出部102は、管理情報記憶部105の有効管理テーブル1002を参照し、スキャンアドレスに対応する有効フラグが「1」である場合、スキャンアドレスが示す記憶領域のデータが有効なデータであると判定する。有効なデータである場合(ステップS14:Yes)、ステップS15へ移行し、有効なデータでない場合(ステップS14:No)、ステップS22へ移行する。
<ステップS15>
読出部102は、スキャンアドレスが示す記憶領域の1チャンク分のデータが有効なデータであると判定し、その1チャンク分のデータを読み出す。そして、ステップS16へ移行する。
<ステップS16>
重複検出部103は、NAND型フラッシュメモリ4において、読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが他の記憶領域に記憶されているか否かを検出する重複検出処理を実行する。重複検出処理として、図10に示すステップS161〜S164が実行される。
<<ステップS161>>
重複検出部103のハッシュ生成部1031は、読出部102により読み出された1チャンク分のデータから、ハッシュ値を生成する。そして、ステップS162へ移行する。
<<ステップS162>>
重複検出部103の抽出部1032は、ハッシュ生成部1031により生成されたハッシュ値から一部のデータである部分ハッシュを抽出する。そして、ステップS163へ移行する。
<<ステップS163>>
重複検出部103の取得部1033は、管理情報記憶部105に記憶されたハッシュテーブル1003を参照し、抽出部1032により抽出された部分ハッシュに対応する、ハッシュリスト1004での位置を示す位置情報を取得する。そして、ステップS164へ移行する。
<<ステップS164>>
重複検出部103の探索部1034は、管理情報記憶部105に記憶されたハッシュリスト1004を参照し、取得部1033により取得された位置情報で示されるハッシュ値の位置から、ハッシュ生成部1031により生成されたハッシュ値と重複(一致)するハッシュ値を線形探索する。探索部1034は、ハッシュ生成部1031により生成されたハッシュ値が重複していると判断すると、ハッシュリスト1004から重複しているハッシュ値に対応するNANDアドレスを取得する。そして、探索部1034は、重複の検出結果として、データの重複の有無と、重複している場合に、取得したNANDアドレスとを出力する。
重複検出部103は、以上のステップS161〜S164に示す重複検出処理を実行する。そして、ステップS17へ移行する。
<ステップS17>
重複検出部103による重複検出処理の結果、データが重複している、すなわち、読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが他の記憶領域に記憶されている場合(ステップS17:Yes)、ステップS18へ移行する。この場合、重複検出部103は、検出結果として、探索部1034により取得された、重複しているデータが記憶されたNANDアドレスを重複排除部104に出力する。
一方、重複検出部103による重複検出処理の結果、データが重複していない、すなわち、少なくともハッシュリスト1004には、読出部102により読み出されたデータのハッシュ値が発見されなかった場合(ステップS17:No)、ステップS19へ移行する。この場合、重複検出部103は、検出結果として、データが重複していない旨を、エラー検出部106および追加部109に出力する。
<ステップS18>
重複排除部104は、重複検出部103によって、読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが検出された場合、読み出されたデータを排除する(無効とする)。具体的には、重複排除部104は、管理情報記憶部105に記憶されたアドレス変換テーブル1001において、スキャンアドレスと一致するNANDアドレス(対応する論理アドレスを例えば「y」とする)を、重複検出部103から出力された、重複したデータが記憶されているNANDアドレス(対応する論理アドレスを例えば「x」とする)で書き換える。この場合、論理アドレス「x」および「y」の双方に対応するNANDアドレスが、重複したデータが記憶されているNANDアドレスとなり、スキャンアドレスが示す記憶領域のデータは今後不要となる。そして、重複排除部104は、管理情報記憶部105に記憶された有効管理テーブル1002を参照し、スキャンアドレスと一致するNANDアドレスに対応する有効フラグを「0」に書き換えて無効であるものとする。そして、ステップS22へ移行する。
<ステップS19>
追加部109は、重複検出部103によって読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが検出されない場合、読み出されたデータは新しいデータとして、ハッシュテーブル1003の内容を更新し、ハッシュリスト1004に情報を追加する。
具体的には、追加部109は、読出部102によりスキャンアドレスから読み出された1チャンク分のデータは重複していないため、そのハッシュ値をハッシュリスト1004に追加する必要がある。そこで、まず、追加部109は、ハッシュリスト1004において、ハッシュ生成部1031により生成されたハッシュ値(以下、「生成ハッシュ値」という場合がある)を、取得部1033により取得された位置情報から探索して、生成ハッシュ値よりも小さいハッシュ値と、生成ハッシュ値よりも大きいハッシュ値との間に、生成ハッシュ値を挿入して追加する。さらに、追加部109は、ハッシュリスト1004において、追加した生成ハッシュ値に対応するNANDアドレスとして、スキャンアドレスを追加する。これによって、読出部102によりスキャンアドレスから読み出された1チャンク分のデータのハッシュ値と、そのスキャンアドレスとを示す行が追加される。
また、追加部109による生成ハッシュ値の追加の前に、ハッシュリスト1004のエントリ数の上限に達している場合、追加部109による生成ハッシュ値の追加の代わりに、ハッシュリスト1004の中で最も古いハッシュ値の行を削除する。すなわち、ハッシュリスト1004に対して、FIFO(First In First Out)によってデータのエントリ数が上限を超えないようにする。ここで、FIFOを実現するためには、例えば、ハッシュリスト1004において、ハッシュ値と、NANDアドレスとの関連付けに加えて、そのハッシュ値が追加された時刻、または、追加された順序を示す情報等を関連付けて記憶させておくものとすればよい。これによって、追加部109は、ハッシュリスト1004から最も古いハッシュ値の行を見つけることができる。あるいは、ハッシュリスト1004のどこの行に最も古いハッシュ値が記憶されているかを示す情報を別情報として管理するものとしてもよい。なお、古いハッシュ値の行の削除は、必ずしもハッシュリスト1004全体で最も古いハッシュ値を対象とする必要はない。例えば、同一の部分ハッシュを持ったハッシュ値の中で最も古いハッシュ値の行を削除するという方法であってもよい。
さらに、追加部109は、ハッシュリスト1004に生成ハッシュ値の行を追加したことにより、ハッシュテーブル1003で部分ハッシュに対応する位置情報がずれるため、ハッシュテーブル1003の位置情報を更新する。
そして、ステップS20へ移行する。
<ステップS20>
エラー検出部106は、重複検出部103によって読出部102により読み出された1チャンク分のデータと重複する1チャンク分のデータが検出されない場合、読み出された1チャンク分のデータのエラー率rを上述の式(1)で算出し、算出したエラー率rに対して閾値判定してエラーを検出する。エラー検出部106は、読み出された1チャンク分のデータに付与されている誤り訂正符号に基づいて求められる訂正可能なエラービット数から、上述の式(1)によりエラー率rを算出する。そして、エラー検出部106は、エラー率rが所定の閾値以上であるか否かを判定する。エラー率rが閾値以上である場合(ステップS20:Yes)、読み出したデータにはエラーが検出されたものとして、ステップS21へ移行し、エラー率rが閾値未満である場合(ステップS20:No)、ステップS22へ移行する。
<ステップS21>
再書込部107は、エラー検出部106によりエラーが検出されたデータ(エラー率rが閾値以上と判定されたデータ)を、データ記憶部108の別の記憶領域に再書き込みを行う。この場合、再書込部107は、エラーが検出されたデータについては、付与されている誤り訂正符号に基づいて誤りを訂正し、訂正したデータに新たに誤り訂正符号を付加して、データ記憶部108の別の記憶領域に再書き込みを行う。再書き込みにより、書き込まれたデータはリフレッシュされるため、ビットエラーの発生を抑制することができる。
また、再書込部107は、データの再書き込みに併せて、管理情報記憶部105に記憶されたアドレス変換テーブル1001、有効管理テーブル1002、およびハッシュリスト1004の内容を更新する。具体的には、まず、再書込部107は、アドレス変換テーブル1001において、スキャンアドレスと一致するNANDアドレスを、再書き込みした別の記憶領域を示すNANDアドレスで書き換える。また、再書込部107は、有効管理テーブル1002において、スキャンアドレスに対応する有効フラグを「0」(無効)に書き換え、再書き込みした別の記憶領域を示すNANDアドレスに対応する有効フラグを「1」(有効)に書き換える。そして、再書込部107は、ハッシュリスト1004において、追加部109により追加された生成ハッシュ値に対応するNANDアドレス(スキャンアドレス)を、再書き込みした別の記憶領域を示すNANDアドレスで書き換える。そして、ステップS22へ移行する。
<ステップS22>
アドレス生成部101は、重複検出部103の重複検出処理の新たな対象となる1チャンク分のデータの記憶領域を示すために、現在のスキャンパターンに従ってスキャンアドレスを更新する。具体的には、アドレス生成部101のカウンタ部1011は、カウンタ値をインクリメントし、インクリメントされたカウンタ値から反転部1012およびスクランブル部1013によって求まるスキャンアドレスを、新たなスキャンアドレスとして更新する。そして、ステップS23へ移行する。
<ステップS23>
アドレス生成部101は、データ記憶部108(NAND型フラッシュメモリ4)の記憶領域のすべてについてスキャンしたか、すなわち、重複検出部103による重複検出処理が実行されたか否かを判定する。具体的には、アドレス生成部101は、カウンタ部1011のカウンタ値が、データ記憶部108のすべてのチャンクを示すNANDアドレスの個数、すなわち、NANDアドレスの最終アドレスに達したか否かにより判定する。データ記憶部108の記憶領域のすべてについてスキャンが終了した場合(ステップS23:Yes)、ステップS24へ移行し、終了していない場合(ステップS23:No)、ステップS12へ戻る。
<ステップS24>
データ記憶部108の記憶領域すべてについてスキャンされた(重複検出部103による重複検出処理が実行された)場合、パターン更新部110は、管理情報記憶部105から所定の方式に従って、または、ランダムに管理情報記憶部105から特定のスキャンパターンの情報を読み出す。そして、パターン更新部110は、読み出したスキャンパターンの情報に基づいて、反転部1012の反転モード、およびスクランブル部1013のスクランブルパターンを更新するためにスキャンパターン更新指令を出力することによって、新たなスキャンパターンに更新する。そして、ステップS11へ戻る。
以上のステップS11〜S24の動作によって、SSDコントローラ3による重複排除処理が実行される。
以上のように、本実施形態に係るSSDコントローラ3は、アドレス生成部101によりスキャンパターンに従ったスキャンアドレスを生成するので、スキャンアドレスとして飛び飛びのアドレスを順々に生成し、そのスキャンアドレスのデータを重複検出処理の対象としている。これによって、離れたNANDアドレスのデータ同士の重複を検出することが可能になり、NAND型フラッシュメモリ4の全部のデータのハッシュ値を有する膨大なハッシュリストを有する必要がなく、過去の一部のハッシュ値を記憶するハッシュリストによって、NAND型フラッシュメモリ4全体の重複の検出が可能となり、データの重複を効率よく検出することができる。
また、特定のスキャンパターンに従ったアドレス生成部101によるスキャンアドレスに基づいて、データ記憶部108の記憶領域すべてについてスキャンされた(重複検出部103による重複検出処理が実行された)場合、パターン更新部110は、管理情報記憶部105から所定の方式に従って、または、ランダムに管理情報記憶部105から特定のスキャンパターンの情報を読み出し、アドレス生成部101がスキャンアドレスを生成するためのスキャンパターンを更新するものとしている。これによって、NAND型フラッシュメモリ4の各記憶領域のデータについてさらに網羅的に重複を検出することが可能となり、データの重複をさらに効率よく検出することができる。
また、重複検出部103による重複検出処理では、まず、重複検出処理の対象となる1チャンク分のデータからハッシュ値を生成し、ハッシュテーブル1003からそのハッシュ値がハッシュリスト1004においてどのあたりに記憶されているかを大まかに特定する位置情報を取得し、ハッシュリスト1004においてその位置情報が示す位置から線形探索を行うことによって、一致するハッシュ値が存在するか探索するものとしている。これによって、一律にハッシュリストの先頭から線形探索する場合と比較して、高速にハッシュ値の探索を行うことができるので、データの重複を効率よく検出することができる。
また、重複検出部103によりデータの重複が検出された場合、重複排除部104は、重複したデータのいずれかを排除するものとしている。これによって、NAND型フラッシュメモリ4に記憶されているデータを圧縮することが可能となり、NAND型フラッシュメモリ4を効率的に利用することができる。
また、エラー検出部106は、読出部102により読み出された1チャンク分のデータについてエラーの有無を検出し、再書込部107は、エラー検出部106によりエラーが検出されたデータを、データ記憶部108の別の記憶領域に再書き込みを行うものとしている。これによって、書き込まれたデータはリフレッシュされるため、ビットエラーの発生を抑制することができる。
なお、上述の実施形態に係るSSDコントローラ3の重複排除処理では、重複排除部104による重複したデータの排除が行われているが、この動作の代わりに、重複排除部104(通知部)は、重複しているデータの記憶領域を示すNANDアドレスに対応する論理アドレス等のデータの重複を示す情報をホストCPU2に通知するものとしてもよい。この場合、実際のデータの重複排除の動作は、ホストCPU2の指令に委ねることになる。
また、上述の実施形態では、スキャンパターンを更新するために、パターン更新部110から出力されるスキャンパターン更新指令に基づいて、反転部1012およびスクランブル部1013の動作を変更するものとしていたが、これに限定されるものではない。すなわち、管理情報記憶部105には、反転部1012およびスクランブル部1013の動作を規定するスキャンパターンの情報ではなく、NAND型フラッシュメモリ4のNANDアドレスのデータをどのような順番でスキャンするかを直接規定するスキャンパターンの情報が記憶されているものとしてもよい。この場合、アドレス生成部101は、直接、スキャン順番を規定するスキャンパターンに従って、スキャンアドレスを生成するものとすればよい。
また、上述の実施形態では、スキャンアドレスが示す記憶領域のデータについて、エラー検出部106によるデータのエラーの検出は、重複検出部103によってそのデータに重複がない場合に行うものとしているが、これに限定されるものではない。例えば、重複検出部103によるデータの重複の有無に関わらず、スキャンアドレスが示す記憶領域のデータのすべてに対して、エラー検出部106によるエラー検出、および、再書込部107による誤り訂正後のデータの再書き込みを行うものとしてもよい。
また、上述の実施形態のSSDコントローラ3のCPU6で実行されるプログラムは、例えば、インストール可能な形式または実行可能な形式のファイルでCD−ROM(Compact Disc Read Only Memory)、CD−R(Compact Disk−Recordable)、メモリカード、DVD(Digital Versatile Disk)、またはフレキシブルディスク(FD)等のコンピュータで読み取り可能な記憶媒体に記憶されて提供されるものとしてもよい。
また、上述の実施形態のSSDコントローラ3のCPU6で実行されるプログラムは、インターネット等のネットワークに接続されたコンピュータ上に格納され、ネットワーク経由でダウンロードされることにより提供されるようにしてもよい。また、上述の実施形態のSSDコントローラ3のCPU6で実行されるプログラムは、インターネット等のネットワーク経由で提供または配布されるようにしてもよい。また、上述の実施形態のSSDコントローラ3のCPU6で実行されるプログラムは、ROM(Read Only Memory)等に予め組み込んで提供されるようにしてもよい。
また、上述の実施形態のSSDコントローラ3のCPU6で実行されるプログラムは、上述したCPU6で実行される各機能をコンピュータ上で実現させるためのモジュール構成となっている。実際のハードウェアとしては、CPU6が記憶装置(DRAM5またはNAND型フラッシュメモリ4)からプログラムを読み出して実行することによって、上述の各機能がストレージ装置1上で実現されるようになっている。
以上のように本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、および変更を行うことができる。この実施形態およびその変形は、発明の範囲および要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 ストレージ装置
2 ホストCPU
3 SSDコントローラ
4 NAND型フラッシュメモリ
5 DRAM
6 CPU
7 DRAMコントローラ
8 ホストI/F
9 バッファ
10 ECC処理部
11 NANDコントローラ
101 アドレス生成部
102 読出部
103 重複検出部
104 重複排除部
105 管理情報記憶部
106 エラー検出部
107 再書込部
108 データ記憶部
109 追加部
110 パターン更新部
1001 アドレス変換テーブル
1002 有効管理テーブル
1003 ハッシュテーブル
1004 ハッシュリスト
1011 カウンタ部
1012 反転部
1013 スクランブル部
1031 ハッシュ生成部
1032 抽出部
1033 取得部
1034 探索部

Claims (13)

  1. 読み出すデータのアドレスの順番を規定するための特定のスキャンパターンに従って、外部から書き込まれたデータを記憶する記憶部の各記憶領域を示すスキャンアドレスを生成するアドレス生成部と、
    前記スキャンアドレスが示す前記記憶部の記憶領域からデータを読み出す読出部と、
    前記読出部により読み出されたデータが、過去の所定数のデータのいずれかと重複しているか否かを検出する重複検出部と、
    を備えたストレージコントローラ。
  2. 前記記憶部は、NAND型フラッシュメモリである請求項1に記載のストレージコントローラ。
  3. 前記重複検出部は、前記読出部により読み出されたデータが、前記記憶部に記憶されているすべてのデータの数よりも小さい数の前記所定数のデータのいずれかと重複しているか否かを検出する請求項1に記載のストレージコントローラ。
  4. 前記読出部は、前記スキャンアドレスが示す前記記憶部の記憶領域から所定の大きさの単位でデータを読み出し、
    前記重複検出部は、前記読出部により読み出された前記所定の大きさのデータからハッシュ値を生成し、前記所定数のデータのハッシュ値のいずれかと重複しているか否かを検出することによって、該読出部により読み出された前記所定の大きさのデータの重複の有無を検出する請求項1に記載のストレージコントローラ。
  5. 前記記憶部は、外部から書き込まれるデータと共に、該データについての誤り訂正符号を記憶し、
    前記重複検出部は、前記所定の大きさのデータについての前記誤り訂正符号をハッシュ値として生成する請求項4に記載のストレージコントローラ。
  6. 前記重複検出部は、
    前記読出部により読み出された前記所定の大きさのデータからハッシュ値を生成するハッシュ生成部と、
    ハッシュ値の少なくとも一部を示す情報と、前記所定数のデータを含む第1情報における位置を示す位置情報と、を関連付ける第2情報から、前記ハッシュ生成部により生成されたハッシュ値の少なくとも一部を示す情報に対応する位置情報を取得する取得部と、
    前記取得部により取得された位置情報が示す前記第1情報での位置の近傍で、前記ハッシュ生成部により生成されたハッシュ値と一致するハッシュ値を探索する探索部と、
    を有する請求項4に記載のストレージコントローラ。
  7. 前記重複検出部により、前記読出部により読み出されたデータが重複していることが検出された場合、該読出部により読み出されたデータ、および該データと重複しているデータのうち、いずれか一方を無効とすることにより重複を排除する重複排除部と、をさらに備えた請求項1に記載のストレージコントローラ。
  8. 前記重複検出部により、前記読出部により読み出されたデータが重複していることが検出された場合、いずれのデータが重複しているかを示す情報を、前記記憶部にアクセスする制御装置に通知する通知部と、をさらに備えた請求項1に記載のストレージコントローラ。
  9. 前記記憶部の記憶領域すべてのデータについて前記重複検出部による重複の検出が実行された後、前記特定のスキャンパターンと異なるスキャンパターンに更新するパターン更新部を、さらに備え、
    前記アドレス生成部は、前記異なるスキャンパターンに従って、スキャンアドレスを生成する請求項1に記載のストレージコントローラ。
  10. 前記読出部により読み出されたデータのエラー率を算出し、前記エラー率が所定値以上である場合、該データにエラーがあることを検出するエラー検出部と、
    前記エラー検出部によりエラーがあると検出されたデータを、前記記憶部で該データが記憶されていた記憶領域とは別の記憶領域に再書き込みを行う再書き込み部と、
    をさらに備えた請求項1に記載のストレージコントローラ。
  11. 前記記憶部と、
    請求項1〜10のいずれか一項に記載のストレージコントローラと、
    を備えたストレージ装置。
  12. 読み出すデータのアドレスの順番を規定するための特定のスキャンパターンに従って、外部から書き込まれたデータを記憶する記憶部の各記憶領域を示すスキャンアドレスを生成するアドレス生成ステップと、
    前記スキャンアドレスが示す前記記憶部の記憶領域からデータを読み出す読出ステップと、
    読み出したデータが、過去の所定数のデータのいずれかと重複しているか否かを検出する重複検出ステップと、
    を有するデータ処理方法。
  13. コンピュータを、
    読み出すデータのアドレスの順番を規定するための特定のスキャンパターンに従って、外部から書き込まれたデータを記憶する記憶部の各記憶領域を示すスキャンアドレスを生成するアドレス生成手段と、
    前記スキャンアドレスが示す前記記憶部の記憶領域からデータを読み出す読出手段と、
    前記読出手段により読み出されたデータが、過去の所定数のデータのいずれかと重複しているか否かを検出する重複検出手段と、
    して機能させるためのプログラム。
JP2016024057A 2016-02-10 2016-02-10 ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム Expired - Fee Related JP6587953B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016024057A JP6587953B2 (ja) 2016-02-10 2016-02-10 ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム
US15/259,657 US10649675B2 (en) 2016-02-10 2016-09-08 Storage controller, storage device, data processing method, and computer program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016024057A JP6587953B2 (ja) 2016-02-10 2016-02-10 ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2017142683A true JP2017142683A (ja) 2017-08-17
JP6587953B2 JP6587953B2 (ja) 2019-10-09

Family

ID=59498244

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016024057A Expired - Fee Related JP6587953B2 (ja) 2016-02-10 2016-02-10 ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム

Country Status (2)

Country Link
US (1) US10649675B2 (ja)
JP (1) JP6587953B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021022324A (ja) * 2019-07-30 2021-02-18 富士通株式会社 記憶制御装置および記憶制御プログラム

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109325423B (zh) * 2018-08-29 2021-09-21 安徽超清科技股份有限公司 一种针对行人检测的优化ssd方法
US10860232B2 (en) * 2019-03-22 2020-12-08 Hewlett Packard Enterprise Development Lp Dynamic adjustment of fingerprints added to a fingerprint index
US11354289B2 (en) * 2019-10-31 2022-06-07 Hewlett Packard Enterprise Development Lp Merging buffered fingerprint index entries
CN113204446B (zh) * 2020-02-03 2022-09-23 瑞昱半导体股份有限公司 寄存器资料检查装置与方法
US11138055B1 (en) * 2020-07-01 2021-10-05 Dell Products L.P. System and method for tracking memory corrected errors by frequency of occurrence while reducing dynamic memory allocation
JP2022088221A (ja) * 2020-12-02 2022-06-14 株式会社日立製作所 データ同期システム、データ同期装置及びデータ同期方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009087021A (ja) * 2007-09-28 2009-04-23 Hitachi Ltd ストレージ装置及びデータ重複排除方法
JP2009181148A (ja) * 2008-01-29 2009-08-13 Hitachi Ltd ストレージサブシステム
JP2011118712A (ja) * 2009-12-04 2011-06-16 Fujitsu Ltd データ管理プログラム、データ管理装置、およびデータ管理方法
JP2013156846A (ja) * 2012-01-30 2013-08-15 Fujitsu Ltd ストレージ管理方法およびストレージ管理装置
JP5444506B1 (ja) * 2013-03-29 2014-03-19 株式会社東芝 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム
WO2015008375A1 (ja) * 2013-07-19 2015-01-22 株式会社日立製作所 ストレージ装置および記憶制御方法
WO2015125271A1 (ja) * 2014-02-21 2015-08-27 株式会社日立製作所 ファイルサーバ、その制御方法、およびストレージシステム
WO2016006050A1 (ja) * 2014-07-09 2016-01-14 株式会社日立製作所 ストレージシステム及び記憶制御方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009251725A (ja) * 2008-04-02 2009-10-29 Hitachi Ltd 記憶制御装置及び記憶制御装置を用いた重複データ検出方法。
US20090327581A1 (en) 2008-06-30 2009-12-31 Coulson Richard L Nand memory
US9176964B1 (en) * 2008-08-18 2015-11-03 Guidance Software, Inc. Scalable deduplication system and method
US9043668B2 (en) * 2013-02-08 2015-05-26 Seagate Technology Llc Using ECC data for write deduplication processing
US20140304464A1 (en) 2013-04-03 2014-10-09 Lsi Corporation Methods and systems for performing deduplication in a data storage system
US9959059B2 (en) * 2014-10-20 2018-05-01 Sandisk Technologies Llc Storage error management
KR102320864B1 (ko) * 2015-03-24 2021-11-03 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
JP2016207033A (ja) 2015-04-24 2016-12-08 株式会社東芝 情報記憶システムおよび情報記憶装置
US20170017571A1 (en) * 2015-07-17 2017-01-19 Samsung Electronics Co., Ltd. Method and apparatus fori n-line deduplication in storage devices
US9870167B2 (en) * 2015-10-12 2018-01-16 Sandisk Technologies Llc Systems and methods of storing data

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009087021A (ja) * 2007-09-28 2009-04-23 Hitachi Ltd ストレージ装置及びデータ重複排除方法
JP2009181148A (ja) * 2008-01-29 2009-08-13 Hitachi Ltd ストレージサブシステム
JP2011118712A (ja) * 2009-12-04 2011-06-16 Fujitsu Ltd データ管理プログラム、データ管理装置、およびデータ管理方法
JP2013156846A (ja) * 2012-01-30 2013-08-15 Fujitsu Ltd ストレージ管理方法およびストレージ管理装置
JP5444506B1 (ja) * 2013-03-29 2014-03-19 株式会社東芝 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム
WO2015008375A1 (ja) * 2013-07-19 2015-01-22 株式会社日立製作所 ストレージ装置および記憶制御方法
WO2015125271A1 (ja) * 2014-02-21 2015-08-27 株式会社日立製作所 ファイルサーバ、その制御方法、およびストレージシステム
WO2016006050A1 (ja) * 2014-07-09 2016-01-14 株式会社日立製作所 ストレージシステム及び記憶制御方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021022324A (ja) * 2019-07-30 2021-02-18 富士通株式会社 記憶制御装置および記憶制御プログラム

Also Published As

Publication number Publication date
US20170228177A1 (en) 2017-08-10
US10649675B2 (en) 2020-05-12
JP6587953B2 (ja) 2019-10-09

Similar Documents

Publication Publication Date Title
JP6587953B2 (ja) ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム
US9740403B2 (en) Methods for managing storage in a data storage cluster with distributed zones based on parity values and devices thereof
US10642522B2 (en) Method and system for in-line deduplication in a storage drive based on a non-collision hash
KR101748717B1 (ko) Ssd 기반 raid 시스템에서 패리티 데이터의 중복제거
US9898404B2 (en) Method and apparatus for providing improved garbage collection process in solid state drive
US9229853B2 (en) Method and system for data de-duplication
US10310938B2 (en) Data deduplication with reduced hash computations
US9851917B2 (en) Method for de-duplicating data and apparatus therefor
US8214620B2 (en) Computer-readable recording medium storing data storage program, computer, and method thereof
US9727244B2 (en) Expanding effective storage capacity of a data storage system while providing support for address mapping recovery
JP2016526720A (ja) クラスタベースの記憶システムにおけるデータスクラビング
US11379447B2 (en) Method and system for enhancing IOPS of a hard disk drive system based on storing metadata in host volatile memory and data in non-volatile memory using a shared controller
JPWO2015128955A1 (ja) 記憶デバイス、記憶デバイスを有する装置、及び記憶制御方法
KR20170009706A (ko) 중복 데이터를 감소시키기 위한 저장 장치 및 그것의 동작 방법
KR101472797B1 (ko) 데이터를 읽거나 쓰기 위한 방법 및 장치
US20170322747A1 (en) Information processing apparatus and method for deduplication
JP2018147127A (ja) 情報処理装置
CN107798063B (zh) 快照处理方法和快照处理装置
WO2018188618A1 (zh) 固态硬盘访问
US20190310788A1 (en) Similarity-based data deduplication on solid-state storage devices with embedded nonvolatile memory
US10152371B1 (en) End-to-end data protection for distributed storage
US11132137B2 (en) Methods and systems for providing read-optimized scalable offline de-duplication for blocks of data
US20200293196A1 (en) Compression of page of data blocks and data integrity fields for the data blocks for storage in storage device
TW201814527A (zh) 非依電性記憶體裝置及其位址分類方法
US20220391118A1 (en) Journals for data cloning operations

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170605

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180206

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180905

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181024

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181214

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190604

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190731

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190813

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190911

R150 Certificate of patent or registration of utility model

Ref document number: 6587953

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees