JP7553783B2 - STORAGE CONTROL DEVICE, DELIVERY STATUS DETECTION PROGRAM, AND STORAGE SYSTEM - Google Patents
STORAGE CONTROL DEVICE, DELIVERY STATUS DETECTION PROGRAM, AND STORAGE SYSTEM Download PDFInfo
- Publication number
- JP7553783B2 JP7553783B2 JP2020144566A JP2020144566A JP7553783B2 JP 7553783 B2 JP7553783 B2 JP 7553783B2 JP 2020144566 A JP2020144566 A JP 2020144566A JP 2020144566 A JP2020144566 A JP 2020144566A JP 7553783 B2 JP7553783 B2 JP 7553783B2
- Authority
- JP
- Japan
- Prior art keywords
- control device
- identifier
- storage control
- storage
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Transfer Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、ストレージ制御装置、送達状況判定プログラムおよびストレージシステムに関する。 The present invention relates to a storage control device, a delivery status determination program, and a storage system.
近年、NVMe(Non-Volatile Memory Express) SSD(Solid State Drive)をストレージデバイスとして採用したストレージシステムが開発されている。NVMeは、不揮発性メモリを使用したフラッシュストレージでの通信を最適化するための通信プロトコルである。 In recent years, storage systems that use NVMe (Non-Volatile Memory Express) SSDs (Solid State Drives) as storage devices have been developed. NVMe is a communications protocol for optimizing communications in flash storage that uses non-volatile memory.
先行技術としては、ストレージ装置において、コントローラが、それぞれ異なる優先度が設定された複数のコマンドキューを含むキュー群を自コントローラ内または記憶デバイス内に生成し、記憶デバイスに対するコマンドのうち、より迅速な処理が求められるコマンドをより優先度が高いコマンドキューにポストするものがある。また、DMA(Direct Memory Access)コントローラが、スイッチを介して他のCM(Controller Module)へ転送されたデータの転送状況をスイッチから読み出し、読み出した転送状況をメモリに書き込む技術がある。 In a prior art storage device, a controller creates a queue group in the controller itself or in a storage device, each containing multiple command queues with different priorities, and posts commands to the storage device that require faster processing to a command queue with a higher priority. There is also a technology in which a DMA (Direct Memory Access) controller reads the transfer status of data transferred to another CM (Controller Module) via a switch from the switch, and writes the read transfer status to memory.
しかしながら、従来技術では、他のストレージ制御装置を介して、NVMe SSDなどのストレージデバイスにアクセスする場合、ストレージデバイスから転送されたデータの送達保証を確保することができないという問題がある。 However, in conventional technology, when accessing a storage device such as an NVMe SSD via another storage control device, there is a problem in that it is not possible to ensure delivery of data transferred from the storage device.
一つの側面では、本発明は、データの送達状況を判別可能にすることを目的とする。 In one aspect, the present invention aims to make it possible to determine the delivery status of data.
1つの実施態様では、データ転送用のバッファ領域を含み、前記バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行する、内部の回路を再構成可能な集積回路または専用の集積回路を備え、他のストレージ制御装置を経由して、レスポンスを要求しないデータ転送を行うストレージデバイスにアクセスする場合、自メモリへのリードデータの転送を要求するとともに、前記集積回路内の指定した第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を、前記他のストレージ制御装置に送信し、前記集積回路から前記第1の識別子を指定した割り込みを受け付けた場合、前記第1の識別子に対応する割り込みフラグを有効にし、前記実行依頼に応じて前記他のストレージ制御装置から前記ストレージデバイスに発行される前記リードコマンドの実行が完了した場合に、前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付け、前記完了応答を受け付けた場合、前記第1の識別子に対応する割り込みフラグを参照して、前記リードデータの送達状況を判定する、制御部を有するストレージ制御装置が提供される。 In one embodiment, a storage control device is provided that includes an integrated circuit or dedicated integrated circuit with reconfigurable internal circuits, which includes a buffer area for data transfer and issues an interrupt specifying an identifier corresponding to the buffer area when writing is performed to the buffer area, and has a control unit that, when accessing a storage device that performs data transfer without a response via another storage control device, requests the transfer of read data to its own memory and transmits a read command execution request to the other storage control device that requests the transfer of specified data to a buffer area corresponding to a specified first identifier in the integrated circuit, enables an interrupt flag corresponding to the first identifier when an interrupt specifying the first identifier is received from the integrated circuit, and receives a completion response specifying the first identifier from the other storage control device when execution of the read command issued from the other storage control device to the storage device in response to the execution request is completed, and, when the completion response is received, determines the delivery status of the read data by referring to the interrupt flag corresponding to the first identifier.
本発明の一側面によれば、データの送達状況を判別可能にすることができるという効果を奏する。 One aspect of the present invention has the effect of making it possible to determine the delivery status of data.
以下に図面を参照して、本発明にかかるストレージ制御装置、送達状況判定プログラムおよびストレージシステムの実施の形態を詳細に説明する。 The following describes in detail the embodiments of the storage control device, delivery status determination program, and storage system according to the present invention with reference to the drawings.
(実施の形態)
図1は、実施の形態にかかるストレージシステムのシステム構成例を示す説明図である。図1において、ストレージシステム100は、CM#0と、CM#1と、ストレージデバイス$0と、を含む。CM#0,#1およびストレージデバイス$0は、CE(Controller Enclosure)$0に設けられている。CEは、CM等を収容するためのケース(箱)である。
(Embodiment)
Fig. 1 is an explanatory diagram showing an example of a system configuration of a storage system according to an embodiment. In Fig. 1, a
CM#0,#1は、自配下のストレージデバイス$0に対するアクセスを制御するストレージ制御装置の一例である。同一のCE$0内のCM#0,#1は、相互に通信可能に直接接続されている。CE$0は、例えば、1つのストレージ装置として実現される。
ストレージデバイス$0は、レスポンスを要求しないデータ転送を行うストレージデバイスである。例えば、ストレージデバイス$0は、NVMe SSDである。NVMeでは、SSDの接続規格としてPCIe(Peripheral Component Interconnect-Express)が用いられる。PCIeでは、ポステッド・ライト(Posted write)のため、レスポンスを必要としない書き込み転送が行われる。 Storage device $0 is a storage device that performs data transfers that do not require a response. For example, storage device $0 is an NVMe SSD. NVMe uses PCIe (Peripheral Component Interconnect-Express) as the connection standard for SSDs. PCIe uses posted writes, so write transfers that do not require a response are performed.
以下の説明では、ストレージデバイス$0として、「NVMe SSD$0」を例に挙げて説明する。NVMe SSD$0は、NVMeの通信プロトコルを用いるSSDである。ただし、ストレージデバイス$0として、レスポンスを要求しないデータ転送を行う他のストレージデバイスを用いることにしてもよい。 In the following explanation, "NVMe SSD $0" will be used as an example of storage device $0. NVMe SSD $0 is an SSD that uses the NVMe communication protocol. However, other storage devices that perform data transfers that do not require a response may also be used as storage device $0.
CM#0,#1には、ホスト装置110が接続される。ホスト装置110は、例えば、業務アプリなどを実行するサーバである。CM#0,#1とホスト装置110は、例えば、FC(Fibre Channel)やiSCSI(Internet Small Computer System Interface)などを用いたSAN(Storage Area Network)を介して接続される。
A
以下の説明では、ストレージシステム100内のCM#0,#1のうちの任意のCMを「CM#i」と表記する場合がある(i=0,1)。また、ホスト装置110からのリクエスト(I/O要求)を受け付けたCM#iを「担当CM」と表記する場合がある。
In the following description, any one of
CM#iは、例えば、CPU(Central Processing Unit)#iと、メモリ#iと、CA(Channel Adapter)#iと、FPGA(Field Programmable Gate Array)#iと、PCIe SW(switch)#iと、を含む。各構成部は、バスによってそれぞれ接続される。 CM#i includes, for example, a CPU (Central Processing Unit)#i, a memory#i, a CA (Channel Adapter)#i, an FPGA (Field Programmable Gate Array)#i, and a PCIe SW (switch)#i. Each component is connected to the other components via a bus.
CPU#iは、CM#iの全体の制御を司る。CPU♯iは、複数のコアを有していてもよい。メモリ#iは、データやプログラムを格納する。メモリ#iは、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU#iのワークエリアとして使用される。メモリ#iに記憶されるプログラムは、CPU#iにロードされることで、コーディングされている処理をCPU#iに実行させる。メモリ#iは、データやプログラムを一時的に記憶するキャッシュメモリとしても用いられてもよい。 CPU #i is responsible for the overall control of CM #i. CPU #i may have multiple cores. Memory #i stores data and programs. Memory #i includes, for example, ROM (Read Only Memory), RAM (Random Access Memory), and flash ROM. Specifically, for example, flash ROM and ROM store various programs, and RAM is used as a work area for CPU #i. Programs stored in memory #i are loaded into CPU #i to cause CPU #i to execute the coded processes. Memory #i may also be used as a cache memory that temporarily stores data and programs.
CA#iは、ホスト装置110と通信するためのインターフェースである。CA#iは、例えば、LAN、SAN、FC等に準拠したアダプタを有する。FPGA#iは、プログラマブルロジックデバイスであり、内部の回路を再構成可能な集積回路である。PCIe SW#iは、他のデバイス(CM、ストレージデバイス)と通信するためのインターフェースである。CM#iは、例えば、NVMe SSD$0へのアクセスを制御するIOC(Input/Output Controller)を有していてもよい。
CA#i is an interface for communicating with the
なお、ストレージシステム100に含まれるCEの数は1台に限定されるものではなく、また、CEに含まれるCMの数も2台に限定されるものではない。例えば、ストレージシステム100には、複数のCEが含まれていてもよい(例えば、後述の図12参照)。
The number of CEs included in
また、図1では、1台のホスト装置110がCM#0,#1に接続される場合を例に挙げて説明したが、これに限らない。例えば、複数台のホスト装置のそれぞれが、CM#0,#1のうちの1以上のCMに接続されることにしてもよい。
In addition, in FIG. 1, a case where one
また、図1の例では、CM#iがFPGA#iを有することにしたが、これに限らない。例えば、CM#iにおいてFPGA#iが行う処理を、専用の集積回路(例えば、LSI:Large Scale Integration)により実現することにしてもよい。すなわち、CM#iは、FPGA#iの換わりに、FPGA#iと同様の機能を持つ専用の集積回路を有することにしてもよい。 In the example of FIG. 1, CM#i has FPGA#i, but this is not limited to the above. For example, the processing performed by FPGA#i in CM#i may be realized by a dedicated integrated circuit (e.g., LSI: Large Scale Integration). In other words, CM#i may have a dedicated integrated circuit with the same functions as FPGA#i instead of FPGA#i.
ここで、SAS(Serial Attached SCSI) SSDの場合、担当CMは、自系IOCから他系EXPへのパスがあるため、自系EXPと他系EXPの両系でSSDにアクセスできる。EXP(expander)は、SAS EXPであり、コントローラと複数のSASディスクドライブを接続するための中継デバイスである。 Here, in the case of a SAS (Serial Attached SCSI) SSD, the CM in charge has a path from the IOC of the own system to the EXP of the other system, so the SSD can be accessed from both the EXP of the own system and the EXP of the other system. The EXP (expander) is a SAS EXP, and is a relay device for connecting the controller to multiple SAS disk drives.
一方、SAS SSDに換えて、NVMe SSDをストレージデバイスとして採用するにあたり、SAS EXPをPCIe SWへ置き換えた場合、自系IOCから他系EXPへのパスがなくなるため、担当CMがSSDの片系しかアクセスできない。したがって、例えば、他CM配下のNVMe SSDとデータのやりとりをするには、他CM経由でアクセスすることになる。この際、例えば、他CMのバッファ経由でアクセスすると、レスポンスが遅いため、担当CMとSSDとの間で直接データ(リードデータ)のやりとりを行うことが望ましい。 On the other hand, when NVMe SSDs are used as storage devices instead of SAS SSDs, if the SAS EXP is replaced with a PCIe SW, the path from the IOC of the own system to the EXP of the other system is lost, so the responsible CM can only access one of the SSDs. Therefore, for example, to exchange data with an NVMe SSD under the control of another CM, access must be made via the other CM. In this case, for example, if access is made via the buffer of the other CM, the response is slow, so it is desirable to exchange data (read data) directly between the responsible CM and the SSD.
しかしながら、NVMe SSDをストレージデバイスとする従来のストレージシステムでは、異なるPCIeドメインにあるNVMe SSDにアクセスする場合、データの送達保証がとれないという問題がある。例えば、担当CMのPCIe SWとNVMe SSDとの間に障害が発生した場合を想定する。 However, in conventional storage systems that use NVMe SSDs as storage devices, there is a problem in that data delivery cannot be guaranteed when accessing an NVMe SSD in a different PCIe domain. For example, consider a case where a failure occurs between the PCIe SW of the CM in charge and the NVMe SSD.
この場合、担当CMが、他CMにNVMe SSDへのアクセスを依頼する。他CMは、担当CMが読み出したいデータが格納されたSSDへアクセス可能なCMである。以下の説明では、担当CMが読み出したいデータが格納されたSSDへアクセス可能なCMを「DCM(Drive CM)」と表記する場合がある。 In this case, the responsible CM requests the other CM to access the NVMe SSD. The other CM is a CM that can access the SSD in which the data that the responsible CM wants to read is stored. In the following explanation, a CM that can access the SSD in which the data that the responsible CM wants to read is stored may be referred to as a "DCM (Drive CM)."
DCMは、担当CMからの依頼に応じて、NVMe SSDへリードコマンドを発行する。NVMe SSDは、DCMからのリードコマンドに応じて、担当CMのメモリへリードデータをDMA転送する。このとき、PCIeのポステッド・ライトのため、担当CMのメモリへ転送されたリードデータの送達保証がとれない。 In response to a request from the CM in charge, the DCM issues a read command to the NVMe SSD. In response to the read command from the DCM, the NVMe SSD DMA transfers the read data to the memory of the CM in charge. At this time, due to PCIe posted write, delivery of the read data transferred to the memory of the CM in charge cannot be guaranteed.
すなわち、一時的にPCIe SW間のリンクが切れるなどの障害が発生しても、NVMe SSDから担当CMのメモリへのリードデータの転送が正常に行われたか否かを判断することができない。データの送達保証が確保できないと、データ抜けが検出できず、ホスト装置においてデータ化けを引き起こすおそれがある。 In other words, even if a failure occurs such as a temporary disconnection of the link between PCIe SWs, it is not possible to determine whether the transfer of read data from the NVMe SSD to the memory of the assigned CM was successful. If data delivery cannot be guaranteed, data loss cannot be detected, which may cause data corruption in the host device.
具体的には、例えば、NVMe SSDは、担当CMのメモリへのリードデータの転送処理が完了すると、DCMへMSI(Message Signaled Interrupts)-X割り込みを発行する。DCMは、NVMe SSDからのMSI-X割り込みにより、リードデータの転送処理が完了したと判断すると、担当CMへコマンドの完了応答を送信する。 Specifically, for example, when the NVMe SSD completes the transfer process of the read data to the memory of the assigned CM, it issues an MSI (Message Signaled Interrupts)-X interrupt to the DCM. When the DCM determines that the transfer process of the read data is complete based on the MSI-X interrupt from the NVMe SSD, it sends a command completion response to the assigned CM.
しかし、DCMから担当CMへ完了応答が送信されても、担当CMは、データ転送が正常に行われたか否かは判断できない。すなわち、データ転送にともなう担当CMのメモリからの応答はないため(ポステッド・ライト)、データが正常に転送されなかった場合に、担当CMは認識することができない。この場合でも、DCMから担当CMへ完了応答が送信され、ホスト装置においてデータ化けが発生する。 However, even if a completion response is sent from the DCM to the responsible CM, the responsible CM cannot determine whether the data transfer was successful or not. In other words, since there is no response from the memory of the responsible CM accompanying the data transfer (posted write), the responsible CM cannot recognize if the data was not transferred successfully. Even in this case, a completion response is sent from the DCM to the responsible CM, and garbled data occurs in the host device.
そこで、本実施の形態では、CM#i(担当CM)が他CM#j(DCM)を経由して、NVMe SSD$kにアクセスする場合であっても、データの送達保証を確保することができるストレージシステム100について説明する。具体的には、例えば、CM#i(担当CM)に、データ転送用のバッファ領域を含み、バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行するFPGA#iを設ける。そして、CM#i(担当CM)は、NVMe SSD$kからメモリ#iへのデータ転送と同一の経路を使用して行われるFPGA#i内のバッファ領域への書き込み状況から、メモリ#iへのリードデータの送達状況を判別する。
In this embodiment, a
図2は、ストレージシステム100の一実施例を示す説明図である。ここでは、CM#0を担当CMとし、CM#1をDCMとする。また、担当CM#0のPCIe SW#0とNVMe SSD$0との間に障害が発生した場合を想定する。この場合、担当CM#0は、DCM#1を経由して、NVMe SSD$0にアクセスする。なお、図2では、各CM#0,#1のハードウェア構成の一部を抜粋して表示している。
Figure 2 is an explanatory diagram showing one embodiment of the
担当CM#0は、FPGA#0に、SQ IDに対応したDoorbellレジスタ(DBL0,1,…,N)を設ける。Doorbellレジスタ(DBR)は、データ転送用のバッファ領域の一例である。SQ IDは、後述するSQ(Submission Queue)を一意に識別する識別子である。担当CM#0は、FPGA#0のDoorbellレジスタ領域をメモリ#0にマッピングする。例えば、メモリ#0内のDoorbell0は、FPGA#0内のDBL0に対応する。
The
また、担当CM#0は、メモリ#0内にFPGA#0からの割り込みを設定するMSI-X0,1,…,Nを設ける。FPGA#0は、DoorbellレジスタへのWriteが行われた場合、DoorbellレジスタのIDに対応したMSI-X割り込みを、CM#0のCPU#0へ発行する。
In addition, the
DCM#1は、メモリ#1内にSQとCQ(Completion Queue)のペアをN個作成する。Nは、任意に設定可能であり、例えば、CPU#1のコア数に応じた値が設定される。SQ、CQは、NVMeのコマンドごとに、DCM#1のCPU#1からNVMe SSD$0へのアクセスに用いられる。
SQは、コマンドを格納するキューである。CQは、コマンドの完了状態を示す情報を格納するキューである。具体的には、例えば、DCM#1は、SQ ID(0,1,…,N)ごとに、SQとCQとのペアをメモリ#1内に作成する。例えば、メモリ#1内の「SQ 0」と「CQ 0」は、SQ ID「0」に対応するSQとCQとのペアを示している。
An SQ is a queue that stores commands. A CQ is a queue that stores information indicating the completion status of a command. Specifically, for example,
ここで、NVMeのコマンドのデータ構造例について説明する。 Here we explain an example of the data structure of an NVMe command.
図3は、NVMeコマンドのデータ構造例を示す説明図である。図3において、NVMeコマンドcmdは、Opcode、データアドレス1、データアドレス2、Starting LBA(Logical Block Addressing)およびNumber of Logical Blocksを含む。
Figure 3 is an explanatory diagram showing an example of the data structure of an NVMe command. In Figure 3, the NVMe command cmd includes an Opcode, a
ここで、Opcodeは、コマンドの種類を示す。例えば、リードコマンドの場合、OpcodeはReadとなる。データアドレス1は、担当CMのメモリ内のデータ領域の転送先アドレスを示す。データアドレス2は、担当CMのFPGA内のDoorbellレジスタのアドレスを示す。
Here, Opcode indicates the type of command. For example, in the case of a read command, Opcode is Read.
Starting LBAは、NVMe SSDからリードするブロックの最初のアドレスを示す。Number of Logical Blocksは、NVMe SSDからリードするブロック数を示す。1ブロックは、例えば、512[byte]である。例えば、担当CMのメモリ内のデータ領域に転送するデータのブロック数をLブロックとする。 Starting LBA indicates the first address of the block to be read from the NVMe SSD. Number of Logical Blocks indicates the number of blocks to be read from the NVMe SSD. One block is, for example, 512 bytes. For example, the number of blocks of data to be transferred to the data area in the memory of the responsible CM is L blocks.
この場合、Number of Logical Blocksは、Doorbellレジスタへのデータ転送を追加するため、例えば、(L+α)ブロックとする。αブロックは、Doorbellレジスタへの転送分に割り当てられる。αは、任意に設定可能であり、例えば、1に設定される。 In this case, the Number of Logical Blocks is, for example, (L + α) blocks in order to add data transfer to the Doorbell register. α blocks are assigned to the transfer to the Doorbell register. α can be set arbitrarily, for example, to 1.
ストレージシステム100において、担当CM#0は、図4に示すようなID対応表400を用いて、DCM#1のSQ、CQ、FPGA#0のDoorbellレジスタ、MSI-XのIDによる関連付けを行う。ID対応表400は、例えば、担当CM#0のメモリ#0に記憶される。
In the
図4は、ID対応表の記憶内容の一例を示す説明図である。図4において、ID対応表400は、コマンドID、SQ ID、CQ ID、Doorbell ID、MSI-X IDおよび割り込みフラグのフィールドを有する。各フィールドに情報を設定することで、ID対応情報(例えば、ID対応情報400-1)がレコードとして記憶される。 Figure 4 is an explanatory diagram showing an example of the contents stored in an ID correspondence table. In Figure 4, ID correspondence table 400 has fields for command ID, SQ ID, CQ ID, Doorbell ID, MSI-X ID, and interrupt flag. By setting information in each field, ID correspondence information (for example, ID correspondence information 400-1) is stored as a record.
コマンドIDは、コマンドを一意に識別する識別子である。SQ IDは、DCM#1のメモリ#1内のSQを一意に識別する識別子である。CQ IDは、DCM#1のメモリ#1内のCQを一意に識別する識別子である。Doorbell IDは、担当CM#0のFPGA#0内のDoorbellレジスタを一意に識別する識別子である。
The command ID is an identifier that uniquely identifies a command. The SQ ID is an identifier that uniquely identifies an SQ in
MSI-X IDは、FPGA#0からのMSI-X割り込みを一意に識別する識別子である。各IDは、0~Nのいずれかの値である。Nは、DCMのメモリ内に作成されるSQとCQとのペアの個数に相当する。割り込みフラグは、FPGA#0からのMSI-X割り込み状態を示す。割り込みフラグ「0」は、割り込みが発生していない状態(無効)を示す。割り込みフラグ「1」は、割り込みが発生した状態(有効)を示す。初期状態では、割り込みフラグは「0」である。
The MSI-X ID is an identifier that uniquely identifies an MSI-X interrupt from
ストレージシステム100では、各リードコマンドに関する一連の流れの中で、SQ、CQ、Doorbellレジスタ、MSI-X割り込みに対して、同じIDを使用する。これにより、担当CM#0のCPU#0が、FPGA#0から受け取ったMSI-X割り込みのIDを確認することで、どのSQ IDのコマンドが完了したか(送達状況)を判別可能にする。
In
(CM#iの機能的構成例)
つぎに、CM#iの機能的構成例について説明する。まず、図5を用いて、CM#iが担当CMとして動作する場合の機能的構成例について説明する。ここでは、CM#iが担当CMの場合のDCMを「DCM#j」と表記する場合がある(j≠i)。例えば、CM#0が担当CMの場合(i=0)、CM#1がDCMとなる(j=1)。また、リードデータを有するアクセス先のNVMe SSDを「NVMe SSD$k」と表記する場合がある。
(Example of functional configuration of CM#i)
Next, a functional configuration example of CM#i will be described. First, a functional configuration example in the case where CM#i operates as a responsible CM will be described with reference to FIG. 5. Here, the DCM in the case where CM#i is the responsible CM may be written as "DCM#j" (j≠i). For example, when
図5は、担当CM#iの機能的構成例を示すブロック図である。図5において、担当CM#iは、第1の受付部501と、第1の要求処理部502と、判定部503と、復旧部504と、を含む。第1の受付部501~復旧部504は制御部となる機能であり、具体的には、例えば、メモリ♯iに記憶されたプログラムをCPU♯iに実行させることにより、または、CA#i、PCIe SW#iにより、その機能を実現する。各機能部の処理結果は、例えば、メモリ♯iに記憶される。
Figure 5 is a block diagram showing an example of the functional configuration of the responsible CM #i. In Figure 5, the responsible CM #i includes a
第1の受付部501は、ホスト装置110からのリクエストを受け付ける。ここで、リクエストは、例えば、NVMe SSD$kに対するリードリクエスト(読出要求)である。リクエストには、例えば、アクセス先の情報やリードデータのデータサイズなどが含まれる。具体的には、例えば、第1の受付部501は、CA#iを介して、ホスト装置110からのリードリクエストを受け付ける。
The
第1の要求処理部502は、DCM#j(他のストレージ制御装置)を経由して、NVMe SSD$kにアクセスする場合、NVMe SSD$kに対して自メモリ#iへのリードデータの転送を要求するリードコマンドの実行依頼を、当該リードコマンドに対応する識別子(第1の識別子)を指定して、DCM#jに送信する。
When the first
ここで、DCM#jを経由して、NVMe SSD$kにアクセスする場合は、例えば、担当CM#iのPCIe SW#iとNVMe SSD$kとの間に障害が発生した場合である。また、DCM#jを経由して、NVMe SSD$kにアクセスする場合は、NVMe SSD$kが、担当CM#iとは異なるCEに配置されている場合である。 Here, the NVMe SSD$k is accessed via DCM#j when, for example, a failure occurs between the PCIe SW#i of the responsible CM#i and the NVMe SSD$k. Also, the NVMe SSD$k is accessed via DCM#j when the NVMe SSD$k is located in a CE different from the responsible CM#i.
リードコマンドは、例えば、図3に示したNVMeコマンドcmdである。リードデータは、NVMe SSD$kのStarting LBAから読み出されるLブロック分のデータであり、担当CM#iのメモリ#i内のデータ領域に転送される。 The read command is, for example, the NVMe command cmd shown in FIG. 3. The read data is L blocks of data read from the Starting LBA of the NVMe SSD $k, and is transferred to the data area in the memory #i of the responsible CM #i.
リードコマンドに対応する第1の識別子は、例えば、リードコマンドに割り振られるSQ IDである。例えば、各リードコマンドには、0~NのSQ IDのうち、空きのIDであって、もっと値の小さいSQ IDが割り振られる。空きのIDは、他のリードコマンドに対応していないID、例えば、図4に示したID対応表400に登録されていないIDである。
The first identifier corresponding to a read command is, for example, an SQ ID assigned to the read command. For example, each read command is assigned an available SQ ID with a smaller value among
DCM#jへ第1の識別子を指定したリードコマンドの実行依頼が送信されると、DCM#jからNVMe SSD$kに対して、FPGA#i内の第1の識別子に対応するバッファ領域への所定のデータの転送要求が追加されたリードコマンドが発行される。第1の識別子に対応するバッファ領域は、例えば、SQ IDに対応したDoorbellレジスタである。 When a request to execute a read command specifying the first identifier is sent to DCM#j, a read command is issued from DCM#j to NVMe SSD$k, to which a transfer request for specific data to the buffer area corresponding to the first identifier in FPGA#i is added. The buffer area corresponding to the first identifier is, for example, a Doorbell register corresponding to the SQ ID.
すなわち、第1の識別子を指定したリードコマンドの実行依頼は、自メモリ#iへのリードデータの転送を要求するとともに、自FPGA#i内の第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼に相当する。 In other words, a request to execute a read command specifying a first identifier corresponds to a request to execute a read command that requests the transfer of read data to the local memory #i and also requests the transfer of specified data to the buffer area corresponding to the first identifier in the local FPGA #i.
所定のデータは、任意に設定可能であり、例えば、ホスト装置110から要求されるリードデータよりもデータ量が少ないデータである。所定のデータは、リードデータに続く1ブロック分のデータであってもよい。また、所定のデータは、例えば、NVMe SSD$kからメモリ#iへのリードデータの転送が完了した後、FPGA#i内の第1の識別子に対応するバッファ領域へ転送されるように要求される。なお、DCM側の具体的な処理内容については、図6を用いて後述する。
The predetermined data can be set arbitrarily, and is, for example, data having a smaller amount of data than the read data requested by the
具体的には、例えば、第1の要求処理部502は、ホスト装置110からのリードリクエストに応じて、DCM#jを経由して、NVMe SSD$kにアクセスする場合、ID対応表400を参照して、リードコマンドに割り振るSQ IDを特定する。例えば、ID対応表400にID対応情報が未登録の場合、SQ0(ID:0)が特定される。
Specifically, for example, when the first
第1の要求処理部502は、特定したSQ0に対応するID対応情報(例えば、図4に示したID対応情報400-1)を作成して、ID対応表400に登録する。そして、第1の要求処理部502は、特定したSQ0(ID:0)を指定して、NVMe SSD$kに対するリードコマンドの実行依頼をDCM#jに送信する。アクセス先の情報やリードデータのデータサイズは、リードリクエストから特定される。
The first
また、第1の要求処理部502は、FPGA#iから発行される、第1の識別子を指定した割り込みを受け付けた場合、第1の識別子に対応する割り込みフラグを有効にする。第1の識別子を指定した割り込みは、FPGA#iに設けられた第1の識別子に対応するバッファ領域への書き込みが行われた場合にFPGA#iから発行される。
When the first
具体的には、例えば、FPGA#iは、Doorbell0(ID:0)のDoorbellレジスタへのWriteが行われた場合、Doorbell0(ID:0)を指定したMSI-X割り込みを、CPU#0へ発行する。Doorbell0(ID:0)を指定したMSI-X割り込みは、Doorbell0(ID:0)と関連付けられたMSI-X0(ID:0)のMSI-X割り込みである。この場合、第1の要求処理部502は、ID対応表400を参照して、MSI-X0(ID:0)に対応するID対応情報400-1の割り込みフラグを「1」に設定する。
Specifically, for example, when a write is performed to the Doorbell register of Doorbell0 (ID:0), FPGA#i issues an MSI-X interrupt specifying Doorbell0 (ID:0) to
判定部503は、第1の要求処理部502によって送信された実行依頼に応じてDCM#jからNVMe SSD$kに発行されるリードコマンドの実行が完了した場合、第1の識別子を指定した完了応答をDCM#jから受け付ける。
When execution of a read command issued from DCM#j to NVMe SSD$k in response to an execution request sent by the first
発行されるリードコマンドは、メモリ#iへのリードデータの転送を要求するとともに、FPGA#i内の第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドである。FPGA#i内の第1の識別子に対応するバッファ領域への所定のデータの転送要求は、例えば、DCM#jにおいて、メモリ#iへのリードデータの転送を要求するリードコマンドを操作して追加される。 The issued read command is a read command that requests the transfer of read data to memory #i, and also requests the transfer of specified data to a buffer area corresponding to a first identifier in FPGA #i. The request to transfer specified data to a buffer area corresponding to a first identifier in FPGA #i is added, for example, in DCM #j by manipulating a read command that requests the transfer of read data to memory #i.
また、判定部503は、第1の識別子を指定した完了応答を受け付けた場合、第1の識別子に対応する割り込みフラグを参照して、リードデータの送達状況を判定する。具体的には、例えば、判定部503は、SQ IDを指定した完了応答をDCM#jから受け付けた場合に、ID対応表400を参照して、指定されたSQ IDに対応する割り込みフラグの値を確認する。
When the
ここで、割り込みフラグが「1(有効)」の場合、判定部503は、リードデータが送達されたと判定する。すなわち、判定部503は、メモリ#iへのリードデータの転送が正常に行われたと判定する。リードデータは、例えば、ホスト装置110から要求されたLブロック分のデータである。
Here, if the interrupt flag is "1 (enabled)", the
一方、割り込みフラグが「0(無効)」の場合、判定部503は、リードデータが送達されなかったと判定する。すなわち、判定部503は、メモリ#iへのリードデータの転送が正常に行われなかったと判定する。なお、判定部503は、例えば、SQ IDを指定したエラー応答をDCM#jから受け付けた場合も、リードデータが送達されなかったと判定する。
On the other hand, if the interrupt flag is "0 (invalid)", the
復旧部504は、リードデータが送達されなかったと判定された場合、所定のリカバリ処理を実行する。所定のリカバリ処理は、例えば、メモリ#iとNVMe SSD$kとの間の経路(リンク)を再構築する処理である。すなわち、一時的なハードウェア障害が発生して、リンクが不安定であったり、通信速度が規定の速度でリンクされていなかったりする可能性があるため、リカバリ処理を実施する。
When it is determined that the read data has not been delivered, the
また、第1の要求処理部502は、所定のリカバリ処理が完了した場合、NVMe SSD$kに対して自メモリ#iへのリードデータの転送を要求するリードコマンドの実行依頼を、当該リードコマンドに対応する第1の識別子を指定して、DCM#jに再度送信することにしてもよい。
In addition, when the specified recovery process is completed, the first
なお、リカバリ処理を実行後にリードコマンドの実行依頼を再実施しても、リードデータが送達されなかった場合、復旧部504は、その旨をホスト装置110に通知することにしてもよい。また、メモリ#iへ正常に転送されたリードデータは、ホスト装置110に転送される。
If the read data is not delivered even when the read command execution request is resubmitted after the recovery process is executed, the
つぎに、図6を用いて、CM#iがDCMとして動作する場合の機能的構成例について説明する。ここでは、CM#iがDCMの場合の担当CMを「担当CM#j」と表記する場合がある(j≠i)。また、DCM#iの配下のNVMe SSDを「NVMe SSD$k」と表記する場合がある。 Next, an example of a functional configuration when CM#i operates as a DCM will be described with reference to FIG. 6. Here, when CM#i is a DCM, the responsible CM may be written as "responsible CM#j" (j ≠ i). Also, an NVMe SSD under DCM#i may be written as "NVMe SSD$k".
図6は、DCM#iの機能的構成例を示すブロック図である。図6において、DCM#iは、第2の受付部601と、第2の要求処理部602と、を含む。第2の受付部601および第2の要求処理部602は制御部となる機能であり、具体的には、例えば、メモリ♯iに記憶されたプログラムをCPU♯iに実行させることにより、または、CA#i、PCIe SW#iにより、その機能を実現する。各機能部の処理結果は、例えば、メモリ♯iに記憶される。
Figure 6 is a block diagram showing an example of the functional configuration of DCM#i. In Figure 6, DCM#i includes a
第2の受付部601は、担当CM#j(他のストレージ制御装置)から、NVMe SSD$kに対して担当CM#jのメモリ#jへのリードデータの転送を要求するリードコマンドに対応する識別子(第2の識別子)を指定した当該リードコマンドの実行依頼を受け付ける。指定される第2の識別子は、例えば、リードコマンドに割り振られるSQ IDである。
The
第2の要求処理部602は、第2の識別子を指定したリードコマンドの実行依頼を受け付けた場合、他メモリ#jへのリードデータの転送を要求するとともに、他FPGA#j内の指定された第2の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドをNVMe SSD$kに発行する。
When the second
すなわち、第2の識別子を指定したリードコマンドの実行依頼は、他メモリ#jへのリードデータの転送を要求するとともに、他FPGA#j内の第2の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼に相当する。他FPGA#j内の第2の識別子に対応するバッファ領域のアドレスは、例えば、担当CM#jからの実行依頼に含まれていてもよく、また、担当CM#jに問い合わせることにしてもよい。 In other words, a request to execute a read command specifying the second identifier corresponds to a request to execute a read command that requests the transfer of read data to the other memory #j and also requests the transfer of specified data to a buffer area in the other FPGA #j that corresponds to the second identifier. The address of the buffer area in the other FPGA #j that corresponds to the second identifier may be included in the execution request from the responsible CM #j, for example, or may be queried from the responsible CM #j.
第2の要求処理部602は、NVMe SSD$kからリードコマンドで要求されたデータの転送完了通知があった場合、第2の識別子を指定した完了応答を担当CM#jに送信する。完了応答は、リードコマンドが完了したことを示す。また、第2の要求処理部602は、NVMe SSD$kからリードコマンドで要求されたデータの転送エラー通知があった場合、第2の識別子を指定したエラー応答を担当CM#jに送信する。エラー応答は、リードコマンドが正常に完了しなかったことを示す。
When the second
具体的には、例えば、第2の要求処理部602は、他メモリ#jへのリードデータの転送を要求するリードコマンドに、他FPGA#j内の第2の識別子に対応するバッファ領域への所定のデータの転送要求を追加する。そして、第2の要求処理部602は、当該転送要求を追加したリードコマンドを、自メモリ#i内の第2の識別子に対応する第1キューに格納する。第1キューは、コマンドを格納するキューであり、例えば、SQである。
Specifically, for example, the second
つぎに、第2の要求処理部602は、NVMe SSD$kによってリードコマンドの完了を示す情報が、自メモリ#i内の第2の識別子に対応する第2キューに書き込まれた場合、第2の識別子を指定した転送完了応答を担当CM#jに送信する。第2キューは、コマンドの完了状態を示す情報を格納するキューであり、例えば、CQである。
Next, when information indicating the completion of the read command is written by the NVMe SSD $k to the second queue corresponding to the second identifier in the own memory #i, the second
なお、NVMe SSD$kにアクセスする際のより詳細な動作例については、例えば、図8および図10を用いて後述する。 A more detailed example of the operation when accessing the NVMe SSD$k will be described later with reference to, for example, Figures 8 and 10.
(ストレージシステム100の動作例)
つぎに、図7を用いて、ストレージシステム100の動作例について説明する。ただし、CM#0を担当CMとし、CM#1をDCMとする。また、担当CM#0のPCIe SW#0とNVMe SSD$0との間に障害が発生し、担当CM#0からNVMe SSD$0へ直接アクセスできない場合を想定する。
(Operation Example of Storage System 100)
Next, an example of the operation of the
図7は、ストレージシステム100の動作例を示す説明図である。図7において、(1)各CM#0,#1は、構成デバイスの初期化を行い、各メモリ#0,#1のメモリマッピングを行う。(2)担当CM#0は、SQ-IDを指定して、リードコマンドの実行依頼をDCM#1に送信する。リードコマンドは、NVMe SSD$0に対してメモリ#0へのリードデータの転送を要求するリードコマンドである。
Figure 7 is an explanatory diagram showing an example of the operation of
(3)DCM#1は、図3に示したようなコマンドフォーマットで、担当CM#0のFPGA#0内のSQ-IDに対応するDoorbellレジスタへの所定のデータ(1ブロック分のデータ)の転送要求をリードコマンドに追加する。そして、DCM#1は、当該リードコマンドをNVMe SSD$0に送信する。
(3)
具体的には、例えば、DCM#1は、リードコマンドのデータアドレス1に、担当CM#0のメモリ#0内のデータ領域の転送先アドレスを設定する。また、DCM#1は、データアドレス2に、担当CM#0のFPGA#0内のSQ-IDに対応するDoorbellレジスタのアドレスを設定する。また、DCM#1は、Number of Logical Blocksを「L+1」として設定する。
Specifically, for example,
(4)NVMe SSD$0は、リードコマンドに応じて、担当CM#0のメモリ#0のデータ領域(リードコマンドのデータアドレス1に格納されているアドレス)に、Starting LBAからLブロック分のリードデータを書き込む。
(4) In response to the read command, NVMe SSD $0 writes L blocks of read data from the Starting LBA to the data area of
(5)NVMe SSD$0は、担当CM#0のFPGA#0内のDoorbellレジスタ領域(データアドレス2に格納されているアドレス)に、リードデータに続く1ブロック分のデータを書き込む。
(5) NVMe SSD$0 writes one block of data following the read data to the doorbell register area (address stored in data address 2) in
(6)FPGA#0は、担当CM#0のCPU#0へ、書き込みの完了したDoorbellレジスタのDoorbell IDと関連付けられたMSI-X IDを指定した割り込みを発行する。例えば、Doorbell ID「0」のDoorbellレジスタへの書き込みが完了した場合、MSI-X ID「0」を指定した割り込みがCPU#0に発行される。この場合、CPU#0は、ID対応表400内のMSI-X ID「0」に対応する割り込みフラグを「1」に設定する。
(6)
(7)CPU#0は、SQ-IDを指定した転送完了応答をDCM#1から受け付けた場合、ID対応表400内の指定されたSQ-IDに対応する割り込みフラグを参照して、リードデータの送達状況を判定する。
(7) When
これにより、担当CM#0は、DCM#1を介して、NVMe SSD$0にアクセスした際に、リードデータの転送が正常に行われたか否かを判別することができる。
This allows the
(ストレージシステム100の処理手順)
つぎに、ストレージシステム100の処理手順について説明する。まず、図8を用いて、ストレージシステム100の正常時の処理手順について説明する。ただし、CM#0を担当CMとし、CM#1をDCMとする。また、担当CM#0のPCIe SW#0とNVMe SSD$0との間に障害が発生し、担当CM#0からNVMe SSD$0へ直接アクセスできない場合を想定する。
(Processing Procedure of Storage System 100)
Next, the processing procedure of the
図8は、ストレージシステム100の正常時の処理手順の一例を示すシーケンス図である。図9は、ID対応表400の更新例を示す説明図(その1)である。図8のシーケンス図において、まず、担当CM#0のCPU#0は、ID対応表400にID対応情報を作成する(ステップS801)。
Figure 8 is a sequence diagram showing an example of a processing procedure when the
ここでは、新規発行コマンドに割り振るSQ IDを「1」とする。この場合、図9の(A)に示すように、SQ ID「1」に対応するID対応情報400-2が作成され、ID対応表400に新規登録される。なお、ID対応表400には、実行依頼中のリードコマンドに割り振られたSQ ID「0」に対応するID対応情報400-1が登録されている。 In this case, the SQ ID to be assigned to the newly issued command is "1". In this case, as shown in FIG. 9A, ID correspondence information 400-2 corresponding to SQ ID "1" is created and newly registered in ID correspondence table 400. Note that ID correspondence information 400-1 corresponding to SQ ID "0" assigned to the read command being requested for execution is registered in ID correspondence table 400.
つぎに、担当CM#0のCPU#0は、特定したSQ ID「1」を指定して、NVMe SSD$kに対してメモリ#iへのリードデータの転送を要求するリードコマンドの実行依頼をDCM#jに送信する(ステップS802)。
Next,
DCM#1のCPU#1は、SQ ID「1」を指定したリードコマンドの実行依頼を受け付けると、担当CM#0のFPGA#0内のSQ ID「1」に対応するDoorbellレジスタへの所定のデータの転送要求を追加したリードコマンドを、メモリ#1上のSQ ID「1」に対応するSQに書き込む(ステップS803)。
When
例えば、図3に示したようなフォーマットのリードコマンドがSQに書き込まれる。なお、リードコマンドのOpcode、データアドレス1、データアドレス2、Starting LBAおよびNumber of Logical Blocksを特定する情報は、例えば、担当CM#0からの実行依頼に含まれる。より詳細に説明すると、例えば、DCM#1のCPU#1は、SQ ID「1」に対応するDoorbellレジスタへの転送先アドレスをデータアドレス2へ設定し、Number of Logical Blocksを「L+1」として設定する。
For example, a read command in the format shown in FIG. 3 is written to the SQ. Note that information specifying the Opcode,
つぎに、DCM#1のCPU#1は、NVMe SSD$0のSubmission Queue Doorbellレジスタに、SQのTail値を書き込む(ステップS804)。Tail値は、新しいコマンドが処理のために送信されたことを、NVMe SSD$0に示すためのものである。
Next,
つぎに、NVMe SSD$0は、DCM#1のメモリ#1上のSQから、リードコマンドを取得する(ステップS805)。そして、NVMe SSD$0は、リードコマンドのデータアドレス1に基づいて、Starting LBAから読み出したLブロック分のリードデータを、担当CM#0のメモリ#0へ転送する(ステップS806)。
Next, NVMe SSD$0 acquires a read command from SQ on
つぎに、NVMe SSD$0は、リードコマンドのデータアドレス2に基づいて、Lブロック分のリードデータに続く1ブロック分のデータを読み出して、読み出した1ブロック分のデータを、担当CM#0のFPGA#0のDoorbellレジスタへ転送する(ステップS807)。
Next, NVMe SSD$0 reads one block of data following the L blocks of read data based on
担当CM#0のFPGA#0は、書き込みの完了したDoorbellレジスタのDoorbell IDと関連付けられたMSI-X IDを指定した割り込みを発行する(ステップS808)。担当CM#0のCPU#0は、ID対応表400内のMSI-X IDに対応する割り込みフラグを「1」に設定する(ステップS809)。
The
ここでは、Doorbell ID「1」のDoorbellレジスタへの書き込みが完了し、MSI-X ID「1」を指定した割り込みが発行されたとする。この場合、図9の(B)に示すように、MSI-X ID「1」に対応するID対応情報400-2の割り込みフラグが「1」に設定される。なお、SQ ID「0」を指定したリードコマンドが正常に完了したため、ID対応情報400-1が削除されている。また、新たに発行されるリードコマンドに割り振られたSQ ID「2」に対応するID対応情報400-3が登録されている。 Here, let us assume that writing doorbell ID "1" to the doorbell register is complete, and an interrupt specifying MSI-X ID "1" is issued. In this case, as shown in FIG. 9B, the interrupt flag of ID correspondence information 400-2 corresponding to MSI-X ID "1" is set to "1." Note that because the read command specifying SQ ID "0" was completed successfully, ID correspondence information 400-1 has been deleted. Also, ID correspondence information 400-3 corresponding to SQ ID "2" assigned to the newly issued read command has been registered.
NVMe SSD$0は、リードコマンドで要求されたデータの転送が完了した場合、DCM#1のメモリ#1上のCQ ID「1」に対応するCQに転送完了通知を書き込む(ステップS810)。そして、NVMe SSD$0は、DCM#1のCPU#1へMSI-X割り込みを発行する(ステップS811)。
When the transfer of the data requested by the read command is completed, NVMe SSD$0 writes a transfer completion notification to the CQ corresponding to CQ ID "1" in
DCM#1のCPU#1は、MSI-X割り込みを受けると、CQ ID「1」に対応するCQを確認して処理を完了する(ステップS812)。つぎに、DCM#1のCPU#1は、NVMe SSD$0のCompletion Queue Doorbellレジスタに、CQのHead値を書き込む(ステップS813)。Head値は、処理が完了したことを、NVMe SSD$0に示すためのものである。
When
そして、DCM#1のCPU#1は、SQ-ID「1」を指定した完了応答(Good)を担当CM#0のCPU#0に送信する(ステップS814)。担当CM#0のCPU#0は、SQ-ID「1」を指定した完了応答を受け付けた場合、ID対応表400内のSQ-ID「1」に対応する割り込みフラグを確認して、リードデータの送達状況を判定する(ステップS815)。
Then,
ここでは、SQ-ID「1」に対応する割り込みフラグが「1」のため、リードデータが送達され、SQ ID「1」を指定したリードコマンドが正常に完了したと判定される。そして、担当CM#0のCPU#0は、完了したリードコマンドに対応するエントリをID対応表400から削除する(ステップS816)。
In this case, because the interrupt flag corresponding to SQ-ID "1" is "1", it is determined that the read data has been delivered and the read command specifying SQ ID "1" has been completed successfully.
ここでは、図9の(C)に示すように、SQ-ID「1」に対応するID対応情報400-2(エントリ)がID対応表400から削除される。 Here, as shown in (C) of Figure 9, the ID correspondence information 400-2 (entry) corresponding to SQ-ID "1" is deleted from the ID correspondence table 400.
これにより、担当CM#0からDCM#1を介してNVMe SSD$0へアクセスする場合であっても、リードデータの送達保証を確保することが可能となる。
This makes it possible to ensure delivery of read data even when NVMe SSD$0 is accessed from
つぎに、図10を用いて、ストレージシステム100の異常発生時の処理手順について説明する。
Next, the processing procedure when an abnormality occurs in the
図10は、ストレージシステム100の異常発生時の処理手順の一例を示すシーケンス図である。図11は、ID対応表400の更新例を示す説明図(その2)である。図10のシーケンス図において、まず、担当CM#0のCPU#0は、ID対応表400にID対応情報を作成する(ステップS1001)。
Figure 10 is a sequence diagram showing an example of a processing procedure when an abnormality occurs in the
ここでは、新規発行コマンドに割り振るSQ IDを「1」とする。この場合、図11の(D)に示すように、SQ ID「1」に対応するID対応情報400-2が作成され、ID対応表400に新規登録される。なお、ID対応表400には、実行依頼中のリードコマンドに割り振られたSQ ID「0」に対応するID対応情報400-1が登録されている。 In this case, the SQ ID to be assigned to the newly issued command is "1". In this case, as shown in FIG. 11(D), ID correspondence information 400-2 corresponding to SQ ID "1" is created and newly registered in ID correspondence table 400. Note that ID correspondence information 400-1 corresponding to SQ ID "0" assigned to the read command being requested for execution is registered in ID correspondence table 400.
つぎに、担当CM#0のCPU#0は、特定したSQ ID「1」を指定して、NVMe SSD$kに対してメモリ#iへのリードデータの転送を要求するリードコマンドの実行依頼をDCM#jに送信する(ステップS1002)。
Next,
DCM#1のCPU#1は、SQ ID「1」を指定したリードコマンドの実行依頼を受け付けると、担当CM#0のFPGA#0内のSQ ID「1」に対応するDoorbellレジスタへの所定のデータの転送要求を追加したリードコマンドを、メモリ#1上のSQ ID「1」に対応するSQに書き込む(ステップS1003)。
When
つぎに、DCM#1のCPU#1は、NVMe SSD$0のSubmission Queue Doorbellレジスタに、SQのTail値を書き込む(ステップS1004)。つぎに、NVMe SSD$0は、DCM#1のメモリ#1上のSQから、リードコマンドを取得する(ステップS1005)。
Next,
そして、NVMe SSD$0は、リードコマンドのデータアドレス1に基づいて、Starting LBAから読み出したLブロック分のリードデータを、担当CM#0のメモリ#0へ転送する(ステップS1006)。つぎに、NVMe SSD$0は、リードコマンドのデータアドレス2に基づいて、Lブロック分のリードデータに続く1ブロック分のデータを読み出して、読み出した1ブロック分のデータを、担当CM#0のFPGA#0のDoorbellレジスタへ転送する(ステップS1007)。
Then, NVMe SSD$0 transfers the L blocks of read data read from the Starting LBA to
ここでは、ハードウェアの一時不良などにより、担当CM#0のPCIe SW#0とDCM#1のPCIe SW#1との間のリンクが切れて、メモリ#0へのデータ転送とDoorbellレジスタへのデータ転送が失敗した場合を想定する。この場合、Doorbell ID「1」のDoorbellレジスタへの書き込みは実行されないため、MSI-X割り込みは発行されない。このため、図11の(E)に示すように、SQ ID「1」に対応するID対応情報400-2の割り込みフラグは「0」のままである。
Here, we will assume that a temporary hardware fault or the like causes the link between
NVMe SSD$0は、リードコマンドで要求されたデータの転送が完了した場合、DCM#1のメモリ#1上のCQ ID「1」に対応するCQに転送完了通知を書き込む(ステップS1008)。そして、NVMe SSD$0は、DCM#1のCPU#1へMSI-X割り込みを発行する(ステップS1009)。
When the transfer of the data requested by the read command is completed, NVMe SSD$0 writes a transfer completion notification to the CQ corresponding to CQ ID "1" in
DCM#1のCPU#1は、MSI-X割り込みを受けると、CQ ID「1」に対応するCQを確認して処理を完了する(ステップS1010)。つぎに、DCM#1のCPU#1は、NVMe SSD$0のCompletion Queue Doorbellレジスタに、CQのHead値を書き込む(ステップS1011)。
When
そして、DCM#1のCPU#1は、SQ-ID「1」を指定した完了応答(Good)を担当CM#0のCPU#0に送信する(ステップS1012)。担当CM#0のCPU#0は、SQ-ID「1」を指定した完了応答を受け付けた場合、ID対応表400内のSQ-ID「1」に対応する割り込みフラグを確認して、リードデータの送達状況を判定する(ステップS1013)。
Then,
ここでは、図11の(F)に示すように、SQ-ID「1」に対応する割り込みフラグが「0」のため、リードデータが送達されておらず、SQ ID「1」を指定したリードコマンドが正常に完了していないと判定される。そして、担当CM#0のCPU#0は、所定のリカバリ処理を実施した後、SQ ID「1」を指定したリードコマンドの実行依頼をDCM#jに再度送信する(ステップS1014)。
In this case, as shown in FIG. 11(F), the interrupt flag corresponding to SQ-ID "1" is "0", so it is determined that the read data has not been delivered and the read command specifying SQ ID "1" has not been completed successfully. Then,
これにより、ハードウェアの一時不良などによりデータ転送が失敗したことを検知することができる。また、経路(リンク)を再構築するなどのリカバリ処理を実施して、DCM#jにリードコマンドを再依頼することができる。 This makes it possible to detect when a data transfer has failed due to a temporary hardware fault, etc. Also, recovery procedures such as reconstructing the path (link) can be performed, and the read command can be re-requested from DCM#j.
(ストレージシステム100のその他の実施例)
つぎに、図12および図13を用いて、ストレージシステム100のその他の実施例について説明する。ここでは、ストレージシステム100に複数のCE(12CM構成)が含まれる場合について説明する。
Other Embodiments of
Next, another embodiment of the
図12は、ストレージシステム100のその他の実施例を示す説明図(その1)である。図12において、ストレージシステム100は、CE$0~$5を含む。各CE$0~$5は、2つのCMとNVMe SSDとをそれぞれ有する。なお、図12では、各CM#iのハードウェア構成の一部を抜粋して表示している。
Figure 12 is an explanatory diagram (part 1) showing another embodiment of the
ストレージシステム100において、CM間は、FRT(Front End Router)1200を介して、互いに通信可能に接続される。FRT1200は、PCIe SWを有し、CM間を互いに通信可能に接続する。なお、CM間を接続するFRTとして、FRT1200のみ表記したが、2以上のFRTにより冗長化されていてもよい。
In the
ここで、CM#0を担当CMとし、CM#1をDCMとする。また、担当CM#0のPCIe SW#0とNVMe SSD$0との間に障害が発生し、担当CM#0からNVMe SSD$0へ直接アクセスできない場合を想定する。この場合、担当CM#0からDCM#1へのリードコマンドの実行依頼は、FRT1200を介して行われる。
Here,
また、NVMe SSD$0から担当CM#0へのデータ転送も、FRT1200を介して行われる。なお、図12中、太線矢印は、ホスト装置110から要求されたリードデータが、NVMe SSD#0から読み出されて、ホスト装置110に到達するまでの経路を示している。
In addition, data transfer from NVMe SSD $0 to
つぎに、図13を用いて、担当CMとリードデータを有するNVMe SSDとが異なるCEに配置されている場合について説明する。ただし、ストレージシステム100のシステム構成は、図12に示したシステム構成と同一とする。また、図13では、各CM#iのハードウェア構成の一部を抜粋して表示している。
Next, using FIG. 13, we will explain the case where the responsible CM and the NVMe SSD having the read data are located in different CEs. However, the system configuration of the
図13は、ストレージシステム100のその他の実施例を示す説明図(その2)である。ここで、CM#11を担当CMとし、CM#1(または、CM#0)をDCMとする。すなわち、リードデータを有するNVMe SSDを、CE$0内のNVMe SSD$0とする。
Figure 13 is an explanatory diagram (part 2) showing another embodiment of the
この場合、担当CM#11からDCM#1へのリードコマンドの実行依頼は、FRT1200を介して行われる。また、NVMe SSD$0から担当CM#11へのデータ転送も、FRT1200を介して行われる。なお、図13中、太線矢印は、ホスト装置110から要求されたリードデータが、NVMe SSD#0から読み出されて、ホスト装置110に到達するまでの経路を示している。
In this case, the request to execute the read command from the
以上説明したように、実施の形態にかかるCM#i(担当CM)によれば、DCM#jを経由して、NVMe SSD$kにアクセスする場合、NVMe SSD$kに対して自メモリ#iへのリードデータの転送を要求するとともに、自FPGA#i内の指定したID(SQ ID)に対応するDoorbellレジスタへの所定のデータの転送を要求するリードコマンドの実行依頼を、DCM#jに送信することができる。 As described above, according to the embodiment, when CM#i (responsible CM) accesses NVMe SSD$k via DCM#j, it can request NVMe SSD$k to transfer read data to its own memory#i, and can also send a request to DCM#j to execute a read command that requests the transfer of specified data to the doorbell register corresponding to the specified ID (SQ ID) in its own FPGA#i.
これにより、NVMe SSD$kに直接アクセスできない場合、自メモリ#iへのリードデータの転送を要求するとともに、自FPGA#i内の指定したSQ IDに対応するDoorbellレジスタへの所定のデータの転送を要求するリードコマンドの実行を依頼することができる。 As a result, if the NVMe SSD$k cannot be accessed directly, it is possible to request the transfer of read data to the local memory #i and to request the execution of a read command that requests the transfer of specified data to the Doorbell register corresponding to the specified SQ ID in the local FPGA #i.
また、CM#i(担当CM)によれば、FPGA#iからID(SQ IDに関連するMSI-X ID)を指定した割り込みを受け付けた場合、当該IDに対応する割り込みフラグを有効にすることができる。FPGA#iは、CM#iが備える集積回路であり、データ転送用のDoorbellレジスタを含み、Doorbellレジスタへの書き込みが行われた場合に当該Doorbellレジスタに対応するID(MSI-X ID)を指定した割り込みをCPU#iへ発行する。 In addition, according to CM#i (responsible CM), when an interrupt specifying an ID (MSI-X ID related to the SQ ID) is received from FPGA#i, the interrupt flag corresponding to that ID can be enabled. FPGA#i is an integrated circuit provided in CM#i, and includes a doorbell register for data transfer. When data is written to the doorbell register, an interrupt specifying an ID (MSI-X ID) corresponding to that doorbell register is issued to CPU#i.
これにより、FPGA#i内のDoorbellレジスタへの書き込み状況を判別することができる。 This allows you to determine the write status to the Doorbell register in FPGA #i.
また、CM#i(担当CM)によれば、実行依頼に応じてDCM#jからNVMe SSD$kに発行される、自メモリ#iへのリードデータの転送を要求するとともに、指定したID(SQ ID)に対応するDoorbellレジスタへの所定のデータの転送を要求するリードコマンドの実行が完了した場合に、当該ID(SQ ID)を指定した完了応答をDCM#jから受け付けることができる。 In addition, according to CM#i (responsible CM), when the execution of the read command issued from DCM#j to NVMe SSD$k in response to the execution request, which requests the transfer of read data to its own memory #i and also requests the transfer of specified data to the doorbell register corresponding to the specified ID (SQ ID), can be completed, the CM#i can receive a completion response specifying the ID (SQ ID) from DCM#j.
これにより、DCM#jに実行依頼したリードコマンドの実行が完了したことを把握することができる。ただし、PCIeのポステッド・ライトのため、DCM#jからの完了応答だけでは、メモリ#iへのリードデータの転送が正常に行われたかどうかはわからない。 This makes it possible to know that the execution of the read command requested to DCM#j has been completed. However, because this is a PCIe posted write, the completion response from DCM#j alone does not indicate whether the transfer of the read data to memory#i was successful.
また、CM#i(担当CM)によれば、DCM#jからID(SQ ID)を指定した完了応答を受け付けた場合、当該IDに対応する割り込みフラグを参照して、自メモリ#iへのリードデータの送達状況を判定することができる。 In addition, when CM#i (responsible CM) receives a completion response from DCM#j specifying an ID (SQ ID), it can refer to the interrupt flag corresponding to that ID to determine the status of delivery of the read data to its own memory#i.
これにより、NVMe SSD$kからメモリ#iへのデータ転送と同一の経路を使用して行われるFPGA#i内のDoorbellレジスタへの書き込み状況(データの送達状況)から、メモリ#iへのリードデータの送達状況を判定することができる。 This makes it possible to determine the status of read data delivery to memory #i from the write status (data delivery status) to the Doorbell register in FPGA #i, which is performed using the same path as the data transfer from NVMe SSD $k to memory #i.
また、CM#i(担当CM)によれば、複数のID(0~N)のそれぞれのID(Doorbell ID)に対応するDoorbellレジスタを含み、Doorbellレジスタへの書き込みが行われた場合に当該Doorbellレジスタに対応するIDを指定した割り込みを発行するFPGA#iを備え、リードコマンドの実行依頼を、複数のIDのうち他のリードコマンドに対応していないID(SQ ID)を指定して、DCM#jに送信することができる。 CM#i (responsible CM) also includes a doorbell register corresponding to each of the multiple IDs (0 to N) (doorbell ID), and is equipped with an FPGA#i that issues an interrupt specifying the ID corresponding to the doorbell register when a write is made to the doorbell register, and can send a request to execute a read command to DCM#j by specifying an ID (SQ ID) among the multiple IDs that does not correspond to other read commands.
これにより、各リードコマンドに関する一連の流れの中で、SQ、CQ、Doorbellレジスタ、MSI-X割り込みに、他のリードコマンドに非対応の同じIDを使用して、SQ、CQ、Doorbellレジスタ、MSI-XのIDによる関連付けを行うことができる。このため、複数のリードコマンドを実行した場合であっても、CPU#iがFPGA#iから受け取ったMSI-XのIDを確認することで、どのSQ IDのリードコマンドが正常に完了したのかを判別可能となる。 As a result, in the sequence of events relating to each read command, the same ID that does not correspond to other read commands can be used for the SQ, CQ, Doorbell register, and MSI-X interrupts, allowing association by the SQ, CQ, Doorbell register, and MSI-X IDs. Therefore, even when multiple read commands are executed, CPU#i can determine which SQ ID read command completed successfully by checking the MSI-X ID received from FPGA#i.
また、CM#i(担当CM)によれば、ID(SQ ID)を指定した完了応答をDCM#jから受け付けた場合に、当該IDに対応する割り込みフラグが有効であれば、自メモリ#iへリードデータが送達されたと判定することができる。また、CM#i(担当CM)によれば、当該IDに対応する割り込みフラグが無効であれば、自メモリ#iへリードデータが送達されなかったと判定することができる。 In addition, according to CM#i (the CM in charge), when a completion response specifying an ID (SQ ID) is received from DCM#j, if the interrupt flag corresponding to that ID is enabled, it can be determined that the read data has been sent to its own memory #i. In addition, according to CM#i (the CM in charge), if the interrupt flag corresponding to that ID is disabled, it can be determined that the read data has not been sent to its own memory #i.
これにより、一時的なハードウェア障害などが発生して、FPGA#i内のDoorbellレジスタへの書き込みが行われなかった場合は、自メモリ#iへのデータ転送も正常に行われなかったと判断することができる。一方、FPGA#i内のDoorbellレジスタへの書き込みが行われた場合は、自メモリ#iへのデータ転送も正常に行われたと判断することができる。 As a result, if a temporary hardware failure occurs and the doorbell register in FPGA #i is not written to, it can be determined that data transfer to its own memory #i was also not successful. On the other hand, if the doorbell register in FPGA #i is written to, it can be determined that data transfer to its own memory #i was also successful.
また、CM#i(DCM)によれば、自CMを経由して、他CM#j(担当CM)がNVMe SSD$kにアクセスする場合、他CM#jから、NVMe SSD$kに対して他CM#jのメモリ#jへのリードデータの転送を要求するとともに、他CM#jのFPGA#j内の指定されたIDに対応するDoorbellレジスタへの所定のデータの転送を要求するリードコマンドの実行依頼を受け付けることができる。そして、CM#i(DCM)によれば、他CM#jからの実行依頼に応じてリードコマンドをNVMe SSD$kに発行することができる。また、CM#i(DCM)によれば、NVMe SSD$kからリードコマンドで要求されたデータの転送完了通知があった場合、当該IDを指定した完了応答を他CM#jに送信することができる。 In addition, according to CM #i (DCM), when another CM #j (responsible CM) accesses NVMe SSD $k via its own CM, it can accept a request from the other CM #j to transfer read data to the memory #j of the other CM #j from the NVMe SSD $k, and a request to execute a read command that requests the transfer of specified data to a doorbell register corresponding to a specified ID in the FPGA #j of the other CM #j. Then, according to CM #i (DCM), it can issue a read command to NVMe SSD $k in response to the execution request from the other CM #j. In addition, according to CM #i (DCM), when there is a notification of completion of the transfer of data requested by the read command from NVMe SSD $k, it can send a completion response specifying the ID to the other CM #j.
これにより、担当CM#jからの実行依頼に応じて、他メモリ#jへのリードデータの転送を要求するリードコマンドに、当該リードコマンドに対応するSQ IDに関連付けられたDoorbell IDのDoorbellレジスタへの所定のデータの転送要求を追加して、NVMe SSD$kへ発行することができる。また、リードコマンドで要求されたデータのNVMe SSD$kによる転送が完了した場合に、リードコマンドの実行が完了したことを示す完了応答を他CM#jに通知することができる。 In this way, in response to an execution request from the responsible CM #j, a read command requesting the transfer of read data to another memory #j can be issued to the NVMe SSD $k by adding a request to transfer specific data to the doorbell register of the doorbell ID associated with the SQ ID corresponding to the read command. In addition, when the transfer of the data requested by the read command by the NVMe SSD $k is completed, a completion response indicating that the execution of the read command is completed can be notified to the other CM #j.
具体的には、例えば、DCM#iは、リードコマンドのデータアドレス1に、担当CM#jのメモリ#j内のデータ領域の転送先アドレスを設定する。また、DCM#iは、データアドレス2に、担当CM#jのFPGA#j内の指定されたSQ-IDに対応するDoorbellレジスタのアドレスを設定する。また、DCM#iは、Number of Logical Blocksを「L+1」として設定する。これにより、メモリ#jへのリードデータの転送が完了した後、Doorbellレジスタへ1ブロック分のデータを転送するよう要求することができ、通信量の増加を抑えつつ、リードデータの送達状況を効果的に判別することが可能となる。
Specifically, for example, DCM#i sets the destination address of the data area in memory #j of responsible CM#j to
また、CM#i(DCM)によれば、自CMを経由して、他CM#j(担当CM)がNVMe SSD$kにアクセスする場合、複数のID(0~N)のそれぞれのIDごとに、当該IDに対応するコマンドが格納されるSQと、当該コマンドの完了状態を示す情報が格納されるCQとを自メモリ#i内に作成することができる。そして、CM#i(DCM)によれば、他CM#jから実行依頼を受け付けた場合、自メモリ#i内の指定されたID(SQ ID)に対応するSQにリードコマンドを格納することができる。また、CM#i(DCM)によれば、NVMe SSD$kによって、リードコマンドの完了を示す情報が自メモリ#i内の当該IDに対応するCQに書き込まれた場合、当該IDを指定した完了応答を他CM#jに送信することができる。 According to CM#i (DCM), when another CM#j (responsible CM) accesses NVMe SSD$k via its own CM, it is possible to create in its own memory #i an SQ in which a command corresponding to that ID is stored and a CQ in which information indicating the completion status of that command is stored for each of a plurality of IDs (0 to N). Then, according to CM#i (DCM), when an execution request is received from another CM#j, it is possible to store a read command in an SQ corresponding to a specified ID (SQ ID) in its own memory #i. Also, according to CM#i (DCM), when information indicating the completion of a read command is written by NVMe SSD$k to a CQ corresponding to that ID in its own memory #i, it is possible to send a completion response specifying that ID to the other CM#j.
これにより、複数のリードコマンドの実行を依頼された場合であっても、各リードコマンドの完了状態を区別することが可能となる。 This makes it possible to distinguish the completion status of each read command even when multiple read commands are requested to be executed.
これらのことから、実施の形態にかかるストレージシステム100およびCM#iによれば、担当CM#iが他CM#j(DCM)を経由して、NVMe SSD$kにアクセスする場合であっても、データの送達保証を確保することが可能となり、データ抜け(不達)にともなうホスト装置110におけるデータ化けを防ぐことができる。
As a result, according to the
なお、本実施の形態で説明した送達状況判定方法は、予め用意されたプログラムをストレージ制御装置等のコンピュータで実行することにより実現することができる。本送達状況判定プログラムは、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本送達状況判定プログラムは、インターネット等のネットワークを介して配布してもよい。 The delivery status determination method described in this embodiment can be realized by executing a prepared program on a computer such as a storage control device. This delivery status determination program is recorded on a computer-readable recording medium such as a hard disk, a flexible disk, a CD (Compact Disc)-ROM, a DVD (Digital Versatile Disk), or a USB (Universal Serial Bus) memory, and is executed by being read from the recording medium by the computer. In addition, this delivery status determination program may be distributed via a network such as the Internet.
上述した実施の形態に関し、さらに以下の付記を開示する。 The following additional notes are provided with respect to the above-described embodiment.
(付記1)データ転送用のバッファ領域を含み、前記バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行する、内部の回路を再構成可能な集積回路または専用の集積回路を備え、
他のストレージ制御装置を経由して、レスポンスを要求しないデータ転送を行うストレージデバイスにアクセスする場合、自メモリへのリードデータの転送を要求するとともに、前記集積回路内の指定した第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を、前記他のストレージ制御装置に送信し、
前記集積回路から前記第1の識別子を指定した割り込みを受け付けた場合、前記第1の識別子に対応する割り込みフラグを有効にし、
前記実行依頼に応じて前記他のストレージ制御装置から前記ストレージデバイスに発行される前記リードコマンドの実行が完了した場合に、前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付け、
前記完了応答を受け付けた場合、前記第1の識別子に対応する割り込みフラグを参照して、前記リードデータの送達状況を判定する、
制御部を有することを特徴とするストレージ制御装置。
(Note 1) A reconfigurable integrated circuit or a dedicated integrated circuit includes a buffer area for data transfer, and issues an interrupt specifying an identifier corresponding to the buffer area when data is written to the buffer area;
When accessing a storage device that performs data transfer without requesting a response via another storage control device, a request is sent to the other storage control device to request transfer of read data to its own memory, and a request is sent to the other storage control device to execute a read command that requests transfer of predetermined data to a buffer area corresponding to a specified first identifier in the integrated circuit;
when an interrupt specifying the first identifier is received from the integrated circuit, an interrupt flag corresponding to the first identifier is enabled;
receiving, when execution of the read command issued from the other storage control device to the storage device in response to the execution request is completed, a completion response specifying the first identifier from the other storage control device;
when the completion response is received, referring to an interrupt flag corresponding to the first identifier, to determine a delivery status of the read data;
A storage control device comprising a control unit.
(付記2)前記集積回路は、
複数の識別子のそれぞれの識別子に対応するバッファ領域を含み、前記バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行し、
前記制御部は、
前記複数の識別子のうち他のリードコマンドに対応していない第1の識別子を指定して、前記リードコマンドの実行依頼を前記他のストレージ制御装置に送信する、
ことを特徴とする付記1に記載のストレージ制御装置。
(Supplementary Note 2) The integrated circuit comprises:
a buffer area corresponding to each of a plurality of identifiers, and when writing is performed to the buffer area, an interrupt is issued specifying the identifier corresponding to the buffer area;
The control unit is
specifying a first identifier, among the plurality of identifiers, that does not correspond to another read command, and transmitting an execution request for the read command to the other storage control device;
2. The storage control device according to
(付記3)前記制御部は、
前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付けた場合に、前記第1の識別子に対応する割り込みフラグが有効であれば、前記リードデータが送達されたと判定し、前記第1の識別子に対応する割り込みフラグが無効であれば、前記リードデータが送達されなかったと判定する、
ことを特徴とする付記1または2に記載のストレージ制御装置。
(Additional Note 3) The control unit
when a completion response designating the first identifier is received from the other storage control device, if an interrupt flag corresponding to the first identifier is enabled, it is determined that the read data has been delivered, and if the interrupt flag corresponding to the first identifier is disabled, it is determined that the read data has not been delivered.
3. The storage control device according to
(付記4)前記制御部は、
自装置を経由して、他のストレージ制御装置が前記ストレージデバイスにアクセスする場合、前記他のストレージ制御装置から、前記他のストレージ制御装置のメモリへのリードデータの転送を要求するとともに、前記他のストレージ制御装置の集積回路内の指定された第2の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を受け付け、
前記実行依頼を受け付けた場合、前記リードコマンドを前記ストレージデバイスに発行し、
前記ストレージデバイスから前記リードコマンドで要求されたデータの転送完了通知があった場合、前記第2の識別子を指定した完了応答を前記他のストレージ制御装置に送信する、
ことを特徴とする付記1~3のいずれか一つに記載のストレージ制御装置。
(Additional Note 4) The control unit
When another storage control device accesses the storage device via the storage control device, the storage control device requests the transfer of read data to a memory of the other storage control device and also receives a request to execute a read command requesting the transfer of predetermined data to a buffer area corresponding to a specified second identifier in an integrated circuit of the other storage control device;
When the execution request is received, the read command is issued to the storage device;
when a transfer completion notification of the data requested by the read command is received from the storage device, a completion response designating the second identifier is transmitted to the other storage control device;
4. The storage control device according to
(付記5)前記制御部は、
自装置を経由して、他のストレージ制御装置が前記ストレージデバイスにアクセスする場合、複数の識別子のそれぞれの識別子ごとに、当該識別子に対応するコマンドが格納される第1キューと、当該コマンドの完了状態を示す情報が格納される第2キューとを自メモリ内に作成し、
前記実行依頼を受け付けた場合、自メモリ内の前記第2の識別子に対応する第1キューに前記リードコマンドを格納し、
前記ストレージデバイスによって、前記リードコマンドの完了を示す情報が自メモリ内の前記第2の識別子に対応する第2キューに書き込まれた場合、前記第2の識別子を指定した完了応答を前記他のストレージ制御装置に送信する、
ことを特徴とする付記4に記載のストレージ制御装置。
(Additional Note 5) The control unit
When another storage control device accesses the storage device via the storage control device, a first queue is created in the storage control device's memory for each of a plurality of identifiers, in which a command corresponding to the identifier is stored, and a second queue is created in which information indicating a completion state of the command is stored;
When the execution request is received, the read command is stored in a first queue corresponding to the second identifier in the local memory;
when information indicating completion of the read command is written by the storage device to a second queue in its own memory corresponding to the second identifier, transmitting a completion response specifying the second identifier to the other storage control device;
5. The storage control device according to
(付記6)前記集積回路は、FPGA(Field Programmable Gate Array)である、ことを特徴とする付記1~5のいずれか一つに記載のストレージ制御装置。
(Appendix 6) The storage control device described in any one of
(付記7)前記ストレージデバイスは、NVMe(Non-Volatile Memory Express) SSD(Solid State Drive)である、ことを特徴とする付記1~6のいずれか一つに記載のストレージ制御装置。
(Appendix 7) The storage control device according to any one of
(付記8)前記所定のデータは、前記ストレージデバイスから自メモリへの前記リードデータの転送が完了した後、前記第1の識別子に対応するバッファ領域へ転送される、ことを特徴とする付記1に記載のストレージ制御装置。
(Appendix 8) The storage control device described in
(付記9)データ転送用のバッファ領域を含み、前記バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行する、内部の回路を再構成可能な集積回路または専用の集積回路を備えたストレージ制御装置に、
他のストレージ制御装置を経由して、レスポンスを要求しないデータ転送を行うストレージデバイスにアクセスする場合、自メモリへのリードデータの転送を要求するとともに、前記集積回路内の指定した第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を、前記他のストレージ制御装置に送信し、
前記集積回路から前記第1の識別子を指定した割り込みを受け付けた場合、前記第1の識別子に対応する割り込みフラグを有効にし、
前記実行依頼に応じて前記他のストレージ制御装置から前記ストレージデバイスに発行される前記リードコマンドの実行が完了した場合に、前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付け、
前記完了応答を受け付けた場合、前記第1の識別子に対応する割り込みフラグを参照して、前記リードデータの送達状況を判定する、
処理を実行させることを特徴とする送達状況判定プログラム。
(Supplementary Note 9) A storage control device including a buffer area for data transfer, which issues an interrupt specifying an identifier corresponding to the buffer area when writing to the buffer area, the storage control device including an integrated circuit whose internal circuitry can be reconfigured or a dedicated integrated circuit,
When accessing a storage device that performs data transfer without requesting a response via another storage control device, a request is sent to the other storage control device to request transfer of read data to its own memory, and a request is sent to the other storage control device to execute a read command that requests transfer of predetermined data to a buffer area corresponding to a specified first identifier in the integrated circuit;
when an interrupt specifying the first identifier is received from the integrated circuit, an interrupt flag corresponding to the first identifier is enabled;
receiving, when execution of the read command issued from the other storage control device to the storage device in response to the execution request is completed, a completion response specifying the first identifier from the other storage control device;
when the completion response is received, referring to an interrupt flag corresponding to the first identifier, to determine a delivery status of the read data;
A delivery status determination program that executes a process.
(付記10)複数のストレージ制御装置と、レスポンスを要求しないデータ転送を行うストレージデバイスとを含むストレージシステムであって、
前記複数のストレージ制御装置のいずれかのストレージ制御装置は、
データ転送用のバッファ領域を含み、前記バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行する、内部の回路を再構成可能な集積回路または専用の集積回路を備え、
他のストレージ制御装置を経由して、レスポンスを要求しないデータ転送を行うストレージデバイスにアクセスする場合、自メモリへのリードデータの転送を要求するとともに、前記集積回路内の指定した第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を、前記他のストレージ制御装置に送信し、
前記他のストレージ制御装置は、
前記実行依頼を受け付けた場合、前記リードコマンドを前記ストレージデバイスに発行し、
前記ストレージ制御装置は、
前記集積回路から前記第1の識別子を指定した割り込みを受け付けた場合、前記第1の識別子に対応する割り込みフラグを有効にし、
前記実行依頼に応じて前記他のストレージ制御装置から前記ストレージデバイスに発行された前記リードコマンドの実行が完了した場合に、前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付け、
前記完了応答を受け付けた場合、前記第1の識別子に対応する割り込みフラグを参照して、前記リードデータの送達状況を判定する、
ことを特徴とするストレージシステム。
(Supplementary Note 10) A storage system including a plurality of storage control devices and a storage device that performs data transfer without requiring a response,
Any one of the storage control devices,
an integrated circuit having an internal circuit that can be reconfigured or a dedicated integrated circuit that includes a buffer area for data transfer, and issues an interrupt specifying an identifier corresponding to the buffer area when writing is performed to the buffer area;
When accessing a storage device that performs data transfer without requesting a response via another storage control device, a request is sent to the other storage control device to request transfer of read data to its own memory, and a request is sent to the other storage control device to execute a read command that requests transfer of predetermined data to a buffer area corresponding to a specified first identifier in the integrated circuit;
The other storage control device includes:
When the execution request is received, the read command is issued to the storage device;
The storage control device includes:
when an interrupt specifying the first identifier is received from the integrated circuit, an interrupt flag corresponding to the first identifier is enabled;
when execution of the read command issued from the other storage control device to the storage device in response to the execution request is completed, a completion response specifying the first identifier is received from the other storage control device;
when the completion response is received, referring to an interrupt flag corresponding to the first identifier, to determine a delivery status of the read data;
A storage system comprising:
(付記11)前記他のストレージ制御装置は、
複数の識別子のそれぞれの識別子ごとに、当該識別子に対応するコマンドが格納される第1キューと、当該コマンドの完了状態を示す情報が格納される第2キューとを自メモリ内に作成し、
前記実行依頼を受け付けた場合、自メモリ内の前記第1の識別子に対応する第1キューに前記リードコマンドを格納し、
前記ストレージデバイスによって、前記リードコマンドの完了を示す情報が自メモリ内の前記第1の識別子に対応する第2キューに書き込まれた場合、前記第1の識別子を指定した完了応答を前記ストレージ制御装置に送信する、
ことを特徴とする付記10に記載のストレージシステム。
(Additional Note 11) The other storage control device,
creating, for each of the plurality of identifiers, a first queue in which a command corresponding to the identifier is stored and a second queue in which information indicating a completion state of the command is stored in the local memory;
When the execution request is received, the read command is stored in a first queue corresponding to the first identifier in the local memory;
when information indicating completion of the read command is written by the storage device to a second queue in its own memory corresponding to the first identifier, transmitting a completion response specifying the first identifier to the storage control device;
11. The storage system according to
100 ストレージシステム
110 ホスト装置
400 ID対応表
501 第1の受付部
502 第1の要求処理部
503 判定部
504 復旧部
601 第2の受付部
602 第2の要求処理部
1200 FRT
cmd NVMeコマンド
#0,#1,#i,#j CM、CPU、メモリ、CA、FPGA、PCIe SW
$0~$5 CE、NVMe SSD
100
cmd
$0~$5 CE, NVMe SSD
Claims (9)
他のストレージ制御装置を経由して、データ転送を行うストレージデバイスであって、当該データ転送に対する転送先からのレスポンスを要求しない前記ストレージデバイスにアクセスする場合、前記ストレージデバイスに対して自メモリへのリードデータの転送を要求するとともに、前記ストレージデバイスに対して前記集積回路内の指定した第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を、前記他のストレージ制御装置に送信し、
前記集積回路から前記第1の識別子を指定した割り込みを受け付けた場合、前記第1の識別子に対応する割り込みフラグを有効にし、
前記実行依頼に応じて前記他のストレージ制御装置から前記ストレージデバイスに発行される前記リードコマンドの実行が完了した場合に、前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付け、
前記完了応答を受け付けた場合、前記第1の識別子に対応する割り込みフラグを参照して、前記リードデータの送達状況を判定する、
制御部を有することを特徴とするストレージ制御装置。 an integrated circuit having an internal circuit that can be reconfigured or a dedicated integrated circuit that includes a buffer area for data transfer, and issues an interrupt specifying an identifier corresponding to the buffer area when writing is performed to the buffer area;
when accessing a storage device that performs data transfer via another storage control device and does not require a response from a transfer destination for the data transfer, sending to the other storage control device a request to execute a read command that requests the storage device to transfer read data to its own memory and requests the storage device to transfer predetermined data to a buffer area corresponding to a specified first identifier in the integrated circuit;
when an interrupt specifying the first identifier is received from the integrated circuit, an interrupt flag corresponding to the first identifier is enabled;
receiving, when execution of the read command issued from the other storage control device to the storage device in response to the execution request is completed, a completion response specifying the first identifier from the other storage control device;
when the completion response is received, referring to an interrupt flag corresponding to the first identifier, to determine a delivery status of the read data;
A storage control device comprising a control unit.
複数の識別子のそれぞれの識別子に対応するバッファ領域を含み、前記バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行し、
前記制御部は、
前記複数の識別子のうち他のリードコマンドに対応していない第1の識別子を指定して、前記リードコマンドの実行依頼を前記他のストレージ制御装置に送信する、
ことを特徴とする請求項1に記載のストレージ制御装置。 The integrated circuit comprises:
a buffer area corresponding to each of a plurality of identifiers, and when writing is performed to the buffer area, an interrupt is issued specifying the identifier corresponding to the buffer area;
The control unit is
specifying a first identifier, among the plurality of identifiers, that does not correspond to another read command, and transmitting an execution request for the read command to the other storage control device;
The storage control device according to claim 1 .
前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付けた場合に、前記第1の識別子に対応する割り込みフラグが有効であれば、前記リードデータが送達されたと判定し、前記第1の識別子に対応する割り込みフラグが無効であれば、前記リードデータが送達されなかったと判定する、
ことを特徴とする請求項1または2に記載のストレージ制御装置。 The control unit is
when a completion response designating the first identifier is received from the other storage control device, if an interrupt flag corresponding to the first identifier is enabled, it is determined that the read data has been delivered, and if the interrupt flag corresponding to the first identifier is disabled, it is determined that the read data has not been delivered.
3. The storage control device according to claim 1 or 2.
自装置を経由して、他のストレージ制御装置が前記ストレージデバイスにアクセスする場合、前記他のストレージ制御装置から、前記ストレージデバイスに対して前記他のストレージ制御装置のメモリへのリードデータの転送を要求するとともに、前記ストレージデバイスに対して前記他のストレージ制御装置の集積回路内の指定された第2の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を受け付け、
前記実行依頼を受け付けた場合、前記リードコマンドを前記ストレージデバイスに発行し、
前記ストレージデバイスから前記リードコマンドで要求されたデータの転送完了通知があった場合、前記第2の識別子を指定した完了応答を前記他のストレージ制御装置に送信する、
ことを特徴とする請求項1~3のいずれか一つに記載のストレージ制御装置。 The control unit is
When another storage control device accesses the storage device via the storage control device, the storage control device requests the storage device to transfer read data to a memory of the other storage control device, and also receives a request to execute a read command from the other storage control device to request the storage device to transfer specified data to a buffer area corresponding to a specified second identifier in an integrated circuit of the other storage control device;
When the execution request is received, the read command is issued to the storage device;
when a transfer completion notification of the data requested by the read command is received from the storage device, a completion response specifying the second identifier is transmitted to the other storage control device;
4. The storage control device according to claim 1, wherein the storage control device is a storage control device.
自装置を経由して、他のストレージ制御装置が前記ストレージデバイスにアクセスする場合、複数の識別子のそれぞれの識別子ごとに、当該識別子に対応するコマンドが格納される第1キューと、当該コマンドの完了状態を示す情報が格納される第2キューとを自メモリ内に作成し、
前記実行依頼を受け付けた場合、自メモリ内の前記第2の識別子に対応する第1キューに前記リードコマンドを格納し、
前記ストレージデバイスによって、前記リードコマンドの完了を示す情報が自メモリ内の前記第2の識別子に対応する第2キューに書き込まれた場合、前記第2の識別子を指定した完了応答を前記他のストレージ制御装置に送信する、
ことを特徴とする請求項4に記載のストレージ制御装置。 The control unit is
When another storage control device accesses the storage device via the storage control device, a first queue is created in the storage control device's memory for each of a plurality of identifiers, in which a command corresponding to the identifier is stored, and a second queue is created in which information indicating a completion state of the command is stored,
When the execution request is received, the read command is stored in a first queue corresponding to the second identifier in the local memory;
when information indicating completion of the read command is written by the storage device to a second queue in its own memory corresponding to the second identifier, transmitting a completion response specifying the second identifier to the other storage control device;
The storage control device according to claim 4 .
他のストレージ制御装置を経由して、データ転送を行うストレージデバイスであって、当該データ転送に対する転送先からのレスポンスを要求しない前記ストレージデバイスにアクセスする場合、前記ストレージデバイスに対して自メモリへのリードデータの転送を要求するとともに、前記ストレージデバイスに対して前記集積回路内の指定した第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を、前記他のストレージ制御装置に送信し、
前記集積回路から前記第1の識別子を指定した割り込みを受け付けた場合、前記第1の識別子に対応する割り込みフラグを有効にし、
前記実行依頼に応じて前記他のストレージ制御装置から前記ストレージデバイスに発行される前記リードコマンドの実行が完了した場合に、前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付け、
前記完了応答を受け付けた場合、前記第1の識別子に対応する割り込みフラグを参照して、前記リードデータの送達状況を判定する、
処理を実行させることを特徴とする送達状況判定プログラム。 A storage control device including a buffer area for data transfer, which issues an interrupt specifying an identifier corresponding to the buffer area when writing is performed to the buffer area, the storage control device including an integrated circuit whose internal circuitry can be reconfigured or a dedicated integrated circuit,
when accessing a storage device that performs data transfer via another storage control device and does not require a response from a transfer destination for the data transfer, sending to the other storage control device a request to transfer read data to the storage device's own memory and a read command request to transfer predetermined data to a buffer area corresponding to a specified first identifier in the integrated circuit;
when an interrupt specifying the first identifier is received from the integrated circuit, an interrupt flag corresponding to the first identifier is enabled;
receiving, when execution of the read command issued from the other storage control device to the storage device in response to the execution request is completed, a completion response specifying the first identifier from the other storage control device;
when the completion response is received, referring to an interrupt flag corresponding to the first identifier, to determine a delivery status of the read data;
A delivery status determination program that executes a process.
前記複数のストレージ制御装置のいずれかのストレージ制御装置は、
データ転送用のバッファ領域を含み、前記バッファ領域への書き込みが行われた場合に当該バッファ領域に対応する識別子を指定した割り込みを発行する、内部の回路を再構成可能な集積回路または専用の集積回路を備え、
他のストレージ制御装置を経由して、前記ストレージデバイスにアクセスする場合、前記ストレージデバイスに対して自メモリへのリードデータの転送を要求するとともに、前記ストレージデバイスに対して前記集積回路内の指定した第1の識別子に対応するバッファ領域への所定のデータの転送を要求するリードコマンドの実行依頼を、前記他のストレージ制御装置に送信し、
前記他のストレージ制御装置は、
前記実行依頼を受け付けた場合、前記リードコマンドを前記ストレージデバイスに発行し、
前記ストレージ制御装置は、
前記集積回路から前記第1の識別子を指定した割り込みを受け付けた場合、前記第1の識別子に対応する割り込みフラグを有効にし、
前記実行依頼に応じて前記他のストレージ制御装置から前記ストレージデバイスに発行された前記リードコマンドの実行が完了した場合に、前記第1の識別子を指定した完了応答を前記他のストレージ制御装置から受け付け、
前記完了応答を受け付けた場合、前記第1の識別子に対応する割り込みフラグを参照して、前記リードデータの送達状況を判定する、
ことを特徴とするストレージシステム。 A storage system including a plurality of storage control devices and a storage device that performs data transfer and does not require a response from a transfer destination to the data transfer ,
Any one of the storage control devices,
an integrated circuit having an internal circuit that can be reconfigured or a dedicated integrated circuit that includes a buffer area for data transfer, and issues an interrupt specifying an identifier corresponding to the buffer area when writing is performed to the buffer area;
When accessing the storage device via another storage control device, a request is sent to the other storage control device to request the storage device to transfer read data to its own memory, and a request is sent to the other storage control device to execute a read command to request the storage device to transfer predetermined data to a buffer area corresponding to a specified first identifier in the integrated circuit;
The other storage control device includes:
When the execution request is received, the read command is issued to the storage device;
The storage control device includes:
when an interrupt specifying the first identifier is received from the integrated circuit, an interrupt flag corresponding to the first identifier is enabled;
when execution of the read command issued from the other storage control device to the storage device in response to the execution request is completed, a completion response specifying the first identifier is received from the other storage control device;
when the completion response is received, referring to an interrupt flag corresponding to the first identifier, to determine a delivery status of the read data;
A storage system comprising:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020144566A JP7553783B2 (en) | 2020-08-28 | 2020-08-28 | STORAGE CONTROL DEVICE, DELIVERY STATUS DETECTION PROGRAM, AND STORAGE SYSTEM |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020144566A JP7553783B2 (en) | 2020-08-28 | 2020-08-28 | STORAGE CONTROL DEVICE, DELIVERY STATUS DETECTION PROGRAM, AND STORAGE SYSTEM |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2022039501A JP2022039501A (en) | 2022-03-10 |
JP7553783B2 true JP7553783B2 (en) | 2024-09-19 |
Family
ID=80498504
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020144566A Active JP7553783B2 (en) | 2020-08-28 | 2020-08-28 | STORAGE CONTROL DEVICE, DELIVERY STATUS DETECTION PROGRAM, AND STORAGE SYSTEM |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7553783B2 (en) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006227856A (en) | 2005-02-17 | 2006-08-31 | Hitachi Ltd | Access control device and interface mounted on the same |
JP2012212360A (en) | 2011-03-31 | 2012-11-01 | Nec Corp | Input/output control device, computer, and control method |
-
2020
- 2020-08-28 JP JP2020144566A patent/JP7553783B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006227856A (en) | 2005-02-17 | 2006-08-31 | Hitachi Ltd | Access control device and interface mounted on the same |
JP2012212360A (en) | 2011-03-31 | 2012-11-01 | Nec Corp | Input/output control device, computer, and control method |
Also Published As
Publication number | Publication date |
---|---|
JP2022039501A (en) | 2022-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10789196B2 (en) | Storage system | |
KR101455016B1 (en) | Method and apparatus to provide a high availability solid state drive | |
US9298648B2 (en) | Method and system for I/O flow management using RAID controller with DMA capabilitiy to directly send data to PCI-E devices connected to PCI-E switch | |
US10901626B1 (en) | Storage device | |
TW202416147A (en) | Solid-state drive with initiator mode | |
US11507307B2 (en) | Storage system including a memory controller that enables each storage controller of a plurality of storage controllers to exclusively read and write control information of the memory | |
CN120256193A (en) | Non-volatile memory switch with host isolation | |
JP4100256B2 (en) | Communication method and information processing apparatus | |
CN114817093B (en) | A data transmission method, system, device and storage medium | |
TW201926056A (en) | Processing method and computer system of data redundancy | |
CN101218571B (en) | System and method for performing mirrored write-behind operations, and bus bridge | |
JP2009053946A (en) | Block device controller with duplex controller configuration | |
JP6773974B2 (en) | Storage controller and storage device | |
JP7553783B2 (en) | STORAGE CONTROL DEVICE, DELIVERY STATUS DETECTION PROGRAM, AND STORAGE SYSTEM | |
TW202143035A (en) | Bridge circuit and computer system | |
CN118069052A (en) | Information processing method and related device | |
US11782603B2 (en) | Optimized communicaton in storage system | |
JP4936088B2 (en) | Disk array device, disk array system, and cache control method | |
CN113051206B (en) | Bridge circuit and computer system | |
JP5076400B2 (en) | Data processing system and information processing apparatus | |
US10719391B2 (en) | Storage system and storage control apparatus | |
JP6825263B2 (en) | Storage controller and storage system | |
US11940938B2 (en) | Hypervisor bridging of different versions of an IO protocol | |
JP7201775B2 (en) | Storage system, data management method, and data management program | |
CN114579047B (en) | Data storage system architecture with controller and data access method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230511 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240229 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20240402 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240509 |
|
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: 20240806 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240819 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7553783 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |