JP2017511521A - フラッシュメモリ圧縮 - Google Patents

フラッシュメモリ圧縮 Download PDF

Info

Publication number
JP2017511521A
JP2017511521A JP2016550793A JP2016550793A JP2017511521A JP 2017511521 A JP2017511521 A JP 2017511521A JP 2016550793 A JP2016550793 A JP 2016550793A JP 2016550793 A JP2016550793 A JP 2016550793A JP 2017511521 A JP2017511521 A JP 2017511521A
Authority
JP
Japan
Prior art keywords
header
data block
lba
data
compressed
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
JP2016550793A
Other languages
English (en)
Other versions
JP6316974B2 (ja
Inventor
クン リー,メン
クン リー,メン
ターコル,プリヤンカー
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.)
Tidal Systems Inc
Original Assignee
Tidal Systems Inc
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 Tidal Systems Inc filed Critical Tidal Systems Inc
Publication of JP2017511521A publication Critical patent/JP2017511521A/ja
Application granted granted Critical
Publication of JP6316974B2 publication Critical patent/JP6316974B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/0608Saving storage space on storage systems
    • 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/0625Power saving in storage systems
    • 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/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1028Power efficiency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

SSDデバイス等の不揮発性記憶デバイスから圧縮データを読み出すシステム及び方法が開示される。データの論理部、例えばページは、圧縮され、長さが異なる複数のデータブロックを含む。ページのヘッダー部は、各データブロックの長さを記憶する、データブロックのヘッダーを記憶する。ヘッダー部は、誤り訂正スキームによりヘッダーをコード化したコードワードであり得る。データブロックを読み出すために、ハードウェアデコーダは、ページの読み出しを要求し、ヘッダー部をハードウェアデコーダに転送させる。ハードウェアデコーダは、ヘッダーをデコードし、所望のデータブロックのオフセット値を取得する。ハードウェアデコーダは、ページの読み出し指示なしにオフセット値を使用して、所望のデータブロックの転送を要求する。所望のデータブロックはデコードされ、要求デバイスに返される。【選択図】図4

Description

当発明は、フラッシュメモリシステムにおける圧縮データにアクセスするシステムに関する。
SSDとも称されるソリッドステートドライブは、NANDフラッシュメモリデバイスを記憶素子として使用するデータ記憶デバイスである。一般にこのようなデバイスは、ホストコマンドを一端で受け付けて、もう一端でNANDフラッシュへ伝達するSSDコントローラを有する。NANDフラッシュは、電源が切られている時にデータを保持する不揮発性記憶デバイスの一種である。SSDコントローラは、NANDインターフェイスを介してNANDフラッシュデバイスにアクセスする。NANDデバイスは、有限数の書き込み/プログラムサイクルを有する。NANDフラッシュへのデータ書き込み動作には、2つの段階が含まれる。データ転送段階と、メモリプログラム段階である。同様に、データ読み出しも、2つの段階に分類される。第1にメモリ読み出し段階と、第2にデータ転送段階である。メモリ読み出し段階は、データの読み出し時間と比較して、コントローラに非常に大きな遅延(約60μs)を生じる。
NANDフラッシュダイの物理階層は、プレーン、ブロック、ページに分解される。NANDフラッシュダイは複数のプレーンを含むことが可能であり、各プレーンはブロックに分割され、そして全てのブロックはNページを含む。典型的なNANDは、2プレーン、約4000ブロック、及び256ページ/ブロックを有する。
容易に理解されるように、ページが読み出し及び書き込み動作の最小メモリ単位であり、すなわちプログラムまたは読み出し動作はページ上で行われる。典型的NANDのページサイズは、約4キロバイト、約8キロバイト、及び約16キロバイトである。ページサイズは、ECCパリティデータを収容するために、4キロバイト、8キロバイト、または16キロバイトより少し大きくあり得る。典型的NANDインターフェイスのデータ速度は、200MBpsから400MBpsであり得る。読み出しに関して、メモリ読み出し時間は約60μsであり、データ転送は16KBデータでは約40μs、8KBデータでは約20μs、4KBデータでは約10μsであり得る。
論理ブロックアドレス(LBA)とは、コンピュータ記憶デバイス、一般にハードドライブ及びSSD等のシステム上に記憶されたデータのブロックの位置を特定するために使用される一般的なスキームである(例えばhttp://en.wikipedia.org/wiki/Computer_storage参照)。
SSD認識ホストにおいて、典型的ホストLBA粒度は512バイト及び4KBである。SSDコントローラは、4キロバイトで作動することを選択可能であり、512バイトホストLBA番号と4キロバイトコントローラLBA番号間のマッピングを管理する。システム内の各LBAは、一意のデータユニットにマッピングされる必要がある。当データユニットのサイズにより、物理アドレスポインタの大きさが定義される。その結果、LBAポインタのサイズは、ページ内のデータユニットのサイズに応じて、ダイ数、ブロック数、ページ数、及びデータユニットのサイズの関数となり得る。
例えば、1つの例示的構成において、SSDは以下の通りに構成される。
システム内のダイ数:128ダイ=2^7
ダイ毎のブロック数:4000+ブロック=2^13
ブロック毎のページ数:256ページ=2^8
LBAデータユニットサイズ:約4KB
16KBページ内の4KBのLBA数:4
物理デバイス容量:128*4000(+)*256*16KB+=2^43
論理デバイス容量:128*4000*256*16KB=2^41=2TB
デバイス内のLBA位置数:2TB/4KB=2^29
物理位置を示すためのLBAテーブルの1エントリにおける全ビット数=7(ダイ用)+13(ブロック用)+8(ページ用)+2(4LBA用)=30ビット
物理LBA位置を記憶する全LBAテーブルサイズ=30ビット*2^29エントリ=1.875ギガバイト
LBAエントリは通常、ファームウェア管理スキーマ毎のバイト粒度に丸められる。その結果、各LBAエントリに4バイトが使用され、全LBAテーブルサイズは、4バイト*2^29エントリ=2ギガバイトとなる。この場合、4KBホストデータは、4KBデータ及びパリティビットとしてNANDフラッシュ内にコード化され、マッピングされる。
本明細書において開示される装置及び方法は、NANDフラッシュSSDまたは他の不揮発性記憶デバイスにデータを記憶する改善された装置及び方法を提供する。開示される装置及び方法はどちらも、SSDに記憶され得るデータ量を増大し、SSDにアクセスするために使用されるLBAテーブルのサイズを縮小する。
発明の利点が容易に理解されるように、上記で簡単に説明された発明のより詳細な説明が、添付の図面に例示される特定の実施形態を参照して提供される。これらの図面は、単に発明の典型的実施形態を描くものであり、よって発明の範囲を限定するものとしてみなされてはならないという理解の下、添付図面の使用を通して追加の特定性及び詳細により、発明は記述及び説明される。
発明の実施形態による方法を実施するのに好適なコンピューティングシステムの概略ブロック図である。 先行技術による記憶システムの構成要素の概略ブロック図である。 図3A〜3Dは、本発明の実施形態による記憶スキーマを含むデータ記憶スキーマを例示する。 発明の実施形態によるハードウェアデコーダの概略ブロック図である。 本発明の実施形態による圧縮データの読み出し方法のプロセスフロー図である。 発明の実施形態によるデータ読み出しのタイムラインである。 本発明の実施形態による圧縮データの読み出し方法のプロセスフロー図である。 発明の実施形態によるガベージコレクションの方法のプロセスフロー図である。
本明細書において図の実施例により概して説明及び例示される本発明の構成要素は、多様に異なる構成で配置及び設計され得ることは、容易に理解されよう。従って、図で示される発明の実施形態及び実施例に関する以下のより詳細な説明は、請求項に記述される発明の範囲を限定する意図はなく、発明により現時点で考えられる実施形態のある実施例の代表に過ぎない。本明細書において記述される実施形態は、図面を参照することで最もよく理解されよう。図面において同じ構成部分は、全体にわたって同じ番号により示される。
本発明は、当該技術分野の現状に応じて、特に現在利用可能な装置及び方法により完全に解消されていない当該技術分野における問題及び必要性に応じて、開発された。よって本発明は、フラッシュメモリにおいて圧縮データを記憶しアクセスを行う装置及び方法を提供するために開発された。
本発明による実施形態は、装置、方法、またはコンピュータプログラム製品として具現化され得る。従って、本発明は、完全なハードウェア実施形態、完全なソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、または本明細書において全て「モジュール」または「システム」と概して称され得るソフトウェア及びハードウェアの態様を組み合わせた実施形態の形を取り得る。さらに本発明は、コンピュータ使用可能プログラムコードを有する式の任意の有形媒体に具現化されたコンピュータプログラム製品の形態を取り得る。当該コンピュータ使用可能プログラムコードを有する式は、当該媒体に取り込まれる。
1つまたは複数のコンピュータ使用可能媒体またはコンピュータ可読媒体のうちの任意の組合せが使用され得る。例えば、コンピュータ可読媒体は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)デバイス、読み出し専用メモリ(ROM)デバイス、消去可能プログラム可能読み出し専用メモリ(EPROMまたはフラッシュメモリ)デバイス、ポータブルコンパクトディスク読み出し専用メモリ(CDROM)、光学記憶デバイス、及び磁気記憶デバイスのうちの1つまたは複数を含み得る。選択された実施形態において、コンピュータ可読媒体は、命令実施システム、装置、またはデバイスにより使用される、またはこれらと接続するプログラムを保持、記憶、伝達、伝搬、または転送することが可能な任意の非一時的媒体を備え得る。
本発明の動作を実行するコンピュータプログラムコードは、ジャバ(Java)、スモールトーク(Smalltalk)、C++等のオブジェクト指向プログラミング言語、及び「C」プログラミング言語もしくは同様のプログラミング言語等の従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語のうちの任意の組み合わせにより書かれ得る。プログラムコードは、独立型ソフトウェアパッケージとしてコンピュータシステム上で完全に、独立型ハードウェアユニット上で、コンピュータからある距離を置いて位置する遠隔コンピュータ上で部分的に、または遠隔コンピュータもしくはサーバ上で完全に実行され得る。後者のシナリオにおいて、遠隔コンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意の種類のネットワークを介してコンピュータに接続され得る、または外部コンピュータへ接続され得る(例えばインターネットサービスプロバイダを使用するインターネットを介して)。
本発明の実施形態による方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図及び/またはブロック図を参照して、本発明が後述される。フローチャート図及び/またはブロック図の各ブロック、及びフローチャート図及び/またはブロック図のブロックの組合せは、コンピュータプログラム命令またはコードにより実施可能であることは理解されよう。これらのコンピュータプログラム命令は、マシンを引き起こすために、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供され得る。これにより、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される当該命令は、フローチャート及び/またはブロック図のブロック(複数可)において特定される機能/作動を実施する手段を生み出す。
これらのコンピュータプログラム命令はまた、コンピュータまたは他のプログラム可能データ処理装置に特定の態様で機能するように指示可能な非一時的コンピュータ可読媒体にも記憶され得る。これにより、コンピュータ可読媒体に記憶された当該命令は、フローチャート及び/またはブロック図のブロック(複数可)において特定される機能/作動を実施する命令手段を含む製品を引き起こす。
コンピュータまたは他のプログラム可能データ処理装置上で一連の動作ステップを実行させてコンピュータ実施プロセスを引き起こすように、コンピュータプログラム命令は、コンピュータまたは他のプログラム可能データ処理装置上にもロードされ得る。これにより、コンピュータまたは他のプログラム可能装置上で実行される当該命令は、フローチャート及び/またはブロック図のブロック(複数可)において特定される機能/作動を実施するプロセスを提供する。
図1は、例示的コンピューティングデバイス100を例示するブロック図である。コンピューティングデバイス100は、本明細書で論述されるプロシージャ等、様々なプロシージャを実行するのに使用され得る。コンピューティングデバイス100は、サーバ、クライアント、またはその他のコンピューティングエンティティとして機能可能である。コンピューティングデバイスは、本明細書において論述される様々な監視機能を実行可能であり、本明細書に記述されるアプリケーションプログラム等の1つまたは複数のアプリケーションプログラムを実行可能である。コンピューティングデバイス100は、デスクトップコンピュータ、ノートブックコンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータ等、多様なコンピューティングデバイスのうちのいずれでもあり得る。
コンピューティングデバイス100は、1つまたは複数のプロセッサ102と、1つまたは複数のメモリデバイス104と、1つまたは複数のインターフェイス106と、1つまたは複数の大容量記憶デバイス108と、1つまたは複数の入出力(I/O)デバイス110と、ディスプレイデバイス130とを備え、これら全てはバス112に接続される。プロセッサ(複数可)102は、メモリデバイス(複数可)104及び/または大容量記憶デバイス(複数可)108に記憶された命令を実行する1つまたは複数のプロセッサまたはコントローラを含む。プロセッサ(複数可)102はまた、キャッシュメモリ等の様々な種類のコンピュータ可読媒体も含み得る。
メモリデバイス(複数可)104は、揮発性メモリ(例えばランダムアクセスメモリ(RAM)114)及び/または不揮発性メモリ(例えば読み出し専用メモリ(ROM)116)等、様々なコンピュータ可読媒体を含む。メモリデバイス(複数可)104はまた、フラッシュメモリ等の書き換え可能ROMも含み得る。
大容量記憶デバイス(複数可)108は、磁気テープ、磁気ディスク、光ディスク、ソリッドステートメモリ(例えばフラッシュメモリ)等の様々なコンピュータ可読媒体を含む。図1に示されるように、特定の大容量記憶デバイスは、ハードディスクドライブ124である。様々なコンピュータ可読媒体からの読み出し及び/または様々なコンピュータ可読媒体への書き込みを可能にするために、様々なドライブがまた大容量記憶デバイス(複数可)108に含まれ得る。大容量記憶デバイス(複数可)108は、取り外し可能媒体126及び/または取り外し不可媒体を含む。
I/Oデバイス(複数可)110は、データ及び/または他の情報を、コンピューティングデバイス100に対し入力する、またはコンピューティングデバイス100から取得することを可能にする様々なデバイスを含む。例示的I/Oデバイス(複数可)110は、カーソル制御装置、キーボード、キーパッド、マイク、モニタもしくは他のディスプレイデバイス、スピーカ、プリンタ、ネットワークインターフェイスカード、モデム、レンズ、CCDもしくは他の画像取り込みデバイス等を含む。
ディスプレイデバイス130は、コンピューティングデバイス100の1人または複数のユーザに対し情報を表示可能な任意の種類のデバイスを含む。ディスプレイデバイス130の実施例には、モニタ、ディスプレイ端末、映像投影デバイス等が含まれる。
インターフェイス(複数可)106は、コンピューティングデバイス100が他のシステム、デバイス、またはコンピューティング環境と対話することを可能にする様々なインターフェイスを含む。例示的インターフェイス(複数可)106は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、及びインターネットに対するインターフェイス等、任意の数の異なるネットワークインターフェイス120を含む。他のインターフェイス(複数可)は、ユーザインターフェイス118及び周辺デバイスインターフェイス122を含む。インターフェイス(複数可)106はまた、1つまたは複数のユーザインターフェイス要素118も含む。インターフェイス(複数可)106はまた、プリンタ、ポインティングデバイス(マウス、トラックパッド等)、キーボード等に対するインターフェイス等、1つまたは複数の周辺インターフェイスも含む。
バス112は、プロセッサ(複数可)102、メモリデバイス(複数可)104、インターフェイス(複数可)106、大容量記憶デバイス(複数可)108、及びI/Oデバイス(複数可)110がお互いに通信すること、並びにバス112に接続された他のデバイスまたは構成要素と通信することを可能にする。バス112は、システムバス、PCIバス、IEEE1394バス、USBバス等のいくつかの種類のバス構造のうちの1つまたは複数に相当する。
プログラム及び他の実行可能プログラムコンポーネントは、コンピューティングデバイス100の異なる記憶構成要素に様々な回数存在可能であり、プロセッサ(複数可)102により実行されることは理解されるが、例示のため、このようなプログラム及び他の実行可能プログラムコンポーネントは、本明細書において個別のブロックとして示される。あるいは、本明細書において説明されるシステム及びプロシージャは、ハードウェア、またはハードウェア、ソフトウェア及び/またはファームウェアの組み合わせで実施可能である。例えば、1つまたは複数の特定用途向け集積回路(ASIC)は、本明細書において説明されるシステム及びプロシージャのうちの1つまたは複数を実行するようにプログラム可能である。
図2を参照すると、いくつかの実施形態において、SSD200を含むシステム200は、複数のNANDフラッシュメモリ202を含み得る。1つまたは複数のNANDデバイス202は、SSDコントローラ206と対話するNANDインターフェイス204と接続し得る。SSDコントローラ206は、コンピューティングデバイス100の属性の一部または全てを備えるデバイス等のホストデバイス上で、またはホストデバイス用に実施される、ホストインターフェイス208からの読み出し及び書き込み命令を受信し得る。ホストインターフェイス208は、コンピューティングデバイスの入出力システムのデータバス、メモリコントローラ、または他の構成要素であり得る。
本明細書において開示されるシステム及び方法は、ホストインターフェイス208とNANDインターフェイス204の間に置かれるSSDコントローラ206により実施され得る。別の実施形態において、NANDインターフェイス204は、本明細書において開示される機能性の一部または全てを実施し得る。さらに別の実施形態において、本明細書において開示される機能の全てまたは一部を実施するために、追加構成要素が通常のNANDインターフェイス204とSSDコントローラ206の間に置かれ得る。
本明細書において開示されるシステム及び方法は、NANDフラッシュメモリ、SSDコントローラ、ホストコンピューティングデバイスのRAM、またはある他のメモリデバイスに記憶されたLBAテーブル等、圧縮データをマッピングしアクセスするのに必要なデータも同時に縮小する、NANDフラッシュメモリ202内に記憶されたデータの圧縮を、より有利に規定する。
代表的活用事例が、実施例として本明細書において提供される。
事例1:単純データ圧縮手法
圧縮の特有の利点は、論理システムの全容量を増大させ、読み出し及び書き込み動作の間に消費される全電力を削減することである。特に同数のホストLBAは、非圧縮データと比べて、より少ない空間を占め得る。その結果、同じ物理空間でNAND内に記憶可能なLBA(すなわちデータ)の数が増える。最大圧縮率が50%の場合、同じ容量に対し2倍までのデータ(及びLBA)が割り当て可能となる。前述の実施例において、全LBAが当該圧縮率を有すると仮定すると、16KBの1物理ページ中に、4非圧縮LBAではなく、8圧縮LBAが記憶可能ということになる。圧縮率により、ページに書き込まれるデータの長さが定義される。
異なるLBAデータが異なる圧縮率を有する場合(圧縮アルゴリズムにおいて典型的である)、圧縮されたこれらのLBAデータの最終的な長さは異なる。そして粒度は4KBではなく最小単位に依存し、圧縮されたLBAデータの各サイズは可変的である。いくつかの実施形態において、粒度は、コード化されたコードワードデータの開始位置から正確なオフセット値を指定するために1バイト、あるいは最小単位が1KBであるとすれば1KBであり得る(これは本明細書において記述される他の事例においては該当しない)。これは、LBAポインタサイズに直接関係する。そして16KB+(=2^15バイト)ページ内のLBAデータの正確な開始位置を示すために、位置を示す2ビットの代わりに、15ビットが保持される必要がある、または1KB粒度の場合は、5ビットが保持される必要がある。下記の計算において示されるように、これはLBAマッピングテーブルに必要な物理空間を50%増大させるだけでなく、LBAポインタを32ビット(非整列)より大きくする(LBAテーブルはファームウェア管理にもう少しビットを要する)。32ビットを超える任意のアクセスは多重読み出し及び重複データの管理を要するため、SRAM空間の点、及びLBAテーブル検索の点から、これはシステムにおいて膨大なオーバヘッドである。
各LBAは個別のコードワードに割り当て可能なため、これはLBAテーブル内のLBA毎に開始位置を提供することを要する。圧縮されたLBAの長さは可変的であり得るため、各LBAの開始位置は、1バイトまたは2バイトで詳細化を要する可能性があり得る。すなわち16KB+のページにおいて、オフセット値は0〜2^15の範囲内であり、当該ページ内の位置を指示するアドレスポインタは15ビットであり得る。25%までの圧縮率を仮定すると、ユーザデータの各4KBは、1KBとコードワードビットに圧縮可能である。極端な場合には、全LBAが25%に圧縮され、各16KB+ページは16LBA含むことが可能である。従って、事例1のスキーマの特性値は以下の通りである。
論理デバイス容量:128*4000*256*16KB=2^41=2TB
デバイス内のLBA位置数:2TB/4KB=2^29エントリ
16KB+ページ長にわたる可変オフセット値を考慮したLBAテーブルの1エントリにおける全ビット数=7(ダイ用)+13(ブロック用)+8(ページ用)+15(16KB+ページサイズにわたる可変LBAオフセット値)=43ビット/エントリ
物理LBA位置を記憶する全LBAテーブルサイズ=43ビット*2^29エントリ=2.6875ギガバイト
各エントリをバイト境界、6バイト/エントリに丸めた時の全LBAテーブルサイズ=6バイト*2^29=3ギガバイト
事例1に関して、LBAの圧縮データへのアクセスは、以下の通りに行われ得る。
1)ファームウェア(例えばホストデバイスのファームウェア)は、LBAオフセットに割り当てられたNビット(例えば43)を伴って、LBAテーブルのエントリを読み出す。
2)LBAコードワード全体のNAND読み出しを行う。
3)コードワードをデコードする。
4)ホスト転送のため、またはガベージコレクションのような内部動作のために、LBAユーザデータが取得される。
事例1の単純手法は、非常に大きなLBAテーブルサイズという問題を有する。当問題を処理する1つの手法は、LBAテーブルではなく、NANDページ自体に各LBAのポインタを保持することであろう。当手法は、さらに詳しく下記(事例3、4、5)において論述される。ヘッダーがポインタ情報を記憶するのに使用された場合、物理ページ内のLBA開始位置またはLBAオフセット値を取得するために、ヘッダー情報を読み出すことを要するであろう。当ヘッダー情報はまた、ユーザデータと同じ訂正能力でコード化される必要がある。LBAデータを取得するために、当手法は2つの方法で行うことが可能である。第1の方法は、ポインタ情報を取得するためにまずヘッダーを読み出し、そして次の読み出しにおいてLBAデータを読み出す。この方法では、NANDから2回の読み出しを要する(下記の事例3を参照)。第2の方法は、1回の読み出しでヘッダーとLBAデータの両方を一緒に読み出し、LBAデータの位置を後で特定する。ポインタ情報を見つける前にLBAデータの位置を特定することは不可能なため、この第2の手法は、NANDからの冗長データ読み出しを生じる(下記の事例4を参照)。
事例2:NANDデバイス内のLBAポインタ記憶
別の手法は、ポインタ情報をユーザデータと一緒に、コードワードにコード化する。この場合、ポインタ情報の読み出しは、ユーザデータを含むコードワード全体を読み出し、読み出したコードワードをデコード化し、そしてLBAデータへのポインタ情報を見つけることを伴い得る。当手法において、ポインタ情報とLBAデータを読み出すために、LBAテーブルは、コードワード位置とLBA毎のコードワード数を記憶する必要がある。25%までの圧縮率に関して、16KB+物理ページ内のLBA数は、4LBAから16LBAまで及び得る。LBAテーブル内のコードワード識別に割り当てられるビット数は、コード化されたコードワードのサイズに依存し得る。2KBのコードワードの場合、16KB物理ページ内の全コードワード数は8個であり、LBAテーブル内に3ビットを必要とし得る。コードワードのサイズが大きい程、コードワード毎に含まれるLBA数は多くなる。圧縮されたLBAは複数のコードワードにわたることが可能であるため、例えば4KBデータは、3個の2KBのコードワードにわたることが可能である。従って、コード化されたコードワード内のLBAコンテンツを示すには、3ビットの上にもう2ビット、すなわち5ビットが必要となる。
図3Aを参照すると、従来の手法において、ページは、それぞれが同一の幅を有する複数のLBA‐A〜Dを含む。ポインタがLBAテーブルに記憶される単純圧縮手法では(事例1)、ページは、図3Bに示されるように可変的な長さを有する複数のLBA‐A〜Dを含み得る。LBA‐A〜Dが可変的な長さを有するため、LBA‐A〜Dのうちの複数は、同一のコードワードにコード化され得る。例えばLBA‐Aは小さいため、圧縮されたLBA‐A及びLBA‐Bは、誤り訂正目的で単一コードワードにコード化され得る。例えばLBA‐A及びLBA‐Bは、両LBA‐A及びLBA‐Bを取得するようデコード可能な単一のコードワードCWABにコード化され得る。
図3Cを参照すると、事例2は、各LBA‐A〜Dを対応ヘッダーHA〜HDと共に記憶し得る。各LBA‐A〜D及びその対応ヘッダーHA〜HDは、単一コードワードCWA〜CWDにコード化され得る。
事例2の記憶スキームに関して、特性値は以下の通りである。
論理デバイス容量:128*4000*256*16KB=2^41=2TB
デバイス内のLBA位置数:2TB/4KB=2^29エントリ
16KB+ページ長にわたる可変オフセット値を考慮したLBAテーブルの1エントリにおける全ビット数=7(ダイ用)+13(ブロック用)+8(ページ用)+5(2KBコードワードオフセットと2KBコードワード内の4KBまでのデータオフセット)=33ビット/エントリ
物理LBA位置を記憶する全LBAテーブルサイズ=33ビット*2^29エントリ=2.0625ギガバイト
各エントリをバイトに丸める、毎エントリ5バイト=5バイト*2^29=2.5ギガバイト
事例2に関して、LBAの圧縮データへのアクセスは、以下の通りに行われ得る。
1)ファームウェアは、コードワードに割り当てられるNビットを伴って、LBAテーブルエントリを読み出す。Nはコードワード内のビット数である。
2)コードワード全体のNAND読み出しを行う(約60μsのNANDフラッシュ読み出し時間と約10μsの転送時間)。
3)コードワードをデコードする。
4)LBA開始位置を示すポインタ情報を取得する。
5)ホスト転送のため、またはガベージコレクションのような内部動作のために、ポインタ情報により示される位置のデータをLBAユーザデータとして使用する。
事例2の欠点は、必要以上のデータを読み出すことにある。すなわち、コードワードが8LBAを含む場合、1LBAを読み出すには、残りの7LBAも同様に読み出すことを伴う。これは転送電力とNAND転送時間を消費する。また8LBA及びヘッダー情報に対しデコードが行われる必要があるため、追加のデコーダ電力を消費する(7倍の電力が必要)。また1LBAの代わりに8LBAをデコードすることは追加時間を要するため、パフォーマンスに影響を与える。当手法(事例2)で、LBAテーブルサイズは25%増大し、LBAの読み出しは、コードワード全体の追加読み出し、及びLBAオフセットを取得するためのヘッダー情報の後処理計算を生じる。
事例3:ポインタの個別コードワードでの分離記憶
別の実施例において、各LBAは独立したコードワードにコード化され、ポインタ情報はNAND内に個別コードワードとして保存される。例えば、図3Dに示されるように、LBA‐A〜Dに対応するヘッダーHA〜HDは、LBA‐A〜D自体ではなく、個別コードワードまたは複数のコードワードに記憶される。例えば、HA及びHBは、コードワードCWH1にコード化され得る。一方ヘッダーHC及びHDはコードワードCWH2にコード化される。LBA‐A〜Dは、1つまたは複数のコードワードCWA〜CWDに別々にコード化される。本明細書に開示される別の実施形態に関して、複数のLBA‐A〜Dは、単一のコードワードで表され得る。例えば、LBA‐A及びLBA‐Bは、同一のコードワードCWAにより表され得る。あるいは、各LBA‐A〜Dは、各自のコードワードCWA〜CWDにより表され得る。
事例3に関して、特定のLBAからのデータの読み出しは、以下の通りに進められ得る。
1)ファームウェアは特定LBAデータに対するポインタを含まないLBAテーブルエントリを読み出す。
2)NAND読み出し命令を発行し、ヘッダーコードワードを読み出す(約60μsのメモリ読み出し時間とデータ転送時間)。
2)ヘッダーコードワードをデコードする。
3)LBA開始位置を示すポインタ情報を取得するように、デコードされたヘッダーコードワードに対し後処理を行う。
4)さらに約60μsのNAND読み出し時間とデータ転送時間を生じさせるページ読み出し命令を再発行する。
5)LBAデータをデコードする。
6)ホスト転送のため、またはガベージコレクションのような内部動作のために、当該位置のデータをLBAユーザデータとして使用する。
事例4:後続データ抽出を伴うヘッダー及びLBA両方の読み出し
別の手法において、図3Dで示される記憶データは、以下の通りにアクセスされ得る。
1)NANDページ読み出し命令を発行し、ページコンテンツ全体を読み出す(約60μsのメモリ読み出し時間とデータ転送時間)。
2)ヘッダーポインタコードワードを含むページコンテンツ全体をデコードし、LBAの開始位置を示すポインタ情報を取得するようにデコードされたヘッダーコードワードに対し後処理を行う。
3)ポインタ情報を使用して、デコードされたページコンテンツからLBAデータを取得する。
4)ホスト転送のため、またはガベージコレクションのような内部動作のために、当該位置のデータをLBAユーザデータとして使用する。
事例5:単一ページ読み出しのためのヘッダー及びLBAデータの分離転送を実施するハードウェアデコーダ
以下に記述される事例5の手法は、前述の手法の欠陥を改善する。事例5は特に、以下のことを行う点で有利であり得る。
1)LBAテーブルからLBAオフセットビットを取り除く。LBAテーブルは、物理ページレベルまでのLBAの位置を含むだけで良く、ページ内のオフセット値を含む必要はない。
2)要求されるLBAとヘッダー部に対して読み出し及びデコードを行う必要のあるデータを削減して、転送時間及び転送電力を節約する。
3)特定のLBA及びヘッダー部に対してデコードを行うことのみを要求することで、デコーダエンジン電力及びDRAMアクセス電力を含むデコード電力を節約する。
4)ハードウェアデコーダにより行うため、ファームウェアにより後処理を行いヘッダーとデータを分離させる必要がなく、高パフォーマンスを達成する。
5)ガベージコレクションまたはシステムデータリサイクルプロセス中に、LBAの再コード化を必要としない。
図4を参照すると、本明細書において開示されるシステム及び方法により圧縮されたデータへアクセスを提供するために、例示されたシステムは、SSDコントローラ206またはNANDインターフェイス204に組み込まれ得る。ハードウェアデコーダ404は、読み出しエンジン402とホストインターフェイス410の間に置かれ得る。読み出しエンジン402は、ハードウェアデコーダ404からのページ読み出し命令に応じるように動作可能であり、それに応じてNANDフラッシュメモリ202から要求されるページを取得し、内部バッファに記憶し得る。読み出しエンジン402はさらに、内部バッファからの転送命令により指示されるデータを読み出し、ハードウェアデコーダへ当該データを提供することにより、ハードウェアデコーダからの転送命令に応じるように動作可能であり得る。
ハードウェアデコーダ404は、ヘッダーデコーダモジュール406と、LBAオフセット値計算モジュール408と、LBA/ヘッダー終了位置検出モジュール410とを備え得る。ヘッダーデコーダモジュール406は、ヘッダーコードワードをデコードするように動作可能である。オフセット値計算モジュール408は、各LBAコードワードのオフセット値を計算し、ハードウェアデコーダ404がホストインターフェイス412から受信した読み出し命令において要求される特定のLBAのオフセット値を特定するように構成され得る。LBA/ヘッダー終了位置検出モジュール410は、ヘッダーから特定されるオフセット値を使用して、要求されるLBAに関してページ内の実際のオフセット値を特定する。これは、ベースオフセット値を取得するように、ヘッダー部の終了位置を特定することを含み得る。そして要求されるLBAに関するページ内のオフセット値を取得するために、ヘッダーから特定されたオフセット値は当ベースオフセット値に追加され得る。
ハードウェアデコーダ404は、要求されるLBAに関して特定されたオフセット値のLBAに対する適切なLBA読み出し命令を、自動で発行するように構成され得る。当作動全体がハードウェアにより実行される実施形態において、ホストデバイスのファームウェアがデータに対し後処理を行う必要はない。またハードウェアデコーダ404はヘッダーをデコードしてオフセットを計算するため、ヘッダーコードワード及びLBAデータコードワードの両方を読み出すのに、同じページ読み出し動作が使用され、従って第2のページ読み出し動作の必要がなくなる。ページ内のヘッダー及びデータの形式、並びに動作の順序に関しては、さらに詳しく後述される。
図5を参照すると、ホストデバイスからの読み出し命令に対して例示される方法500を実行するのに、システム400が使用され得る。当該読み出し命令は、NANDフラッシュ記憶デバイス内のページのLBAを指示する。読み出しエンジン402は、LBA要求内のヘッダーデータの転送を受信し、それに応じてNANDフラッシュからページデータ502を受信する。前記のように、読み出しエンジン402は、NANDフラッシュデバイスに対しページデータ502を要求して、内部バッファにページデータ502を記憶する、ページ読み出し要求を実行し得る。読み出しエンジン402は、ヘッダーデータ506をヘッダーデコーダモジュール406に提供し得る。ヘッダーデータ506は、ハードウェアデコーダ404からのデータ転送命令に応じて提供され得る。ヘッダーデコーダモジュール406は、ヘッダーデータをデコードし、デコード済みヘッダー510を取得する。デコード済みヘッダー510は、LBAオフセット値計算モジュール408により使用され、方法500が実行される読み出し命令において指示される特定のLBAに関するオフセット値514が特定される。オフセット値514は、LBA/ヘッダー終了位置検出モジュール410により使用され、要求されるLBAが始まるページ内のオフセット値が特定される。例えば、オフセット値514は、ページ内に記憶されるデータのヘッダー部の終了位置であると判定されるベースアドレスに対し追加され得る。オフセット値514は、LBA/ヘッダー終了位置検出モジュール410により使用され、要求されるLBAのページ内のオフセット値が特定され得る。当オフセット値を指示する要求518は、読み出しエンジン402に提出され、そして読み出しエンジン402は、LBAデータ520、すなわち要求されるLBAに対するLBAコードワードを出力する。
図4のシステム及び図5の方法は、各LBAを図3Dに示される独立コードワードにコード化するデータを読み出すのに使用され得る。つまり各コードワードサイズは、圧縮データの結果により変化し得る。1つの実施例において、25%圧縮に関して、非圧縮サイズ4KBを有する各コードワードは、1KB(元のデータの25%)から4KB(元のデータの100%)まで及び得る。32KBページ等の物理ページ内の全LBAのヘッダーは、図3Dに関して前述されるように、物理ページ内においてグループ化され、ヘッダーコードワードにコード化される。各ヘッダーは、当該ヘッダーが記憶されるページ内に記憶されるLBAのうちの1つに対応する。各ヘッダーは、当該ヘッダーが示すLBAの識別子と、当該ヘッダーが示すLBAの長さと、ファームウェアデータを含み得る。
ホストインターフェイスからの読み出し要求に応じて、読み出しエンジンにその内部バッファにページを読み出すように命令した後、ハードウェアエンジンは、まずヘッダーコードワードを読み出し、そしてこれらのヘッダーコードワードをデコードし得る。当デコード処理は、NANDフラッシュからの残りのデータの転送と同時に実行可能である。これらのコードワードのデコード及びヘッダーの取得後、オフセット値モジュール408は、ヘッダー内の長さを累算して、コード化されたLBAコードワードのオフセット値(すなわち開始位置のポインタ)を生成する。例えば、LBA‐Nの開始位置アドレス/オフセットは、ヘッダーコードワードサイズ*ヘッダーコードワード数+長さ(LBA‐M)であり得る。ヘッダーは圧縮されたLBAデータストリーム毎の長さを含むため、ハードウェアデコーダ404は、ファームウェア(例えばホストインターフェイス)から要求されるLBAを、デコード済みヘッダーコンテンツに結び付けて、LBAオフセット値を引き出し得る。
1度LBAオフセット値が取得されると、ハードウェアデコーダ404は、LBAコードワードを読み出すようにデータ転送命令を発行し得る。読み出されたLBAコードワードは、ハードウェアデコーダ等のデコーダに送信される。ハードウェアデコーダは物理ページ内のLBAコードワードの識別及び読み出しを行うため、ページ読み出し命令を再発行する必要がなく、従ってヘッダー及びLBA両方の読み出しを、単一ページ読み出しメモリアクセスにより達成する(約55μs)。
LBAコードワードの読み出し及びデコードと比較すると、ヘッダーコードワードは十分に小さく、短い時間で読み出し及びデコードが行われ得る。その結果、LBAテーブル内のオフセット値に基づいた非圧縮LBAコードワードの単純読み出しと比較すると、パフォーマンスインパクトは非常に小さい。大抵の場合、圧縮により処理されるデータ量は削減されるため、非圧縮データと比較すると、実際に良いパフォーマンスを発揮する。例えば図6は、事例5の方法による読み出し動作のタイムラインを例示する。示されるように、ページ読み出しの約60μsの第1遅延602の後に、ヘッダーデータをハードウェアデコーダ404に転送する約1.5μsの遅延604が続く。ヘッダーのデコードは、約2μsの遅延606をもたらし得る。遅延606の間、ダイへのページ読み出しは、ハードウェアデコーダ404または読み出しエンジン202によりブロックされ得る。特に遅延606は、NANDアイドルサイクルにより占められ得る。そして要求されるLBAコードワードが転送され、LBAコードワードの長さによる遅延608を生じ得る(1KBで約2.5μsから4KBで約10μs)。LBAコードワードはデコードされ、約2μsの遅延610を生じ得る。
図7は、読み出し命令を処理する方法700を例示する。方法600は、読み出しエンジン402を組み合わせたハードウェアデコーダ404により実行され得る。方法700は、NANDフラッシュデバイスから特定のLBAを読み出すよう、ホストインターフェイスからの命令の受信、またはガベージコレクション等のある他の内部プロセスの後に起こり得る。当該命令は、LBAが見つかったページを指示し、かつページのどのLBAを読み出すかを特定する。
方法700は、ホストインターフェイスからの読み出し命令において指示されるページに関して、NANDフラッシュデバイスに対しページ読み出し命令を発行すること702を含み得る。これに応じて、読み出しエンジン402は、ページのページデータを、それが記憶されるNANDフラッシュデバイス(例えば適切なNANDダイ)から読み出し、ページデータをバッファ内に記憶し得る。
方法700は、1つまたは複数のヘッダーコードワードをページデータから読み出すこと704と、ヘッダーを取得するためにヘッダーコードワードをデコードすること706とを含み得る。そしてヘッダーは、LBAの一部または全てのオフセット情報を取得する708のために、分析され得る。例えば、読み出し命令においてLBA‐Nが指示される場合、LBA‐Nのオフセット値を取得するために、LBA‐0〜N−1までの長さが合計され得る。あるいは、LBA‐Nのオフセット値を取得するために、LBA‐N−1のオフセット値を計算し、それからLBA‐N−1の長さに合計する再帰法が実行され得る。LBA‐N−1のオフセット値は、0であるLBA‐0のオフセット値、またはヘッダー部の最後のビットまで、LBA‐N−1のオフセット値とその長さ等に基づいて、同じ方法で取得され得る。
1度オフセットが取得されると、方法700は、そのオフセットアドレスにおけるLBAを読み出すこと710を含み得る。例えば、LBA‐Nが要求される場合、LBA‐Nのコードワードの長さLを特定するために、対応ヘッダーが査定され得る。ステップ708において特定されたLBA‐Nのオフセット値の後に、Lビットが転送され得る。
そしてステップ708において転送されたLBAコードワードはデコードされ712、LBAのユーザデータが、ホストインターフェイスまたは他の要求構成要素またはプロセスへ返され得る714。デコード712はLBAを解凍することを含む、あるいは、読み出し命令を発行したホストインターフェイスもしくは他の要求エンティティに対する圧縮LBAの提供後、またはある他の介在エンティティもしくはプロセスにより、LBAは解凍され得る。
事例5の手法の特性値は以下の通りである。
論理デバイス容量:128*4000*256*16KB=2^41=2TB
デバイス内のLBA位置数:2TB/4KB=2^29エントリ
16KB+ページ長にわたる可変オフセット値を考慮したLBAテーブルの1エントリにおける全ビット数=7(ダイ用)+13(ブロック用)+8(ページ用)+0(ヘッダーはLBAコードワードオフセット情報を含む)=28ビット/エントリ
物理LBA位置を記憶する全LBAテーブルサイズ=28ビット*2^29エントリ=1.75ギガバイト
各エントリをバイトに丸める、毎エントリ4バイト=4バイト*2^29=2ギガバイト
他の手法(事例1〜4)と比べて明らかなように、事例5の手法は、非圧縮データと比較してみても、エントリ毎により多くの空きビットを有する。下記のテーブル1は、他の3つの事例と比較して、事例5のビット要求は削減されていることを示す。これは、ハードウェアメモリ資源を節約することを指示することにつながり、そしてLBAテーブルエントリを管理する複雑さを軽減する。特に、ページに書き込まれる各LBAに関して、各LBAの長さまたは各LBAへのページ内のオフセット値を記憶しない、LBAテーブル内の対応エントリが作成または保持され得る。
図8を参照すると、図3に示される圧縮LBAの記憶スキームは、単純で効率的なガベージコレクションまたはLBAのデフラグを可能にし得る。例えば、ハードウェアデコーダ404、読み出しエンジン402、または他の構成要素が、例示された方法800を実行し得る。例えば、方法800は、ページからの有効LBAのコードワードを読み出すこと802と、無効LBAの読み出しを省略することとを含み得る。無効LBAは、削除され、記憶されるデータをもはや表さないLBAであり得る。そして方法800は、有効LBAのみを含み、無効LBAを省くページに書き換えること804を含み得る。図3Dの記憶スキーマの利点は、有効LBAのコードワードは、ガベージコレクションプロセス中にそれらをデコード及び再コード化、またはそれらを解凍及び圧縮することなく、ガベージコレクションプロセス中に読み出し及び書き換え可能である。
方法800はさらに、方法800の対象であるページのヘッダー部を更新すること806を含み得る。特に、有効LBA毎に対応するヘッダーは、1つまたは複数のヘッダーコードワードにコード化され、さらにページに書き込まれ得る。ヘッダーは、LBA識別子及び長さ等の情報を含む、前述の方法において言及された情報を含み得る。
本明細書において開示されるシステム及び方法は、NANDフラッシュデバイスへの圧縮データの記憶を可能にするスマートヘッダー及び検索に関するハードウェア技術を提供する。ヘッダーをデコードし、NANDページ内のLBA位置を取得し、LBAコードワードの自動読み出しを実行するハードウェア自動化技術は、システムにおける圧縮の現実的な使用に関して特有の利点を提供する。これらの手法の組み合わせは、システム並びにホスト動作に関しても、節電及びパフォーマンスの向上へと導く。
本発明は、その精神または主要な特徴から逸脱することなく、他の特定の形態に具現化することが可能である。記載される実施形態は、あらゆる点において、限定ではなく、単なる例示としてみなされるべきである。特に、NANDフラッシュSSDに関して方法は説明されるが、他のSSDデバイスまたはハードディスクドライブ等の不揮発記憶デバイスもまた、本明細書において開示される方法の恩恵を受け得る。ゆえに発明の範囲は、前述の説明ではなく、添付の特許請求により示される。特許請求の均等物の意味及び範囲に入るすべての変更は、特許請求の範囲内に含まれる。

Claims (20)

  1. 圧縮に関する方法であって、
    複数の圧縮ブロックを生成するために、複数のデータのブロックを圧縮することと、
    複数のヘッダーを生成することであって、各ヘッダーは前記複数の圧縮ブロックのうちの圧縮ブロックの圧縮された長さを含む、前記複数のヘッダーを生成することと、
    前記複数のヘッダーを不揮発性メモリデバイスの論理部に書き込むことと、
    前記複数の圧縮ブロックを前記論理部に書き込むことと
    を含む、前記方法。
  2. 前記複数のデータのブロックの論理識別子に関するテーブルを前記圧縮ブロックの物理位置で更新することであって、前記テーブルは前記不揮発性メモリデバイス内の前記論理部の物理位置のみを指示し、前記圧縮ブロックの長さまたは前記論理部の前記物理位置からのオフセット値を記憶することはない、前記テーブルを更新することをさらに含む、請求項1に記載の方法。
  3. 前記複数のヘッダーを前記不揮発性メモリデバイスの論理部に書き込むことは、
    前記複数のヘッダーのうちの多数のヘッダーのヘッダーコードワード表現を生成することであって、前記ヘッダーコードワードは1つまたは複数の誤り訂正ビットを含む、前記ヘッダーコードワード表現を生成すること
    を含む、請求項1に記載の方法。
  4. 前記論理部に書き込まれた前記複数の圧縮ブロックのうちの全ての圧縮ブロックのヘッダーは、前記論理部の単一連続部の中に存在する、請求項1に記載の方法。
  5. 前記単一連続部は、前記複数の圧縮ブロックよりも前記論理部の開始アドレス近く配置される、請求項1に記載の方法。
  6. 前記複数の圧縮ブロックを前記不揮発性メモリデバイスに書き込むことは、前記複数の圧縮ブロックのうちの多数の圧縮ブロックを表す少なくとも1つのコードワードを生成することであって、前記少なくとも1つのコードワードは1つまたは複数の誤り訂正ビットを含む、前記少なくとも1つのコードワードを生成することを含む、請求項1に記載の方法。
  7. 前記複数のヘッダーはそれぞれ、前記複数の圧縮ブロックのうちの前記圧縮ブロックのうちの1つの識別子を含む、請求項1に記載の方法。
  8. 前記複数のヘッダー及び複数の圧縮ブロックを前記論理部に書き込むことは、フラッシュメモリデバイスである前記不揮発性メモリデバイスに対してフラッシュメモリプログラム動作を行うことを含む、請求項1に記載の方法。
  9. 圧縮データを読み出す方法であって、
    ホストデバイスからの読み出し要求をメモリコントローラデバイスにより受信することであって、前記読み出し要求は記憶デバイスの論理部と前記論理部内に記憶されるデータの第1ブロックとを指示する、前記読み出し要求を受信することと、
    前記メモリコントローラデバイスにより前記論理部に記憶されるヘッダー部を取得することであって、前記ヘッダー部は前記論理部に記憶される複数の圧縮データブロックの識別子及び長さをそれぞれが含む複数のヘッダーを含み、前記複数の圧縮データブロックは前記データの第1ブロックを表す第1圧縮データブロックを含む、前記ヘッダー部を取得することと、
    前記メモリコントローラデバイスにより、前記第1圧縮データブロックに関する前記論理部内のオフセット値を、前記ヘッダー部から特定することと、
    前記メモリコントローラデバイスにより、前記記憶デバイス内の前記オフセット位置から前記第1圧縮データブロックを取得することと、
    前記データの第1ブロックを取得するために、前記第1圧縮データブロックを解凍することと、
    前記データの第1ブロックを前記ホストデバイスへ返すことと
    を含む、前記方法。
  10. 前記オフセット値を特定することは、前記複数のヘッダーのうち、前記第1圧縮データブロックに対応するヘッダーより前の前記ヘッダーに含まれる前記長さを合計することを含む、請求項9に記載の方法。
  11. 前記オフセット値を特定することはさらに、
    前記複数のヘッダーの終了位置を特定することと、
    前記複数のヘッダーのうち、前記第1圧縮データブロックに対応する前記ヘッダーより前の前記ヘッダーに含まれる前記長さの合計を足すことと
    を含む、請求項9に記載の方法。
  12. 前記メモリコントローラデバイスにより、前記ヘッダー部を取得することは、
    前記メモリコントローラデバイスにより、前記記憶デバイスに対しページ読み出し命令を発行することであって、前記記憶媒体はフラッシュNANDメモリデバイスである、前記ページ読み出し命令を発行することと、
    前記記憶デバイスにより、前記論理部をバッファに読み出すことと、
    前記メモリコントローラデバイスにより、前記ヘッダー部の第1転送要求を前記記憶デバイスに対し発行することと、
    前記メモリコントローラデバイスにより、前記ヘッダー部を受信することと
    を含む、請求項9に記載の方法。
  13. 前記メモリコントローラデバイスにより、前記第1圧縮データブロックを取得することは、
    前記メモリコントローラデバイスにより、前記第1圧縮データブロックの第2転送要求を発行することであって、前記第2転送要求は、前記記憶デバイスによるいずれの介在ページ読み出しの実行なしに、前記記憶デバイスに対する前記ページ読み出し命令の発行に続いて送信される、前記第1圧縮データブロックの第2転送要求を発行すること
    を含む、請求項12に記載の方法。
  14. 1つまたは複数のプロセッサを含むホストコンピューティングデバイスと、
    不揮発性記憶媒体を含む記憶デバイスと、
    前記ホストコンピューティングデバイス及び前記記憶デバイスと操作可能に接続されたメモリコントローラデバイスと
    を含む装置であって、前記メモリコントローラデバイスは、
    前記ホストコンピューティングデバイスから第1データブロックを指示する読み出し要求を受信し、
    前記記憶デバイスに対し、前記記憶媒体の論理部を内部バッファに読み出すように指示し、
    前記記憶デバイスに対し、前記論理部のヘッダー部を前記メモリコントローラデバイスに転送するように指示し、前記ヘッダー部は前記論理部に記憶される複数のデータブロックのうちのデータブロックの識別子及び長さをそれぞれが含む複数のヘッダーを含み、
    前記ヘッダー部を査定して、前記第1データブロックより前の前記複数のデータブロックの部分の長さの合計を特定し、
    前記記憶デバイスに対し、前記合計を使用して前記第1データブロックを転送するように指示し、
    前記第1データブロックを前記ホストコンピューティングデバイスに返す
    ように構成される、前記装置。
  15. 前記メモリコントローラデバイスは、
    前記ヘッダー部をデコードして前記複数のヘッダーを抽出し、
    前記ヘッダー部の終了位置を特定し、
    前記ヘッダー部の終了位置に前記長さの合計を足して、前記第1データブロックに対応するオフセット値を特定する
    ことにより、前記ヘッダー部を査定するように構成される、請求項14に記載の装置。
  16. 前記メモリコントローラデバイスは、前記記憶デバイスに対し前記記憶媒体の前記論理部を前記内部バッファに読み出すように指示した後で、前記記憶デバイスに対し前記合計を使用して前記第1データブロックを転送するように指示する前に、前記内部バッファへの前記論理部の後続読み出しの実行を阻止するように構成される、請求項14に記載の装置。
  17. 前記メモリコントローラは、前記ホストコンピューティングデバイスに前記第1データブロックを返す前に、前記第1データブロックをデコードするように構成される、請求項14に記載の装置。
  18. 前記メモリコントローラデバイスは、前記ホストコンピューティングデバイスに前記第1データブロックを返す前に、前記第1データブロックを解凍するように構成される、請求項17に記載の装置。
  19. 前記メモリコントローラデバイスは、
    前記複数のデータブロックのうちの有効データブロックをデコードまたは解凍することなく、かつ前記複数のデータブロックのうちの無効データブロックを読み出すことなく、前記記憶デバイスから前記複数のデータブロックのうちの前記有効データブロックを読み出し、
    前記有効データブロックの更新ヘッダー部を生成し、
    前記ヘッダー部及び有効データブロックを、前記論理部に書き込む
    ように構成される、請求項17に記載の装置。
  20. 前記記憶デバイスはNANDフラッシュデバイスである、請求項14に記載の装置。
JP2016550793A 2014-02-05 2015-02-03 フラッシュメモリ圧縮 Active JP6316974B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/173,586 US9927998B2 (en) 2014-02-05 2014-02-05 Flash memory compression
US14/173,586 2014-02-05
PCT/US2015/014320 WO2015119974A1 (en) 2014-02-05 2015-02-03 Flash memory compression

Publications (2)

Publication Number Publication Date
JP2017511521A true JP2017511521A (ja) 2017-04-20
JP6316974B2 JP6316974B2 (ja) 2018-04-25

Family

ID=53754855

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016550793A Active JP6316974B2 (ja) 2014-02-05 2015-02-03 フラッシュメモリ圧縮

Country Status (7)

Country Link
US (1) US9927998B2 (ja)
EP (1) EP3103009B1 (ja)
JP (1) JP6316974B2 (ja)
KR (1) KR101824612B1 (ja)
CN (1) CN106537327B (ja)
TW (1) TWI648622B (ja)
WO (1) WO2015119974A1 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9965191B2 (en) * 2014-10-28 2018-05-08 Samsung Electronics Co., Ltd. Electronic system with message mechanism and method of operation thereof
US9710199B2 (en) 2014-11-07 2017-07-18 International Business Machines Corporation Non-volatile memory data storage with low read amplification
US10162700B2 (en) * 2014-12-23 2018-12-25 International Business Machines Corporation Workload-adaptive data packing algorithm
US10613756B2 (en) * 2015-09-03 2020-04-07 Qualcomm Incorporated Hardware-accelerated storage compression
US20170068458A1 (en) * 2015-09-03 2017-03-09 Qualcomm Incorporated Hardware-accelerated storage compression
US9712190B2 (en) 2015-09-24 2017-07-18 International Business Machines Corporation Data packing for compression-enabled storage systems
US9870285B2 (en) 2015-11-18 2018-01-16 International Business Machines Corporation Selectively de-straddling data pages in non-volatile memory
KR20180040769A (ko) 2016-10-12 2018-04-23 삼성전자주식회사 저장 장치 및 그것의 동작 방법
US10027984B2 (en) 2016-11-30 2018-07-17 Hewlett Packard Enterprise Development Lp Methods and systems for efficiently reading a data block from a data seglet with compressed data blocks
US10282127B2 (en) 2017-04-20 2019-05-07 Western Digital Technologies, Inc. Managing data in a storage system
US10705970B1 (en) 2017-05-12 2020-07-07 Seagate Technology Llc Enhanced address compaction
US10140215B1 (en) 2017-05-26 2018-11-27 Seagate Technology Llc Low overhead mapping for highly sequential data
US10809928B2 (en) 2017-06-02 2020-10-20 Western Digital Technologies, Inc. Efficient data deduplication leveraging sequential chunks or auxiliary databases
US10496335B2 (en) * 2017-06-30 2019-12-03 Intel Corporation Method and apparatus for performing multi-object transformations on a storage device
US10503608B2 (en) 2017-07-24 2019-12-10 Western Digital Technologies, Inc. Efficient management of reference blocks used in data deduplication
US20190065088A1 (en) * 2017-08-30 2019-02-28 Micron Technology, Inc. Random access memory power savings
JP2019053415A (ja) * 2017-09-13 2019-04-04 東芝メモリ株式会社 メモリシステム、その制御方法及びプログラム
JP7074453B2 (ja) * 2017-10-30 2022-05-24 キオクシア株式会社 メモリシステムおよび制御方法
WO2019205036A1 (zh) * 2018-04-25 2019-10-31 深圳市大疆创新科技有限公司 数据处理方法和装置
US10635599B2 (en) 2018-07-26 2020-04-28 Sandisk Technologies Llc Memory controller assisted address mapping
GB2579399B (en) * 2018-11-30 2020-12-16 Imagination Tech Ltd Data compression and storage
US11221776B2 (en) * 2019-12-30 2022-01-11 Micron Technology, Inc. Metadata indication for a memory device
GB2603459B (en) * 2021-01-22 2023-05-10 Advanced Risc Mach Ltd Data processing systems
US11861195B2 (en) * 2021-03-15 2024-01-02 Western Digital Technologies, Inc. TLC data programming with hybrid parity
US11934706B2 (en) 2021-12-22 2024-03-19 Western Digital Technologies, Inc. Smart relocation scan optimization
KR102557557B1 (ko) 2023-04-19 2023-07-24 메티스엑스 주식회사 전자 장치 및 이를 포함하는 컴퓨팅 시스템

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5757295A (en) * 1995-12-28 1998-05-26 Philips Electronics North America Corporation Variable length decoder with enhanced throughput due to parallel processing of contiguous code words of identical type
JP2000105839A (ja) * 1998-07-31 2000-04-11 Hewlett Packard Co <Hp> 圧縮テクスチャ・デ―タ構造
US20100021142A1 (en) * 2006-12-11 2010-01-28 Panasonic Corporation Moving picture decoding device, semiconductor device, video device, and moving picture decoding method
US20110099321A1 (en) * 2009-10-23 2011-04-28 Seagate Technology Llc Enabling spanning for a storage device
US20120069911A1 (en) * 2010-09-20 2012-03-22 Onecodec, Ltd. Systems and methods for encoding, transmitting and decoding
US20130019138A1 (en) * 2011-07-11 2013-01-17 Phison Electronics Corp. Data processing method, memory controller, and memory storage device
JP2013161447A (ja) * 2012-02-08 2013-08-19 Toshiba Corp コントローラ、データ記憶装置及びプログラム
US20130326117A1 (en) * 2012-06-04 2013-12-05 Fusion-Io, Inc. Apparatus, system, and method for grouping data stored on an array of solid-state storage elements
JP2013545202A (ja) * 2010-12-01 2013-12-19 エルエスアイ コーポレーション 独立したシリコン素子の動的な上位レベルの冗長モード管理
US20130342375A1 (en) * 2012-06-22 2013-12-26 Micron Technology, Inc. Data compression and management
US20140208003A1 (en) * 2013-01-22 2014-07-24 Lsi Corporation Variable-size flash translation layer
JP2014142931A (ja) * 2013-01-22 2014-08-07 Lsi Corp 記憶アドレス空間と不揮発性メモリのアドレス、範囲、および長さとの間のマッピング/変換
JP2015036981A (ja) * 2013-08-16 2015-02-23 エルエスアイ コーポレーション 順次読み出し最適化可変サイズフラッシュトランスレーションレイヤ

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7113432B2 (en) * 2000-09-14 2006-09-26 Sandisk Corporation Compressed event counting technique and application to a flash memory system
US7139864B2 (en) * 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US8533564B2 (en) * 2009-12-23 2013-09-10 Sandisk Technologies Inc. System and method of error correction of control data at a memory device
US8694703B2 (en) * 2010-06-09 2014-04-08 Brocade Communications Systems, Inc. Hardware-accelerated lossless data compression
US8626989B2 (en) * 2011-02-02 2014-01-07 Micron Technology, Inc. Control arrangements and methods for accessing block oriented nonvolatile memory
JP2014150593A (ja) 2011-06-06 2014-08-21 Panasonic Corp 車両用電源システム
US20130343131A1 (en) * 2012-06-26 2013-12-26 Lsi Corporation Fast tracking for flash channels
US8943266B2 (en) * 2013-03-13 2015-01-27 Hitachi, Ltd. Storage system and method of control for storage system
US9514057B2 (en) * 2013-12-04 2016-12-06 Sandisk Technologies Llc Storage module and method for managing logical-to-physical address mapping

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5757295A (en) * 1995-12-28 1998-05-26 Philips Electronics North America Corporation Variable length decoder with enhanced throughput due to parallel processing of contiguous code words of identical type
JPH11501488A (ja) * 1995-12-28 1999-02-02 フィリップス エレクトロニクス ネムローゼ フェンノートシャップ 可変長デコーダ
JP2000105839A (ja) * 1998-07-31 2000-04-11 Hewlett Packard Co <Hp> 圧縮テクスチャ・デ―タ構造
US20100021142A1 (en) * 2006-12-11 2010-01-28 Panasonic Corporation Moving picture decoding device, semiconductor device, video device, and moving picture decoding method
US20110099321A1 (en) * 2009-10-23 2011-04-28 Seagate Technology Llc Enabling spanning for a storage device
US20120069911A1 (en) * 2010-09-20 2012-03-22 Onecodec, Ltd. Systems and methods for encoding, transmitting and decoding
JP2013545202A (ja) * 2010-12-01 2013-12-19 エルエスアイ コーポレーション 独立したシリコン素子の動的な上位レベルの冗長モード管理
US20130019138A1 (en) * 2011-07-11 2013-01-17 Phison Electronics Corp. Data processing method, memory controller, and memory storage device
JP2013161447A (ja) * 2012-02-08 2013-08-19 Toshiba Corp コントローラ、データ記憶装置及びプログラム
US20130326117A1 (en) * 2012-06-04 2013-12-05 Fusion-Io, Inc. Apparatus, system, and method for grouping data stored on an array of solid-state storage elements
US20130342375A1 (en) * 2012-06-22 2013-12-26 Micron Technology, Inc. Data compression and management
JP2015525423A (ja) * 2012-06-22 2015-09-03 マイクロン テクノロジー, インク. データ圧縮および管理
US20140208003A1 (en) * 2013-01-22 2014-07-24 Lsi Corporation Variable-size flash translation layer
JP2014142931A (ja) * 2013-01-22 2014-08-07 Lsi Corp 記憶アドレス空間と不揮発性メモリのアドレス、範囲、および長さとの間のマッピング/変換
JP2015036981A (ja) * 2013-08-16 2015-02-23 エルエスアイ コーポレーション 順次読み出し最適化可変サイズフラッシュトランスレーションレイヤ

Also Published As

Publication number Publication date
KR20170002369A (ko) 2017-01-06
TWI648622B (zh) 2019-01-21
WO2015119974A1 (en) 2015-08-13
CN106537327A (zh) 2017-03-22
KR101824612B1 (ko) 2018-02-07
CN106537327B (zh) 2019-06-04
EP3103009A4 (en) 2017-10-04
US9927998B2 (en) 2018-03-27
EP3103009B1 (en) 2019-09-11
EP3103009A1 (en) 2016-12-14
TW201539187A (zh) 2015-10-16
JP6316974B2 (ja) 2018-04-25
US20150220277A1 (en) 2015-08-06

Similar Documents

Publication Publication Date Title
JP6316974B2 (ja) フラッシュメモリ圧縮
US10642522B2 (en) Method and system for in-line deduplication in a storage drive based on a non-collision hash
US20200150890A1 (en) Data Deduplication Method and Apparatus
WO2016107272A1 (zh) 固态硬盘存储设备和固态硬盘存储设备的数据存取方法
US9891833B2 (en) Eliminating garbage collection in nand flash devices
JP2008065834A (ja) フュージョンメモリ装置及び方法
CN107548491B (zh) 用于管理存储器的设备和方法以及存储介质
US10817474B2 (en) Adaptive rate compression hash processor
CN110795272B (zh) 用于在可变大小的i/o上促进的原子性和延迟保证的方法和系统
WO2014188528A1 (ja) メモリ装置、計算機システム及びメモリ装置の制御方法
KR101730151B1 (ko) 플래시 메모리 장치에 데이터를 기록하는 방법, 플래시 메모리 장치, 및 저장 시스템
JP6608468B2 (ja) ストレージ装置及びその制御方法
US20240103747A1 (en) Data Storage Method and Apparatus
JP2009003934A (ja) データ管理システム及びデータ管理方法、並びにデータ管理方法を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
CN115756312A (zh) 数据访问系统、数据访问方法和存储介质
US9355113B2 (en) Encoding and decoding delta values
CN107423425B (zh) 一种对k/v格式的数据快速存储和查询方法
US20140258247A1 (en) Electronic apparatus for data access and data access method therefor
US9547550B1 (en) System and method for improved data maintenance in a flash drive
CN117472285A (zh) 固态硬盘用智能运行加速方法、计算机设备及存储介质
US11698871B2 (en) Method for PRP/SGL handling for out-of-order NVME controllers

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170706

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170718

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170901

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20171121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180112

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20180123

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20180202

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: 20180306

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180328

R150 Certificate of patent or registration of utility model

Ref document number: 6316974

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250