WO2015121912A1 - データ記憶装置 - Google Patents
データ記憶装置 Download PDFInfo
- Publication number
- WO2015121912A1 WO2015121912A1 PCT/JP2014/053107 JP2014053107W WO2015121912A1 WO 2015121912 A1 WO2015121912 A1 WO 2015121912A1 JP 2014053107 W JP2014053107 W JP 2014053107W WO 2015121912 A1 WO2015121912 A1 WO 2015121912A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- data
- command
- dma
- transfer
- buffer
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0727—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a storage system, e.g. in a DASD or network based storage system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0751—Error or fault detection not based on redundancy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
- G06F11/0772—Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
Definitions
- the present invention relates to a PCIe connection type data storage device.
- SSD Solid State Disk
- SATA Serial ATA
- SAS Serial Attached SCSI
- PCIe PCI-Express
- the host mainly sends commands and data to the device side, whereas in NVMe, only the command is created from the host.
- the command is acquired, the data is transferred, and the apparatus side is the main body. That is, the action is replaced with an action from the device side.
- the host transmits Write data to the device. In NVMe, this is realized by an operation in which the device reads host data.
- processing of the Read command is realized by an operation in which the apparatus writes data to the host memory.
- both the host and the device do not directly add addresses to data or commands exchanged with each other, but attach IDs and tags specified by the protocol. Since both perform conversion between IDs and tags and their memory addresses (part of protocol conversion) at the time of receipt, protocol conversion is always required regardless of command and data, and overhead is large.
- NVMe the storage device directly transfers data by reading / writing data from / to the memory address space of the host. For this reason, the overhead of protocol conversion is small, and the latency can be reduced.
- NVMe is a lightweight communication protocol that simplifies the command system and reduces transfer overhead (latency), so the PCIe-SSD (PCIe-Flash) device that uses this protocol conforms to the PCI-Express bandwidth. High I / O performance and high-speed response performance (low latency) are required.
- Patent Document 1 in the SSD connected to the host computer, the SSD processor analyzes the command received from the host computer and transfers the data to DMA (Direct Memory Access) in the host interface based on the contents of the analyzed command. Directing is disclosed.
- data is compressed and stored in a flash memory, but a host interface and a data compression engine are arranged in series.
- the processing performance of the processor becomes a bottleneck.
- the processor processes all operation determinations and DMA activations. Therefore, in order to improve the I / O processing performance, it is necessary to improve the efficiency of the processing itself or to strengthen the processor itself.
- increasing the physical quantity such as the frequency of the processor and the number of cores increases the power consumption and the amount of heat generated.
- a device such as a cache device that is incorporated into a system uses a limited amount of heat and power consumption because of space constraints and power supply, and the processor cannot be reinforced unconditionally.
- flash memory is vulnerable to heat, it is not desirable to mount components with a large amount of heat generation in a limited space from that viewpoint.
- the host interface and compression engine are arranged in series, and two types of DMA transfer are required for data transfer, so the latency is large and high response is difficult. Since this transfer is performed by activating the DMA of the host interface and the DMA of the compression engine, each data transfer must go through two DMA transfers, and the latency is high.
- Patent Document 1 is configured to support a transfer protocol such as Fiber Channel or SAS that cannot directly access both memories.
- the present invention has been made in view of the above problems. That is, one of the objects of the present invention is to use DMA, which is hardware, without strengthening a processor in a storage device that uses a protocol such as NVMe to exchange data with a host by a memory read / write request. It is to realize data transfer that enables high-speed I / O processing with low latency.
- the data storage device is a command transfer DMA that is connected to the storage device for storing data, a command buffer for storing a command for instructing data transfer generated by the external device, and a hardware circuit, respectively. (Direct Memory Access), transfer list generation DMA, and data transfer DMA.
- DMA Direct Memory Access
- transfer list generation DMA transfer list generation DMA
- data transfer DMA data transfer DMA
- Command transfer DMA acquires commands from the memory of the external device, acquires the command contents, stores the command in the command buffer, acquires the command number that identifies the command being processed, and responds to the command instructions
- the transfer list generation DMA is activated by transmitting the command number, and the transfer list generation DMA specifies the address of the memory that is the target of data transfer with the external device based on the command stored in the command buffer.
- the data transfer DMA is activated by transmitting the address to the data transfer DMA, and the data transfer DMA transfers data to and from the memory based on the address.
- the DMA for each processing phase in which the host memory is accessed can be transferred in parallel and without passing through another DMA, so that data transfer with low latency can be realized.
- the hardware can operate efficiently without waiting for instructions from the processor, and the processor does not need to perform DMA transfer instructions and transfer completion confirmation, thereby reducing the number of processing instructions of the processor. For this reason, the number of I / Os that can be processed per unit time is improved without strengthening the processor. Accordingly, since the processing efficiency of both the processor and the hardware is improved, the I / O processing performance of the entire apparatus can be improved.
- FIG. 1 is a block diagram of a PCIe connection type cache memory device in Embodiment 1.
- FIG. 1 is an external view of a PCIe connection type cache memory device in Embodiment 1.
- FIG. 1 is an external view of a PCIe connection type cache memory device in Embodiment 1.
- FIG. 3 is a schematic diagram illustrating an I / O processing procedure between a PCIe-connected cache memory device and a host device in Embodiment 1.
- FIG. 3 is a block diagram illustrating a configuration of NVMe DMA in Embodiment 1.
- FIG. 3 is a block diagram illustrating a configuration of PARAMPARDMA in Embodiment 1.
- FIG. 3 is a block diagram illustrating a configuration of DATA DMA in Embodiment 1.
- FIG. 3 is a diagram showing a configuration of management information arranged on the SRAM in the first embodiment.
- FIG. 3 is a diagram illustrating a configuration of a buffer arranged on a DRAM in the first embodiment.
- 3 is a flowchart of hardware processing operations according to the first exemplary embodiment.
- 6 is a schematic diagram illustrating I / O processing by cooperation of DMA in Embodiment 1.
- FIG. 1 is a block diagram illustrating a configuration of an RMW DMA in Embodiment 1.
- FIG. 6 is a flowchart of Read Modify Write processing in write processing from a host in Embodiment 1; 6 is a block diagram of a storage system equipped with a cache memory device in Embodiment 2.
- FIG. 1 is a block diagram illustrating a configuration of an RMW DMA in Embodiment 1.
- 6 is a flowchart of Read Modify Write processing in write processing from a host in Embodiment 1;
- 6 is a block diagram of a storage system equipped
- FIG. 10 is a flowchart of a write process of a storage system in Embodiment 2.
- 10 is a flowchart of read processing of a storage system in Embodiment 2.
- FIG. 10 is a schematic diagram of address mapping in the cache memory device according to the second embodiment.
- 1 is a block diagram of a cache memory device in Embodiment 1.
- FIG. 1 is a block diagram of a cache memory device in Embodiment 1.
- FIG. 6 is a diagram illustrating a command format of NVMe in Embodiment 1.
- Example 1 A mode for carrying out the present invention will be described using Example 1 and Example 2.
- the form which can be implemented by the partial change from the said Example is described as a modification within each Example.
- FIG. 1 is a block diagram showing the configuration of the cache device according to this embodiment.
- the cache device 1 is used by being connected to the host device 2 via PCI-Express (PCIe).
- PCIe PCI-Express
- the host device 2 inputs / outputs the generated data and the data received from other devices using the NVMe protocol command set. Examples of the host device 2 include a server system and a storage system (disk array) controller.
- the host device 2 can also be called a device external to the cache device.
- Cache device 1 includes hardware logic 10 implemented as an LSI or FPGA, flash memory chips (FM) 121 and 122 used as storage media of the device, and DRAM (Dynamic Random Access Memory) used as a temporary storage area 131 and 132.
- FM 121 and 122 and DRAM 131 and 32 may be combined as long as they are installed for the purpose of using them separately from the viewpoint of price, capacity, and performance.
- a combination of ReRAM (Resistance Random Access Memory) and MRAM (Magnetic Random Access Memory), PRAM (Phase Change Memory) and DRAM can be considered.
- a combination of SLC (Single Level Cell) NAND and TLC (Triple Level Cell) NAND may be used.
- the description of two of them is intended to be mounted in plural, and may be one or many.
- the capacity per one of both does not need to be the same, and the number of mounting does not need to be the same.
- the hardware logic 10 is a controller that controls the PCIe core 110, FM 121, 122, etc., which is the connection port with the host device 2, and controls the FM controller DMA (FMC DMA) 120, DRAM 131, 132, etc.
- a DRAM controller (DRAMC) 130 is provided. Furthermore, it includes a processor 140 for performing internal control, an SRAM 150 used for storing various information, and DMAs 160 to 190 for various transfer processes.
- the FMC 120 and the DRAMC 130 are illustrated one by one, a plurality of FMCs 120 and DRAMCs 130 may be provided depending on the capacity and performance to be supported. Further, a plurality of channels or buses may be provided under one FMC 120 or DRAMC 130. Conversely, a plurality of FMCs 120 may be provided in one channel or bus.
- the above-described PCIe core 110 is a part having the minimum logic necessary for communication of the PCIe physical layer and its upper layer, and plays a role of bridging access to the upper device side memory space.
- the bus 200 is a connection arbitration unit for the various DMAs 160 to 180 to access the memory space on the host device side through the PCIe core 110.
- bus 210 is a connection part for the various DMAs 180 and 190 and the FMC DMA 120 to access the DRAMs 131 and 132.
- the processor 140, the SRAM 150, and various DMAs are coupled to each other.
- Each of the buses 200 to 220 is essentially the same in the form of a switch coupling network.
- the various DMAs 160 to 180 described above are provided for each processing phase in which access to the memory of the host device 2 occurs during NVMe processing, and are configured as follows.
- NVMe DMA160 that performs NVMe command reception and response processing (completion) processing
- PARAM DMA170 that acquires a list (PRP List) that describes the address of the transfer source or transfer destination
- DATA DMA180 for transferring user data.
- RMW DMA 190 for merging (Read-Modify) the compressed data and the uncompressed data on the FM 121, 122 or the DRAM 131, 132 is provided. The detailed behavior of each DMA will be described later.
- the DMAs 160, 170, and 180 that need to access the memory space of the host device 2 are individually connected to the host device via the bus 200 so that they can be accessed independently and without an extra DMA in the middle. It is connected in parallel to the PCIe core 110 which is a connection port to the. Similarly, DMAs 120, 180, and 190 that require access to the DRAMs 131 and 132 are connected in parallel to the DRAMC 130 via the bus 210.
- the NVMe DMA 160 and the PARAM DMA 170 are connected by a control signal line 230, the PARAM DMA 170 and the DATA DMA 180 are connected by a control signal line 240, and the DATA DMA 180 and the NVMe DMA 160 are connected by a control signal line 250.
- each processing phase requires different hardware circuits for configuring the DMA, so that each DMA can execute a specific process at a higher speed than performing a plurality of processing phases with one DMA.
- other DMAs can also execute processing in parallel, so higher-speed command processing can be realized.
- the processor can realize data transfer without giving instructions to each DMA, the bottleneck of the processor is eliminated.
- each DMA does not need to wait for instructions from the processor, so it can operate efficiently. For this purpose, three DMAs need to perform processing in cooperation with each other. The DMA linkage will be described later.
- each DMA when each DMA is connected in series, for example, PARAM DMA170 needs to access host device 2 via NVMe DMA160 and DATA ⁇ DMA180 and NVAMNDMA160 and PARAM need to access It is necessary to access the host device 2 via each DMA 170.
- each DMA since the latency is large and the performance is deteriorated, in this embodiment, by providing three DMAs in parallel, each DMA does not need to go through another DMA in order to access the host device 2. Thereby, further higher performance can be realized.
- the processing on the front end side of the cache device is implemented in hardware, thereby enabling high-performance data transfer utilizing the PCIe broadband.
- the cache device of the present embodiment includes a hardware circuit that compresses data. As a result, the amount of data written can be reduced, and the life of the flash memory can be extended. In addition, by compressing data, the amount of data that can be stored in the cache device is substantially increased, and an improvement in the cache hit rate can be expected, thereby improving the system performance.
- the processor 140 is an embedded processor provided in an LSI or FPGA, and may have a plurality of cores such as the cores 140a and 140b.
- the control software of the apparatus 1 operates, for example, FM wear leveling and garbage collection control, flash memory logical address and physical address mapping management, and FM chip life management.
- the processor 140 is connected to the bus 220, and the SRAM 150 connected to the bus is used as various information that requires high-speed access from the processor and DMA and as a working area for the control software.
- Various DMAs are also connected to the bus 220 for accessing the SRAM 150 and communicating with the processor as needed.
- FIGS. 2a and 2b are views showing an appearance image in order to deepen understanding of the cache device 1 described in FIG. First, FIG. 2a will be described.
- Fig. 2a is a diagram showing an image when the cache device is mounted in the form of a PCIe card.
- the entire appearance corresponds to the cache device 1
- the hardware logic 10 is mounted on the left hand side of the figure as an LSI (including FPGA and ASIC forms).
- a DRAM 131 and flash memories (FM) 121 to 127 are mounted in the form of DIMMs, and are connected to the host device through the card edge 11.
- the PCIe core 110 is mounted on the LSI, and the signal line is wired toward the card edge 11.
- the edge 11 may have a connector shape.
- a battery or a supercapacitor that plays the same role may be mounted to protect volatilization of the DRAM 131 of the device.
- Fig. 2b shows the image when this cache device is mounted as a huge package board.
- the board shown on the right side of the figure corresponds to the cache device 1, and the hardware logic 10, DRAMs 131 and 132, and a large number of FM 121 and the like are mounted as in FIG. 2a.
- a connection is made via a cable and an adapter such as the PCIe cable adapter 250 that extend PCIe to the outside.
- the package board-shaped cache device 1 is often housed in a dedicated housing for power supply and cooling.
- FIG. 3 schematically shows the flow of NVMe command processing performed between the cache device 1 and the host device 2.
- the host device 2 creates a submission command with a prescribed format 1900.
- the memory 20 of the host device 2 is provided with a submission queue 201 for storing a submission command and a completion queue 202 for receiving a command completion notification in the memory area of the host device 2 for each processor core.
- the queues 201 and 202 are ring buffers for literally queuing commands.
- the enqueue side is managed by the Tail pointer, the dequeue side is managed by the Head pointer, and the presence or absence of queuing is managed by the difference.
- the head address of each Queue area is transmitted to the cache device 1 using the NVMe Administration command at the time of initialization.
- Each area for storing commands is called Entry.
- the memory area 204 for storing the data to be written to the cache device 1, the data read from the cache device 1, and the address when designating the data area 204 are specified.
- An area 203 or the like for storing a PRP (Physical Regions Pages) List that is compiled into a list is dynamically provided as necessary.
- the PRP is an address assigned for each memory page size determined at the initialization of NVMe. For example, when the memory page size is 4 KB, to specify 64 KB data, 16 PRPs are specified for every 4 KB.
- Completion Queue (CQHD) Doorbell 1621 for notifying that the Completion transmitted by 1 is taken out from Completion Queue and the Head pointer is updated is provided. These are usually part of the control register and are allocated to a memory address space accessible by the host device 2.
- FIG. 19 is a diagram illustrating the NVMe command format.
- Format 1900 comprises the following fields:
- Command Identifier 1901 is an area for storing a command ID.
- Opcode 1902 is an area for storing information indicating the processing contents of the command such as read and write.
- PRP Entry 1903 and 1904 are areas for storing PRP (Physical Region Pages). Up to 2 PRPs can be included in the NVMe command field, but if 16 are required as in the previous example, this field is not sufficient, so an address list is provided in a separate area as PRP List. Information indicating the area (address of the memory 20) in which the PRP list is stored is stored in the PRP list Entry 1904.
- Starting LBA 1905 is an area for storing the start position of an area where data is written or read.
- Number of Logical Blocks 1906 is an area for storing the size of data to be read or written.
- Data Set Mgmt 1907 is an area for storing information instructing whether or not to compress data to be written and whether or not to decompress read data.
- the format 1900 may include fields other than those shown in FIG.
- the host device 2 sequentially creates a submission command in the empty entry of the submission queue 201 in accordance with the command format defined in the NVMe standard. In order to notify the cache device 1 that the command has been generated, the host device 2 writes the final Entry number used for submission Queue Tail (SQT) Doorbell 1611, that is, the value of the Tail pointer (S300).
- SQL submission Queue Tail
- the cache device 1 polls the SQT Doorbell 1611 in a certain operation cycle, and detects whether or not a new command has been issued by comparing the difference between the Head pointer managed by itself and the SQT Doorbell.
- the cache device 1 issues a PCIe memory read request, obtains the command from the corresponding entry of the submission Queue 201 of the memory 20 of the host device 2, and designates it in each parameter field of the command Analyze each set setting (S310).
- the cache device 1 performs necessary data transfer processing based on the above command contents (S320 to 330).
- the cache device 1 Prior to data transfer, the cache device 1 acquires a PRP in order to know the memory address of the host device 2 that is the data transfer source or transfer destination. There is a field for storing PRP in the command, but the size is limited to two, so if the transfer length is long, this field is not the PRP itself but the storage location of PRP ⁇ List The address is specified as described above. In that case, the cache device 1 acquires the PRP List from the memory 20 of the higher-level device 2 using the address (S320).
- the transfer source or transfer destination address can be acquired.
- NVMe all transfers are performed mainly by the cache device 1. For example, when a write command is issued, that is, when the doorbell is sounded, the cache device 1 first accesses the memory 20 using a PCIe memory read request in order to obtain the contents of the command. Next, the memory 20 is accessed again to obtain PRP. Finally, the user accesses the memory 20 to read out user data and stores it in its own storage area (for example, DRAM) (S330A).
- DRAM DRAM
- the cache device 1 first accesses the memory 20 using a PCIe memory read request to obtain the contents of the command, and then the memory 20 to obtain the PRP. Finally, the user data is written to the memory address of the higher-order measure 2 specified by the PRP by the PCIe memory write request (S330B).
- the cache device 1 When the data transfer process is completed, the cache device 1 writes the completion status into the Completion Queue 202 of the memory 20 (S350). Then, according to the initial setting of PCIe and NVMe, the update of Completion Queue 202 is notified to the host device 2 by the PCIe MSI-X interrupt.
- the host device 2 reads the completion status from Completion IV Queue 202 and confirms it. Thereafter, the cache device 1 advances the Head pointer by the number of Completions processed, and notifies the same device that the command completion notification from the cache device 1 has been received and processed through writing to the CQHD Doorbell 1621 (S360).
- the host device 2 performs failure processing according to the content. Through the communication as described above, the host device 2 and the cache device 1 process one NVMe I / O command.
- FIG. 4 is a diagram illustrating an internal configuration of the NVMe DMA 160 according to the present embodiment.
- the NVMe DMA 160 is a DMA that performs command processing with the host device 2 through the previous SQT Doorbell 1611 and CQHD Doorbell 1612.
- the DMA is a command block (CMD BLK) 10 1610 that processes command reception, which is the first phase, a completion block (CPL_BLK) 1620 that returns a completion notification (completion) to the host device 2 after command processing, the control and processor of both It comprises a command manager (CMD_MGR) 1630 responsible for communication with the control software operating above, and a command discrimination block (CMD_JUDGE) 1640 for validating the format of the received command and determining the command type.
- CMD_MGR command manager
- CMD_JUDGE command discrimination block
- 1610 includes the above-mentioned submission / Queue / Tail / Doorbell (SQT) register 1611, Current / Head register 1612 for storing the entry number currently being processed in order to detect the difference from the register, and the CMD that actually acquires the command. There are a DMA 1613 and an internal buffer 1614 used when acquiring the command.
- SQL submission / Queue / Tail / Doorbell
- CPL_BLK 1620 CPL DMA1623 that generates and issues completion to the host device 2 according to the instruction from CMD_MGR1630, buffer 1624 used at the time of generation, Completion Queue Head Doorbell (CQHD) register 1621 There is a Current / Tail register 1622 for detection, and a table 1625 for storing the correspondence between the entry number of Completion / Queue and a command number 1500 (FIG. 7; described later) used in internal processing.
- CMD_MGR ⁇ 1630 manages the completion status of the command using the table and the completion reception notification (completion reception notification) from the higher-level device 2.
- CMD_BLK ⁇ 1610 and CPL_BLK ⁇ 1620 are connected to the PCIe core 110 through the bus 200, and bidirectional communication is possible.
- CMD_BLK ⁇ 1610 and CPL_BLK ⁇ 1620 are internally connected with CMD_MGR ⁇ 1630.
- CMD_MGR-1630 instructs CPL_BLK1613 to generate a completion response in response to an end notification or error notification from the control software and another DMA, and also manages the free space in the command buffer (Fig. 7; described later) provided in SRAM 150. It is managed based on the buffer request from CMD_BLK ⁇ 1610 and the buffer release notification from the processor.
- CMD_JUDGE 1640 is connected to CMD_BLK 1610, and is placed on the path through which the acquired command is transferred to the DRAM 131 command buffer.
- CMD_JUDGE 1640 discriminates the type of command (read command, write command or other) when the command passes, and checks whether the command format and its value do not deviate from the standard.
- the CMD_JUDGE 1640 is also connected to the DMA via the control signal line 230 in order to activate PARAM DMA 170, which will be described later, according to the command type determination result.
- an error response is returned to the higher-level device 2 and is also connected to CMD_MGR-1630 (not shown).
- FIG. 5 is a diagram showing an internal configuration of PARAM DMA 170 in the present embodiment.
- the PARAM DMA 170 is a DMA that analyzes parameters included in the command stored in the command buffer of the DRAM 131 by the CMD_BLK1610 and generates transfer parameters necessary for starting the DATA DMA ⁇ 180.
- PRP_DMA_BLK_W 1010 started by CMD_JUDGE 1640 in CMD_BLK when the command of the host device 2 is a write command, and read return data are prepared when the command of the host device 2 is a read command
- PRP_DMA_BLK_R 1720 that is activated by the processor 140 when it is made.
- the subscripts _W and _R correspond to the command types from the host device 2, and the former (_W) operates when processing a write command, and it operates when processing a read command. The latter (_R).
- PRP_DMA_BLK_W 1710 generates DMA parameters based on CMD acquisition unit (CMD FETCH) 1711 that acquires and analyzes necessary field information from commands, PRP fetch unit (PRP_FETCH) 1712 that analyzes and acquires PRP Entry, and PRP Entry A parameter generation unit (PRM_GEN) 1713 that performs communication with the DMA, and a DMA_COM 1714 that performs communication with the DMA, and buffers (not shown) that are used in the respective units.
- CMD FETCH CMD acquisition unit
- PRP_FETCH PRP fetch unit
- PRM_GEN PRP Entry A parameter generation unit
- PRP_DMA_BLK_R 1720 The configuration of PRP_DMA_BLK_R 1720 is the same, and consists of CMD_FETCH 1721, PRP_FETCH 1722, PRM_GEN 1723, DMA_COM 1724, and buffers used for each part.
- PRP_DMA_BLK_W 1010 and PRP_DMA_BLK_R 1720 are connected to the bus 200 to obtain the PRP Entry List from the host device 2, and also connected to the bus 220 to refer to the command information stored in the command buffer on the SRAM 150. . Further, in order to instruct data transfer using the generated DMA transfer parameter, connection is made via DATA_DMA 180 and a control signal line 240 described later.
- [PRP_DMA_BLK_W 1710] is further connected to CMD_JUDGE1640 and is activated from CMD_JUDGE1640 when the command is a write command.
- the PRP_DMA_BLK_R 1720 is activated by the processor 140 via the bus 220 after data to be transferred to the memory 20 of the host device 2 is prepared in the read buffers provided in the DRAMs 131 and 132.
- the connection with the bus 220 is also used to communicate with the processor 140 and CMD_MGR when a failure occurs.
- FIG. 6 is a diagram showing an internal configuration of DATA_DMA 180 in the present embodiment.
- DATA_DMA180 is generated based on the DMA transfer parameters generated by PRP_DMA_BLK_W
- 1720 which transfer by compression or non-compression to the write buffer provided in DRAM131, 132 of the apparatus 1 from the memory 20 of the high-order apparatus 2 generate
- the suffix _W or _R is intended for the type of I / O viewed from the host device 2.
- RX_DMA 610 for reading data from the memory 20 of the host device 2 to process the write command
- INPUT buffer 611 for storing the read data
- INPUT by trigger from RX_DMA610 Data is read from the buffer and compressed according to whether there is a compression instruction and whether the compression unit size has been reached.
- COMP DMA 612, OUTPUT buffer 613 for storing compressed data, DATA_DMA_W1810 Information such as the compression size at the end of operation Includes a status manager STS_MGR616 for managing the data to be passed to the processor, TX0_DMA 614 for transmitting compressed data to the DRAMs 131 and 132, and TX1_DMA 615 for transmitting uncompressed data to the DRAMs 131 and 132.
- TX1_DMA 615 is internally connected to the IPNUT buffer 611 so that uncompressed data can be read directly.
- TX0_DMA 614 and TX1_DMA 615 may be one DMA because of their configuration. In that case, the selector connects the INPUT buffer and the OUTPUT buffer.
- COMP DMA612 and TX1 DMA615 are connected by control signal line 617.
- COMP DMA 612 compresses the data.
- the COMP DMA 617 instructs the TX1 DMA 615 to transfer data without compression through the control signal line 617 in order to transfer the data without compression. For example, when the end of data is less than the compression unit or when the size after compression becomes larger than the original size.
- RX0_DMA 620 for reading from DRAM131 and 132 for decompression
- RX1_DMA 621 for reading for non-decompression
- INPUT buffer 622 for storing compressed data that has been read
- INPUT DECOMP DMA 623 that reads data from the buffer and decompresses it according to conditions
- status manager STS_MGR626 that manages compression information passed from the processor to determine the condition
- OUPUT buffer 624 that stores decompressed and unexpanded data
- host device TX_DMA 625 for writing data to the second memory 20 is included.
- RX1_DMA 622 is connected to the OUTPUT buffer 625 so that the compressed data can be written to the host device 2 without decompression.
- RX0_DMA 620 and RX1_DMA 622 may be one DMA in configuration. In that case, the selector connects the INPUT buffer and the OUTPUT buffer.
- DATA_DMA_W 1810 and DATA_DMA_R 1820 are connected to bus 200 to access memory 20 of host device 2, bus 210 to access DRAM 131, 132, and bus 220 to communicate with CPL_BLK1620 in case of failure.
- 1720, and DATA_DMA_R1720 are mutually connected in order to receive the DMA transfer parameter for operation
- FIG. 7 collectively shows information arranged in the SRAM 150 in the present embodiment described so far.
- the SRAM 150 has a command buffer 1510 for storing command information received from the host device 2 used in the CMD_DMA 160 and the like, and a compression information buffer 1520 for storing compression information when data corresponding to the command is compressed Are managed with command number 1500.
- the CMD_DMA 160 stores a command number for notifying the processor core 140a / b of a write command and data reception, and a write command ring buffer Wr Ring 710a / b, and similarly for notifying of command reception such as read.
- Non-write command ring buffer NWr Ring 720a / b for storing command number
- Completion completion ring buffer Cpl Ring740a / b for storing command number to notify completion of completion reception from host device 2
- FM There is a logical-physical conversion table 750 that records the correspondence between the physical address of the logical address and the logical address shown to the host device 2.
- the SRAM 150 is also used as a working area for control software that operates on the processor 140, but it is not related to the contents of the present invention, so the description is omitted.
- the command buffer 1510 includes a plurality of areas for acquiring and storing the NVMe command created in the entry of the submission queue from the higher-level device 2. Each area has the same size and is managed by a command number 1500. Therefore, if the command number is known, the hardware can know the access address of the area in which the command corresponding to the command number is stored from “start address + command number ⁇ fixed size”. Note that the command buffer 1510 is managed by hardware except for an area partially reserved for the processor 140.
- the compression information buffer 1520 is provided corresponding to each command, and the buffer is configured to store a plurality of pieces of information for each compression unit.
- the maximum transfer length is 256 KB and the compression unit is 4 KB, it is designed so that 64 pieces of compressed information can be stored in one compression buffer. How far the maximum transfer length is supported is a design matter of the device.
- the I / O size required by the host device application is often larger than the maximum transfer length (for example, 1 MB), but is often divided by the driver (for example, 256 KB ⁇ 4).
- the compression information stored in the compression information buffer 1520 in compression units includes, for example, a data buffer number, an offset within the data buffer, a size after compression, a valid / invalid flag of the corresponding data, and the like.
- the valid / invalid flag of the relevant data is used to indicate that when update data comes before writing to the flash memory, the data becomes old data and becomes unnecessary.
- the compression information may include any other information necessary for control. For example, in storage, data protection information such as T10DIF is often attached to each sector, but these may be removed without being compressed and left on the compressed information.
- T10DIF-8B when T10DIF-8B is added to 512B, compression may be performed in units of 512B ⁇ 4 sectors, and T10DIF information of 8B ⁇ 4 sectors may be recorded in the compressed information.
- the sector is 4096B and T10DIF-8B is added, 4096B is compressed and 8B is recorded in the compressed information.
- Wr Ring 710a / b is a ring buffer to notify the control software running on the processor core 140a / b when the command and data are received by the previous DMA160, 170, 180, and the command number Is stored.
- This buffer is managed by a generation pointer (P pointer) and a consumption pointer (C pointer).
- P pointer generation pointer
- C pointer consumption pointer
- the hardware advances the generation pointer each time the command buffer number is written to the ring buffer, and it is consumed each time the processor reads the command buffer number.
- Manage ring vacancy by advancing the pointer. Therefore, the difference between the two pointers matches the number of newly received commands.
- the configuration is the same for NWr / Ring 720a / b and Cpl Ring 740a / b.
- FIG. 8 illustrates the management of data areas arranged in the DRAMs 131 and 132 in this embodiment.
- DRAM 131 and 132 have Write Data Buffer 800 for storing write data, Read Data Buffer 810 for storing data staged from FM, and Modify Data Buffer 820 used during RMW operation.
- Each buffer is managed with a fixed length.
- a unique number assigned to each section is called a data buffer number. Since each section has a size of, for example, 64 KB, the number of data buffers associated with one command differs depending on the data size.
- FIG. 9 is a flowchart showing how the DMAs 160 to 180 work together in the present embodiment.
- a broken-line frame on the flowchart indicates which DMA operation, and in FIG. 9, a number starting with the subscript S indicates a hardware operation.
- the hardware operation waits for the processing described at the top of each broken line frame until an operation trigger is obtained, and again when a series of operations are completed with the trigger. Return to the wait state for the start process. Accordingly, the operation within each broken line frame is repeated each time an opportunity is obtained without waiting for the completion of the operation within the next broken line frame. For this reason, parallel processing becomes possible by making DMA independent for each processing as in this embodiment.
- the activation of DMA means that the DMA detects a change in value or starts a series of operations when a parameter or the like is received.
- numbers starting with the subscript M indicate processing in the processor.
- CMD_BLK1610 in NVMe DMA 160 changes the value of Current Head register 1612 and SQT It is detected that a command has been issued from the difference in value from Doorbell, and the subsequent operation is started (S9000).
- 1610 inquires CMD_MGR
- CMD_MGR ⁇ 1610 manages the command buffer 1510 by an internal management register, and periodically searches for an empty space in the command buffer 1510.
- the CMD_MGR ⁇ 1630 returns a command number 1500 corresponding to the vacant command buffer to the CMD_BLK ⁇ 1610.
- CMD_BLK1610 can obtain command number 1500, it calculates the address of submission Queue 201 of host device 2 based on the Entry number stored in Doorbell, and issues a memory read request via bus 200 and PCIe core 110. Get the command stored in submission Queue 201.
- the acquired command is temporarily stored in the internal buffer 1614 and stored in the command buffer 1510 corresponding to the previously acquired buffer number 1500 (S9010).
- the CMD_JUDGE 1640 analyzes the transferred command and determines the command (S9020).
- the CMD_JUDGE 1640 sends a command number via the control signal line 230 in order to perform data reception.
- the PRP_DMA_BLK_W 1710 in the PARAM_DMA 170 is activated upon receiving the command number (S9040).
- the PRP_DMA_BLK_W 1710 When the PRP_DMA_BLK_W 1710 is activated, it analyzes the command stored in the command buffer 1510 corresponding to the command number 1500 passed at the time of activation (S9100). Then, it is determined whether it is necessary to acquire PRP List (S9110). If it is determined that it is necessary to acquire the PRP list, the PRP_FETCH 1712 in the PRP_DMA_BLK_W 1710 refers to the address of the memory 20 described in the PRP entry to acquire the PRP list (S9120). ). For example, if the data transfer size set in Number of Logical Blocks 1906 is an address range that can be expressed by two PRP Entry included in the command, it is determined that the acquisition of PRP List is unnecessary.
- the command will contain the address where the PRP List is stored. Note that the specific method for determining whether or not the PRP List needs to be acquired, the method for determining whether the address described in the PRP Entry is an indirect address indicating the List or the PRP address, etc. are described in the publicly known NVMe standard. is there.
- PRP_DMA_W 170 determines whether data compression or decompression is specified when analyzing a command.
- PRP_DMA_BLK_W 1710 creates a transfer parameter for DATA DMA 180 from the PRP acquired from PRP Entry and PRP List.
- the transfer parameters are, for example, a command number, a transfer size, a start address of the memory 20 serving as a data storage destination or storage source, necessity of data compression or expansion, and the like. Then, these pieces of information are sent to DATA_DMA_BLK_W in DATA DMA 180 via the control signal line 240 to activate (S9140).
- DATA_DMA_BLK_W1810 When DATA_DMA_BLK_W1810 receives the transfer parameter, it first issues a request to BUF_MGR ⁇ 1830 to obtain the free buffer number of the data buffer. BUF_MGR ⁇ 1830 periodically searches for empty buffers and buffers candidates. If the candidates are not exhausted, DATA_DMA_BLK_W ⁇ 1710 is notified of the empty buffer number. If it is depleted, BUF_MGR ⁇ 1830 keeps searching until a free space is found, so data transfer is temporarily waited.
- the DATA_DMA_BLK_W1810 issues a memory read request from the RX_DMA 610 to the upper device 2 based on the transfer parameters created by the PRP_DMA_BLK_W 1710, acquires the write data in the upper device 2, and stores it in its INPUT buffer 611. At this time, PCIe packets may arrive out of order, but since compression needs to be performed in order, rearrangement is performed by queuing or buffer allocation using a known technique.
- DATA_DMA_BLK_W1810 determines whether the data is to be compressed based on the transfer parameter. When the target data is a compression target, DATA_DMA_BLK_W1810 activates COMP DMA 612.
- the compressed data is compressed as needed and the compressed data is transferred to the OUTPUT buffer.
- the TX0 DMA 614 transfers data to the previously secured data buffer, generates compression information including a data buffer number, start offset, transfer size, data valid / invalid flag, etc., and sends it to the STS_MGR 616.
- the STS_MGR 616 collects the same information in its own buffer and writes it to the compressed information buffer 1520 by a certain amount.
- DATA_DMA_BLK_W1810 activates TX1 DMA 615 and transfers the data to the data buffer without compression.
- DATA_DMA_BLK_W 1810 transfers the write data of host device 2 to its own DRAM 131, 132 until there is no transfer parameter. (S9200)
- BUF_MGR 1830 When the data buffer becomes full on the way, a request is issued to BUF_MGR 1830 each time and a new buffer is used. In this way, a new buffer is always allocated and stored regardless of the logical address duplication shown to the host device 2, so that the update data is also stored in another buffer. That is, the old data is not overwritten on the buffer.
- COMP DMA612 starts TX1 DMA615 using control signal line 617, and TX1 DMA615 transfers the INPUT buffer data to the DRAM data buffer without compression.
- the data is stored in the data buffer in an uncompressed state, and the uncompressed size is recorded in the compression information of the data. This is because data that does not satisfy the compression unit needs Read Modify Write processing, which will be described later, and needs to be restored to the expanded state even after being compressed. In this embodiment, by storing such data without compression, unnecessary decompression processing can be reduced and processing efficiency is improved.
- COMP-DMA612 similarly activates TX1-DMA-615, and TX1-DMA-615 transfers uncompressed data to the data buffer. More specifically, COMP DMA612 counts the transfer size when writing the compressed data to the OUTPUT buffer 613, and if the transfer has not finished even if it reaches the same size as the uncompressed data, it stops the compression process. Start TX1_DMA615. As a result, it is possible to avoid storing data whose size has increased. In addition, since the process is switched without waiting for the completion of compression, the delay can be reduced.
- the STS_MGR 616 writes the remaining compression information to the compression information buffer 1520. Then, DATA_DMA_BLK_W ⁇ 1810 writes the command number to Wr ⁇ Ring ⁇ 710 of the corresponding core, and further advances the generation pointer to notify the processor that the reception of the command and data is completed (S9220).
- the selection of the processor core 140 to be notified using Wr Ring 710 includes several methods such as a method of selecting by round robin, a method of selecting load distribution by looking at the number of queued commands, a method of selecting by LBA range, etc. There are some possible variations, but either method is acceptable.
- the processor 140 When the processor 140 detects that a command has arrived at the Wr Ring 710 by polling, it acquires compression information based on the command number stored in the ring buffer, records it in its own management table, and the corresponding command buffer 1510. Refers to the command contents stored in. Then, the processor 140 determines whether or not the write destination logical address of the command is already stored in another buffer, that is, whether Write Hit (M970).
- the processor 140 creates an activation parameter based on the compression information, sends it to the RMW_DMA 190, and activates the RMW_DMA190. Details of this process will be described in Pr. 90A described later.
- the processor 140 refers to the logical-physical conversion table 750 and determines whether or not all the old data stored in the flash memory can be overwritten by the update data. If all data can be overwritten, when destaging (writing) the update data to the flash memory, the old data is invalidated by a known flash memory control method (M970). On the other hand, if both the old data and the updated data partially overlap, it is necessary to merge them into new data. In this case, the processor 140 controls the FMC / DMA 120 to read data from the flash memory area indicated by the physical address. The processor 140 stores the read data in Read Data Buffer 810.
- the processor 140 reads the compression information corresponding to the logical address from the logical-physical conversion table 750, and stores the compression information and the buffer number of Read Data Buffer 810 in the compression information buffer 1520 corresponding to the command number 1500. Thereafter, the processor 140 creates an activation parameter based on the compression information, and activates the RMW_DMA 190.
- the subsequent processing is the same as Pr. 90A.
- the processor 140 performs destaging processing for asynchronously writing data on the data buffer to the flash memory based on a predetermined control rule (M980).
- M980 a predetermined control rule
- the processor 140 updates the logical-physical conversion table 750.
- the processor 140 also stores the compression information of the data in association with the updated logical address.
- the data buffer storing the destaged data and the command buffer corresponding to the command number become unnecessary and are released.
- the processor 140 notifies the command number to CMD_MGR-1630, and CMD_MGR-1630 releases the command buffer corresponding to the command number.
- the processor 140 notifies the BUF_MGR
- the released command buffer and data buffer become empty and can be used for other command processing.
- the buffer release timing is changed to an appropriate timing as necessary from the relationship between the process optimization in the processor 140 and the completion transmission process described below.
- CPL ⁇ BLK 1620 may release after completion transmission processing.
- the DATA_DMA 180 prepares to send a completion indicating that the data has been successfully received to the host device 2 when the processor notification is completed. Specifically, DATA
- the completion is written to the empty entry of the CompletionQueue 202,
- the correspondence between the entry number and the command number is recorded in the correspondence table provided in the internal buffer 1924 (S9400).
- it waits for a reception completion notification from the host device 2 (S9410).
- the completion reception completion notification (Fig. 3: S350) is returned from the host device 2 (S9450)
- the completion transmission is successful, so refer to the correspondence table between the previous entry number and command number.
- the processor notification is completed by writing the corresponding command number in Cpl Ring740 (S9460).
- the CMD_DMA 160 notifies the processor 150 by writing the command number to the NWr Ring (S9050).
- the processor When the processor detects receipt of a non-write command by polling NWr Ring, it analyzes the command stored in the command buffer 1510 corresponding to the command number (M900). As a result of the analysis, if the command is not a read command (M910: No), the processor performs processing specific to the command (M960). These are, for example, Admin commands used for initial setting of NVMe.
- the processor determines whether data having the same logical address as that of the command exists in the buffers of the DRAMs 131 and 132. That is, ReadHit determination is performed (M920).
- the processor 140 may return the data stored in the Raed Data Buffer 810 to the host device 2.
- the processor copies the data in Write Data Buffer 800 to Read Data Buffer 810 managed by processor 140, and stores the buffer number and data of Read Data Buffer 810 in the compression information buffer corresponding to the command number.
- Stores information necessary for decompression (M940). As the information necessary for data decompression, the compression information generated by the compression DMA when receiving data is used.
- the processor 140 performs staging processing for reading data from the flash memory and storing it in the DRAM (M970).
- the processor 140 refers to the logical-physical conversion table 750 and identifies the physical address corresponding to the logical address specified by the read command. Then, the processor 140 controls the FMC / DMA 120 to read data from the area of the flash memory indicated by the physical address.
- the processor 140 stores the read data in Read Data Buffer 810. Further, the processor 140 reads the compression information corresponding to the logical address from the logical-physical conversion table 750, and stores the compression information and the buffer number of Read Data Buffer 810 in the compression information buffer corresponding to the command number (M940).
- Write Data Buffer in order to avoid the case where Write Data Buffer is invalidated / released by update write during read data return, copying to Read Data Buffer is possible, but if the lock management of the same buffer can be done appropriately, Write Data Buffer may be specified directly.
- the processor sends the command number of PRP_DMA_BLK_R 1720 in PARAM DMA170 and starts it up to restart the hardware processing (M950).
- the activated DATA_DMA_BLK_R 1820 acquires the compression information from the compression information buffer corresponding to the command by STS_MGR626. If the transfer parameter contains information specifying decompression, this information is used to read and decompress the corresponding data in Read Data Buffer810.
- the STS_MGR ⁇ 626 acquires the compression information, it notifies the Read ⁇ Data ⁇ Buffer number and offset information described there to the RX0_DMA, and the RX0_DMA reads the data stored in the corresponding Read ⁇ Data ⁇ Buffer using this information, and the INPUT buffer 622 To store.
- the INPUT buffer 622 is a multi-stage buffer, and stores sequentially for each decompression processing unit based on the previous compression information, and notifies DECOMP DMA 623 each time it is stored. Based on the notification, DECOMP DMA 623 reads the compressed data in the INPUT buffer, decompresses it, and stores it in the OUTPUT buffer.
- TX_DMA625 issues a memory write request to the host device 2 via the bus 200 based on the transfer parameter generated by PRP_DMA_BLK_R 1720, and the data in the OUTPUT buffer is stored in the memory specified by PRP. Store in the area (S9300).
- DATA_DMA_BLK_R-1820 sends a command number to start up the CPL_BLK-1630 of NVMe DMA160 to transmit the completion to the host device 2.
- the subsequent operation of CPL_BLK is the same as in the write command processing.
- Fig. 10 schematically shows the inter-DMA linkage processing in Fig. 9 and the inter-DMA notification processing when a failure occurs.
- each DMA activates the next DMA, but when a failure or error is detected, the error notification function Err (S9401) is used to notify the CPL BLK1620 and the processing is interrupted.
- the CPL BLK1620 notifies the host device 2 by transmitting a completion (S340) together with the notified error content. In this way, it is possible to perform a notification operation at the time of failure even when the processor 140 is not interposed. That is, it is possible to reduce the load on the processor 140 due to the notification of the failure and suppress the performance degradation.
- Fig. 11 is a block diagram showing the internal configuration of the RMW DMA 190 that performs the Read-Modify-Write process in Pr.90A described above.
- the RMW_DMA 190 is connected to the processor through the bus 220, and is connected to the DRAMs 131 and 132 through the bus 210.
- RMW_DMA 190 is RX0_DMA 1920 for reading compressed data from DRAM, INPUT buffer 1930 for primary storage of read data, DECOMP DMA 1940 for reading and decompressing data from INPUT buffer 1930, and uncompressed data to DRAM RX1_DMA 1950 for reading from is provided.
- RMW_DMA190 also switches the data to be transmitted according to the Modify part, MUX (Multiplexer) 1960 discards the other, ZERO GEN 945 1945 to select when MUX 960 1960 transmits zero data, COMP to compress the transmitted data again DMA 970 1970, OUTPUT buffer 1980 as an output destination of the compressed data, and TX_DMA 1990 for writing the recompressed data back to the DRAM.
- the RM Manager 1910 controls each DMA and MUX based on the startup parameters given at startup by the processor.
- the RMW_DMA 190 When the RMW_DMA 190 is started by a processor connected to the bus 220 along with the startup parameters, the parameters are analyzed, and the compressed data that is the old data is read from the data buffer of the DRAM131 using the RX0_DMA 1920 and updated. Instructs to read uncompressed data as data using RX1_DMA 1950.
- the RM Manager 1910 controls the MUX 1960 to create data after modification based on the start parameter instruction. For example, out of 32KB after decompression, if 4KB from 513B needs to be replaced with updated data, RM Manager passes 512B of the old data that DECOMP_DMA 1940 is decompressed to MUX 1960 and transfers to RX1DMA 1950 during that time. Instruct to hold. After the data passes through the MUX 1960 for 512B, the RM Manager 1910 instructs the MUX 1960 to pass the data transferred from the RX1_DMA 1950 and discard the data transferred from the DECOMP_DMA 1940. Then, when the 4 KB worth of data passes through the MUX 1960, the RM Manager instructs the data transferred from the DECOMP DMA 1940 to pass again.
- update data with the update data size of 4KB rewritten from 513B out of the total 32KB is sent to COMP_DMA-1970.
- COMP_DMA [1970] the data is compressed for each compression unit and stored in the OUTPUT buffer 1980.
- TX_DMA 1990 transfers the OUTPUT buffer to the data buffer specified by the startup parameter.
- RMW_DMA performs the compression operation.
- RM Manager 1920 instructs MUX 1960 and COMP_DMA 1970 to treat that zero data is being sent. For example, there is a case where an update has occurred in the range of 1 KB to 2 KB and from the 5 KB to 1 KB within an 8 KB storage unit that has never been updated.
- Fig. 12 is a flowchart showing the operation of the processor and the RMW DMA 190 in the data update process (RMW process) of Pr.90A.
- compression Since compression is performed in logical-physical conversion storage units and can be overwritten in that unit, if merge processing is required in M970, (1) old data is already compressed and update data is not smaller than the compression unit. This is a case where the data is compressed and (2) both the old data and the update data are stored in a non-compressed size with a size less than the compression unit. Since compression is performed in units of storage, if both have already been compressed, overwrite processing can be performed in units of storage, so Modify processing (merge processing) is unnecessary in the first place.
- the processor 140 When the processor 140 detects that a command has come to the Wr Ring 710 by polling, the processor 140 starts the following processing.
- the processor 140 refers to the compression information of the update data (S8100), and determines whether or not the update data has been compressed (S8110). If the data has already been compressed (S8110: Yes), all the old data parts that do not satisfy the compression unit are overwritten by the update data, so there is no need for Modify. Therefore, an invalid flag is set in the corresponding part of the compression information on the old data side (S8220), and the process ends.
- the processor 140 refers to the compression information of the old data (S8120). The processor 140 determines whether the old data has been compressed based on the compression information of the referenced old data (S8130). If the old data has not been compressed (S8130: No), the processor 140 checks the LBA of the old data and the update data, and calculates the storage start position in the compression unit (S8140). On the other hand, if the old data has already been compressed (S8130: Yes), the storage start position of the data is known from the beginning, so the storage start position is calculated from the LBA of the update data (S8150).
- the processor secures a buffer for storing the modified data on the Modify Data Buffer 820 (S8160).
- the processor then stores the old data compression information (Read Data Buffer 810 or Write Data Buffer 800 number, storage start offset and size on the buffer), the presence or absence of compression, and the compression storage unit obtained from the LBA.
- the storage start position in the compressed storage unit obtained from the compression information of the update data and the LBA, and the buffer number of the secured Modify Data Buffer 820 create an RMW DMA 190 startup parameter in the specified work memory area (S8170).
- the processor 140 notifies the RMW_DMA
- the RMW DMA 190 checks the startup parameters (S8500) and determines whether the old data has been compressed (S8510). If it is compressed data (S8510: Yes), the RMW DMA 190 uses RX0DMA 1920 and DECOMP_DMA-1940 to read old data from the DRAM 131 and instructs RX1DMA1950 to read new data from the DRAM 131 (S8520).
- the RM Manager 1910 controls the MUX 1960 based on the storage start position information of both, and for the part corresponding to the update, the update data from RX1DMA 1950 is passed and the old data decompressed from RX0DMA through DECOMP_DMA 1940 is discarded.
- modify data is created by passing the old data (S8530).
- the RMW_DMA 190 uses the COMP DMA 1970 to compress the transmitted data as needed (S8540), and stores the compressed data in the OUTPUT buffer 1980. Then, the RM Manager 1910 instructs the TX DMA 1990 to store the compressed data in the Modify Data Buffer 820 specified by the start parameter (S8550).
- the RMW DMA 190 transmits a completion status including the compressed size to the processor (S8560). Specifically, the status is written in a predetermined working memory area of the processor.
- the RMW DMA 190 compares the storage start position and size of the updated data and the old data (S8600). RMW_DMA 190 determines whether or not the address range where update data exists when transferring data sequentially from the storage start position from RX1 DMA 1950 to MUX190 (S8610), and if it is a range where update data exists (S8620: Yes), transfer update data using RX1950DMA 1950. If the update data does not exist in the range (S8620: No), it is determined whether or not the address range includes old data that does not overlap with the update data (S8630).
- the RMW DMA 190 uses RX1DMA to transfer the old data (S8640).
- the old data does not exist (S8630: No), that is, when neither data exists, it is switched to connect to ZEROZEGEN 1945 and zero data is transmitted to COMP DMA1970 (S8650).
- the RMW_DMA 190 compresses the data sent to the COMP_DMA-1970 using the COMP_DMA-1970 (S8540), and transfers the data to the Modify Data Buffer 820 specified by the parameter using the TX-DMA-11990 (S8550). The subsequent processing is the same.
- the processor When the processor confirms the completion status, it updates the compression information in order to validate the Read-Modified data. Specifically, the invalid flag is set in the compression information of the corresponding block portion of the old data, while the write buffer number and the start offset in the buffer in the compression information of the corresponding block of the update data are changed to the number of Modify Data Buffer820 (Buf #) And rewrite the offset. If the Write Data Buffer 800 before rewriting can be released, release processing is performed, and the processing ends.
- the compression RMW can be performed without the processor performing the write to the decompressed state data DRAM and the accompanying buffer reservation / release processing and the DMA start / end control for recompression.
- processing can be performed with the same number of transfers as RMW of uncompressed data, so that performance degradation when RMW occurs can be suppressed. Therefore, with low latency, high I / O processing performance, and even with Read-Modify, it is possible to make it difficult for performance degradation to occur, and a PCIe-SSD suitable for use as a cache memory in a storage device can be realized. .
- the DMAs for each processing phase in which the memory 20 is accessed are arranged in parallel, and each DMA can directly transfer with the host device 2 without passing through another DMA. Therefore, low-latency data transfer can be realized.
- the processor processing can be reduced because the processor does not have to create transfer parameters necessary for starting up DMA and perform startup and termination pruning processing.
- the processor confirmation and the next instruction are not interrupted for each transfer phase, the hardware can operate efficiently. For this reason, the number of I / Os that can be processed per unit time can be improved without strengthening the processor, so that the I / O processing performance of the entire device can be improved, and low latency and high performance suitable for cache applications can be achieved. PCIe-SSD can be realized.
- DATA DMA transmits data to the host device 2, but it may be configured to call and process another DMA that further processes data.
- FIG. 17 shows a first modification of the first embodiment.
- a DATA FILTERING ENGINE 230 is provided that transmits data to be sent to the host device 2 after filtering based on certain conditions.
- DATA IL FILTERING ENGINE 230 ⁇ acquires a secondary parameter that describes the filtering condition and the address to store the filter result data instead of PRP from the address described in the command PRP Entry, and the LBA range of the command according to the secondary parameter condition It is assumed that the operation of extracting the data of the corresponding condition from the data of.
- the processor 140 performs processing specific to the command (M960).
- the command buffer number 1500 and Read Start ENGINE 230 refers to the command stored in the command buffer 1510 corresponding to the command buffer number 1500, and acquires the secondary parameter through the bus 200. Then, according to the filter condition specified by the secondary parameter, the filter result is written through the bus 200 to the data storage destination specified by the parameter while filtering the data of Read Data Buffer 810.
- DMAs for each access are arranged in parallel, and individual DMAs can directly transfer with the host device 2 without going through other DMAs.
- necessary data can be selected and transmitted within the apparatus and unnecessary transmission does not occur, high-performance data transfer can be realized.
- FIG. 18 shows a second modification of the first embodiment.
- a separate DMA for calculation is provided, but it may be provided integrally with DATA DMA as shown in FIG.
- processing such as sending the data to the host device 2 and calculating the sum or average by regarding the value in the specific area when the data is divided into fixed lengths (records) as a numerical value It is done.
- the host device 2 in the first embodiment is used as a storage controller, the cooperative operation of the cache device 1 and the storage controller in the compression processing of data stored in the HDD will be described, and the effects of the configuration of the present invention will be described.
- the cache device 1 in this embodiment notifies the processor 140 of the completion of reception of the write data (S9460 in FIG. 9), the size after compression is included in the notification information. It also has a function of notifying the processor 140 of the compressed size of the LBA range for which an inquiry has been received at an arbitrary time.
- FIG. 13 is a block diagram showing a configuration when the PCIe connection cache device according to the present invention is installed in the storage device.
- the storage device 13 is a device called a so-called disk array system connected to the host computers 20A to 20C using this device via the storage network 50.
- the storage device 13 includes a controller housing 30 that houses a controller group, and a plurality of disk housings 50 that house disk groups.
- the controller housing 30 includes a plurality of storage controllers 60a and 60b made up of processors and ASICs, and is connected by an internal network 101 for transmitting and receiving data and control commands to each other.
- an expander 500 that is a mechanism for connecting a plurality of disks and a plurality of disks D00 to D03 are mounted on the disk housing 40.
- D00 to D03 are, for example, a SAS HDD or SATA HDD, or a SAS SSD or SATA SSD.
- the storage controller 60a includes a front-end interface adapter 80a for connecting to a computer and a back-end interface adapter 90a for connecting to a disk.
- the front-end interface adapter 80a is an adapter for communicating with a protocol such as FibreChannel or iSCSI.
- the back-end interface adapter 90a is an adapter for communicating with an HDD using a protocol such as SAS (Serial Attached SCSI). Both of them are often equipped with a dedicated protocol chip and controlled by a control program installed in the storage controller 60a.
- SAS Serial Attached SCSI
- the storage controller 60a further includes a DRAM 70a and a PCI connection type cache device 1a equipped with the flash shown in FIG. 1 of the present invention, and is used as a data transfer buffer of a protocol chip and a disk cache memory managed by a storage control program. Is done.
- the cache device 1a is connected to the storage controller 60a in the form as shown in FIG. 2a or 2b.
- Each of the components shown in the cache device 1a and 70a, 80a, 90b included in the storage controller 60a may be one or plural.
- the configuration of the storage controller 60b is the same as that of 60a. (Hereafter, both are collectively referred to as storage controller 60) Similarly, one or more storage controllers 60 may be provided.
- Each component included in the storage device 13 can be confirmed from the management terminal 32 through the management network 31 provided in the device 13.
- FIG. 14 is a flowchart for explaining a cooperative operation between the storage controller 60 and the cache device 1 when the storage device 13 processes write data from the host 20.
- the storage apparatus 13 performs a write-back process using an internal cache memory.
- the processing operation of the storage controller 60 includes host I / O processing S1000 to S1080 until the host data is stored in the cache, and disk I / O processing S1300 to S370 that is performed asynchronously from the cache to the disk later. Consists of. This will be described in order below.
- the storage controller 60 When the storage controller 60 receives a write command from the host via the protocol chip mounted on the front-end interface adapter 80 (S1000), the storage controller 60 analyzes the command and secures a primary buffer area for data reception on the DRAM 70 ( S1010).
- a message indicating that data can be received (XFER_RDY) is transmitted to the host through the protocol chip, and subsequently, data transferred from the host is received on the DRAM 70 (S1020).
- the storage controller 60 determines whether or not data with the same address (LBA) exists in the cache device 1 in order to store the received data in the disk cache memory (S1030). If it exists here, it is a cache hit, and if it does not exist, it is a cache miss. In the case of a cache hit, the storage controller 60 uses the allocated cache area for overwriting data as the storage area, whereas in the case of a cache miss, the storage controller 60 assigns a new cache area as the storage area (S1040).
- the hit / miss determination and cache area management methods described above are based on known methods in storage system control. In addition, in order to protect the data on the cache, the storage controller often makes the data redundant in both controllers. This is also a known method.
- the storage controller 60 issues an NVMe write command to the cache device 1 in order to store the data in the primary buffer in the cache device 1 (S1050).
- the storage controller 60 stores information instructing data compression in the command parameter Data Set Mgmt1907.
- the cache device 1 processes the NVMe write command issued from the previous storage controller according to the flow of FIG. 9 described in the previous embodiment.
- the host device 2 is the storage controller 60, and the primary buffer corresponds to the data area 204. Since the cache device 1 compresses the data and stores it in the flash memory, when a series of transfers is completed, a completion including status information including the size after compression is generated and written to the Completion Queue of the storage controller.
- the storage controller 60 When the storage controller 60 detects the completion and completes the confirmation process (completion receipt completion notification) shown in FIG. 4 S350 (S1060), it acquires the compressed size from the status information and stores it in its own management table (S1070). ) Notifies the host that the data reception has been completed (S1080), and ends the host I / O processing.
- the storage controller 60 also enters HDD storage processing (so-called destaging processing) shown in S1300 to S1370 when it gets an opportunity to write to the HDD asynchronously with the host I / O. This is triggered when, for example, the cache area is full and data needs to be written to the disk, or when the RAID parity can be calculated without reading old data.
- HDD storage processing so-called destaging processing
- the storage controller 60 inquires the cache device 1 about the total data size of the address range to be written to the relevant disk, and acquires the compressed size (S1300).
- an address area corresponding to the disk storing the compressed data is newly reserved, and additional address mapping is instructed to the cache device 1 so that the compressed data can be accessed from the address (S1310).
- the cache device 1 adds a new entry to the logical-physical conversion table 750 of the flash memory shown in FIG. 7, and performs the above mapping.
- the storage controller secures a primary buffer on the DRAM 70 for storing the compressed data (S1320). Then, an NVMe read command is issued using a command parameter in which information instructing data compression is set in Data Set Mgmt1907 so that data is read out while being compressed with respect to the address mapped in S1310 (S1330).
- the cache device 1 transfers the read data onto the primary buffer according to the flow of FIG. 9, and transfers the completion to the storage controller.
- the storage controller When the storage controller confirms the completion, it returns a receipt notification to the cache device 1 (S1340). Then, the protocol chip in the back-end interface is activated (S1350), and the compressed data on the primary buffer is stored in the disk (S1360). Then, after confirming the completion of the transfer of the protocol chip (S1370), the process ends.
- FIG. 15 is a flowchart for explaining a cooperative operation between the storage controller 60 and the cache device 1 when the storage device 13 processes a data read request from the host 20.
- the storage apparatus 13 caches data on the cache memory, when a cache hit occurs, a response is returned from the cache memory to the host. Since the cache hit operation of the storage is a known method, the operation when a cache miss occurs will be described.
- the storage controller 60 When the storage controller 60 receives a read command from the host through the protocol chip (S2000), it determines whether the read data exists in the cache (S2010). If a mistake is made, data must be read from the disk. Since the storage controller 60 reads the compressed data from the disk storing the compressed data, a primary buffer corresponding to the compressed data size is secured on the DRAM 70 (S2020), and the back-end protocol chip is activated (S2030). The compressed data is read from the disk (S2040).
- the storage controller 60 confirms the completion of the transfer of the protocol chip (S2050), it reserves a storage area in order to cache the data on the cache device 1 (S2060). Since the data read from the disk has already been compressed, the storage controller 60 issues an NVMe write command so as not to compress the data again (S2070). Specifically, the command parameter Data ⁇ ⁇ Set ⁇ ⁇ ⁇ ⁇ Mgmt1907 is used for instruction.
- the cache device 1 When the cache device 1 reads data from the primary buffer according to the flow of FIG. 9 and stores it in the flash memory without compression, the cache device 1 returns a completion to the storage controller 60.
- the storage controller 60 When the storage controller 60 performs a completion confirmation process for returning the completion receipt of the pruning completion (S2080), the storage controller 60 then calculates the required size after decompression and instructs the cache device 1 to perform address mapping for retrieving the decompressed state (S2090). ) And a primary buffer used by the host-side protocol chip is secured on the DRAM 70 (S2100).
- the storage controller issues an NVMe read command with the primary buffer as the storage destination, and reads data from the previous decompression state retrieval address to the buffer (S2110). Then, after completion confirmation processing (S2120) based on the completion cut notification, the protocol chip is activated to return the data in the buffer to the host computer (S2130). Finally, the transfer completion of the protocol chip DMA is pruned (S2140), and the transfer process ends.
- FIG. 16 shows the logical address (LBA; Logical Block Address) and physical address in the cache device 1 when additional address mapping is performed in S1310 of the host write processing shown in FIG. 14 and S2090 of the host read processing shown in FIG. PBA; (Physical (Block) Address) is shown.
- LBA Logical Block Address
- PBA Physical (Block) Address
- the LBA0 space 5000 and the LBA1 space 5200 are address spaces used when the storage controller accesses the cache device 1.
- LBA0 space 5000 is used when the storage controller wants to write and store uncompressed data, or decompresses compressed data and reads uncompressed data, while LBA1 space 5200 uses compressed data. This is used when it is desired to acquire the data as it is or when it is desired to store the already compressed data without further compression.
- the PBA space 5400 is an address space used when the cache device 1 accesses an internal FM.
- the cache device 1 has not only the logical-physical table 750 but also a mechanism for transmitting the size after compression to the host device (storage controller). I understand that it is necessary.
- the cache device has a mechanism for transmitting the size after compression to the host device, so that the host device can additionally allocate an address area to be taken out while being compressed. At this time, since one piece of data is referenced from both, it is not necessary to duplicate the data, and high-speed processing is possible. Further, the cache device executes the compression process, so that the load on the storage controller is reduced and the performance of the storage device can be improved. From the above, it is possible to realize a PCIe-SSD suitable for cache use for a host device.
- the storage apparatus can provide new functions including the data compression function shown in this embodiment.
- Cache device 2 Host device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Bus Control (AREA)
Abstract
データ記憶装置は、データを格納する記憶媒体と、外部装置によって生成されたデータ転送を指示するコマンドを格納するコマンドバッファと、外部装置にそれぞれ接続され、かつ、ハードウェア回路である、コマンド転送DMA(Direct Memory Access)と、転送リスト生成DMAと、データ転送DMAと、を備える。 コマンド転送DMAは、コマンドを外部装置のメモリから取得し、コマンドの指示内容を取得し、コマンドバッファにコマンドを格納して処理中のコマンドを特定するコマンド番号を取得し、コマンドの指示内容に応じてコマンド番号を送信することで転送リスト生成DMAを起動し、転送リスト生成DMAは、コマンドバッファに格納されたコマンドに基づいて、外部装置との間でデータ転送の対象となるメモリのアドレスを特定し、アドレスをデータ転送DMAに送信することでデータ転送DMAを起動し、データ転送DMAは、アドレスに基づいてメモリとの間でデータを転送する。
Description
本発明は、PCIe接続型のデータ記憶装置に関する。
近年、計算機やストレージシステムでは、大量データの高速解析や高速I/O処理のために、大容量のメモリ領域を必要としている。例えば計算機ではインメモリDBのようなアプリケーションである。しかしながら、装置に搭載可能なDRAM容量は、コスト上の理由や電気的な実装制約によって限られていた。このため、緩和手段として、DRAMよりは遅いもののHDDに比べれば高速なNANDフラッシュメモリといった半導体記憶媒体を利用する動きが出てきている。
これらの半導体記憶媒体はSSD(Solide State Disk)という名前で呼ばれており、Diskの名が示すとおり、SATA(Seiral ATA)やSAS(Serial Attached SCSI)といったディスクI/Oインターフェース接続とそのプロトコルを介して計算機やストレージコントローラに接続され、利用されてきた。
しかし、計算機の性能向上に対し、これらのディスクI/Oインターフェースとプロトコルを介してのアクセスは、オーバヘッドが大きくレイテンシが大きい。そこで、より近年ではプロセッサに直結できる汎用バスであるPCI-Express(PCIe)上に搭載でき、かつ、その高速性を活かすために新たに策定されたNVMeプロトコルを用いて、低レイテンシでアクセス可能なPCIe接続型SSD(PCIe-SSDまたはPCIe-Flash)が登場してきている。
NVMeでは、データ送受信のためのサポートするI/Oコマンドは非常に簡素であり、サポート必須コマンドは、Write、Read、Flushの3つのみである。
また、SASなどの従来ディスクI/Oプロトコルでは、ホストが主体となって、コマンドやデータを装置側へ送信していたのに対し、NVMeでは、ホストからはコマンドが作成されたことのみを装置に通知し、コマンドそのものの取得やデータの転送、装置側が主体となって実施される。すなわち装置側からのアクションに置き換えられて実施される。例えば装置が取得したコマンドの内容がWriteだった場合、従来であればホストが装置に向けてWriteデータを送信するが、NVMeでは、装置がホストのデータをReadする動作によって実現される。逆に、コマンドの内容がReadだった場合、Readコマンドの処理は、装置がホストのメモリへデータをWriteする動作によって実現される。
すなわち、NVMeでは、コマンドの受領、データのリード・ライト転送共に、動作契機は装置側が握っているので、ホストからの要求をいつでも受け付けるための余計なリソース確保が不要となる。
更に、従来のディスクI/Oプロトコルの場合、ホストおよび装置の両者は互いに授受するデータないしコマンドに、直接アドレスを付加することはせず、プロトコルで規定するIDやTagをつける。両者は受領した時点でIDやTagと自身のメモリアドレスとの変換(プロトコル変換の一部)を行うので、コマンド・データに関わらず必ずプロトコル変換が必要になりオーバヘッドが大きい。これに対しNVMeでは、ストレージ装置が直接ホストのメモリアドレス空間に対してデータを読み書きすることでデータ転送を行う。このためプロトコル変換のオーバヘッドが小さく、レイテンシも小さくすることができる。
以上の様にNVMeはコマンド体系を単純化し、転送オーバヘッド(レイテンシ)を小さくした軽量な通信プロトコルなので、同プロトコルを採用したPCIe-SSD(PCIe-Flash)装置には、PCI-Express帯域に準じた高いI/O性能と、高速なレスポンス性能(低レイテンシ)が求められる。
特許文献1では、ホスト計算機に接続されたSSDにおいて、SSDのプロセッサがホスト計算機から受信したコマンドを解析し、解析したコマンドの内容に基づいてホストインターフェース内のDMA(Direct Memory Access)にデータ転送を指示することが開示されている。また、特許文献1のSSDでは、データは圧縮してフラッシュメモリに格納されるが、ホストインターフェースとデータ圧縮エンジンが直列に配されている。
しかしながら、特許文献1の技術を使って高性能化しようとした場合、次の様な課題が生じる。
第1にプロセッサの処理性能がボトルネックとなる。上記のような事情に対して性能向上を図ろうとした場合、単位時間あたりに処理できるI/O数を向上させる必要がある。特許文献1では全ての動作判断やDMAの起動をプロセッサが処理しているため、I/O処理性能を向上させるためには、処理自身の効率化かプロセッサ自身の強化が必要となる。しかしながら、プロセッサの周波数やコア数といった物量を増やせば消費電力や発熱量も増える。一般にキャッシュ装置のようにシステムへ組込んで使う装置ではスペースの制約や給電を理由に発熱量や消費電力は限られており無条件にプロセッサを強化することはできない。また、フラッシュメモリは熱に弱いため、その観点からも限られたスペースに発熱量の多い部品を実装するのは望ましくない。
第2にホストインターフェースと圧縮エンジンが直列に配されており、データ転送の際には2種のDMA転送が必要となるためレイテンシが大きく、高レスポンス化が難しい。同転送はホストインターフェースのDMA、圧縮エンジンのDMAを起動して行われるから、いずれのデータ転送においても2つのDMA転送を経なければならず、レイテンシは大きい。
このことは、特許文献1がFibre ChannelやSASなど、双方のメモリには互いに直接アクセスできない転送プロトコルにも対応できるよう構成されていることに起因するものである。
本発明は、以上の課題を鑑みて成されたものである。すなわち、本発明の目的の1つは、NVMeのようなホストとメモリリード/ライトリクエストによってデータを授受するプロトコルを用いる記憶装置において、プロセッサを強化することなく、ハードウェアであるDMAを用いることによって低レイテンシで高速なI/O処理を可能とするデータ転送を実現することである。
データ記憶装置は、データを格納する記憶媒体と、外部装置によって生成されたデータ転送を指示するコマンドを格納するコマンドバッファと、外部装置にそれぞれ接続され、かつ、ハードウェア回路である、コマンド転送DMA(Direct Memory Access)と、転送リスト生成DMAと、データ転送DMAと、を備える。
コマンド転送DMAは、コマンドを外部装置のメモリから取得し、コマンドの指示内容を取得し、コマンドバッファにコマンドを格納して処理中のコマンドを特定するコマンド番号を取得し、コマンドの指示内容に応じてコマンド番号を送信することで転送リスト生成DMAを起動し、転送リスト生成DMAは、コマンドバッファに格納されたコマンドに基づいて、外部装置との間でデータ転送の対象となるメモリのアドレスを特定し、アドレスをデータ転送DMAに送信することでデータ転送DMAを起動し、データ転送DMAは、アドレスに基づいてメモリとの間でデータを転送する。
本発明によれば、ホストメモリにアクセスが生じる処理フェーズ毎のDMAが並列にかつ他のDMAを経由することなく転送を行うことができるので、低レイテンシでのデータ転送を実現することができる。また、ハードウェアがプロセッサの指示待ちをせずに効率良く動作できるほか、プロセッサもDMAの転送指示、転送終了確認を行う必要がなくなり、プロセッサの処理命令数を削減できる。このためプロセッサを強化せずとも、単位時間に処理できるI/O数が向上する。従い、プロセッサとハードウェアとのいずれの処理効率も向上するので、装置全体としてのI/O処理性能を向上させることができる。
本発明を実施するための形態を実施例1および実施例2を用いて説明する。なお、当該実施例からの部分的変更によって実施できる形態は、各実施例内で変形例として記述する。
本実施例を図1~図12及び図19を参照して説明する。
図1は本実施形態におけるキャッシュ装置の構成を示すブロック図である。キャッシュ装置1は、PCI-Express(PCIe)を介して上位装置2に接続されて使用される。上位装置2は生成したデータや、他の装置から受信したデータをNVMeプロトコルのコマンドセットを用いてデータの入出力を行う。上位装置2の例としてはサーバシステムやストレージシステム(ディスクアレイ)コントローラ等がある。上位装置2はキャッシュ装置の外部の装置ということもできる。
キャッシュ装置1は、LSIないしFPGAとして実装されるハードウェアロジック10、同装置の記憶媒体として用いられるフラッシュメモリチップ(FM)121、122、および一時的記憶領域として用いられるDRAM(Dynamic Random Access Memory)131、132とからなる。FM121、122とDRAM131、32の両者は、価格・容量・性能などの視点から使い分ける目的で搭載していれば他の組合せでも構わない。例えばReRAM(Resistance Random Access Memory)とMRAM(Magnetic Random Access Memory)、PRAM(Phase Change Memory)とDRAMといった組合せが考えられる。あるいは、SLC(Single Level Cell) NANDとTLC(Triple Level Cell) NANDといった組み合わせでもかまわない。また、両者を2つずつ記載しているのは複数搭載されうることを意図するものであり、1つでも多数でも構わない。また、両者の1つのあたりの容量は同じである必要はなく、また、実装数も同数である必要はない。
ハードウェアロジック10には、上位装置2との接続口となるPCIeコア110、FM 121、122等を制御するコントローラであり、DMAであるFMコントローラDMA(FMC DMA) 120、 DRAM131、132等を制御するDRAMコントローラ(DRAMC)130を備える。さらに、内部の制御を行うためのプロセッサ140と各種情報格納に用いられるSRAM150、および、各種転送処理のためのDMA160~190を備える。FMC 120、および、DRAMC130は1つずつ図示しているが、サポートすべき容量や性能に応じて複数設けられても良い。また、1つのFMC 120またはDRAMC 130の配下に複数のチャネルないしバスが設けられても良い。また、逆に1つのチャネルないしバスに複数のFMC 120が設けられても良い。
先に述べたPCIeコア110は、PCIeの物理層およびその上位層の通信に必要な最低限のロジックを備える部分であり、上位装置側メモリ空間へのアクセスをブリッジする役割を果たす。バス200は、PCIeコア110を通じて各種DMA160~180が上位装置側のメモリ空間へアクセスするための接続調停部である。
バス210も同様にして各種DMA180、190およびFMC DMA120がDRAM131、132へアクセスするための接続部である。バス220によって、プロセッサ140とSRAM150、各種DMAは互いに結合される。なお、各バス200~220は、スイッチ結合網のような形態でも本質的には変わらない。
先に述べた各種DMA160~180は、NVMe処理において上位装置2のメモリへアクセスが発生する処理フェーズ毎に設けられ、次から構成される。即ち、NVMeコマンドの受領および応答処理(コンプリーション)処理を行うNVMe DMA160、転送元ないし転送先のアドレスが記載されたリスト(PRP List)を取得するPARAM DMA170、必要に応じ圧縮/伸張を行いながらユーザデータの転送を行うDATA DMA180である。更に、FM 121、122ないしDRAM131、132上の圧縮データと非圧縮データとをマージ(Read-Modify)するためのRMW DMA190が設けられる。それぞれのDMAの詳細な振る舞いについては後述する。
このうち、上位装置2のメモリ空間へのアクセスする必要のあるDMA160、170、180は、個々に独立して、かつ、中間に余計なDMAを介さずにアクセスできるようバス200を介して上位装置への接続口であるPCIeコア110に並列に接続されている。同様にDRAM131、132へのアクセスが必要なDMA120、180、190はバス210を介してDRAMC 130に対して並列に接続されている。また、NVMe DMA160とPARAM DMA 170は制御信号線230で接続され、PARAM DMA 170とDATA DMA 180は制御信号線240で接続され、DATA DMA180とNVMe DMA160は制御信号線250で接続される。
このように、本実施形態では処理フェーズ毎に異なる3つのDMAを設ける。処理が異なるとDMAを構成するために必要なハードウェア回路も異なるため、複数の処理フェーズを1つのDMAで行うよりも、各DMAは特定の処理を高速に実行することができる。また、1つのDMAが処理を実行している間に他のDMAも並列して処理を実行することができるため、より高速なコマンド処理が実現できる。また、本実施形態ではプロセッサが各DMAに指示をすることなくデータ転送を実現できるため、プロセッサのボトルネックが解消される。また、各DMAはプロセッサの指示を待つ必要がないため、効率的に動作できる。このためには、3つのDMAが互いに連係して処理を行う必要がある。DMAの連係については、後述する。
また、各DMAが直列に接続されると、例えば、PARAM DMA170が処理を実行するためにNVMe DMA160を経て上位装置2にアクセスする必要があり、DATA DMA180が処理を実行するためにNVMe DMA160とPARAM DMA170をそれぞれ経て上位装置2にアクセスする必要がある。これではレイテンシが大きく、性能低下を招くため、本実施形態では3つのDMAを並列に設けることによって、各DMAが上位装置2にアクセスするために他のDMAを経る必要がない。これにより、さらなる高性能化を実現できる。
よって、本実施形態により、キャッシュ装置のフロントエンド側の処理をハードウェア化することで、PCIeの広帯域を活かした高性能なデータ転送が可能となる。
また、高I/O性能、高レスポンス性能により、搭載されるフラッシュメモリへの単位時間当たりの書込量も増大する。フラッシュメモリは書換え寿命のあるメディアであるから、性能が上昇しても書き換え回数(または消去回数)の増加を抑止するような工夫が必要である。このため、本実施例のキャッシュ装置は、データを圧縮するハードウェア回路を備える。これにより、データの書き込み量が削減され、フラッシュメモリの長寿命化が可能となる。また、データを圧縮することでキャッシュ装置に格納可能なデータ量は実質的に増大し、キャッシュヒット率の向上が見込めるため、システムの性能が向上する。
プロセッサ140は、LSIないしFPGA内に設けられる組込プロセッサであり、コア140a、140bのように複数のコアを持つことがある。同プロセッサ上では装置1の制御ソフトウェアが動作し、例えばFMのウェアレベリングやガーベッジコレクションの制御、フラッシュメモリの論理アドレスと物理アドレスマッピングの管理、各FMチップの寿命管理等を行う。プロセッサ140はバス220に接続されており、同バスに接続されるSRAM150へは、プロセッサやDMAからの高速なアクセスが必要な各種情報や、前記制御ソフトウェアのワーキングエリアとして用いられる。SRAM150へのアクセスや必要に応じたプロセッサとの通信のため、各種DMAもバス220に接続される。
図2a、2bは、図1で説明したキャッシュ装置1の理解を深めるために外観イメージを示した図である。先に図2aについて説明する。
図2aは、本キャッシュ装置がPCIeカードの形状で実装された際のイメージを示した図である。本図では、外観全体がキャッシュ装置1にあたり、ハードウェアロジック10がLSI(FPGAやASICの形態を含む)として図の左手に実装されている。カードにはこの他に、DRAM131、フラッシュメモリ(FM)121~127がDIMMの形状で実装されており、また、上位装置とはカードエッジ11を通じて接続される。具体的にはPCIeコア110がLSIに実装され、信号線がカードエッジ11に向けて配線されている。なお、エッジ11はコネクタ形状でも構わない。また、図には示さないが、同装置のDRAM131の揮発を保護するためにバッテリまたは同等の役割を果たすスーパーキャパシタが搭載されることもある。
図2bは、本キャッシュ装置が巨大なパッケージボードとして実装された場合のイメージを示した図である。図の右手に示されるボードがキャッシュ装置1にあたり、図2aと同様、ハードウェアロジック10、DRAM131、132、および多数のFM121等が搭載される。上位装置との接続には、例えば、PCIeケーブルアダプタ250のようなPCIeを外部に延長するケーブルおよびアダプタを介して接続される。また、パッケージボード形状のキャシュ装置1は、電源供給や冷却のためにしばしば専用の筐体に納められる。
図3は、キャッシュ装置1と上位装置2の間で行われるNVMeコマンド処理の流れを模式的に示したものである。
NVMeによるI/Oを行うために、上位装置2は、規定のフォーマット1900によってSubmissionコマンド作成する。上位装置2のメモリ20にはSubmissionコマンドを格納するためのSubmission Queue201、コマンドの完了通知を受け取るためのCompletion Queue202が上位装置2のメモリ領域にプロセッサコアごとに設けられる。同Queue201、202は文字通りコマンドをキューイングしておくためのリングバッファであり、エンキューする側をTailポインタで、デキューする側をHeadポインタで管理し、その差によってキューイングの有無を管理する。各Queue領域の先頭アドレスは、初期化の時にNVMeのAdministrationコマンドを用いてキャッシュ装置1に伝えられる。また、コマンドを格納する個々の領域はEntryと呼ばれる。
上位装置2のメモリ20上には、上記の他にキャッシュ装置1へライトするデータや、キャッシュ装置1からリードしたデータを格納するためのメモリ領域204、前記データ領域204を指定する際にアドレスをリスト化して纏めたPRP(Physical Region Pages) Listを格納するための領域203などが、必要に応じて動的に設けられる。PRPとは、NVMe初期化時に決定されるメモリページサイズ毎に割付けられるアドレスである。例えばメモリページサイズ4KBの場合、64KBのデータを指定するには4KBごとに16個のPRPを用いて指定される。図3に戻り、キャッシュ装置1側には、上位装置2がSubmission Queue201にキューイングし、Tailポインタを更新したことを知らせるためのSubmission Queue Tail (SQT) Doorbell 1611と、上位装置2が、キャッシュ装置1が送信したCompletionをCompletion Queue から取り出してHeadポインタを更新したことを知らせるCompletion Queue (CQHD) Doorbell 1621とが設けられる。通常これらは制御レジスタの一部であり、上位装置2がアクセス可能なメモリアドレス空間に割り当てられる。
なお、”Tail”および”Head”の用語はFIFOの考え方で定義されており、新しく作られたコマンドはTailに追加され、先に作られたコマンドがHeadから処理される。
ここで、上位装置2が生成するコマンドについて説明する。図19はNVMeのコマンドフォーマットを示す図である。フォーマット1900は、次のフィールドを備える。Command Identifier1901はコマンドのIDを格納する領域である。Opcode1902は、リードやライトなどそのコマンドによる処理内容を示す情報を格納する領域である。PRP Entry 1903及び1904は、PRP (Physical Region Pages)を格納する領域である。PRPはNVMeのコマンドフィールドに最大2個まで含めることができるが、先の例のように16個必要な場合には、このフィールドでは足りないので、PRP Listとして別領域にアドレスリストが設けられる。そして、PRP Entry 1904には、PRP Listが格納されている領域(メモリ20のアドレス)を示す情報が格納される。Starting LBA 1905は、データをライトまたはリードする領域の開始位置を格納する領域である。Number of Logical Blocks 1906は、リードまたはライトするデータのサイズを格納する領域である。Data Set Mgmt 1907は、ライトするデータの圧縮の要否や、リードするデータの伸張の要否を指示する情報を格納する領域である。フォーマット1900は、図19に示す以外のフィールドを備えても良い。
図3に戻り、コマンド処理の流れについて説明する。上位装置2はNVMe規格に定義されたコマンドのフォーマットに従ってSubmissionコマンドをSubmission Queue201の空きEntryに順に作成する。上位装置2はコマンドを生成したことをキャッシュ装置1に通知するために、Submission Queue Tail (SQT) Doorbell 1611に使用した最終Entry番号、すなわちTailポインタの値をライトする(S300)。
キャッシュ装置1は、ある動作周期でSQT Doorbell 1611をポーリングし、自身が管理するHeadポインタとSQT Doorbellとの差を比較することで新たにコマンドが発行されたか否かを検出する。新たにコマンドが発行されていると、キャッシュ装置1はPCIeメモリリードリクエストを発行して、上位装置2のメモリ20のSubmission Queue 201の該当Entryからコマンドを取得し、同コマンドの各パラメータフィールドに指定された各設定を解析する (S310)。
キャッシュ装置1は、上記コマンド内容から必要なデータ転送処理を実施する(S320~330)。
データ転送に先立ち、キャッシュ装置1は、データ転送元ないし転送先となる上位装置2のメモリアドレスを知るためにPRPを取得する。コマンド内にもPRP を格納するフィールドは設けられているが、2つまでとサイズが限られているので、転送長が長い場合には、同フィールドにはPRPそのものではなく、PRP Listの格納先アドレスが指定されることは先に述べた通りである。その場合には、キャッシュ装置1は前記アドレスを用いて上位装置2のメモリ20からPRP Listを取得する(S320)。
そしてPRP Listから一連のPRPを取得することで転送元ないし転送先アドレスを取得することができる。
NVMeでは全ての転送はキャッシュ装置1が主体となって行われる。例えばライトコマンドが発行された場合、即ちドアベルが鳴らされると、キャッシュ装置1は、初めにコマンドの内容を取得するためにPCIeメモリリードリクエストを用いてメモリ20にアクセスする。次に、PRPを得るために、再びメモリ20にアクセスする。そして、最後に、メモリ20にアクセスしてユーザデータを読み出し、自身の記憶領域(例えばDRAM)に格納する(S330A)。
同様に、リードコマンドの場合、ドアベルが鳴らされると、キャッシュ装置1は初めにコマンドの内容を取得するためにPCIeメモリリードリクエストを用いてメモリ20にアクセスし、次にPRPを得るためにメモリ20にアクセスし、最後にPRPで指定された上位措置2のメモリアドレスに対して、PCIeメモリライトリクエストによって、ユーザデータを書き込む(S330B)。
以上のように、コマンド発行からデータ転送までは、いずれのコマンドの場合にも、 (1)コマンドの取得(S310)、(2)PRP Listの取得(S320)、(3)データの転送(S330A、B)、と3フェーズの上位装置2アクセス処理によって成り立っている事が分かる。
データ転送処理が終了すると、キャッシュ装置1は、完了ステータスをメモリ20のCompletion Queue 202に書込む(S350)。そしてPCIeおよびNVMeの初期設定に応じてPCIeのMSI-X割込によって上位装置2にCompletion Queue 202の更新を通知する。
上位装置2はCompletion Queue202より当該完了ステータスを読み出して確認する。その後、キャッシュ装置1は処理したCompletion数分Headポインタを進めCQHD Doorbell1621へのライトを通じて、キャッシュ装置1からのコマンド完了通知を受領処理したことを同装置に知らせる(S360)。
なお、完了ステータスにエラーがあった場合、上位装置2はその内容に応じて障害処理を行うことになる。以上のような通信を通じ上位装置2とキャシュ装置1は1つのNVMe I/Oコマンドを処理する。
以降の図4から図8では、図3で示したI/Oを処理するために本実施形態が備えるDMAおよび制御情報の詳細について説明する。
図4は、本実施形態におけるNVMe DMA 160の内部構成を示す図である。NVMe DMA160 は先のSQT Doorbell1611、 CQHD Doorbell 1612を通じて、上位装置2とのコマンド処理を行うDMAである。同DMAは、第1フェーズであるコマンド受領を処理するコマンドブロック(CMD BLK) 1610、コマンド処理後に上位装置2に完了通知(コンプリーション)を返す コンプリーションブロック(CPL_BLK)1620、両者の制御およびプロセッサ上で動作する制御ソフトウェアとの通信を担うコマンドマネージャ(CMD_MGR)1630、そして、受領コマンドのフォーマットの妥当性検査やコマンド種の判定を行うコマンド判別ブロック(CMD_JUDGE)1640から構成される。なお、本実施形態では上記のブロック構成としたが、これは一例であり同様の機能を実現できれば、他の構成でもよい。本実施形態における他のDMAについても同じである。
CMD_BLK 1610には、先述したSubmission Queue Tail Doorbell(SQT)レジスタ1611、同レジスタとの差分を検出するために現在処理中のEntry番号を記憶しておくCurrent Headレジスタ1612、実際にコマンドを取得するCMD DMA1613、および同コマンド取得時に利用する内部バッファ1614とがある。
CPL_BLK 1620には、CMD_MGR1630からの指示により上位装置2へのコンプリーションを生成・発行するCPL DMA1623、生成時に利用するバッファ1624、先述したCompletion Queue Head Doorbell(CQHD)レジスタ1621、同レジスタの更新を差分検出するためのCurrent Tailレジスタ1622とがあり、また、Completion QueueのEntry番号と内部処理で利用するコマンド番号1500(図7;後述)との対応関係を記憶するテーブル1625を備える。CMD_MGR 1630が同テーブルと上位装置2からの完了受領通知(コンプリーション受領通知)とを用いてコマンドの完了状況を管理する。
CMD_BLK 1610およびCPL_BLK 1620は、バス200を通じてPCIeコア110と接続されており、双方向の通信が可能である。
また、CMD_BLK 1610およびCPL_BLK 1620は、CMD_MGR 1630と内部接続される。CMD_MGR 1630は制御ソフトウェアと他DMAからの終了通知またはエラー通知に応じて完了応答の生成をCPL_BLK1613に指示するほか、SRAM150内に設けられるコマンドバッファ(図7;後述)の空きを管理しており、CMD_BLK 1610からのバッファ要求やプロセッサからのバッファ解放通知に基づいて管理する。
CMD_JUDGE 1640は、CMD_BLK 1610と接続され、取得したコマンドがDRAM131のコマンドバッファに転送される経路上に配置されている。 CMD_JUDGE 1640は、コマンドが通過する際、コマンドの種別(リードコマンドかライトコマンドかその他か)を判別したり、コマンドフォーマットやその値が規格を逸脱していないかチェックする。CMD_JUDGE1640は、またコマンド種別判別結果に応じて後述するPARAM DMA170を起動するために、同DMAと制御信号線230を介して接続される。また、コマンドフォーマットが無効であった場合、エラー応答を上位装置2へ返すため、CMD_MGR 1630とも接続される(図示割愛)。
図5は本実施形態におけるPARAM DMA170の内部構成を示す図である。PARAM DMA170は、CMD_BLK1610がDRAM131のコマンドバッファに格納したコマンドに含まれるパラメータを解析して、DATA DMA 180を起動するのに必要な転送パラメータを生成するDMAである。
同DMAには、上位装置2のコマンドがライトコマンドであったとき、CMD_BLKにあるCMD_JUDGE 1640によって起動されるPRP_DMA_BLK_W 1710と、上位装置2のコマンドがリードコマンドであったとき、リード返送用データが用意できた際にプロセッサ140により起動されるPRP_DMA_BLK_R 1720とがある。なお添え字の_Wおよび_Rは上位装置2からのコマンド種別と対応しており、ライトコマンドを処理する際に動作するのが前者(_W)、リードコマンドを処理する際に動作するのが後者(_R)である。
PRP_DMA_BLK_W 1710は、コマンドから必要なフィールド情報を取得解析するCMD取得部(CMD FETCH)1711、解析してPRP Entryを取得するPRPフェッチ部(PRP_FETCH) 1712と、PRP Entryを元に、DMAパラメータを生成するパラメータ生成部(PRM_GEN) 1713、DMAとの通信を担うDMA_COM 1714、および、各部に使用されるバッファ(図示省略)から構成される。
PRP_DMA_BLK_R 1720も、構成は同様でありCMD_FETCH 1721、PRP_FETCH 1722、 PRM_GEN 1723、DMA_COM 1724、および各部に使用されるバッファから構成される。
PRP_DMA_BLK_W 1710およびPRP_DMA_BLK_R 1720は、上位装置2からPRP Entry Listの取得を行うために、バス200に接続されるほか、SRAM150上のコマンドバッファに格納したコマンド情報を参照するためにバス220と接続される。また、生成したDMA転送パラメータによるデータ転送指示のために、後述するDATA_DMA180と制御信号線240を介して接続される。
PRP_DMA_BLK_W 1710 は更に、CMD_JUDGE1640と接続され、コマンドがライトコマンドだった際にCMD_JUDGE1640から起動される。
一方、PRP_DMA_BLK_R 1720は、上位装置2のメモリ20へ転送するためのデータがDRAM 131、132に設けられたリードバッファに用意された後に、バス220を介してプロセッサ140により起動される。なお、バス220との接続は、障害発生時にプロセッサ140やCMD_MGR と通信するためにも用いられる。
図6は本実施形態におけるDATA_DMA180の内部構成を示す図である。DATA_DMA180は、PRP_DMA_BLK_W 1710が生成するDMA転送パラメータに基づき、上位装置2のメモリ20から装置1のDRAM131、132に設けられたライトバッファへ圧縮ないし非圧縮で転送するDATA_DMA_W 1810と、PRP_DMA_BLK_R 1720が生成するDMA転送パラメータに基づきDRAM131、132に設けられたリードバッファから上位装置2のメモリ20へ伸張ないし非伸張で転送する機能により上位装置2のリードコマンド処理時に主に動作するDATA_DMA_R 1820とから成る。末尾の_Wまたは_Rは、上位装置2から見たI/Oの種別を意図している。
DATA_DMA_W 1810には、ライトコマンドを処理するために、上位装置2のメモリ20からデータをリードしてくるためのRX_DMA 610、リードしてきたデータを格納する為のINPUTバッファ611、RX_DMA610からのトリガによってINPUTバッファよりデータをリードし、圧縮指示の有無および圧縮単位サイズに達しているかの条件に応じ圧縮するCOMP DMA 612、圧縮済データを格納する為のOUTPUTバッファ613、DATA_DMA_W1810動作終了時に圧縮サイズ等の情報をプロセッサに渡すための管理を行うステータスマネージャSTS_MGR616、および、圧縮済みデータをDRAM131、132に送信する為のTX0_DMA 614、非圧縮データをDRAM131、132へ送信する為のTX1_DMA 615が含まれる。TX1_DMA 615は、IPNUTバッファ611から直接非圧縮データをリードできるよう、同バッファと内部接続される。
なお、TX0_DMA 614およびTX1_DMA 615は構成上1つのDMAであっても構わない。その場合にはセレクタによってINPUTバッファとOUTPUTバッファが接続される。
COMP DMA612とTX1 DMA615は制御信号線617で接続されている。上位装置からのコマンドにより圧縮が指定されている場合、COMP DMA612はデータを圧縮する。しかし、所定の条件を満たす場合、圧縮せずにデータを転送するため、COMP DMA 617は制御信号線617を介してTX1 DMA 615に非圧縮でのデータ転送を指示する。例えば、データ終端が圧縮単位に満たない場合や、圧縮後のサイズが元のサイズより大きくなってしまった場合などである。
DATA_DMA_R 1820には、DRAM131、132から伸張用にリードしてくる為のRX0_DMA 620、非伸張用にリードしてくる為のRX1_DMA 621、リードしてきた圧縮済データを格納する為のINPUTバッファ622、INPUTバッファよりデータをリードし、条件に応じて伸張するDECOMP DMA 623、同条件判断のためにプロセッサから渡される圧縮情報を管理するステータスマネージャSTS_MGR626、伸張および非伸張データを格納するOUPUTバッファ624、上位装置2のメモリ20へデータをライトするためのTX_DMA 625とが含まれる。
RX1_DMA 622は圧縮済データを非伸張で上位装置2へライトできるようOUTPUTバッファ625と接続される。なお、RX0_DMA 620およびRX1_DMA 622は構成上1つのDMAであっても構わない。その場合にはセレクタによってINPUTバッファとOUTPUTバッファが接続される。
DATA_DMA_W 1810およびDATA_DMA_R 1820は、上位装置2のメモリ20にアクセスするためにバス200と、DRAM131、132にアクセスするためにバス210と、そして、障害時にCPL_BLK1620と通信するために、バス220と接続される。なお、動作のためのDMA転送パラメータを受け取る為にPRP_DMA_BLK_W 1710とDATA_DMA_W 1820、PRP_DMA_BLK_R 1720とDATA_DMA_R1720が互いに接続される。
図7は、これまでに説明した本実施形態におけるSRAM150に配置される情報についてまとめて図示したものである。SRAM150には、CMD_DMA160等で用いられる上位装置2から受領したコマンド情報を格納しておく為のコマンドバッファ1510、同コマンドに対応したデータを圧縮した際の圧縮情報を格納する為の圧縮情報バッファ1520とがあり、それぞれコマンド番号1500で管理される。またSRAM150にはCMD_DMA160がライトコマンドおよびデータ受領をプロセッサコア140a/bに通知するためにコマンド番号を格納するライトコマンドリングバッファWr Ring 710a/b、同様に、リード等のコマンド受領を通知するためにコマンド番号を格納する為の非ライトコマンドリングバッファNWr Ring 720a/b、上位装置2からのコンプリーション受領完了を通知するためにコマンド番号を格納するコンプリーション完了リングバッファCpl Ring740a/b、そして、FMの物理アドレスと上位装置2に見せている論理アドレスとの対応関係を記録する論理-物理変換テーブル750とがある。なお、SRAM150はこの他にもプロセッサ140で動作する制御ソフトウェアのワーキングエリアとして利用されるが、本発明の内容とは関係しないので、説明は割愛する。
コマンドバッファ1510は、Submission QueueのEntryに作成されたNVMeコマンドを上位装置2から取得して格納しておく領域を複数備える。各領域のサイズは同一であり、コマンド番号1500で管理される。従い、ハードウェアは、コマンド番号が判れば「先頭アドレス+コマンド番号×固定サイズ」から当該コマンド番号に対応するコマンドが格納されている領域のアクセスアドレスを知ることができる。なお、コマンドバッファ1510はプロセッサ140用に一部予約された領域を除きハードウェアによって管理される。
圧縮情報バッファ1520は、各コマンドに対応して設けられ、バッファ内は圧縮単位ごとに複数個の情報を格納できるように構成される。例えば、最大転送長が256KB、圧縮単位が4KBだった場合、64個の圧縮情報が1つの圧縮バッファに格納できるよう設計される。最大転送長をどこまでサポートするかは装置の設計事項である。なお、上位装置のアプリケーションが要求するI/Oサイズはしばしば最大転送長よりも大きい(例えば1MB)が、多くの場合、ドライバで分割される(例えば256KB×4)。
圧縮情報バッファ1520は、各コマンドに対応して設けられ、バッファ内は圧縮単位ごとに複数個の情報を格納できるように構成される。例えば、最大転送長が256KB、圧縮単位が4KBだった場合、64個の圧縮情報が1つの圧縮バッファに格納できるよう設計される。最大転送長をどこまでサポートするかは装置の設計事項である。なお、上位装置のアプリケーションが要求するI/Oサイズはしばしば最大転送長よりも大きい(例えば1MB)が、多くの場合、ドライバで分割される(例えば256KB×4)。
圧縮情報バッファ1520に圧縮単位で格納される圧縮情報は、例えば、後述するデータバッファ番号、当該データバッファ内でのオフセット、圧縮後のサイズ、該当データの有効/無効フラグなどから構成される。前記該当データの有効/無効フラグは、フラッシュメモリに書く前に更新データがきた場合、当該データは旧データとなって不要となることを表すために用いられる。なお、圧縮情報には他に制御に必要な情報があればそれらを含んでいても良い。例えば、ストレージではしばしばT10DIFのようなデータ保護用の情報がセクタ単位に付されるが、これらは圧縮せずに取り外し、圧縮情報上に残すようにしても良い。例えば、512BにT10DIF 8Bが付加されていた場合、圧縮は512B×4セクタ単位で行い、8B×4セクタのT10DIF情報を圧縮情報に記録することが考えられる。あるいは、セクタが4096Bで、T10DIF 8Bが付加されていた場合には、4096Bを圧縮し、8Bを圧縮情報に記録する。
Wr Ring 710a/bは、先のDMA160、170、180によってコマンドおよびデータが受領された際に、プロセッサコア140a/bで動作する制御ソフトウェアにその旨を通知するためのリングバッファであり、コマンド番号が格納される。同バッファは生成ポインタ(P pointer)と消費ポインタ(C pointer)で管理され、ハードウェアがリングバッファにコマンドバッファ番号を書き込んでいくごとに生成ポインタを進め、プロセッサがコマンドバッファ番号を読み出すごとに消費ポインタを進めることで、リングの空きを管理する。従い、両者のポインタの差が新規に受領されたコマンドの数と一致する。
NWr Ring 720a/b、およびCpl Ring 740a/bについても構成は同じである。
図8は、本実施形態におけるDRAM131、132に配置されるデータの領域管理を図示したものである。DRAM131、132には、ライトデータを格納しておく為のWrite Data Buffer 800、FMからステージングしたデータを格納しておくためのRead Data Buffer 810、そしてRMW動作時に利用されるModify Data Buffer 820とが設けられる。それぞれのバッファは固定長で区分されて管理される。各区分に割り振られる一意の番号をデータバッファ番号と呼ぶ。各区分は例えば64KBのようなサイズなので、1つのコマンドと結び付けられるデータバッファの数は、データサイズに応じて異なる。
図9は、本実施形態においてDMA160~180がどのように連携して処理するかを示したフローチャートである。フローチャート上の破線枠はどのDMAにおける動作かを示しており、図9においては、添え字Sで始まる番号はハードウェアの動作を示している。なお、ハードウェアの動作は一般に知られているように、動作契機が得られるまで各破線枠内の先頭に記載の処理のためにWaitしており、契機を得て一連の動作が終了すると再び先頭処理での契機待ち状態に戻る。従い、各破線枠内の動作は、次の破線枠内の動作完了を待つことなく、契機を得られる毎に繰り返し動作する。このため、本実施形態のように各処理毎にDMAを独立させることで、並列処理が可能となる。本図は全体の流れを説明するのが目的であるから、上記に述べた繰り返しに関する表記は省略する。なお、本実施形態において、DMAが起動するとは、DMAが値の変化を検出したり、パラメータ等を受信したことを契機に一連の動作を開始することをいう。一方、図9においては添え字Mで始まる番号はプロセッサでの処理を示している。
はじめに、ライトコマンドが発行された場合を例に取り、動作の詳細について述べる。
上位装置2が新規のコマンドをキューイングし、キューの最終Entryの番号(Tailポインタの値)を更新してSQT Doorbell 1611を鳴らすと、NVMe DMA 160にあるCMD_BLK1610はCurrent Head レジスタ1612の値とSQT Doorbellとの値の差からコマンドが発行されたことを検出し、以降の動作を開始する(S9000)。CMD_BLK 1610は、CMD_MGR 1630に問い合わせSRAM150上のコマンドバッファ1510の空きを確認する。CMD_MGR 1610は内部の管理レジスタによってコマンドバッファ1510を管理しており、周期的にコマンドバッファ1510の空きをサーチしている。CMD_MGR 1630は、コマンドバッファ1510に空きがあった場合には空きコマンドバッファに対応するコマンド番号1500をCMD_BLK 1610に返す。CMD_BLK1610はコマンド番号1500が取得できると、Doorbellに格納されたEntry番号を元に上位装置2のSubmission Queue 201のアドレスを算出し、バス200およびPCIeコア110を介してメモリリードリクエストを発行することによってSubmission Queue 201に格納されたコマンドを取得する。取得されたたコマンドは内部バッファ1614に一時的に格納され、先に取得したバッファ番号 1500に対応するコマンドバッファ1510へ格納される(S9010)。この際CMD_JUDGE 1640は転送されるコマンドを解析してコマンドの判別を行う(S9020)。そしてコマンドがライトコマンドであった場合(S9030:Yes)、データ受領まで行うために、CMD_JUDGE 1640は、制御信号線230を介してコマンド番号を送る。PARAM_DMA 170にあるPRP_DMA_BLK_W 1710は、コマンド番号を受け取ると起動する(S9040)。
PRP_DMA_BLK_W 1710は、起動されると、起動時に渡されたコマンド番号1500に対応するコマンドバッファ1510に格納されたコマンドを解析する(S9100)。そして、PRP Listの取得が必要かどうかを判断する(S9110)。もしPRP Listの取得が必要と判断された場合、PRP_DMA_BLK_W 1710にあるPRP_FETCH 1712は、同List取得のために、PRP Entryに記載されるメモリ20のアドレスを参照して、PRP Listを取得する(S9120)。例えば、Number of Logical Blocks 1906に設定されるデータ転送サイズが、コマンドに含まれる2つのPRP Entryで表現可能なアドレス範囲であれば、 PRP Listの取得は不要と判断される。アドレス範囲がコマンド内に収まらない場合は、コマンドにはPRP Listが格納されているアドレスが含まれることになる。なお、具体的なPRP List取得要否の判定の方法、PRP Entry記載のアドレスがListを指す間接アドレスかPRPのアドレスかの判別する方法等については、公知であるNVMeの規格書等に記載がある。
また、PRP_DMA_W 170は、コマンドを解析する際に、データの圧縮または伸張が指定されているかを判断する。
PRP_DMA_BLK_W 1710はPRP EntryおよびPRP Listより取得したPRPからDATA DMA 180用の転送パラメータを作成する。転送パラメータは、例えばコマンド番号、転送サイズ、データ格納先または格納元となっているメモリ20の開始アドレス、データの圧縮または伸張の要否等である。そしてDATA DMA 180にあるDATA_DMA_BLK_Wにこれらの情報を制御信号線240を介して送り、起動させる(S9140)。
DATA_DMA_BLK_W1810は、転送パラメータを受け取ると、初めにBUF_MGR 1830に要求を出し、データバッファの空きバッファ番号を取得する。BUF_MGR 1830は周期的に空きバッファをサーチして候補をバッファリングしており、もし候補が枯渇していなければDATA_DMA_BLK_W 1710に空きバッファ番号を通知する。また、もし枯渇していた場合BUF_MGR 1830は空きが見つかるまでサーチし続けるので、データ転送は一旦待たされる。
DATA_DMA_BLK_W1810は、PRP_DMA_BLK_W 1710が作成した転送パラメータに基づいて、RX_DMA610から上位装置2にメモリリードリクエストを発行し、上位装置2にあるライトデータを取得して自身のINPUTバッファ611に格納する。この際PCIeのパケットは順不同に到着する可能性があるが、圧縮は順序整列して実施する必要があるため、公知の技術により待ち合わせやバッファ振分によって並び替えを行う。DATA_DMA_BLK_W1810は、転送パラメータに基づいて、データが圧縮対象であるか否かを判断する。対象データが圧縮対象であった場合、DATA_DMA_BLK_W1810は、COMP DMA612を起動する。起動されたCOMP DMA612はINPUTバッファに論理-物理変換テーブルの管理単位の境界に一致し、かつ管理単位のサイズ分のデータ(例えば8KB)があれば、随時圧縮していき圧縮データをOUTPUTバッファに格納する。そしてTX0 DMA 614は、先に確保したデータバッファにデータを転送すると共に、データバッファ番号、開始オフセット、転送サイズ、データ有効/無効フラグ等からなる圧縮情報を都度生成し、STS_MGR 616に送る。STS_MGR 616は同情報を自身のバッファ内に収集し、一定量ごと圧縮情報バッファ1520に書き出していく。一方、対象データが圧縮対象でない場合は、DATA_DMA_BLK_W1810は、TX1 DMA 615を起動し、データを圧縮せずにデータバッファに転送する。以上の様にしてDATA_DMA_BLK_W 1810は転送パラメータがなくなるまで上位装置2のライトデータを自身のDRAM 131、132に転送する。(S9200)
なお、途中でデータバッファがいっぱいになった場合には、都度BUF_MGR 1830に要求を出し、新たなバッファを利用していく。このようにして、上位装置2に見せている論理アドレスの重複によらず、常に新しいバッファを割当てて格納していくので、更新データも別のバッファに格納される。つまり、バッファ上で旧データは上書きされない。
なお、途中でデータバッファがいっぱいになった場合には、都度BUF_MGR 1830に要求を出し、新たなバッファを利用していく。このようにして、上位装置2に見せている論理アドレスの重複によらず、常に新しいバッファを割当てて格納していくので、更新データも別のバッファに格納される。つまり、バッファ上で旧データは上書きされない。
また、データの先頭および末尾が圧縮単位に満たない場合には、COMP DMA612は制御信号線617を用いてTX1 DMA615を起動し、TX1 DMA615はINPUTバッファのデータを非圧縮でDRAMのデータバッファに転送する。データは非圧縮の状態でデータバッファに格納され、当該データの圧縮情報も非圧縮のサイズが記録される。これは圧縮単位に満たないデータは後述のRead Modify Write処理が必要となり、圧縮しても伸張状態に戻す必要があるためである。本実施例では、このようなデータを圧縮せずに格納することで、不要な伸張処理を削減でき処理効率が向上する。
また、データを圧縮した結果圧縮後のサイズが圧縮前より大きくなった場合も、同様にCOMP DMA612はTX1 DMA 615を起動し、TX1 DMA 615は非圧縮のデータをデータバッファに転送する。より具体的には、COMP DMA612はOUTPUTバッファ613に圧縮後データを書き出す際に転送サイズをカウントし、非圧縮データと同サイズに達しても転送が終了していない場合、圧縮処理を中断してTX1_DMA615を起動する。これにより、サイズが大きくなったデータを格納することを回避できる。また、圧縮完了を待たずに処理を切り替えるので、遅延を削減することができる。
データ転送が当該コマンドの最終転送だった場合(S9160:Yes)、TX0_DMA 614がデータ送信を追えた後、STS_MGR616は残っている圧縮情報を、圧縮情報バッファ1520に書き出す。そしてDATA_DMA_BLK_W 1810は、該当するコアのWr Ring 710にコマンド番号を書き込み、更に生成ポインタを1進めることでプロセッサにコマンドおよびデータの受領が完了したことを知らせる(S9220)。
なお、Wr Ring 710を用いて通知するプロセッサコア140の選択は、ラウンドロビンで選択する方法や、キューイングされているコマンド数を見て負荷分散選択する方法、LBA範囲によって選択する方法、などいくつかのバリエーションが考えられるが、いずれの方法でも良い。
プロセッサ140はポーリングによってWr Ring710にコマンドが来たことを検出すると、当該リングバッファに格納されていたコマンド番号に基づいて、圧縮情報を取得し自身の管理テーブルに記録すると共に、対応するコマンドバッファ1510に格納されたコマンド内容を参照する。そして、プロセッサ140は、当該コマンドの書込先論理アドレスが、既に別のバッファに格納されている否か、即ちWrite Hitか否かを判定する(M970)。
もしWrite Hitである場合、かつ旧データをすべて上書きできる場合、DRAMに格納されている旧データはフラッシュに書き出す必要がないので、古いデータに対応する圧縮情報に書き出し無効フラグを設定する(同M970)。一方、旧データと更新データの両者が部分的に重複していた場合には、双方をマージ(Modify)して新規データとする必要がある。この場合、プロセッサ140は、圧縮情報に基づいて起動パラメータを作成し、RMW_DMA190に送り、RMW_DMA190を起動する。同処理については後述のPr.90Aにて詳細を記載する。
一方、Write Missである場合、プロセッサ140は論理-物理変換テーブル750を参照し、更新データがフラッシュメモリに格納された旧データをすべて上書きできるかどうかを判断する。すべて上書きできる場合、更新データをフラッシュメモリにデステージする(書き込む)際、公知のフラッシュメモリの制御方法によって、旧データを無効化する(M970)。一方、旧データと更新データの両者が部分的に重複していた場合には、双方をマージ(Modify)して新規データとする必要がある。この場合、プロセッサ140は、FMC DMA120を制御して、当該物理アドレスが示すフラッシュメモリの領域からデータを読み出す。プロセッサ140は、読み出したデータをRead Data Buffer 810に格納する。また、プロセッサ140は、論理―物理変換テーブル750から当該論理アドレスに対応する圧縮情報を読み出し、コマンド番号1500に対応する圧縮情報バッファ1520に圧縮情報とRead Data Buffer810のバッファ番号を格納する。その後、プロセッサ140は、圧縮情報に基づいて起動パラメータを作成し、RMW_DMA190を起動する。以降の処理についてはPr.90Aに同じである。
また、プロセッサ140は非同期で所定の制御ルールに基づいて、データバッファ上のデータをフラッシュメモリに書き出すデステージング処理を行う(M980)。プロセッサ140は、データをフラッシュメモリに書きこむと、論理-物理変換テーブル750を更新する。この際、プロセッサ140は、更新した論理アドレスと対応付けてそのデータの圧縮情報も格納する。そして、デステージされたデータが格納されているデータバッファ及び対応するコマンド番号のコマンドバッファは不要となるため、解放される。具体的には、プロセッサ140はコマンド番号をCMD_MGR 1630に通知し、CMD_MGR 1630がそのコマンド番号に対応するコマンドバッファを解放する。また、プロセッサ140はデータバッファ番号をBUF_MGR 1830に通知し、BUF_MGR 1830がそのバッファ番号に対応するデータバッファを解放する。解放されたコマンドバッファ及びデータバッファは空き状態となり、他のコマンド処理に使用可能となる。なお、バッファの解放タイミングは、プロセッサ140での処理最適化と、次に述べるコンプリーション送信処理との関係から必要に応じ適切なタイミングに変更される。また、コマンドバッファについては、コンプリーション送信処理後にCPL BLK 1620が解放を行うようにしても良い。
上記処理と並行して、DATA_DMA 180は、プロセッサ通知が終わると、上位装置2にデータ受領成功した旨のコンプリーションを送信する準備をする。具体的には、DATA DMA 80は終了したコマンド番号をNVMe DMA160にあるCPL_BLK1620に、制御信号線250を介して送り、起動する(S9400)。
起動されたCPL_BLK 1620は、コマンド番号1500に該当するコマンドバッファ1510に格納されたコマンド情報を参照して、コンプリーションを内部バッファ1924に生成すると、当該コンプリーションをCompletion Queue202の空きEntryに書き込むと共に、当該Entry番号とコマンド番号との対応を内部バッファ1924に備える対応テーブルに記録する(S9400)。そして上位装置2からの受領完了通知を待つ(S9410)。上位装置2からコンプリーション受領完了通知(図3:S350)が返ってくると(S9450)、当該コンプリーション送信は成功しているので、先のEntry番号とコマンド番号との対応テーブルを参照して、該当するコマンド番号をCpl Ring740に書き込むことでプロセッサ通知を完了する(S9460)。
次に同図を用いて、リードコマンドを含む非ライトコマンドの場合の動作について詳細に述べる。S9000~S9020までの動作はライトコマンドと同じのためS9030より説明する。
コマンド判別の結果、コマンドがライトコマンドでなかった場合(S9030:No)、CMD_DMA 160は、NWr Ringへのコマンド番号書込により、プロセッサ150へ通知を行う(S9050)。
プロセッサはNWr Ringのポーリングによって非ライトコマンドの受領を検知すると、当該コマンド番号に対応したコマンドバッファ1510に格納されているコマンドの解析を行う(M900)。解析の結果、コマンドがリードコマンドでなかった場合(M910:No)、プロセッサは当該コマンドに固有の処理を行う(M960)。これらは例えばNVMeの初期設定等で用いられるAdminコマンドである。
一方、コマンドがリードコマンドであった場合(M910:Yes)、プロセッサはDRAM131、132のバッファ上に当該コマンドの論理アドレスと同一の論理アドレスを持つデータが存在するか否か判定する。即ちReadHit判定を行う(M920)。
Read Hitであった場合(M930:Yes)、プロセッサ140はRaed Data Buffer 810に格納されているデータを、上位装置2に返せば良い。Write Data Buffer 800に格納されている場合は、プロセッサは前記WriteDataBuffer800のデータをプロセッサ140が管理するRead Data Buffer810にコピーし、当該コマンド番号に対応する圧縮情報バッファに、Read Data Buffer810のバッファ番号とデータ伸張に必要な情報を格納する(M940)。データ伸張に必要な情報は、先に圧縮DMAがデータ受領時に生成した圧縮情報が利用される。
一方、Read Missであった場合(M930:No)、プロセッサ140はデータをフラッシュメモリから読み出してDRAMに格納するステージング処理を行う(M970)。プロセッサ140は、論理-物理変換テーブル750を参照し、リードコマンドが指定する論理アドレスに対応する物理アドレスを特定する。そして、プロセッサ140は、FMC DMA120を制御して、当該物理アドレスが示すフラッシュメモリの領域からデータを読み出す。プロセッサ140は、読み出したデータをRead Data Buffer810に格納する。また、プロセッサ140は、論理―物理変換テーブル750から当該論理アドレスに対応する圧縮情報を読み出し、コマンド番号に対応する圧縮情報バッファに圧縮情報とRead Data Buffer810のバッファ番号を格納する(M940)。
なお、上記ではリードデータ返送中に更新ライトによってWrite Data Bufferが無効・解放されてしまうケースを避けるためにRead Data Bufferへのコピーをしたが、同Bufferのロック管理が適切に行えるのであれば、Write Data Bufferを直接指定してもよい。
プロセッサは、バッファの引き渡しが完了すると、ハード処理を再開させるため、PARAM DMA170にあるPRP_DMA_BLK_R 1720を当該コマンド番号を送り、起動する(M950)。
起動されたPRP_DMA_BLK_R 1720の動作はPRP_DMA_BLK_W 1710の動作(S9100~S9140)と同じであるので割愛するが、S9140’の動作によってDATA_DMA_R 1820を起動する点のみ異なる。
起動されたDATA_DMA_BLK_R 1820は、STS_MGR626によって、当該コマンドに対応する圧縮情報バッファから圧縮情報を取得する。転送パラメータに伸張を指定する情報が含まれている場合、この情報を用いてRead Data Buffer810の該当データのリードと伸張を行う。STS_MGR 626は圧縮情報を取得すると、そこに記載されたRead Data Buffer番号とオフセット情報をRX0_DMAに通知し、RX0_DMAは当該情報を用いて該当するRead Data Bufferに格納されたデータをリードしINPUTバッファ622に格納する。INPUTバッファ622は多段バッファとなっており、先の圧縮情報に基づいて伸張処理単位毎に順次格納していき、格納する毎にDECOMP DMA 623に通知する。DECOMP DMA 623は通知に基づいてINPUTバッファの圧縮データを読み出して伸張し、OUTPUTバッファに格納していく。OUTPUTバッファに規定のデータが溜まると、TX_DMA625はPRP_DMA_BLK_R 1720の生成した転送パラメータに基づき、バス200を通じて上位装置2にメモリライトリクエストを発行することにより、当該OUTPUTバッファのデータをPRPで指定されたメモリ領域へ格納する(S9300)。
TX_DMA625によるデータの転送が全て終了すると(S9310:Yes)、DATA_DMA_BLK_R 1820(DATA DMA 180)は、上位装置2にコンプリーションを送信するため、コマンド番号を送りNVMe DMA160のCPL_BLK 1630を起動する。以降のCPL_BLKの動作についてはライトコマンド処理時と同様である。
図10は、図9におけるDMA間の連係処理及び障害が起きた際のDMA間の通知処理を模式的に表したものである。正常時、各DMAは次のDMAを起動するが、障害やエラーを検出した場合には、エラー通知機能Err(S9401)を用いてCPL BLK1620に通知し、当該処理を中断する。CPL BLK1620は通知されたエラー内容と共にコンプリーション(S340)を送信することで、上位装置2に通知する。このようにすることで、プロセッサ140が介在していなくても障害時の通知動作を行うことが可能となる。つまり、障害の通知によるプロセッサ140の負荷を低減し、性能低下を抑制することができる。
次に図11及び図12を用いて本実施例のRead Modify Write処理を説明する。
ストレージ装置やサーバでキャッシュの存在が期待される場面の1つに、小サイズでランダムにアクセスされたデータをキャッシュするケースがある。この場合、データはランダムなため、アドレスが連続したデータはほとんど来ない。このため、更新データが圧縮可能な単位のサイズより小さい場合、圧縮格納済データとのRead-Modifyが頻繁に生じる。従来であれば、Read-Modifyするためには、プロセッサは記憶媒体からメモリへ圧縮データを読み上げ、伸張DMAを用いて圧縮データを伸張し、伸張したデータと非圧縮で格納された更新データとをマージ(言い換えればModify)して再度メモリに格納し、その後のModifyしたデータを圧縮DMAで再度圧縮する必要がある。プロセッサは都度DMA起動に必要な転送リストの作成、DMAの起動処理および完了ステータスの確認処理を行う必要があるから、処理負荷増大は避けられない。また、メモリアクセス増加による処理低下も合わせて発生する。従い、圧縮データのRead-Modify処理は通常のRead-Modfy処理よりも処理負荷が高く、性能低下も大きい。このため、本実施例では、以下に述べる通り、プロセッサの負荷とメモリアクセスを低減した高速なRead Modify Write処理を実現する。
図11は先に述べたPr.90AにおけるRead Modify Write処理を行うRMW DMA 190の内部構成を示すブロック図である。
RMW_DMA 190は、バス220を通じてプロセッサと接続されており、また、バス210を通じてDRAM131、132に接続される。
RMW_DMA 190は、圧縮済データをDRAMから読み出す為のRX0_DMA 1920 および、読み出したデータを一次格納するためのINPUT バッファ1930、INPUTバッファ 1930からデータを読み出して伸張するDECOMP DMA 1940、そして非圧縮データをDRAMから読み出すためのRX1_DMA 1950を備える。RMW_DMA190は更に、Modify部分に応じて送信するデータを切り替え、他方を破棄するMUX(Multiplexer) 1960、MUX 1960がゼロデータを送信するときに選択するZERO GEN 1945、送信されたデータを再度圧縮するCOMP DMA 1970、その圧縮データの出力先であるOUTPUTバッファ1980、再圧縮されたデータをDRAMに書き戻す為のTX_DMA 1990とを備える。そして、RM Manager1910がプロセッサによって起動時に与えられる起動パラメータに基づき、各DMAとMUXを制御する。
RMW_DMA 190の動作は、起動パラメータと共にバス220に接続されるプロセッサによって起動されると、パラメータを解析して、DRAM131のデータバッファから旧データとなる圧縮データをRX0_DMA 1920を用いて読み出し、また、更新データとなる非圧縮データをRX1_DMA 1950を用いて読み出すよう指示する。
両者の転送が始まると、RM Manager 1910は、起動パラメータの指示に基づいて、Modify後データを作る為に、MUX 1960を制御する。例えば、伸張後32KBのうち、513B目から4KB分が更新データで差換える必要があった場合、RM ManagerはMUX 1960にDECOMP_DMA 1940が伸張した旧データを512B通過させ、RX1DMA 1950にはその間転送を保留するよう指示する。データが512B分MUX1960を通過した後、RM Manager 1910はMUX1960に、今度はRX1_DMA 1950から転送されるデータを通し、DECOMP_DMA 1940から転送されるデータを破棄するよう指示する。そして、RM Managerは、4KB分データがMUX1960を通過すると、再度DECOMP DMA 1940から転送されるデータを通過させるよう指示する。
以上のような転送によって、全体32KBのうち513Bから更新データサイズ4KB分の部分が書き換えられた更新データがCOMP_DMA 1970に向けて送出される。COMP_DMA 1970 はデータが送出されてくると、圧縮単位ごとに圧縮しOUTPUTバッファ1980に格納していく。TX_DMA 1990は当該OUTPUTバッファを起動パラメータで指定されたデータバッファへ転送する。以上によってRMW_DMAは圧縮動作を行う。
なお、2つのModifyデータ間にスキマ(データのない部分)があった場合、RM Manager 1920はその間MUX1960とCOMP_DMA 1970に対しゼロデータが送出されているものとして扱うよう指示する。例えば、一度も更新が発生していなかったある8KBの格納単位の範囲内で、1B目から2KB分と、5KB目から1KB分の範囲に更新が発生した場合である。
図12はPr.90Aのデータ更新処理(RMW処理)におけるプロセッサおよびRMW DMA 190の動作を表すフローチャートである。
圧縮は論物変換格納単位で行われており、その単位で上書き可能なので、M970においてマージ処理が必要な場合は、(1)旧データが圧縮済み、更新データが圧縮単位に満たないサイズで非圧縮格納されている、(2)旧データと更新データの両方とも圧縮単位に満たないサイズで非圧縮格納されている、のいずれかのケースである。格納単位で圧縮しているため、両方とも圧縮済みの場合には、格納単位で上書き可能なためModify処理(マージ処理)はそもそも不要である。
プロセッサ140はポーリングによってWr Ring710にコマンドが来たことを検出すると、以下の処理を開始する。
はじめにプロセッサ140は、更新データの圧縮情報を参照し(S8100)、更新データが圧縮済みか否かを判定する(S8110)。もし圧縮済みである場合には(S8110:Yes)、圧縮単位に満たない旧データ部分は全て更新データによって上書きされるのでModify不要である。そこで、旧データ側の圧縮情報の該当部分に無効フラグを設定し(S8220)、処理を終える。
更新データが非圧縮であった場合(S8110:No)、プロセッサ140は旧データの圧縮情報を参照する(S8120)。プロセッサ140は、参照した旧データの圧縮情報に基づいて旧データが圧縮済みかを判定する(S8130)。もし旧データも圧縮済みでなかった場合には(S8130:No)、プロセッサ140は旧データと更新データのLBAを確認し、当該圧縮単位での格納開始位置をそれぞれ算出する(S8140)。一方、旧データが圧縮済みであった場合には(S8130:Yes)、同データの格納開始位置は先頭からだと分かるので、更新データのLBAから格納開始位置を算出する(S8150)。
次にプロセッサはmodify後のデータを格納するバッファをModify Data Buffer 820上に確保する(S8160)。そして、プロセッサは、旧データの圧縮情報(Read Data buffer 810ないしWrite Data Buffer 800の番号、バッファ上での格納開始オフセット、およびサイズ)と圧縮の有無、およびLBAより求まる当該圧縮格納単位での格納開始位置、更新データの圧縮情報とLBAより求まる当該圧縮格納単位での格納開始位置、および、確保したModify Data Buffer 820のバッファ番号を用いて、RMW DMA 190起動パラメータを所定の作業メモリエリアに作成する(S8170)。プロセッサ140は、起動パラメータの格納アドレスをRMW DMA 190に通知し、RMW_DMA190を起動する(S8180)。
RMW DMA 190は、起動パラメータを確認し(S8500)、旧データが圧縮済みか否かを判定する(S8510)。圧縮データであった場合(S8510:Yes)、RMW DMA 190は、RX0DMA 1920とDECOMP_DMA 1940を用いてDRAM131から旧データ読み出しを行い、RX1DMA1950を用いてDRAM131から新データを読み出すよう指示する(S8520)。そしてRM Manager 1910は両者の格納開始位置情報を元にMUX1960を制御し、更新に該当する部分については、RX1DMA 1950からの更新データを通過させると共にRX0DMAからDECOMP_DMA 1940を通じて伸張された旧データを破棄し、それ以外の部分(更新に該当しない部分)については旧データを通過させることでModifyデータを作成する(S8530)。RMW_DMA 190はCOMP DMA 1970を用いて、送信されたデータを随時圧縮し(S8540)、圧縮したデータをOUTPUTバッファ1980に格納する。そして、RM Manager1910は、TX DMA 1990に指示して、起動パラメータで指定されたModify Data Buffer820に圧縮したデータの格納を行う(S8550)。そして以上が完了すると、RMW DMA190は圧縮後サイズを含む完了ステータスをプロセッサに送信する(S8560)。具体的にはプロセッサの所定の作業メモリエリアにステータスを書き込む。
なお、旧データが圧縮データでなかった場合(S8510:No)、RMW DMA 190は更新データと旧データそれぞれの格納開始位置とサイズを比較する(S8600)。RMW_DMA 190は、RX1 DMA 1950からMUX190に格納開始位置から順にデータを転送する際、更新データが存在するアドレス範囲か否かを判断し(S8610)、更新データが存在する範囲であれば(S8620:Yes)、RX1 DMA 1950を用いて更新データを転送する。更新データが存在する範囲でなければ(S8620:No)、更新データと重複しない旧データが存在するアドレス範囲か否かを判断する(S8630)。旧データが存在する範囲であれば(S8630:Yes)、RMW DMA 190は、旧データをRX1DMAを用いて転送する(S8640)。旧データが存在しない場合(S8630:No)、つまりどちらのデータも存在しない場合には、ZERO GEN 1945と接続するように切り替えてCOMP DMA1970にゼロデータを送出する(S8650)。RMW_DMA190はCOMP_DMA 1970を用いて、COMP_DMA 1970に対して送出されたデータを圧縮し(S8540)、TX DMA 1990を用いてパラメータで指定されたModify Data Buffer820に転送して格納する(S8550)。以降の処理は同じである。
プロセッサは、完了ステータスを確認すると、Read Modifyしたデータを有効にする為、圧縮情報の更新を行う。具体的には、旧データの該当ブロック部分の圧縮情報に無効フラグを立て、一方更新データの該当ブロックの圧縮情報における、ライトバッファ番号とバッファ内開始オフセットを、Modify Data Buffer820の番号(Buf#)とそのオフセットに書き換える。そして書き換え前のWrite Data Buffer800が開放可能な場合には開放処理を行い、処理を終える。
以上により、伸張状態データDRAMへの書き出し及びそれに伴うバッファ確保/開放処理や、再圧縮のためのDMAの起動/完了制御をプロセッサが行うことなしに、圧縮RMWを行うことができる。本発明によれば圧縮単位に満たないデータ転送が行われた際にも、非圧縮データのRMWと同じ転送回数で処理できるので、RMW発生時の性能低下を抑止することができる。従って、低レイテンシで、I/O処理が高性能でかつ、Read-Modifyでも性能低下が起きにくくすることが可能となり、ストレージ装置のキャッシュメモリとして利用に適したPCIe-SSDを実現することができる。
以上によれば、本実施形態により、メモリ20にアクセスが生じる処理フェーズ毎のDMAが並列に配置され、個々のDMAが他のDMAを経由することなく上位装置2と直接転送を行うことができるので、低レイテンシなデータ転送を実現することができる。
また、プロセッサがDMAの起動に必要な転送パラメータの作成や、起動および終了の刈り取り処理を行わずとも済むので、プロセッサ処理を軽減することができる。また、転送フェーズ毎にプロセッサの確認および次の指示による中断が発生しないので、ハードウェアが効率良く動作することができる。このため、プロセッサを強化せずとも、単位時間に処理できるI/O数が向上するので装置全体としてのI/O処理性能を向上させることができ、キャッシュ用途に適した低レイテンシかつ高性能なPCIe-SSDを実現することができる。
次に実施例1の変形例を述べる。実施例1では、DATA DMAが上位装置2にデータを送信していたが、更にデータの加工を行う別のDMAを呼び出して処理するよう構成することもできる。
図17は、実施例1の変形例1を示す。実施例1の構成に加え、上位装置2に送るデータをある条件に基づいてフィルタリングしてから送信するDATA FILTERING ENGINE 230を設けている。例えばDATA FILTERING ENGINE230 はコマンドのPRP Entryに記載のアドレスからPRPの代わりにフィルタリング条件およびフィルタ結果データを格納するアドレスを記載した二次パラメータを取得し、当該二次パラメータの条件に従って、コマンドのLBA範囲のデータから該当条件のデータを抽出するような動作をするものとする。
図9において、コマンドがリードでもライトでもなかった場合、プロセッサ140はコマンドに固有の処理を行う(M960)としている。本変形例の場合、例えば、プロセッサ140がデータ検索用の特殊コマンドであったことを認識すると、当該コマンドに記載のデータをフラッシュメモリからRead Data Buffer810にステージングした後、当該コマンドバッファ番号1500とRead Data Buffer810のバッファ番号を用いて、同ENGINE 230を起動する。同ENGINE 230は、コマンドバッファ番号1500に対応したコマンドバッファ1510に格納されたコマンドを参照し、バス200を通じて二次パラメータを取得する。そして、二次パラメータに指定されたフィルタ条件に応じて、Read Data Buffer810のデータをフィルリングしながら、フィルタ結果を同パラメータで指定されたデータ格納先にバス200を通じてライトするといった動作を行う。
この場合にも、アクセスが生じるごとのDMAが並列に配置され、個々のDMAが他のDMAを経由することなく上位装置2と直接転送を行うことができる。また、必要なデータを装置内で選別して送信することができ無駄な送信が生じないので、高性能なデータ転送を実現することができる。
図18は実施例1の変形例2を示す。変形例1では演算用のDMAを別に設けたが、図18のようにDATA DMAと一体化して設けても良い。この場合、フィルタリングのほか、例えば上位装置2にデータを送信しながら、データを固定長(レコード)に区切った際の特定領域にある値を数値とみなして、合計や平均を求めるといった処理が考えられる。
この場合、データ転送中に演算も合わせて行う為、プロセッサを強化せずともより多くの情報を上位装置に送ることができるので、機能面で優れるキャッシュ装置を実現することができる。
先の実施例1では、本発明におけるキャッシュ装置1の基本I/O動作について述べた。
実施例2では、実施例1における上位装置2をストレージコントローラとし、HDDへ格納するデータの圧縮処理におけるキャッシュ装置1とストレージコントローラとの連携動作について述べ、本発明の構成の効果について説明する。
本実施例におけるキャッシュ装置1は、ライトデータの受領完了をプロセッサ140に通知する際(図9のS9460)、圧縮後のサイズをその通知情報に含める。また、任意の時点において、問い合わせを受けたLBA範囲の圧縮後のサイズをプロセッサ140に通知する機能を持つ。
図13は本発明におけるPCIe接続キャッシュ装置がストレージ装置に搭載された際の構成を表すブロック図である。
ストレージ装置13は、本装置を利用するホスト計算機20A~20Cとストレージネットワーク50を介して接続されるいわゆるディスクアレイシステムと呼ばれる装置である。ストレージ装置13はコントローラ群を納めるコントローラ筐体30と、ディスク群を収める複数のディスク筐体50から構成される。
コントローラ筐体30には、プロセッサやASICからなる複数のストレージコントローラ60a、60bからなり、互いにデータや制御命令を送受信するための内部ネットワーク101で結ばれる。一方、ディスク筐体40には、複数のディスクを接続するための機構であるエクスパンダ500と複数のディスクD00~D03が搭載される。D00~D03は例えばSAS HDDやSATA HDD、あるいは、SAS SSDやSATA SSDなどである。
ストレージコントローラ60aは、計算機と接続するためのフロントエンドインターフェースアダプタ80aと、ディスクと接続する為のバックエンドインターフェースアダプタ90aとを備える。フロントエンドインターフェースアダプタ80aは、例えばFibreChannelやiSCSIなどのプロトコルで通信する為のアダプタである。バックエンドインターフェースアダプタ90aは例えばSAS(Serial Attached SCSIなどのプロトコルでHDDと通信する為のアダプタである。両者にはしばしば専用のプロトコルチップが搭載され、ストレージコントローラ60aに搭載される制御プログラムによって制御される。
ストレージコントローラ60aは、更に、DRAM70aと、本発明の図1に示したフラッシュを搭載したPCI接続型キャッシュ装置1aを備え、プロトコルチップのデータ転送バッファや、ストレージ制御プログラムが管理するディスクキャッシュメモリとして利用される。ここでキャッシュ装置1aは図2aまたは図2bのような形態でストレージコントローラ60aと接続される。
ストレージコントローラ60aが備えるキャッシュ装置1aおよび、70a、80a、90bに示す各構成要素は1つでも複数であっても良い。なお、ストレージコントローラ60bの構成についても60aと同様である。(以降では両者を纏めてストレージコントローラ60と記す)
ストレージコントローラ60も同様に1つでも複数であっても良い。
ストレージコントローラ60も同様に1つでも複数であっても良い。
以上のストレージ装置13が備える各構構成要素については、同装置13が備える管理ネットワーク31を通じて、管理端末32から確認することができる。
図14は、ホスト20からのライトデータをストレージ装置13が処理する際のストレージコントローラ60とキャッシュ装置1との連携動作を説明するためフローチャートである。一般にストレージ装置13は内部のキャッシュメモリを用いてライトバックで処理する。この為、ストレージコントローラ60の処理動作はホストのデータをキャッシュに格納するまでのホストI/O処理S1000~S1080と、後に非同期で行われるキャッシュからディスクへの格納するディスクI/O処理S1300~S370からなる。以下に順に説明する。
ストレージコントローラ60は、フロントエンドインターフェースアダプタ80に搭載されるプロトコルチップを介し、ホストからライトコマンドを受領すると(S1000)、コマンドを解析してデータ受領用の一次バッファ領域をDRAM 70上に確保する(S1010)。
そして、同プロトコルチップを通じてホストにデータ受領可(XFER_RDY)のメッセージを送信し、続けてホストから転送されるデータをDRAM 70上に受領する(S1020)。
次にストレージコントローラ60は、受領したデータをディスクキャッシュメモリ上に格納する為に、キャッシュ装置1上に同一アドレス(LBA)のデータが存在するか否かを判定する(S1030)。ここで存在すればキャッシュヒットであり、存在しなければキャッシュミスである。ストレージコントローラ60はキャッシュヒットの場合、データを上書きするために割当済みのキャッシュ領域を格納領域とする、一方、キャッシュミスの場合には、新規のキャッシュ領域を割り当てて格納領域とする(S1040)。以上のHit/Miss判定やキャッシュ領域の管理方法は、ストレージシステム制御における公知の方法による。また、ストレージコントローラはキャッシュ上のデータを保護する為、両者のコントローラでしばしばデータを冗長化するが、これについても公知の方法による。
次に、ストレージコントローラ60は、一次バッファのデータをキャッシュ装置1に格納する為に、NVMeのライトコマンドをキャッシュ装置1に発行する(S1050)。ここで、ストレージコントローラ60は、キャッシュ装置1にデータの圧縮を指示するために、コマンドパラメータのData Set Mgmt1907にデータの圧縮を指示する情報を格納する。
キャッシュ装置1は、先の実施例で説明した図9のフローに従って、先のストレージコントローラから発行されたNVMeライトコマンドを処理する。図4を用いて説明すれば、上位装置2がストレージコントローラ60であり、一次バッファがデータ領域204に当たる。キャッシュ装置1はデータを圧縮してフラッシュメモリに格納するので、一連の転送が終了すると圧縮後サイズを含むステータス情報を含むコンプリーションを生成して、ストレージコントローラのCompletion Queueに書き込む。
ストレージコントローラ60はコンプリーションを検出し、図4 S350に示す確認処理(コンプリーション受領完了通知)を終えると(S1060)、ステータス情報から圧縮後サイズを取得して自身の管理テーブルに記憶し(S1070)、データ受領が完了した旨をホストに通知して(S1080)、ホストI/O処理を終了する。
ストレージコントローラ60は、また、ホストI/Oとは非同期にHDDへの書き出し契機を得ると、S1300~S1370に示すHDD格納処理(いわゆるデステージング処理)に入る。この契機は、例えばキャッシュ領域に空きがなくなりデータをディスクに書き出す必要がある場合や、旧データを読み出すことなくRAIDパリティが演算できる状態になったときなどである。
なお、書き出しに当たっては、RAID5やRAID6といったデータ保護レベルに応じてパリティ演算に必要な処理が行われるが、これらは公知の方法であるので、本フローでは割愛し、特徴となる書き出し処理部分のみを記載する。
ストレージコントローラ60は、該当ディスクへの書き出し対象となるアドレス範囲のデータサイズの合計をキャッシュ装置1に問い合わせ、圧縮後のサイズを取得する(S1300)。
そして、同サイズに応じ、圧縮データを格納するディスクに対応したアドレス領域を新たに確保し、キャッシュ装置1に当該アドレスから圧縮後データへアクセスできるよう追加のアドレスマッピングを指示する(S1310)。
キャッシュ装置1は図7に示すフラッシュメモリの論理-物理変換テーブル750に新たなエントリを加え、上記マッピングを行う。
次にストレージコントローラは、圧縮後のデータを格納する為の一次バッファをDRAM70上に確保する(S1320)。そして、S1310でマッピングしたアドレスに対し、圧縮したままデータを読み出すよう、Data Set Mgmt1907にデータの圧縮を指示する情報を設定したコマンドパラメータを用いてNVMeリードコマンドを発行する(S1330)。キャッシュ装置1は図9のフローに従ってリードデータを一次バッファ上へ転送し、コンプリーションをストレージコントローラへ転送する。
ストレージコントローラはコンプリーションを確認すると、受領通知をキャッシュ装置1へ返す(S1340)。そして、バックエンドインタフェースにあるプロトコルチップを起動し(S1350)、一次バッファ上にある圧縮後データをディスクへ格納する(S1360)。そしてプロトコルチップの転送完了を確認した後(S1370)、処理を終える。
図15は、ホスト20からのデータリード要求をストレージ装置13が処理する際のストレージコントローラ60およびキャッシュ装置1との連携動作を説明するためフローチャートである。
先に述べたようにストレージ装置13はキャッシュメモリ上にデータをキャッシングしているので、キャッシュヒットした場合にはキャッシュメモリ上からホストへ応答を返す。ストレージのキャッシュヒット動作については公知の方法によるため、キャッシュミスした場合の動作について述べる。
ストレージコントローラ60はプロトコルチップを通じてホストからリードコマンドを受領すると(S2000)、当該リードデータがキャッシュ上に存在するかHit/Miss判定を行う(S2010)。ミスした場合、ディスクからデータを読み出す必要がある。ストレージコントローラ60は当該圧縮データを格納しているディスクから圧縮データを読み出す為、圧縮データサイズに応じた一次バッファをDRAM70上に確保し(S2020)、バックエンドプロトコルチップを起動することで(S2030)、ディスクから圧縮データを読み出す(S2040)。
次にストレージコントローラ60はプロトコルチップの転送完了を確認すると(S2050)、キャッシュ装置1上にデータをキャッシュするため、格納領域を確保する(S2060)。ディスクから読み出されたデータは既に圧縮されているので、ストレージコントローラ60は当該データを再度圧縮しないよう、非圧縮となるようNVMeのライトコマンドを発行する(S2070)。具体的には、コマンドパラメータのData Set Mgmt1907を用いて指示する。
キャッシュ装置1は、図9のフローに従って一次バッファからデータ読み出し、非圧縮でフラッシュメモリに格納すると、ストレージコントローラ60にコンプリーションを返送する。
ストレージコントローラ60は、コンプリーションを刈取り受領通知を返す完了確認処理を行うと(S2080)、次に伸張後に必要なサイズを計算し、伸張状態取り出し用のアドレスマッピングをキャッシュ装置1に指示する(S2090)と共に、ホスト側プロトコルチップが使用する一次バッファをDRAM 70上に確保する(S2100)。
ストレージコントローラは前記一次バッファを格納先としてNVMeリードコマンドを発行し、先の伸張状態取り出し用のアドレスから同バッファへデータを読み出す(S2110)。そして、コンプリーション刈取り通知による完了確認処理(S2120)の後、プロトコルチップを起動して同バッファのデータをホスト計算機へ返送する(S2130)。最後にプロトコルチップDMAの転送完了を刈取り(S2140)、転送処理を終える。
図16は図14に示したホストライト処理のS1310および図15に示したホストリード処理のS2090において追加のアドレスマッピングした際の、キャッシュ装置1における論理アドレス(LBA;Logical Block Address)と物理アドレス(PBA; Physical Block Address)との対応関係を示したものである。
LBA0空間5000はおよびLBA1空間5200はストレージコントローラがキャッシュ装置1にアクセスする際に用いるアドレス空間である。LBA0空間5000はストレージコントローラが非圧縮のデータをライトし圧縮格納してもらいたいとき、あるいは圧縮データを伸張して非圧縮のデータをリードしたいときに用い、一方LBA1空間5200は圧縮されたデータをそのまま取得したいとき、あるいは、すでに圧縮されているデータを更に圧縮されることなく格納したいときに用いる。
PBA空間5400はキャッシュ装置1が内部のFMへのアクセスする際に用いるアドレス空間である。
LBA0空間5000、LBA1空間5200とPBA空間のアドレスの対応付けは、先の図7で述べた論理―物理変換テーブルによって実現される。
図14のホストライト処理では、S1050にてLBA0空間5000のアドレス5100用いてデータを圧縮格納している。そして次にディスクに書き出す際、NVMeライトのCompletionで返される圧縮情報を元にデステージ範囲を決め、そのサイズを元に書き出し範囲のサイズを確認(S1300)することで、LBA1空間に圧縮取り出し用のアドレス5300を割り当てている。
このことから、図13の二重マッピングを実現するためには、単に論物テーブル750を備えるだけでなく、圧縮後のサイズを上位装置(ストレージコントローラ)に伝える仕組みをキャッシュ装置1が備えている必要があることが分かる。
以上によれば、本実施形態にキャッシュ装置は、圧縮後のサイズを上位装置に伝える仕組みを備えるので、上位装置は新たに圧縮したまま取り出すためのアドレス領域を追加で割り当てることができる。また、この際、両者から1つのデータを参照するので、データを複製する必要がなくなり、高速な処理が可能となる。また、キャッシュ装置が圧縮処理を実行することで、ストレージコントローラの負荷が低減されストレージ装置の高性能化が実現できる。以上から、上位装置に対するキャッシュ用途に適したPCIe-SSDを実現することができる。
また、キャッシュの大容量化、高性能化高機能化が図れるので、本実施例に示したデータ圧縮機能をはじめストレージ装置が新たな機能を提供することが可能になる。
1:キャッシュ装置
2:上位装置
2:上位装置
Claims (14)
- データを格納する記憶媒体と、
外部装置によって生成されたデータ転送を指示するコマンドを格納するコマンドバッファと、
前記外部装置にそれぞれ接続され、かつ、ハードウェア回路である、
コマンド転送DMA(Direct Memory Access)と、転送リスト生成DMAと、データ転送DMAと、
を備え、
前記コマンド転送DMAは、前記コマンドを前記外部装置のメモリから取得し、前記コマンドの指示内容を取得し、前記コマンドバッファに前記コマンドを格納して処理中の前記コマンドを特定するコマンド番号を取得し、前記コマンドの指示内容に応じて前記コマンド番号を送信することで前記転送リスト生成DMAを起動し、
前記転送リスト生成DMAは、前記コマンドバッファに格納された前記コマンドに基づいて、前記外部装置との間でデータ転送の対象となる前記メモリのアドレスを特定し、前記アドレスを前記データ転送DMAに送信することで前記データ転送DMAを起動し、
前記データ転送DMAは、前記アドレスに基づいて前記メモリとの間でデータを転送する
ことを特徴とする、データ記憶装置。 - 前記転送リスト生成DMAは、前記アドレスとともに前記コマンド番号を前記データ転送DMAに送信し、
前記データ転送DMAは、前記データの転送が成功すると、前記コマンド番号を前記コマンド転送DMAに送信することで起動し、
前記コマンド転送DMAは、
正常終了を示すコマンド応答を生成し、
前記外部装置に正常終了を示すコマンド応答を送信する
ことを特徴とする請求項1に記載のデータ記憶装置。 - 前記データ記憶装置は、さらにプロセッサを備え、
前記コマンド転送DMAは、前記外部装置に前記コマンド応答を通知すると、前記プロセッサに前記外部装置からの前記コマンド受領を通知する
ことを特徴とする請求項2に記載のデータ記憶装置。 - 前記コマンド転送DMA、前記転送リスト生成DMA、前記データ転送DMAのそれぞれは、
処理中にエラーを検出した場合、前記エラーの内容を特定可能な情報を生成し、前記情報を送信することで前記コマンド転送DMAに含まれる応答DMAを起動し、
前記応答DMAは、
前記情報を用いてエラー応答コマンドを生成し、前記外部装置に前記エラー応答コマンドを送信する
ことを特徴とする請求項3に記載のデータ記憶装置。 - 前記コマンド転送DMAは、
前記外部装置から前記コマンド応答の受信確認通知を受領すると、
前記コマンドを格納している前記コマンドバッファの領域の解放を指示する
ことを特徴とする請求項4に記載のデータ記憶装置。 - 前記外部装置は前記コマンドに転送対象の前記データを圧縮するか否かまたは伸長するか否かを示す圧縮指示情報が格納され、
前記転送リスト生成DMAは、前記コマンドから前記圧縮指示情報を取得し、前記データ転送DMAに前記圧縮指示情報を送信し、
前記データ転送DMAは、前記圧縮指示情報に基づいて、前記データを圧縮するか否かまたは伸長するか否かを判断する
ことを特徴とする請求項5に記載のデータ記憶装置。 - 前記データ転送DMAは、
前記データを圧縮すると揮発メモリに転送し、
前記データを圧縮する際、前記プロセッサが圧縮されたデータをデータバッファから前記記憶媒へ転送する際に利用する圧縮管理情報を生成し、所定の領域へ格納する
ことを特徴とする請求項6に記載のデータ記憶装置。 - 前記データ転送DMAは、圧縮/非圧縮転送回路を備え、
前記圧縮/非圧縮転送回路は、
受領した前記データを格納する入力バッファと、圧縮後のデータを格納する出力バッファと、を備え、
前記入力バッファに格納されたデータが、圧縮処理により前記入力バッファに格納されたデータサイズを上回ると判断された場合、前記入力バッファに格納されたデータを非圧縮で前記揮発メモリに転送する
ことを特徴とする請求項7に記載のデータ記憶装置。 - 前記圧縮/非圧縮転送回路は、所定のサイズごとにデータを圧縮し、
前記データのサイズが前記所定のサイズ未満の場合は、前記入力バッファに格納されたデータを非圧縮で前記データバッファに転送する
ことを特徴とする請求項8に記載のデータ記憶装置。 - 前記データ記憶装置は、さらにRMW(Read Modify Write) DMAを備え、
前記RMW DMAは、データを伸張して転送するする第一回路と、データをデータバッファから読み出した状態で転送する第二回路と、前記第一回路及び第二回路のいずれか一方から転送されるデータを通過させるマルチプレクサと、前記マルチプレクサを通過したデータを圧縮する第三回路と、を備え、
前記RMW DMAは、
前記第一回路によって前記旧データを伸張し、前記新データで更新されない範囲は前記マルチプレクサを切り替えて前記第一回路に接続して前記旧データを通過させ、前記新データで更新される範囲は前記マルチプレクサを切り替えて前記第二回路に接続して前記新データを通過させ、前記マルチプレクサを通過したデータを第三回路によって圧縮する
ことを特徴とする請求項9記載のデータ記憶装置。 - 前記データバッファに圧縮された旧データと前記圧縮された旧データを更新する圧縮された新データが格納されている場合、
前記プロセッサは、前記圧縮された旧データの圧縮管理情報を無効化する
ことを特徴とする請求項7に記載のデータ記憶装置。 - 計算機に接続されるストレージコントローラと、
前記ストレージコントローラに接続されるメモリと、
前記ストレージコントローラにそれぞれ接続され、かつ、ハードウェア回路である、コマンド転送DMA(Direct Memory Access)と、転送リスト生成DMAと、データ転送DMAと、を備えるデータ記憶装置と、を備え、
前記ストレージコントローラは、前記計算機からライト要求を受信すると、前記ライト要求に伴うデータを前記メモリに格納し、前記データ記憶装置に前記データを格納するためのライトコマンドを生成し、
前記コマンド転送DMAは、前記ライトコマンドを前記メモリから取得し、処理中の前記ライトコマンドを特定するコマンド番号を取得し、前記コマンド番号を送信することで前記転送リスト生成DMAを起動し、
前記転送リスト生成DMAは、前記ライトコマンドに基づいて前記データが格納されている前記メモリのアドレスを特定し、前記アドレス及び前記コマンド番号を前記データ転送DMAに送信することで前記データ転送DMAを起動し、
前記データ転送DMAは、前記アドレスに基づいて前記データを取得し、前記コマンド番号を送信することで前記コマンド転送DMAを起動し、
前記コマンド転送DMAは、データ転送完了応答を前記ストレージコントローラに送信する
ことを特徴とするストレージ装置。 - 前記ストレージ装置は、さらに複数のハードディスクドライブを備え、
前記ストレージコントローラは、前記データを圧縮して書きこむことを指示する情報を付与した第一ライトコマンドを生成し、
前記データ転送DMAは、前記メモリから前記データを取得し、前記第一ライトコマンドの指示に基づいて前記データを圧縮して圧縮データとし、
前記ストレージコントローラは、前記圧縮データを伸張せずに読み出すことを指示する情報を付与した第一リードコマンドを生成し、
前記データ転送DMAは、前記第一リードコマンドの指示に基づいて前記圧縮データを前記メモリに転送し、
前記ストレージコントローラは、前記圧縮データを前記メモリから読み出して、前記複数のハードディスクドライブのうちの1つ以上に格納する
ことを特徴とする請求項12に記載のストレージ装置。 - 前記ストレージコントローラは、前記計算機からリード要求を受信すると、前記HDDからリード要求の対象となる前記圧縮データを読み出して前記メモリに格納し、前記圧縮データを非圧縮で書きこむことを指示する第二ライトコマンドを生成し、
前記データ転送DMAは、前記第二ライトコマンドの指示に基づいて前記メモリから前記圧縮データを取得し、
前記ストレージコントローラは、前記圧縮データを伸張して読みだすことを指示する第二リードコマンドを生成し、
前記データ転送DMAは、前記第二リードコマンドに基づいて前記圧縮データを伸張して前記メモリに転送し、
前記ストレージコントローラは、前記メモリから伸張された前記データを読み出して前記計算機に転送する
ことを特徴とする請求項13に記載のストレージ装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2014/053107 WO2015121912A1 (ja) | 2014-02-12 | 2014-02-12 | データ記憶装置 |
US15/114,573 US20160342545A1 (en) | 2014-02-12 | 2014-02-12 | Data memory device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2014/053107 WO2015121912A1 (ja) | 2014-02-12 | 2014-02-12 | データ記憶装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2015121912A1 true WO2015121912A1 (ja) | 2015-08-20 |
Family
ID=53799682
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2014/053107 WO2015121912A1 (ja) | 2014-02-12 | 2014-02-12 | データ記憶装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20160342545A1 (ja) |
WO (1) | WO2015121912A1 (ja) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018051505A1 (ja) * | 2016-09-16 | 2018-03-22 | 株式会社日立製作所 | ストレージシステム |
JP2018077564A (ja) * | 2016-11-07 | 2018-05-17 | 株式会社アクセル | 情報処理装置、及び情報処理システム |
CN108292196A (zh) * | 2015-12-02 | 2018-07-17 | 净睿存储股份有限公司 | 将数据写入包括第一类型的存储设备和第二类型的存储设备的存储系统 |
JP2019008418A (ja) * | 2017-06-21 | 2019-01-17 | 日本電気株式会社 | データ転送装置およびデータ転送方法 |
JP2019200664A (ja) * | 2018-05-17 | 2019-11-21 | 日本電気株式会社 | データ転送装置およびデータ転送方法 |
JP2019212161A (ja) * | 2018-06-07 | 2019-12-12 | 日本電気株式会社 | コントローラおよびデータ転送方法 |
CN113051200A (zh) * | 2021-03-30 | 2021-06-29 | 无锡源代码科技有限公司 | 一种基于双路的数据采集并行数据传输及存储的装置及方法 |
US11762764B1 (en) | 2015-12-02 | 2023-09-19 | Pure Storage, Inc. | Writing data in a storage system that includes a first type of storage device and a second type of storage device |
US12014173B2 (en) | 2020-06-09 | 2024-06-18 | Huawei Technologies Co., Ltd. | Data processing method for network adapter and network adapter |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378560B2 (en) * | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US9990298B2 (en) * | 2014-05-12 | 2018-06-05 | Western Digital Technologies, Inc | System and method for caching solid state device read request results |
EP3057275B1 (de) * | 2015-02-10 | 2020-08-05 | TTTech Computertechnik AG | Erweiterte verteilereinheit |
CN109416667A (zh) * | 2015-11-12 | 2019-03-01 | 道达尔阶段公司 | 具有动态且可配置的响应的、使用两个存储器级的串行设备仿真器 |
US10361714B2 (en) * | 2015-12-16 | 2019-07-23 | International Business Machines Corporation | Reading and writing compressed data using long-term storage |
US20170315943A1 (en) * | 2016-04-29 | 2017-11-02 | Sandisk Technologies Inc. | Systems and methods for performing direct memory access (dma) operations |
US11500638B1 (en) * | 2016-06-24 | 2022-11-15 | Apple Inc. | Hardware compression and decompression engine |
US10445018B2 (en) * | 2016-09-09 | 2019-10-15 | Toshiba Memory Corporation | Switch and memory device |
US10275378B2 (en) | 2017-03-07 | 2019-04-30 | Western Digital Technologies, Inc. | Data buffer pointer fetching for direct memory access |
US10387081B2 (en) * | 2017-03-24 | 2019-08-20 | Western Digital Technologies, Inc. | System and method for processing and arbitrating submission and completion queues |
US10466904B2 (en) | 2017-03-24 | 2019-11-05 | Western Digital Technologies, Inc. | System and method for processing and arbitrating submission and completion queues |
US10452278B2 (en) | 2017-03-24 | 2019-10-22 | Western Digital Technologies, Inc. | System and method for adaptive early completion posting using controller memory buffer |
US10466903B2 (en) | 2017-03-24 | 2019-11-05 | Western Digital Technologies, Inc. | System and method for dynamic and adaptive interrupt coalescing |
US10509569B2 (en) | 2017-03-24 | 2019-12-17 | Western Digital Technologies, Inc. | System and method for adaptive command fetch aggregation |
KR20180127710A (ko) * | 2017-05-22 | 2018-11-30 | 에스케이하이닉스 주식회사 | 메모리 모듈 및 이를 포함하는 메모리 시스템 |
US10963295B2 (en) * | 2017-09-08 | 2021-03-30 | Oracle International Corporation | Hardware accelerated data processing operations for storage data |
US10353629B2 (en) * | 2017-09-19 | 2019-07-16 | Arm Limited | Handling in-order and out-of-order ring buffer updates |
JP6967959B2 (ja) * | 2017-12-08 | 2021-11-17 | キオクシア株式会社 | メモリシステムおよび制御方法 |
US11188251B2 (en) * | 2017-12-19 | 2021-11-30 | Western Digital Technologies, Inc. | Partitioned non-volatile memory express protocol for controller memory buffer |
US10466906B2 (en) * | 2017-12-19 | 2019-11-05 | Western Digital Technologies, Inc. | Accessing non-volatile memory express controller memory manager |
US10884658B2 (en) * | 2018-02-09 | 2021-01-05 | Western Digital Technologies, Inc. | Completion entry throttling using data storage controller |
US11669267B2 (en) | 2018-02-09 | 2023-06-06 | Western Digital Technologies, Inc. | Completion entry throttling using host memory |
US10585819B2 (en) | 2018-03-05 | 2020-03-10 | Samsung Electronics Co., Ltd. | SSD architecture for FPGA based acceleration |
TWI670599B (zh) * | 2018-08-28 | 2019-09-01 | 大陸商深圳大心電子科技有限公司 | 記憶體管理方法以及儲存控制器 |
US10606775B1 (en) * | 2018-12-28 | 2020-03-31 | Micron Technology, Inc. | Computing tile |
TWI719654B (zh) * | 2019-06-21 | 2021-02-21 | 慧榮科技股份有限公司 | 閃存實體資源集合管理裝置及方法以及電腦程式產品 |
CN111126589B (zh) * | 2019-12-31 | 2022-05-20 | 昆仑芯(北京)科技有限公司 | 神经网络数据处理装置、方法和电子设备 |
CN112882966B (zh) * | 2020-03-24 | 2024-08-13 | 威盛电子股份有限公司 | 运算装置 |
US11301370B2 (en) | 2020-03-24 | 2022-04-12 | Samsung Electronics Co., Ltd. | Parallel overlap management for commands with overlapping ranges |
US11481150B2 (en) | 2020-04-01 | 2022-10-25 | Western Digital Technologies, Inc. | Read modify write optimization for video performance |
US11467843B2 (en) | 2020-06-18 | 2022-10-11 | Samsung Electronics Co., Ltd. | Systems, methods, and devices for queue availability monitoring |
US11604743B2 (en) * | 2020-08-31 | 2023-03-14 | International Business Machines Corporation | Input/output queue hinting for resource utilization |
US12093258B2 (en) | 2020-12-14 | 2024-09-17 | Samsung Electronics Co., Ltd. | Storage device adapter to accelerate database temporary table processing |
JP2023107418A (ja) * | 2022-01-24 | 2023-08-03 | キオクシア株式会社 | ストレージデバイスおよびストレージシステム |
KR20240137221A (ko) * | 2023-03-08 | 2024-09-20 | 에스케이하이닉스 주식회사 | 사전리드동작을 위해 할당된 캐시 크기를 조절하는 장치 및 방법 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120260009A1 (en) * | 2009-07-23 | 2012-10-11 | Stec, Inc. | Data storage system with compression/decompression |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7870309B2 (en) * | 2008-12-23 | 2011-01-11 | International Business Machines Corporation | Multithreaded programmable direct memory access engine |
-
2014
- 2014-02-12 US US15/114,573 patent/US20160342545A1/en not_active Abandoned
- 2014-02-12 WO PCT/JP2014/053107 patent/WO2015121912A1/ja active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120260009A1 (en) * | 2009-07-23 | 2012-10-11 | Stec, Inc. | Data storage system with compression/decompression |
Non-Patent Citations (1)
Title |
---|
PETER ONUFRYK: "How the Streamlined Architecture of NVM Express Enables High Performance PCIe SSDs", FLASH MEMORY SUMMIT, 22 August 2012 (2012-08-22), pages 1 - 16, Retrieved from the Internet <URL:http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2012/20120821_TD12_Onufryk.pdf> [retrieved on 20140320] * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108292196A (zh) * | 2015-12-02 | 2018-07-17 | 净睿存储股份有限公司 | 将数据写入包括第一类型的存储设备和第二类型的存储设备的存储系统 |
US11762764B1 (en) | 2015-12-02 | 2023-09-19 | Pure Storage, Inc. | Writing data in a storage system that includes a first type of storage device and a second type of storage device |
CN108292196B (zh) * | 2015-12-02 | 2021-06-29 | 净睿存储股份有限公司 | 数据写入方法、装置和计算机可读存储介质 |
JPWO2018051505A1 (ja) * | 2016-09-16 | 2018-11-29 | 株式会社日立製作所 | ストレージシステム |
US10664193B2 (en) | 2016-09-16 | 2020-05-26 | Hitachi, Ltd. | Storage system for improved efficiency of parity generation and minimized processor load |
WO2018051505A1 (ja) * | 2016-09-16 | 2018-03-22 | 株式会社日立製作所 | ストレージシステム |
JP2018077564A (ja) * | 2016-11-07 | 2018-05-17 | 株式会社アクセル | 情報処理装置、及び情報処理システム |
JP2019008418A (ja) * | 2017-06-21 | 2019-01-17 | 日本電気株式会社 | データ転送装置およびデータ転送方法 |
JP7000712B2 (ja) | 2017-06-21 | 2022-01-19 | 日本電気株式会社 | データ転送装置およびデータ転送方法 |
JP7067256B2 (ja) | 2018-05-17 | 2022-05-16 | 日本電気株式会社 | データ転送装置およびデータ転送方法 |
JP2019200664A (ja) * | 2018-05-17 | 2019-11-21 | 日本電気株式会社 | データ転送装置およびデータ転送方法 |
JP7251056B2 (ja) | 2018-06-07 | 2023-04-04 | 日本電気株式会社 | コントローラ、計算機システム、データ転送方法および転送制御プログラム |
JP2019212161A (ja) * | 2018-06-07 | 2019-12-12 | 日本電気株式会社 | コントローラおよびデータ転送方法 |
US12014173B2 (en) | 2020-06-09 | 2024-06-18 | Huawei Technologies Co., Ltd. | Data processing method for network adapter and network adapter |
JP7501957B2 (ja) | 2020-06-09 | 2024-06-18 | ホアウェイ・テクノロジーズ・カンパニー・リミテッド | ネットワークアダプタのデータ処理方法およびネットワークアダプタ |
CN113051200A (zh) * | 2021-03-30 | 2021-06-29 | 无锡源代码科技有限公司 | 一种基于双路的数据采集并行数据传输及存储的装置及方法 |
CN113051200B (zh) * | 2021-03-30 | 2024-01-09 | 无锡源代码科技有限公司 | 一种基于双路的数据采集并行数据传输及存储的装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
US20160342545A1 (en) | 2016-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2015121912A1 (ja) | データ記憶装置 | |
CN111177029B (zh) | 用于管理软件定义的永久性存储器的系统及方法 | |
US11294578B2 (en) | Storage system and control method thereof | |
US9563377B2 (en) | Computer system and method of controlling computer system | |
JP7135162B2 (ja) | 情報処理システム、ストレージシステム及びデータ転送方法 | |
US9442844B2 (en) | Apparatus, system, and method for a storage layer | |
JP5090941B2 (ja) | ストレージサブシステム及びストレージシステム | |
KR101769883B1 (ko) | 저장부 할당 장치, 시스템, 및 방법 | |
JP5792313B2 (ja) | ストレージシステム | |
US11188496B2 (en) | System and method for storing data using ethernet drives and ethernet open-channel drives | |
US20150254186A1 (en) | Information processing device having a plurality of types of memory caches with different characteristics | |
US9075729B2 (en) | Storage system and method of controlling data transfer in storage system | |
US9384147B1 (en) | System and method for cache entry aging | |
US9715428B1 (en) | System and method for cache data recovery | |
WO2015162758A1 (ja) | ストレージシステム | |
US7743209B2 (en) | Storage system for virtualizing control memory | |
US9672180B1 (en) | Cache memory management system and method | |
US20200133836A1 (en) | Data management apparatus, data management method, and data management program | |
US11327653B2 (en) | Drive box, storage system and data transfer method | |
WO2016056104A1 (ja) | ストレージ装置、及び、記憶制御方法 | |
US10761764B1 (en) | Storage system and data transfer method | |
US20110082950A1 (en) | Computer system and computer system input/output method | |
US20190243758A1 (en) | Storage control device and storage control method | |
US8799573B2 (en) | Storage system and its logical unit management method | |
CN115993930A (zh) | 用于有序访问块修改存储器中的数据的系统、方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 14882368 Country of ref document: EP Kind code of ref document: A1 |
|
WWE | Wipo information: entry into national phase |
Ref document number: 15114573 Country of ref document: US |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 14882368 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: JP |