JP6046750B2 - ストレージ装置およびストレージ装置制御方法 - Google Patents

ストレージ装置およびストレージ装置制御方法 Download PDF

Info

Publication number
JP6046750B2
JP6046750B2 JP2014558362A JP2014558362A JP6046750B2 JP 6046750 B2 JP6046750 B2 JP 6046750B2 JP 2014558362 A JP2014558362 A JP 2014558362A JP 2014558362 A JP2014558362 A JP 2014558362A JP 6046750 B2 JP6046750 B2 JP 6046750B2
Authority
JP
Japan
Prior art keywords
data
crc
code
partial
processor
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.)
Active
Application number
JP2014558362A
Other languages
English (en)
Other versions
JPWO2014115277A1 (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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Application granted granted Critical
Publication of JP6046750B2 publication Critical patent/JP6046750B2/ja
Publication of JPWO2014115277A1 publication Critical patent/JPWO2014115277A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/1096Parity calculation or recalculation after configuration or reconfiguration of the system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Bus Control (AREA)

Description

本発明は、ストレージ装置におけるデータ保証技術に関する。
ストレージ装置とホストコンピュータの間の通信インタフェースにおいて、転送されるデータの保証コードの生成や確認を行う技術が知られている(特許文献1)。
米国特許出願公開第2008/0109615号明細書
保証コードにCRC(Cyclic Redundancy Check)を用い、複数のデータが連結されたデータの保証コードを算出するために、複数のデータの夫々を用いて演算を行う場合、複数のデータの順序によって演算結果が異なるため、複数のデータの順序を維持して保証コードを算出する必要がある。
複数のデータの転送に一つのDMA(Direct Memory Access)コントローラを用いる場合、そのDMAコントローラが、連結されたデータの保証コードを算出する。また、複数のデータの転送に複数のDMAコントローラを用いる場合、或るDMAコントローラが、或るデータの保証コードの演算を行い、別のDMAコントローラが、その演算の結果を引き継いで次のデータの保証コードの演算を行う。この場合、複数のDMAコントローラを用いても、複数のデータを逐次演算する必要があるため、データの転送性能を向上させることが困難である。
上記課題を解決するために、本発明の一態様であるストレージ装置は、ホストコンピュータに接続されるチャネル制御部と、前記チャネル制御部に接続される記憶部と、前記チャネル制御部及び前記記憶部に接続されるプロセッサと、を備える。前記チャネル制御部は、複数の演算部を有する。前記プロセッサは、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定する。前記複数の演算部は、前記記憶部から前記複数の要素データを夫々読み出し、前記複数の要素データに基づいて複数の保証コードである複数の部分コードを夫々算出し、前記プロセッサへ前記複数の部分コードを夫々送る。前記プロセッサは、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出する。
本発明の一態様によれば、複数の演算部が、複数のデータに基づいて複数の保証コードを夫々算出することにより、データの転送性能を向上させることができる。
図1は、本発明の実施例のストレージ装置の構成を示す。 図2は、チャネルアダプタ220の構成を示す。 図3は、マルチトラックリード要求に対する応答データの一例を示す。 図4は、マルチトラックリード処理を模式的に示す。 図5は、DMA処理を示す。 図6は、最終CRC処理を示す。 図7は、CRC最終処理の具体例を示す。 図8は、CRC演算に関するDMAコントローラとMP240の動作を示す。
以下、本発明の実施例について図面を用いて説明する。
なお、以後の説明では「aaaテーブル」、「aaaリスト」、「aaaDB」、「aaaキュー」等の表現にて本発明の情報を説明するが、これら情報はテーブル、リスト、DB、キュー、等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「aaaテーブル」、「aaaリスト」、「aaaDB」、「aaaキュー」等について「aaa情報」と呼ぶことがある。
さらに、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ID」という表現を用いるが、これらについてはお互いに置換が可能である。
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート(通信制御デバイス)を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによってストレージ装置にインストールされてもよい。
以下、本発明の実施例のストレージ装置について説明する。
図1は、本発明の実施例のストレージ装置の構成を示す。この図に示されているストレージ装置100は、複数のホストコンピュータ400に接続されている。ストレージ装置100は、ストレージコントローラ200と、複数のHDD(Hard Disk Drive)300とを有する。ストレージコントローラ200は、SAN(Storage Area Network)等を介してホストコンピュータ400に接続されている。複数のHDD300は、ストレージコントローラ200に接続されている。なお、ストレージ装置100は、一つのホストコンピュータ400に接続されていても良い。また、ストレージ装置100は、一つのHDD300を有していても良い。また、HDD300の代わりに、SSD(Solid State Drive)等の他のドライブが用いられても良い。
ストレージコントローラ200は、スイッチ(SW)210と、複数のチャネルアダプタ(CHA)220と、複数のデータキャッシュ(Cache)230と、複数のMP(Microprocessor)240と、複数のディスクアダプタ(DKA)250とを有する。ストレージコントローラ200は、一つのデータキャッシュ230を有していても良いし、一つのMP240を有していても良いし、一つのディスクアダプタ250を有していても良い。
スイッチ210は、チャネルアダプタ220と、データキャッシュ230と、MP240と、ディスクアダプタ250との間の通信を制御する。
チャネルアダプタ220は、ホストコンピュータ400に接続され、ホストコンピュータ400との通信を制御する。
データキャッシュ230は、ホストコンピュータ400へ送信されるデータや、ホストコンピュータ400から受信されたデータを格納する。データキャッシュ230は更に、共用メモリを有する。共用メモリは、MP240により用いられるプログラム及びデータを格納する。
MP240は、共用メモリに格納されたプログラム及びデータに基づいて、ストレージ装置100の各部を制御する。
ディスクアダプタ250は、HDD300に接続され、HDD300との通信を制御する。
図2は、チャネルアダプタ220の構成を示す。チャネルアダプタ220は、複数のホストチャネル制御LSI(large‐scale integration)510と、DMA用LSI520と、複数の中間バッファ(DXBF)530とを有する。チャネルアダプタ220は、一つのホストチャネル制御LSI510を有していても良い。チャネルアダプタ220は、一つの中間バッファ530を有していても良い。
ホストチャネル制御LSI510は、通信制御部511と、内部バッファ512とを有する。通信制御部511は、ホストコンピュータ400に接続され、所定のプロトコルに従って、ホストコンピュータ400との通信を制御する。本実施例において通信制御部511は、FICON(Fiber Connectivity)−HPF(High Performance)を用いるが、他のプロトコルを用いても良い。内部バッファ512は、ホストコンピュータ400へ送信するデータを格納する。
中間バッファ530は、例えばDRAM(Dynamic Random Access Memory)であり、DMA用LSI520によりデータキャッシュ230から転送されたデータ等を格納する。
DMA用LSI520は、複数のDMAコントローラ(DMAC)521を有する。複数のDMAコントローラ521の夫々は、互いに異なるDMA回路であっても良いし、DMA回路が割り当てられる仮想DMAコントローラであっても良い。なお、DMA用LSI520内の一つのDMA回路が、論理的に複数のDMAコントローラ521に分割されても良い。DMA回路は、保証コードを算出する。本実施例における保証コードは、CRCであり、DMA回路は、4バイトの初期値と、4バイトの倍数の長さの入力とを用いて、4バイトのCRCを算出する。このCRCの生成多項式は例えば、0x04C11DB7で表される。なお、保証コードは、他の誤り検出符号や誤り訂正符号であっても良い。
DMAコントローラ521は、MP240からの指示に従って、データキャッシュ230からデータを読み出し、読み出されたデータに基づいてCRC演算を行い、読み出されたデータを中間バッファ530へ書き込む。
FICON−HPFは、一つのリード要求により複数のトラックを連結して転送するためのマルチトラックリード要求をサポートする。ここでのトラックは、1バイト単位で指定される任意の長さのデータである。
以下、マルチトラックリード処理について説明する。
ホストコンピュータ400がマルチトラックリード要求をストレージ装置100へ送信することにより、ストレージ装置100は、マルチトラックリード処理を行う。マルチトラックリード要求は、複数のトラックを指定する。
図3は、マルチトラックリード要求に対する応答データの一例を示す。
マルチトラックリード要求を受けたストレージ装置100は、複数のトラックが要求された順に連結された連結データと、最終PADと、最終CRCとを連結した応答データをホストコンピュータ400へ送信する。連結データの後に最終PADが連結されたデータを整形データとする。整形データの長さは4バイトの倍数である。最終PADは、長さを調整するためのALLゼロデータである。最終CRCは、整形データのCRCである。最終CRCの長さは4バイトである。ここで、MP240は、連結データ長以上で最も小さい4バイトの倍数を整形データ長として算出し、整形データ長から連結データ長を減じた値を最終PAD長として算出する。更にMP240は、最終PAD長が0でない場合、最終PAD長のALLゼロデータである最終PADを生成する。
図4は、マルチトラックリード処理を模式的に示す。
この図は、ホストコンピュータ400と、ホストチャネル制御LSI510と、中間バッファ530と、複数のDMAコントローラ521と、MP240と、データキャッシュ230との間のデータの流れを示す。ここでのマルチトラックリード要求は、ストレージ装置100に格納された三つのトラックであるT(0)、T(1)、T(2)を指定する。また、DMA用LSI520は、三つのDMAコントローラ521であるX(0)、X(1)、X(2)を有する。ここで、T(0)、T(1)、T(2)は、データキャッシュ230に格納されている状態を示す。T(0)、T(1)、T(2)の何れかがキャッシュミスと判定された場合、ディスクアダプタ250は、キャッシュミスと判定されたトラックをHDD300から読み出し、データキャッシュ230へ書き込む。
まず、ホストコンピュータ400は、マルチトラックリード要求をホストチャネル制御LSI510へ発行する(S110)。マルチトラックリード要求を受けたホストチャネル制御LSI510は、そのマルチトラックリード要求をMP240へ送る(S120)。
マルチトラックリード要求を受けたMP240は、そのマルチトラックリード要求に基づいて、複数のトラックのデータ転送を並列に行うために、T(0)のデータ転送をX(0)に割り当て、T(1)のデータ転送をX(1)に割り当て、T(2)のデータ転送をX(2)に割り当てる。その後、MP240は、CCW(channel command word)により、T(0)を指定する転送起動要求をX(0)へ送り(S130)、T(1)を指定する転送起動要求をX(1)へ送り(S140)、T(2)を指定する転送起動要求をX(2)へ送る(S150)。
転送起動要求を受けたX(0)は、T(0)のDMA処理であるDMA(0)を起動する(S160)。DMA(0)により、X(0)は、データキャッシュ230内のT(0)を読み出し、T(0)に基づいてCRC演算を行うと共に、T(0)を中間バッファ530へ転送する。転送起動要求を受けたX(1)は、T(1)のDMA処理であるDMA(1)を起動する(S170)。DMA(1)により、X(1)は、データキャッシュ230内のT(1)を読み出し、T(1)に基づいてCRC演算を行うと共に、T(1)を中間バッファ530へ転送する。転送起動要求を受けたX(2)は、T(2)のDMA処理であるDMA(2)を起動する(S180)。DMA(2)により、X(2)は、データキャッシュ230内のT(2)を読み出し、T(2)に基づいてCRC演算を行うと共に、T(2)を中間バッファ530へ転送する。
DMA(0)が完了すると、X(0)は、DMA(0)の結果を示す転送完了報告をMP240へ送る(S190)。DMA(1)が完了すると、X(1)は、DMA(1)の結果を示す転送完了報告をMP240へ送る(S200)。DMA(2)が完了すると、X(2)は、DMA(2)の結果を示す転送完了報告をMP240へ送る(S210)。
X(0)、X(1)、X(2)から転送完了報告を受けたMP240は、転送完了報告に基づいて最終PAD及び最終CRCを算出する最終CRC処理を行う(S220)。その後、MP240は、最終PAD及び最終CRCを中間バッファ530へ書き込み(S230)、応答データをホストコンピュータ400へ転送することを指示するデータ転送開始指示をホストチャネル制御LSI510へ送る(S240)。
データ転送開始指示を受けたホストチャネル制御LSI510は、中間バッファ530からT(0)、T(1)、T(2)、最終PAD、最終CRCを読み出し、1バイト単位でアドレスオフセットを与えることにより、T(0)、T(1)、T(2)、最終PAD、最終CRCを連結し、応答データとして内部バッファ512へ格納する(S250)。その後、ホストチャネル制御LSI510は、応答データをホストコンピュータ400へ送信する(S260)。応答データの転送が完了すると、ホストチャネル制御LSI510は、マルチトラックリード要求に対するステータス応答をホストコンピュータ400へ送信する(S270)。
以上がマルチトラックリード処理の一例である。この処理によれば、MP240が複数のDMAコントローラ521にリード対象の複数のトラックを夫々割り当てることにより、複数のDMAコントローラ521が並列に複数のDMA処理を行うことができる。また、MP240が、複数のDMAコントローラ521による処理結果に基づいて演算を行うことにより、複数のトラックを順に連結したデータのCRCを算出することができる。
なお、中間バッファ530及び内部バッファ512の何れか一つが用いられても良い。例えば、DMAコントローラ521は、データキャッシュ230内のデータを内部バッファ512へ転送しても良い。また、通信制御部511は、中間バッファ530内のデータをホストコンピュータ400へ転送しても良い。
以下、前述のS130〜S210におけるDMA処理の詳細について説明する。
図5は、DMA処理を示す。
転送起動要求は、トラック長(転送長)と、データキャッシュ230内のトラックのアドレスである送信元アドレスと、中間バッファ530内の送信先のアドレスである送信先アドレスと、CRCの初期値とを含む。転送起動要求は、トラックのCRCの生成を行うか否かを示す情報を含んでも良い。
MP240は、マルチトラックリード要求の先頭のトラックの転送起動要求におけるCRCの初期値として0xFFFFFFFFを指定し、先頭以外のトラックの転送起動要求におけるCRCの初期値として0x00000000を指定する。この例では、X(0)への転送起動要求におけるCRCの初期値は、0xFFFFFFFFであり、X(1)及びX(2)の夫々への転送起動要求におけるCRCの初期値は、0x00000000である。このように、各DMAコントローラ521への転送起動要求は、予め定められた値をCRCの初期値として指定するため、他のDMAコントローラ521によるCRC演算の結果を含む必要がない。
DMAコントローラ521は、転送起動要求からトラック長を取得し、トラック長を4バイトで除した剰余を端数データ長として算出し、4バイトから端数データ長を減じた値をトラックPAD長として算出し、トラック長から端数データ長を減じた値を短縮データ長として算出し、トラック長にトラックPAD長を加えた値を延長データ長として算出する。DMAコントローラ521は、トラックのうち先頭から短縮データ長までのデータを短縮データとして抽出し、トラックのうち短縮データの後に続く端数データ長のデータを端数データとして抽出する。DMAコントローラ521は更に、トラックの後にトラックPAD長のALLゼロデータであるトラックPADを連結して延長データとする。言い換えれば、短縮データ長は、トラック長以下で最も大きい4バイトの倍数であり、延長データ長は、トラック長以上で最も小さい4バイトの倍数である。なお、トラック長が4の倍数である場合、端数データ長及びトラックPAD長は0になり、短縮データ長及び延長データ長はトラック長に等しくなる。
DMAコントローラ521は、データキャッシュ230の送信元アドレスからトラックを読み出し、短縮データのCRCである短縮データCRCを算出し、延長データを中間バッファ530の送信先アドレスへ書き込む。
DMAコントローラ521は、延長データの書き込みが完了すると、転送起動要求に対する転送完了報告をMP240へ送る。転送完了報告は、短縮データCRCと、端数データとを含む。
前述のマルチトラックリード要求処理の例において、X(0)は、T(0)を、短縮データであるT(0)_tと、端数データであるT(0)_datとに分割し、0xFFFFFFFFを初期値とし入力T(0)_tを入力として短縮データCRCであるT(0)_crcを算出する。また、X(1)は、T(1)を、短縮データであるT(1)_tと、端数データであるT(1)_datとに分割し、0x00000000を初期値としT(1)_tを入力として短縮データCRCであるT(1)_crcを算出する。また、X(2)は、T(2)を、短縮データであるT(2)_tと、端数データであるT(2)_datとに分割し、0x00000000を初期値としT(2)_tを入力として短縮データCRCであるT(2)_crcを算出する。
以上がDMA処理である。この処理によれば、各DMAコントローラ521は、MP240により指定される値をCRCの初期値として用いるため、別のDMAコントローラ521により算出されたCRCを引き継ぐ必要がない。これにより、複数のDMAコントローラ521は、並列にCRC演算を行うことができる。また、DMAコントローラ521は、4バイト未満の端数データをMP240へ送り、端数データのCRC演算を行わないことから、4バイト単位でCRC演算を行うDMA回路を用いることができる。これにより、DMAコントローラ521の回路規模の増大を防ぐことができる。
以下、前述のS220における最終CRC処理の詳細について説明する。
図6は、最終CRC処理を示す。ここで、トラックの番号をiとし、最終トラックの番号をnとし、T(i)の短縮データCRCをT(i)_crcとし、T(i)の端数データをT(i)_datとし、T(i)の長さ[バイト]をT(i)_lenとし、一時的なCRCをtemp_crcとし、一時的なデータ長をtemp_lenとし、最終PADの長さ[バイト]をpad_lenとする。MP240は、DMAコントローラ521からの転送完了報告から、T(i)_crc及びT(i)_datを取得する。
まず、MP240は、変数を初期化する(S310)。ここでMP240は、iに0を代入し、temp_crcにT(0)_crcを代入する。
その後、MP240は、temp_crcを初期値とし、T(i)_datを入力として、CRC演算を行うことにより、新たなtemp_crcを算出する(S320)。CRC演算の関数をFdとすると、この処理は次式で表される。
temp_crc = Fd(temp_crc,T(i)_dat)
これまでの処理により、temp_crcは、T(i)までのデータのCRCになる。
その後、MP240は、最終トラックまでCRC演算を行ったか否かを判定する(S330)。即ち、MP240は、i=nであるか否かを判定する。
S330においてi=nでない場合(S330:N)、MP240は、iに1を加算する(S340)。その後、MP240は、T(i)_lenを超えない4の倍数の最大値を、temp_lenに代入する(S350)。この処理は次式で表される。
temp_len = T(i)_len & 0xFFFFFFFC
その後、MP240は、temp_crcを初期値とし、temp_lenの長さのALLゼロデータを入力として、CRC演算を行うことにより、新たなtemp_crcを算出する(S360)。或る初期値と或る長さのALLゼロデータの入力とを用いてCRCを算出する関数をFzとすると、この処理は次式で表される。
temp_crc = Fz(temp_crc,temp_len)
その後、MP240は、ビット単位でtemp_crcとT(i)_crcのXOR(排他的論理和)演算を行うことにより、新たなtemp_crcを算出し(S370)、処理をS320へ移行させる。XOR演算子を「xor」とすると、この処理は次式で表される。
temp_crc = temp_crc xor T(i)_crc
これまでの処理により、temp_crcは、T(i)_tまでのデータのCRCになる。
S330においてi=nである場合(S330:Y)、MP240は、初期値をtemp_crcとし、pad_lenの長さのALLゼロデータを入力として、CRC演算を行うことにより、新たなtemp_crcを算出する(S380)。前述のFzを用いると、この処理は次式で表される。
temp_crc = Fz(temp_crc,pad_len)
これまでの処理により、temp_crcは、整形データのCRCになる。
その後、MP240は、FICON−HPFの仕様に従い、temp_crcのビット反転を行うことにより、最終CRCを算出し(S390)、このフローを終了する。前述のxorを用いると、この処理は次式で表される。
temp_crc = temp_crc xor 0xFFFFFFFF
以上がMP240によるCRC演算処理である。この処理によれば、MP240は、DMAコントローラ521により算出された各トラックの短縮データCRCに基づいて、整形データの最終CRCを算出することができる。また、MP240が端数データのCRCを算出することにより、トラック長を1バイト単位で指定することができると共に、DMAコントローラ521は4バイト単位でCRC演算を行うことができ、DMAコントローラ521の回路規模の増大を防ぐことができる。
また、DMAコントローラ521が連結データ内の特定のデータから第1のCRCを算出した場合、MP240が連結データのうち特定のデータより前のデータのCRCを初期値とし、特定のデータの長さのALLゼロデータから第2のCRCを算出し、第1のCRCと第2のCRCのXOR演算を行うことにより、連結データのうち特定のデータまでのデータのCRCを算出することができる。これにより、複数のDMAコントローラ521による複数のデータのCRC演算結果を用いて、MP240が連結された複数のデータのCRCを算出することができる。従って、或るDMAコントローラ521によるCRC演算の結果を別のDMAコントローラ521が引き継ぐ必要がない。
また、MP240が、DMAコントローラ521から端数データを取得し、端数データのCRC演算を行うことにより、DMAコントローラ521は、4バイト単位でCRC演算を行うことができる。
なお、MP240は、全てのDMA処理におけるCRCの初期値を0x00000000と指定しても良いし、全てのDMA処理におけるCRCの初期値を0x00000000に固定しても良い。この場合、MP240が、最終CRC処理におけるCRCの初期値を0xFFFFFFFFとし、先頭のトラックの短縮データ長のALLゼロデータを入力として、CRCを算出し、そのCRCと短縮データCRCとのXOR演算を行うことにより、初期値を0xFFFFFFFFとして算出される短縮データCRCに等しい結果を得ることができる。
以下、CRC最終処理の具体例について説明する。
図3の応答データにおいて、T(0)のデータ長を67バイトとし、T(1)のデータ長を18バイトとし、T(2)のデータ長を33バイトとする。従って、連結データ長は、118バイトであり、最終PAD長は、2バイトであり、整形データ長は、4バイトの倍数である120バイトである。
X(0)は、67バイトのT(0)を、4バイトの倍数である64バイトのT(0)_tと残りの3バイトのT(0)_datに分割する。その後、X(0)は、0xFFFFFFFFを初期値とし、T(0)_tを入力としてCRC演算を行うことにより、T(0)_crcを算出する。
X(1)は、18バイトのT(1)を、4バイトの倍数である16バイトのT(1)_tと残りの2バイトのT(1)_datに分割する。その後、X(1)は、0x00000000を初期値とし、T(1)_tを入力としてCRC演算を行うことにより、T(1)_crcを算出する。
X(2)は、33バイトのT(2)を、4バイトの倍数である32バイトのT(2)_tと残りの1バイトのT(2)_datに分割する。その後、X(2)は、0x00000000を初期値とし、T(2)_tを入力としてCRC演算を行うことにより、T(2)_crcを算出する。
図7は、CRC最終処理の具体例を示す。MP240は、X(0)から得られたT(0)_crcを初期値とし、X(0)から得られたT(0)_datを入力としてCRC演算を行うことにより、新たなtemp_crcを算出する。このtemp_crcは、T(0)までのデータのCRCである。
その後、MP240は、temp_crcを初期値とし、T(1)の短縮データの長さに等しい16バイトのALLゼロデータを入力としてCRC演算を行うことにより、新たなtemp_crcを算出する。その後、MP240は、temp_crcと、X(1)から得られたT(1)_crcとのXOR演算を行うことにより、新たなtemp_crcを算出する。その後、MP240は、temp_crcを初期値とし、X(1)から得られたT(1)_datを入力としてCRC演算を行うことにより、新たなtemp_crcを算出する。このtemp_crcは、T(1)までのデータのCRCである。
その後、MP240は、temp_crcを初期値とし、T(2)の短縮データの長さに等しい32バイトのALLゼロデータを入力としてCRC演算を行うことにより、新たなtemp_crcを算出する。その後、MP240は、temp_crcと、X(2)から得られたT(2)_crcとのXOR演算を行うことにより、新たなtemp_crcを算出する。その後、MP240は、temp_crcを初期値とし、X(2)から得られたT(2)_datを入力としてCRC演算を行うことにより、新たなtemp_crcを算出する。このtemp_crcは、T(2)までのデータのCRCである。
その後、MP240は、初期値をtemp_crcとし、最終PAD長である2バイトのALLゼロデータを入力として、CRC演算を行うことにより、新たなtemp_crcを算出する。このtemp_crcは、最終PADまでのデータのCRCである。
その後、MP240は、temp_crcのビット反転を行うことにより、最終CRCを算出する。
以上が、CRC最終処理の具体例である。
以下、前述のS360及びS380におけるFzの演算方法の一例について説明する。
ALLゼロデータのCRC演算を高速化するために、共用メモリは、複数のLUT(Lookup Table)を格納する。MP240は、CRCの初期値や入力のALLゼロデータ長に応じてLUTを参照することにより、Fzの演算を行う。演算方法やLUTのサイズ及び数は、ストレージ装置100に要求される性能、想定されるALLゼロデータ長、共用メモリのサイズ等により決定される。
ここでは、初期値を1バイトとし、その値をBiで表す。複数のLUTの夫々は、全てのBiに対するCRCを格納する。また、用意するLUTのALLゼロデータ長を特定の長さに限定する。特定の長さをLtとすると、Ltは例えば、1、2、3、4、16、256、4096である。演算を高速化するために、更に多くの種類のLtを用意しても良い。
Ltが4未満である場合、Lt毎のLUTが用意される。このLUTから得られるCRCを、LUT[Lt][Bi]で表す。
Ltが4以上である場合、4バイトの初期値の中のBiのバイト位置をPbで表し、LtとPbの組み合わせ毎のLUTが用意される。このLUTから得られるCRCを、LUT[Lt][Pb][Bi]で表す。
MP240は、ALLゼロデータ長をLtの組み合わせに分解し、分解された各Ltに対応するCRC演算を行うことにより、Fzの演算を行う。以下、Ltに応じたALLゼロデータのCRC演算であるLUT演算処理を示す。ここで、4バイトの初期値であるtemp_crcの各バイトをB0、B1、B2、B3で表し、左ビットシフトの演算子を「<<」で表す。
Ltが1バイトである場合のLUT演算処理は次式で表される。
temp_crc =
LUT[1][B0] XOR (B1<<8)
XOR (B2<<16) XOR (B3<<24)
Ltが2バイトである場合のLUT演算処理は次式で表される。
temp_crc =
LUT[2][B0] XOR LUT[1][B1]
XOR (B2<<16) XOR (B3<<24)
Ltが3バイトである場合のLUT演算処理は次式で表される。
temp_crc =
LUT[3][B0] XOR LUT[2][B1]
XOR LUT[1][B2] XOR (B3<<24)
Ltが4バイト以上である場合のLUT演算処理は次式で表される。
temp_crc =
LUT[Lt][0][B0] XOR LUT[Lt][1][B1]
XOR LUT[Lt][2][B2] XOR LUT[Lt][3][B3]
例えば、ALLゼロデータ長が8458バイトである場合、MP240は、ALLゼロデータ長を4096+4096+256+4+4+2のLtに分解し、各Ltに対応するLUT演算処理を行う。
このような演算方法によれば、MP240によるALLゼロデータのCRC演算を高速化することができる。また、ALLゼロデータ長を特定の長さの組み合わせに分解することにより、LUTの数を削減することができる。
なお、MP240は、LUTを用いて端数データのCRCを算出しても良い。このLUTは例えば、初期値を0x00000000とし、1バイトの入力のデータ毎のCRC演算結果を格納する。この場合、MP240は、LUTから得られたCRCを、端数データの長さに応じてビットシフトし、それ以前のCRCとのXOR演算を行う。
以下、DMAコントローラ521の並列動作について説明する。
図8は、CRC演算に関するDMAコントローラ521とMP240の動作を示す。
このシーケンス図は、MP240と、DMAコントローラ521であるX(0)、X(1)、X(2)との動作を示す。前述のS130、S140、S150において、MP240は、X(0)、X(1)、X(2)へ転送起動要求を夫々送る。転送起動要求を受けたX(0)、X(1)、X(2)は、DMA(0)、DMA(1)、DMA(2)を夫々起動する。これにより、X(0)、X(1)、X(2)は、並列にDMA処理を行う。その後、前述のS190、S200、S210において、データ転送を完了したX(0)、X(1)、X(2)は、CRC演算結果を含む転送完了報告をMP240へ送る。その後、前述のS220において、MP240は、X(0)、X(1)、X(2)からのCRC演算結果を順に用いて、最終CRC処理を行うことにより最終CRCを算出する。
一方、本発明を適用しないストレージ装置において、或るDMAコントローラが他のDMAコントローラによるCRC演算の結果を引き継いてCRC演算を行う場合、それらのDMAコントローラは、並列にCRC演算を行うことができない。
本実施例によれば、複数のDMAコントローラ521が並列に複数のトラックのCRC演算を行うことにより、並列に複数のトラックの転送を行うことができる。これにより、マルチトラックリード処理の性能を向上させることができる。
なお、各トラックの長さが4バイトの倍数であっても良い。この場合、MP240及びDMAコントローラ521は、端数データ、トラックPAD、最終PAD等を用いない。
以上の実施例で説明された技術は、次のように表現することができる。
(表現1)
ホストコンピュータに接続されるチャネル制御部と、
前記チャネル制御部に接続される記憶部と、
前記チャネル制御部及び前記記憶部に接続されるプロセッサと、
を備え、
前記チャネル制御部は、複数の演算部を有し、
前記プロセッサは、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
前記複数の演算部は、前記記憶部から前記複数の要素データを夫々読み出し、前記複数の要素データに基づいて複数の保証コードである複数の部分コードを夫々算出し、前記プロセッサへ前記複数の部分コードを夫々送り、
前記プロセッサは、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出する、
ストレージ装置。
(表現2)
前記複数の演算部は並列に、前記複数の部分コードを夫々算出する、
表現1に記載のストレージ装置。
(表現3)
前記保証コードは、所定長を有するCRCである、
表現2に記載のストレージ装置。
(表現4)
前記複数の演算部の夫々は、前記プロセッサにより指定された要素データから、前記所定長の倍数の長さを有するデータである部分データを抽出し、所定コードを部分コードの初期値として、前記部分データを入力として、保証コード演算を行うことにより前記部分コードを算出する、
表現3に記載のストレージ装置。
(表現5)
前記プロセッサは、前記系列データの内の前記部分データより前のデータの保証コードを保証コードの初期値として、前記部分データに等しい長さのゼロを入力として、保証コード演算を行うことにより、一時的な保証コードを算出し、前記一時的な保証コードと前記部分コードのXOR演算により、前記系列データの内の前記部分データまでのデータの保証コードを算出する、
表現4に記載のストレージ装置。
(表現6)
前記複数の演算部の夫々は、前記指定された要素データ内に前記部分データの残りのデータである端数データがある場合、前記端数データを前記プロセッサへ送る、
表現5に記載のストレージ装置。
(表現7)
前記プロセッサは、前記系列データの内の前記端数データより前のデータの保証コードを保証コードの初期値として、前記端数データを入力として、保証コード演算を行うことにより、前記系列データの内の前記端数データまでのデータの保証コードを算出する、
表現6に記載のストレージ装置。
(表現8)
前記プロセッサは、前記所定コードを前記複数の演算部の夫々へ送る、
表現7に記載のストレージ装置。
(表現9)
前記複数の要素データの中の先頭以外の要素データが指定された演算部に対応する所定コードは、前記所定長のゼロである、
表現8に記載のストレージ装置。
(表現10)
前記チャネル制御部は更に、前記複数の演算部に接続されたバッファと、前記バッファに接続された通信制御部とを有し、
前記複数の演算部は、前記複数の要素データを前記バッファへ夫々書き込み、
前記プロセッサは、前記系列コードを前記バッファへ書き込み、
前記通信制御部は、前記バッファ内の前記系列データ及び前記系列コードを連結して前記ホストコンピュータへ送信する、
表現9に記載のストレージ装置。
(表現11)
ホストコンピュータに接続されるチャネル制御部と、前記チャネル制御部に接続される記憶部と、前記チャネル制御部及び前記記憶部に接続されるプロセッサとを有し、前記チャネル制御部が、複数の演算部を有するストレージ装置を、制御するためのストレージ装置制御方法であって、
前記プロセッサが、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
前記複数の演算部が、前記記憶部から前記複数の要素データを夫々読み出し、前記複数の要素データに基づいて複数の保証コードである複数の部分コードを夫々算出し、前記プロセッサへ前記複数の部分コードを夫々送り、
前記プロセッサが、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出する、
ことを備えるストレージ装置制御方法。
以上の表現における用語について説明する。チャネル制御部は、チャネルアダプタ220等に対応する。記憶部は、データキャッシュ230やHDD300等に対応する。プロセッサは、MP240等に対応する。演算部は、DMAコントローラ521等に対応する。バッファは、中間バッファ530や内部バッファ512等に対応する。通信制御部は、通信制御部511等に対応する。要素データは、トラック等に対応する。部分データは、短縮データ等に対応する。部分コードは、短縮データCRC等に対応する。系列データは、整形データや連結データ等に対応する。系列コードは、最終CRC等に対応する。所定コードは、0xFFFFFFFFや0x00000000等に対応する。
100:ストレージ装置、 200:ストレージコントローラ、 210:スイッチ、 220:チャネルアダプタ、 230:データキャッシュ、 250:ディスクアダプタ、 400:ホストコンピュータ、 510:ホストチャネル制御LSI、 511:通信制御部、 512:内部バッファ、 520:DMA用LSI、 521:DMAコントローラ、 530:中間バッファ

Claims (9)

  1. ホストコンピュータに接続されるチャネル制御部と、
    前記チャネル制御部に接続される記憶部と、
    前記チャネル制御部及び前記記憶部に接続されるプロセッサと、
    を備え、
    前記チャネル制御部は、複数の演算部と、前記複数の演算部に接続されたバッファと、前記バッファに接続された通信制御部とを有し、
    前記プロセッサは、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
    前記複数の演算部は並列に、前記記憶部から前記複数の要素データを夫々読み出し、
    前記複数の演算部は並列に、前記バッファへ前記複数の要素データを夫々書き込み、
    前記複数の演算部は並列に、複数の部分コードであって、前記複数の部分コードの夫々が、対応する要素データの少なくとも一部の保証コードである、前記複数の部分コードを夫々算出し、
    前記複数の演算部は、前記プロセッサへ前記複数の部分コードを夫々送り、
    前記プロセッサは、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出し、
    前記プロセッサは、前記系列コードを前記バッファへ書き込み、
    前記通信制御部は、前記バッファ内の前記系列データ及び前記系列コードを連結して前記ホストコンピュータへ送信し、
    前記複数の部分コードの夫々は、所定長を有するCRCであり、
    前記系列コードは、前記所定長を有するCRCである、
    ストレージ装置。
  2. 前記複数の演算部の夫々は、対応する要素データから、対応する要素データの長さ以下で最大の前記所定長の倍数の長さを有する部分を、部分データとして抽出し、所定コードを期値として、前記部分データを入力として、保証コード演算を行うことにより、対応する部分コードを算出する、
    請求項に記載のストレージ装置。
  3. 前記プロセッサは、前記複数の要素データの一つを対象要素データとして順次選択し、前記対象要素データ内の部分データを対象部分データとして選択し、前記系列データの内の前記対象部分データより前のデータの保証コードを期値として、前記対象部分データの長さに等しい長さを有するゼロデータを入力として、保証コード演算を行うことにより、一時的な保証コードを算出し、前記一時的な保証コードと前記部分コードのXOR演算により、前記系列データの内の前記対象部分データまでのデータの保証コードを算出する、
    請求項に記載のストレージ装置。
  4. 前記複数の演算部の夫々は、対応する要素データ内に、対応する部分データの残りのデータである端数データがある場合、前記端数データを前記プロセッサへ送る、
    請求項に記載のストレージ装置。
  5. 前記プロセッサは、前記対象要素データ内の端数データを対象端数データとして選択し、前記系列データの内の前記対象端数データより前のデータの保証コードを期値として、前記対象端数データを入力として、保証コード演算を行うことにより、前記系列データの内の前記対象端数データまでのデータの保証コードを算出する、
    請求項に記載のストレージ装置。
  6. 前記プロセッサは、前記所定コードを前記複数の演算部の夫々へ送る、
    請求項に記載のストレージ装置。
  7. 前記複数の要素データの中の先頭以外の要素データが指定された演算部に対応する所定コードは、前記所定長のゼロデータである、
    請求項に記載のストレージ装置。
  8. 前記複数の要素データの中の第1要素データの長さは、前記複数の要素データの中の第2要素データの長さと異なる、
    請求項1に記載のストレージ装置。
  9. ホストコンピュータに接続されるチャネル制御部と、前記チャネル制御部に接続される記憶部と、前記チャネル制御部及び前記記憶部に接続されるプロセッサとを有し、前記チャネル制御部が、複数の演算部と、前記複数の演算部に接続されたバッファと、前記バッファに接続された通信制御部とを有するストレージ装置を、制御するためのストレージ装置制御方法であって、
    前記プロセッサが、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
    前記複数の演算部が並列に、前記記憶部から前記複数の要素データを夫々読み出し、
    前記複数の演算部が並列に、前記バッファへ前記複数の要素データを夫々書き込み、
    前記複数の演算部が並列に、複数の部分コードであって、前記複数の部分コードの夫々が、対応する要素データの少なくとも一部の保証コードである、前記複数の部分コードを夫々算出し、
    前記複数の演算部が、前記プロセッサへ前記複数の部分コードを夫々送り、
    前記プロセッサが、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出
    前記プロセッサが、前記系列コードを前記バッファへ書き込み、
    前記通信制御部が、前記バッファ内の前記系列データ及び前記系列コードを連結して前記ホストコンピュータへ送信する、
    ことを備え
    前記複数の部分コードの夫々は、所定長を有するCRCであり、
    前記系列コードは、前記所定長を有するCRCである、
    ストレージ装置制御方法。
JP2014558362A 2013-01-24 2013-01-24 ストレージ装置およびストレージ装置制御方法 Active JP6046750B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/051392 WO2014115277A1 (ja) 2013-01-24 2013-01-24 ストレージ装置およびストレージ装置制御方法

Publications (2)

Publication Number Publication Date
JP6046750B2 true JP6046750B2 (ja) 2016-12-21
JPWO2014115277A1 JPWO2014115277A1 (ja) 2017-01-19

Family

ID=51227093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014558362A Active JP6046750B2 (ja) 2013-01-24 2013-01-24 ストレージ装置およびストレージ装置制御方法

Country Status (3)

Country Link
US (1) US9720767B2 (ja)
JP (1) JP6046750B2 (ja)
WO (1) WO2014115277A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503582B2 (en) * 2017-03-06 2019-12-10 Tttech Auto Ag Method and computer system for fault tolerant data integrity verification of safety-related data
US10901654B2 (en) * 2018-10-30 2021-01-26 International Business Machines Corporation Buffer credit management in a data storage system
JP2022129774A (ja) 2021-02-25 2022-09-06 株式会社日立製作所 ストレージ装置、及び、そのデータ処理方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09116541A (ja) * 1995-10-16 1997-05-02 Toshiba Corp 通信制御装置
JP2002185438A (ja) * 2000-12-11 2002-06-28 Matsushita Electric Ind Co Ltd Crc演算装置
JP2004173178A (ja) * 2002-11-22 2004-06-17 Nec Corp 伝送システムおよび伝送装置
JP2008257364A (ja) * 2007-04-02 2008-10-23 Hitachi Ltd ストレージ装置及びボリューム復元方法
JP2009055407A (ja) * 2007-08-28 2009-03-12 Nec Corp 並列巡回符号生成装置および並列巡回符号検査装置
WO2010095173A1 (en) * 2009-02-19 2010-08-26 Hitachi, Ltd. Storage apparatus and data integrity assurance method
JP2011176597A (ja) * 2010-02-24 2011-09-08 Panasonic Corp 符号化装置及び符号化方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4260688B2 (ja) * 2004-06-09 2009-04-30 富士通株式会社 データ送信装置、データ送受信システム、データ送信装置の制御方法およびデータ送受信システムの制御方法
JP2008117253A (ja) 2006-11-07 2008-05-22 Hitachi Ltd 記憶装置システムと計算機システムおよびその処理方法
JP4747077B2 (ja) * 2006-11-16 2011-08-10 ルネサスエレクトロニクス株式会社 演算回路

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09116541A (ja) * 1995-10-16 1997-05-02 Toshiba Corp 通信制御装置
JP2002185438A (ja) * 2000-12-11 2002-06-28 Matsushita Electric Ind Co Ltd Crc演算装置
JP2004173178A (ja) * 2002-11-22 2004-06-17 Nec Corp 伝送システムおよび伝送装置
JP2008257364A (ja) * 2007-04-02 2008-10-23 Hitachi Ltd ストレージ装置及びボリューム復元方法
JP2009055407A (ja) * 2007-08-28 2009-03-12 Nec Corp 並列巡回符号生成装置および並列巡回符号検査装置
WO2010095173A1 (en) * 2009-02-19 2010-08-26 Hitachi, Ltd. Storage apparatus and data integrity assurance method
JP2011176597A (ja) * 2010-02-24 2011-09-08 Panasonic Corp 符号化装置及び符号化方法

Also Published As

Publication number Publication date
US20150339184A1 (en) 2015-11-26
US9720767B2 (en) 2017-08-01
JPWO2014115277A1 (ja) 2017-01-19
WO2014115277A1 (ja) 2014-07-31

Similar Documents

Publication Publication Date Title
JP5437922B2 (ja) 同時データ操作が可能なdmaエンジン
CA3062336C (en) Apparatus and method for controlling data acceleration
TWI814975B (zh) 用於利用自我調整寫緩衝區釋放的存儲介質編程方法與裝置、以及其系統單晶片
US20150012607A1 (en) Techniques to Replicate Data between Storage Servers
JP2012137885A (ja) データ記憶装置、メモリ制御装置及びメモリ制御方法
JP5076488B2 (ja) 情報処理装置、履歴管理方法、履歴管理プログラム
US8924606B2 (en) Storage system and data transfer control method
JP2008217209A (ja) 差分スナップショット管理方法、計算機システム及びnas計算機
JP2008090372A (ja) ストレージ装置及び負荷分散方法
WO2020173092A1 (zh) 数据处理方法、独立硬盘冗余阵列控制器和数据存储系统
JP4884721B2 (ja) 記憶装置のフォーマットを不要としたストレージシステム及び記憶制御方法
JP6426838B2 (ja) ストレージシステム、及び、記憶制御方法
JP6046750B2 (ja) ストレージ装置およびストレージ装置制御方法
US9641616B2 (en) Self-steering point-to-point storage protocol
US9213486B2 (en) Writing new data of a first block size to a second block size using a write-write mode
JP6649989B2 (ja) ストレージシステム及びその制御方法
JP4394533B2 (ja) ディスクアレイシステム
JP2009199266A (ja) データ転送制御装置、データ整合性判定方法及び記憶制御装置
JP2015179448A (ja) 情報処理装置、情報処理方法、情報処理プログラム、情報処理システム、ストレージ、ストレージ制御方法、及び、ストレージ制御プログラム
US20170097795A1 (en) Storage system
CN109445686A (zh) 一种存储磁盘以及存取数据的方法
JP2014182460A (ja) ストレージ制御装置及びストレージシステム
JP2019095844A (ja) データ転送装置およびデータ転送方法
US20150370504A1 (en) Storage device control system and storage device control apparatus
JP2008033657A (ja) メモリ制御装置および情報処理装置並びにメモリ制御方法

Legal Events

Date Code Title Description
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: 20161108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161117

R150 Certificate of patent or registration of utility model

Ref document number: 6046750

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150