WO2015075837A1 - ストレージ装置及びその制御方法 - Google Patents

ストレージ装置及びその制御方法 Download PDF

Info

Publication number
WO2015075837A1
WO2015075837A1 PCT/JP2013/081638 JP2013081638W WO2015075837A1 WO 2015075837 A1 WO2015075837 A1 WO 2015075837A1 JP 2013081638 W JP2013081638 W JP 2013081638W WO 2015075837 A1 WO2015075837 A1 WO 2015075837A1
Authority
WO
WIPO (PCT)
Prior art keywords
data
address
storage
processor
area
Prior art date
Application number
PCT/JP2013/081638
Other languages
English (en)
French (fr)
Inventor
彬史 鈴木
定広 杉本
和衛 弘中
山本 彰
Original Assignee
株式会社日立製作所
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社日立製作所 filed Critical 株式会社日立製作所
Priority to PCT/JP2013/081638 priority Critical patent/WO2015075837A1/ja
Publication of WO2015075837A1 publication Critical patent/WO2015075837A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing 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/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/08Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers from or to individual record carriers, e.g. punched card, memory card, integrated circuit [IC] card or smart card
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2089Redundant storage control functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data

Definitions

  • the present invention relates to a storage device using a semiconductor recording device as a primary data storage device, and a device control method.
  • the storage device is a device that has a plurality of HDDs or SSDs therein and holds a large amount of data with high reliability.
  • the storage device operates a plurality of HDDs or SSDs in parallel, and processes read / write requests requested from a host device such as a server.
  • Storage devices generally have a component called a cache for the purpose of improving request processing performance (hereinafter simply referred to as performance).
  • the cache plays two major roles in the storage device. One of the roles is to store an area with a relatively high read / write access frequency in the cache and improve the average performance of the storage apparatus.
  • the second function is to temporarily store write data when a write request is received from the server to the storage apparatus.
  • the cache is written faster than the final storage medium, and the write performance is improved by returning a write completion response to the server when the cache storage is completed (not stored in the final storage medium).
  • the write data stored in the cache is asynchronously generated for data protection parity in RAID (Redundant Arrays of Inexpensive Disks), and then recorded on the final storage medium configured with RAID together with the parity.
  • RAID Redundant Arrays of Inexpensive Disks
  • Such a cache has conventionally been constituted by a high-speed DRAM.
  • the DRAM has a higher read / write operation speed than the HDD and is suitable as a cache storage element.
  • FM non-volatile semiconductor memory
  • NAND flash memory NAND flash memory
  • the bit cost of the NVM is lower than that of a DRAM DRAM that has been used as a conventional cache, and the bit cost of the cache can be reduced. Further, if the data compression function is used, the bit cost can be further reduced. In addition, the reduction in the cost of the cache area can increase the cache capacity, record a large amount of data in the cache, and improve the performance of the storage apparatus.
  • the storage device when the storage device receives the write data from the host device, the storage device compresses the data and temporarily stores it in the cache device, and also transfers the compressed data when transferring the data from the cache device to the final storage medium. Will be.
  • the data compression increases the processor load of the storage device by the compression processing, and also increases the processor load for managing the change in the data size due to the compression.
  • the storage device manages the storage area of the final storage medium in a RAID configuration and generates RAID parity for the recorded data, it is not uncompressed data to transfer the compressed data to the final storage medium. Parity must be generated for the compressed data after compression.
  • the prior art since there is no address space for designating compressed data as a parity generation target, it is difficult to designate compressed data and generate parity.
  • the present invention is characterized by generating data parity and a RAID parity for the compressed data after compression inside the NVM module operating as a cache device of the storage apparatus.
  • the NVM module of the storage apparatus of the present invention has a data compression / decompression function and a parity generation function inside, and stores data in the NVM module in accordance with an instruction from the controller (processor) of the storage apparatus. Data is compressed and stored, and parity generation is performed using the compressed data.
  • the NVM module of the present invention is characterized in that it provides two logical spaces to a higher-level connection device (storage device controller).
  • the storage device controller issues a data read instruction designating the first logical space to the NVM module
  • the NVM module decompresses the data stored in the compressed state in the NVM module. Send to the outside in the state.
  • the controller issues a data read instruction designating the second logical space to the NVM module
  • the NVM module stores the data compressed and stored in the NVM module as it is (non-decompressed).
  • the write data received from the server is compressed and recorded in the final storage medium in the storage device
  • data compression and generation of RAID parity for the compressed data can be performed inside the cache device, Since the number of data transfers that require instructions from the processor of the storage apparatus can be reduced, the processor load can be reduced.
  • FIG. 1 is a diagram showing a schematic configuration of a computer system centered on a storage apparatus according to the present invention.
  • FIG. 2 is a conceptual diagram showing a relationship between a storage area (volume) provided by the storage apparatus to the host apparatus and a cache.
  • FIG. 3 is a diagram illustrating a data flow when the storage apparatus receives a write command from the host apparatus.
  • FIG. 4 is a diagram showing the internal configuration of the NVM module 126.
  • FIG. 5 is a diagram illustrating an internal configuration of the FM 420.
  • FIG. 6 is a diagram showing the internal configuration of the physical block 502.
  • FIG. 7 is a diagram showing the concept of associating the LBA0 and LBA1 spaces, which are logical spaces provided by the NVM module of this embodiment to the storage controller, and the PBA space, which is a physical area designating address space.
  • FIG. 8 is a diagram showing the contents of the LBA0-PBA conversion table 810 and the LBA1-PBA conversion table 820 managed by the NVM module of this embodiment.
  • FIG. 9 is a diagram showing block management information used by the NVM module of the present embodiment.
  • FIG. 10 is a diagram illustrating a write command and response information to the write command received by the NVM module according to the present embodiment.
  • FIG. 11 is a diagram illustrating a flow of processing performed by the NVM module when the NVM module according to the present embodiment receives a write command.
  • FIG. 12 is a diagram illustrating the flow of the conversion table update process performed by the NVM module in the present embodiment.
  • FIG. 13 is a diagram showing a read command and response information to the read command received by the NVM module in the present embodiment.
  • FIG. 14 is a diagram illustrating a flow of processing performed by the NVM module when the NVM module according to the present embodiment receives a read command.
  • FIG. 15 is a diagram illustrating a compressed data size acquisition command and response information to the compressed data size acquisition command received by the NVM module according to the present embodiment.
  • FIG. 16 is a diagram illustrating a flow of processing performed by the NVM module when the NVM module according to the present embodiment receives the compressed data size acquisition command.
  • FIG. 12 is a diagram illustrating the flow of the conversion table update process performed by the NVM module in the present embodiment.
  • FIG. 13 is a diagram showing a read command and response information to the read command received by the NVM module in the present embodiment.
  • FIG. 14 is a diagram illustrating
  • FIG. 17 is a diagram illustrating an LBA1 mapping command and response information to the LBA1 mapping command received by the NVM module according to the present embodiment.
  • FIG. 18 is a diagram illustrating a full stripe parity generation command and response information to the full stripe parity generation command received by the NVM module according to the present embodiment.
  • FIG. 19 is a diagram illustrating an update parity generation command and response information to the update parity generation command received by the NVM module according to the present embodiment.
  • FIG. 20 is a diagram illustrating a compression information acquisition command and response information to the compression information acquisition command received by the NVM module according to the present embodiment.
  • FIG. 21 is a diagram illustrating a mapping cancellation command and response information to the mapping cancellation command received by the NVM module according to the present embodiment.
  • FIG. 22 is a diagram illustrating a compressed information transfer command and response information to the compressed information transfer command received by the NVM module according to the present embodiment.
  • FIG. 23 is a diagram illustrating the LBA0 mapping command and the response information to the LBA0 mapping command received by the NVM module according to the present embodiment.
  • FIG. 24 is a flowchart of the write data cache storage process performed in the storage apparatus according to the present embodiment.
  • FIG. 25 is a flowchart of the parity generation processing performed in the storage apparatus according to this embodiment.
  • FIG. 26 is a flowchart of the destage processing performed in the storage apparatus according to this embodiment.
  • FIG. 27 is a flowchart of the read process performed by the storage apparatus according to this embodiment.
  • FIG. 28 shows an example of the inter-volume mapping information 3000.
  • FIG. 29 shows an example of a free list.
  • FIG. 30 shows an example of the logical-physical conversion table 3700.
  • FM NAND flash memory
  • the present invention is not limited to FM, and covers all nonvolatile memories.
  • a mode in which data compression is performed by a dedicated hardware circuit will be described.
  • data is compressed by a data compression arithmetic process by a general-purpose processor. It may be compressed.
  • a mode in which parity (redundant data) is implemented by a dedicated hardware circuit will be described.
  • the present invention is not limited to this embodiment, and the parity generation calculation processing by a general-purpose processor is performed. RAID parity may be generated.
  • FIG. 1 shows a storage device (storage system) including a semiconductor recording device using FM as a recording medium (hereinafter referred to as “NVM module”) according to the present invention.
  • NVM module a semiconductor recording device using FM as a recording medium
  • FIG. 1 is a diagram showing a schematic configuration of a computer system centering on ().
  • An NVM module 126 shown in FIG. 1 is a semiconductor recording device using an FM to which the present invention is applied as a recording medium, and is used as a cache device in the storage device.
  • the storage apparatus 101 includes a plurality of storage controllers 110.
  • Each storage controller includes a host interface 124 that connects to a host device and a disk interface 123 that connects to a recording device.
  • Examples of the host interface 124 include devices that support protocols such as FC (Fibre Channel), iSCSI (internet Small Computer System Interface), FCoE (Fibre Channel over Ether), and the disk interface 107 includes, for example, FC, SAS (Serial Examples include devices that support various protocols such as Attached SCSI), SATA (Serial Advanced Technology Attachment), and PCI (Peripheral Component Interconnect) -Express.
  • the storage controller 110 further includes hardware resources such as a processor 121 and a memory 125.
  • the storage controller 110 reads / writes to a final storage medium such as the SSD 111 or the HDD 112 in response to a read / write request from the host device 124. Make a write request.
  • the NVM module 126 is provided inside, and can be controlled from the processor 121 via the internal SW 122.
  • the storage controller 110 also has a RAID (Redundant Arrays of Inexpensive Disks) parity generation function and a data restoration function using RAID parity, and manages a plurality of SSDs 111 and a plurality of HDDs 112 as a RAID group in arbitrary units.
  • RAID Redundant Arrays of Inexpensive Disks
  • the storage controller 110 also has a RAID (Redundant Arrays of Inexpensive Disks) parity generation function and a data restoration function using RAID parity, and manages a plurality of SSDs 111 and a plurality of HDDs 112 as a RAID group in arbitrary units.
  • a RAID parity is generated from the write data, and the write data and the RAID parity are written to the final storage medium (SSD 111 or HDD 112).
  • the host device after reading data from the final storage medium, the presence of data loss is inspected. If data loss is detected, the data is restored using RAID parity
  • the storage controller 110 has a function of monitoring and managing the failure, usage status, operation status, etc. of the recording device.
  • the storage apparatus 101 is connected to the management apparatus 104 via a network.
  • An example of this network is a LAN (Local Area Network). Although this network is omitted for simplification in FIG. 1, it is connected to each storage controller 110 in the storage apparatus 101. This network may be connected by the same network as the SAN 102.
  • the management device 104 is a computer having hardware resources such as a processor, a memory, a network interface, and a local input / output device, and software resources such as a management program.
  • the management device 104 acquires information from the storage device by a program and displays a management screen.
  • the system administrator uses the management screen displayed on the management apparatus to monitor the storage apparatus 101 and control the operation.
  • the SSD 111 stores data transferred in response to a write request from the storage controller, retrieves stored data in response to a read request, and transfers the data to the storage controller.
  • the disk interface 107 designates a logical storage location for a read / write request by a logical address (hereinafter, LBA: Logical Block Address).
  • LBA Logical Block Address
  • the plurality of SSDs 111 are divided into a plurality of RAID groups and managed, and are configured such that lost data can be restored when data is lost.
  • a plurality of HDDs (Hard Disk Drives) 112 are provided in the storage apparatus 101, and are connected to a plurality of storage controllers 110 in the same storage apparatus via the disk interface 123, similarly to the SSD 111.
  • the HDD 112 stores data transferred in response to a write request from the storage controller 110, retrieves stored data in response to a read request, and transfers it to the storage controller 110.
  • the disk interface 123 designates a logical storage location for a read / write request by a logical address (hereinafter referred to as LBA: Logical Block Address).
  • LBA Logical Block Address
  • the storage controller 110 is connected to the SAN 102 connected to the host device 103 via the host interface 124. Although omitted in FIG. 1 for simplification, each storage controller 110 also has a connection path for mutually communicating data and control information between the storage controllers 110.
  • the host device 103 corresponds to, for example, a server computer or a file server that forms the core of a business system.
  • the host device 103 includes hardware resources such as a processor, a memory, a network interface, and a local input / output device, and includes software resources such as a device driver, an operating system (OS), and an application program.
  • OS operating system
  • the host apparatus 103 executes various programs under processor control to perform communication with the storage apparatus 101 and data read / write requests.
  • management information such as usage status and operation status of the storage apparatus 101 is acquired by executing various programs under processor control.
  • the management unit of the recording apparatus, the recording apparatus control method, the data compression setting, and the like can be designated and changed.
  • the NVM module 126 includes an FM controller (FM CTL) 410 and a plurality of (for example, 32) FM 420s.
  • FM CTL FM controller
  • the FM controller 410 includes a processor 415, a RAM (DRAM) 413, a data compression / decompression unit 418, a parity generation unit 419, a data buffer 416, an I / O interface (I / F) 411, an FM interface (I / F). ) 417, and a switch 414 for mutually transferring data.
  • the switch 414 connects the processor 415 in the FM controller 410, the RAM 413, the data compression / decompression unit 418, the parity generation unit 419, the data buffer 416, the I / O interface 411, and the FM interface 417, and addresses the data between the parts. Or route and forward by ID.
  • the I / O interface 411 is connected to the internal switch 122 included in the storage controller 110 in the storage apparatus 101 and is connected to each part of the flash controller 410 via the switch 414.
  • the I / O interface 411 receives a read / write request, a logical storage location (LBA: Logical Block Address) from the processor 121 included in the storage controller 110 in the storage apparatus 101, and write data at the time of a write request.
  • LBA Logical Block Address
  • the I / O interface 411 receives an instruction from the processor 121 included in the storage controller 110 and issues an interrupt to the processor 415 in the FM controller internal 410.
  • the I / O interface 411 also receives a control command for the NVM module 126 from the storage controller, and sends the operation status, usage status, current setting value, etc. of the NVM module 126 to the storage controller 110 according to the command. Notification is possible.
  • the processor 415 is connected to each part of the FM controller 410 via the switch 414 and controls the entire FM controller 410 based on the program and management information recorded in the RAM 413. In addition, the processor 415 monitors the entire flash controller 410 by a periodic information acquisition and interrupt reception function.
  • the data buffer 416 stores temporary data during the data transfer process in the flash controller 410.
  • the FM interface 417 is connected to the FM 420 by a plurality of buses (for example, 16).
  • a plurality of (for example, two) FMs 420 are connected to each bus, and a plurality of FMs 420 connected to the same bus are controlled independently using a CE (Chip Enable) signal that is also connected to the FM 420.
  • CE Chip Enable
  • the FM interface 417 operates in response to a read / write request instructed by the processor 415. At this time, the FM interface 417 is instructed by the processor 415 as the chip, block, and page numbers as request targets. If it is a read request, the stored data is read from the FM 420 and transferred to the data buffer 416. If it is a write request, the data to be stored is called from the data buffer 416 and transferred to the FM 420.
  • the FM interface 417 has an ECC generation circuit, an ECC data loss detection circuit, and an ECC correction circuit.
  • ECC is added to the data and written.
  • the call data from the FM 420 is inspected by the data loss detection circuit by ECC, and when the data loss is detected, the data is corrected by the ECC correction circuit.
  • the data compression / decompression unit 418 has a data compression function using a reversible compression algorithm. In addition, there are a plurality of types of data compression algorithms, and a compression level changing function is also provided.
  • the data compression / decompression unit 418 reads data from the data buffer 416 in accordance with an instruction from the processor 415, performs a data compression operation or a data expansion operation that is an inverse conversion of the data compression by a lossless compression algorithm, and outputs the result again. Write to the data buffer.
  • the data compression / decompression unit may be implemented as a logic circuit, or a similar function may be realized by processing a compression / decompression program with a processor.
  • the parity generation unit 419 has a function of generating parity that is redundant data required in the RAID technology. Specifically, the parity generation unit 419 performs an XOR operation used in RAID 5 and 6, a Reed-Solomon code or EVENODD used in RAID 6. It has a function to generate diagonal parity calculated by the law.
  • the parity generation unit 419 reads data that is a parity generation target from the data buffer 416 in accordance with an instruction from the processor 415, and generates RAID5 or RAID6 parity by the above-described parity generation function.
  • the switch 414, the disk interface 411, the processor 415, the data buffer 416, the FM interface 417, the data compression / decompression unit 418, and the parity generation unit 419 described above are an ASIC (Application Specific Integrated Circuit) or FPGA (Field Programmable Gate Array). As an alternative, it may be configured within a single semiconductor element, or may be configured such that a plurality of individual dedicated ICs (CIntegrated Circuits) are connected to each other.
  • ASIC Application Specific Integrated Circuit
  • FPGA Field Programmable Gate Array
  • the RAM 413 is specifically a volatile memory such as a DRAM.
  • the RAM 413 stores management information of the FM 420 used in the NVM module 126, a transfer list including transfer control information used by each DMA, and the like.
  • a part or all of the role of the data buffer 416 for storing data may be included in the RAM 413 and the RAM 413 may be used for data storage.
  • the configuration of the NVM module 126 to which the present invention is applied has been described with reference to FIG.
  • the NVM module 126 having a flash memory is described as shown in FIG. 4.
  • the nonvolatile memory to be mounted on the NVM module 126 is not limited to the flash memory.
  • Phase Change RAM or Resistance RAM may be used.
  • a configuration may be adopted in which part or all of the FM 420 is a volatile RAM (DRAM or the like).
  • the nonvolatile memory area in the FM 420 is composed of a plurality (for example, 4096) of blocks (physical blocks) 502, and stored data is erased in units of physical blocks.
  • the FM 420 has an I / O register 501 inside.
  • the I / O register 501 is a register having a recording capacity equal to or larger than a physical page size (for example, 8 KB).
  • FM 420 operates in accordance with a read / write request instruction from FM interface 217.
  • the flow of the write operation is as follows. First, the FM 420 receives a write command, a requested physical block, and a physical page from the FM interface 417. Next, the write data transferred from the FM interface 417 is stored in the I / O register 501. Thereafter, the data stored in the I / O register 501 is written to the designated physical page.
  • the flow of read operation is as follows. First, the FM 420 receives a read command, a requested physical block, and a page from the FM interface 417. Next, the data stored in the physical page of the designated physical block is read and stored in the I / O register 501. Thereafter, the data stored in the I / O register 501 is transferred to the FM interface 417.
  • the physical block 502 is divided into a plurality of (for example, 128) pages 601, and reading of stored data and writing of data are processed in units of pages.
  • the order of writing to the physical page 601 in the block 502 is fixed, and writing is performed in order from the first page. That is, data must be written in the order of Page1, Page2, Page3,.
  • overwriting on a written page 601 is prohibited in principle, and when data is overwritten on a written page 601, it is necessary to delete the data in the block 502 to which the page 601 belongs only after the data is erased. Data cannot be written to page 601.
  • the NVM module 126 in this embodiment is equipped with a plurality of FM (chips) 420, manages a storage area composed of a plurality of blocks and a plurality of pages, and is connected to the storage controller 110 (the processor 121). Provides a logical storage space.
  • “providing storage space” means that each storage area to be accessed by the storage controller 110 is assigned an address, and the processor 121 of the storage controller 110 to which the NVM module 126 is connected determines the address.
  • the physical storage area configured by the FM 420 is managed in a manner uniquely associated with an address space used only within the NVM module 126.
  • a physical area designating address space (physical address space) used only within the NVM module 126 is referred to as a PBA (Physical Block Address) space, and each physical storage area (sector in the PBA space.
  • PBA Physical Block Address
  • the position (address) of 1 sector is 512 bytes) is referred to as PBA (Physical Block Address).
  • the NVM module 126 of this embodiment manages the association between this PBA and an LBA (Logical Block Address) that is an address of each area of the logical storage space provided to the storage apparatus.
  • LBA Logical Block Address
  • a conventional storage device such as an SSD provides one storage space for a host device (such as a host computer) to which the storage device is connected.
  • the NVM module 126 of the present embodiment has two logical storage spaces, and provides two logical storage spaces to the storage controller 110 to which the NVM module 126 is connected. The relationship between the two logical storage spaces LBA and PBA will be described with reference to FIG.
  • FIG. 7 is a diagram illustrating a concept of association between the LBA0 space 701 and the LBA1 space 702, which are logical storage spaces provided by the NVM module 126 of the present embodiment to the storage controller 110, and the PBA space 703.
  • the NVM module 126 provides two logical storage spaces, an LBA0 space 701 and an LBA1 space 702.
  • the addresses assigned to the storage areas on the LBA 0 space 701 are referred to as “LBA 0” or “LBA 0 address”
  • the addresses assigned to the storage areas on the LBA 1 space 702 are referred to as “LBA 1”.
  • LBA1 address the addresses assigned to the storage areas on the LBA 1 space 702 are referred to as “LBA 1”.
  • the size of the LBA0 space 701 and the size of the LBA1 space 702 are both equal to or smaller than the size of the PBA space. However, even when the size of the LBA0 space 701 is larger than the size of the PBA space, The invention is effective.
  • the LBA0 space 701 is a logical storage space for allowing the processor 121 of the storage controller 110 to access the compressed data recorded in the physical storage area configured by the FM 420 as uncompressed data.
  • the processor 121 designates an address (LBA0) on the LBA0 space 701 and issues a write request to the NVM module 126
  • the NVM module 126 acquires write data from the storage controller 110 and compresses it by the data compression / decompression unit 418. After that, the NVM module 126 records data in the physical storage area on the FM 420 designated by the dynamically selected PBA, and associates LBA0 and PBA.
  • the NVM module 126 acquires data (compressed data) from the physical storage area of the FM 420 indicated by the PBA associated with the LBA0. After decompression by the compression / decompression unit 418, the decompressed data is transferred to the storage controller 110 as read data.
  • the association between LBA0 and PBA is managed by an LBA0-PBA conversion table described later.
  • the LBA1 space 702 is a logical storage space for allowing the storage controller 110 to access the compressed data recorded in the physical storage area configured by the FM 420 as it is (not expanded).
  • the processor 121 of the storage controller 110 designates LBA1 and issues a write request to the NVM module 126
  • the NVM module 126 acquires data (compressed write data) from the storage controller 110, and the NVM module 126 dynamically
  • the data is recorded in the storage area of the FM designated by the selected PBA, and the LBA 1 and the PBA are associated with each other.
  • the NVM module 126 acquires data (compressed data) from the physical storage area of the FM 420 indicated by the PBA associated with LBA 1 and reads it to the storage controller 110. Transfer compressed data as data.
  • the association between LBA1 and PBA is managed by an LBA1-PBA conversion table described later.
  • the area on the PBA space which is the physical storage area in which the compressed data 713 is recorded, may be associated with both the LBA0 space area and the LBA1 space area at the same time.
  • the decompressed data of the compressed data 713 is associated with the LBA0 space as the decompressed data 711, and the compressed data 713 is directly associated with the LBA1 space as the compressed data 712.
  • the processor 121 specifies LBA0 (assuming that LBA0 is set to 0x000000011000) and writes data to the NVM module 126, the data is compressed by the data compression / decompression unit 418 in the NVM module 126.
  • the NVM module 126 is arranged on the dynamically selected PBA space (specifically, any unwritten page among a plurality of pages of the FM 420).
  • the data is managed in a state associated with the address 0x000000011000 of the LBA0 space. Thereafter, when the processor 121 issues a request for associating the data associated with 0x000000011000 to the address of the LBA1 space (assuming 0x80000000010) to the NVM module 126, this data is also associated with the LBA1 space, and the processor 121 is associated with the LBA1 space.
  • a request (command) for reading the data at the address 0x80000000010 is issued to the NVM module 126, the processor 121 can read out the data written to the LBA0 address 0x000000011000 in a compressed state.
  • the storage apparatus 101 in the present embodiment associates the data written to the NVM module 126 with LBA0 specified, associates it with an area on the LBA1 space, specifies LBA1 and issues a RAID parity generation instruction corresponding to the data. RAID parity generation for compressed data is enabled.
  • the size of the compressed data generated by the NVM module 126 in the embodiment of the present invention is limited to a multiple of 512 bytes (1 sector), and does not exceed the size of the uncompressed data. Yes. That is, when 4 KB data is compressed, the minimum size is 512 bytes and the maximum size is 4 KB.
  • the LBA0-PBA conversion table 810 and the LBA1-PBA conversion table 820 will be described with reference to FIG.
  • the LBA0-PBA conversion table 810 is stored in the DRAM 413 in the NVM module 126, and includes information on the NVM module LBA0 (811), the NVM module PBA (812), and the PBA length (813).
  • the processor 2415 of the NVM module 126 receives the LBA 0 specified at the time of the read request from the host device, and then uses the LBA 0 to obtain the PBA indicating the location where the actual data is stored.
  • the NVM module 126 records update data (write data) in a physical storage area different from the PBA in which the pre-update data is recorded, and converts the PBA and PBA length in which the update data is recorded into an LBA0-PBA conversion. Record in the corresponding part of the table and update the LBA0-PBA conversion table. By operating in this manner, the NVM module 126 enables (pseudo) overwriting of data in the area on the LBA0 space.
  • the NVM module LBA0 (811) is a logical area of the LBA0 space provided by the NVM module 126 arranged in units of 4 KB in order (each address (LBA0) in the LBA0 space is attached to each sector (512 bytes). Have been).
  • LBA0 each address
  • PBA NVM module PBA
  • the association between the NVM module LBA0 (811) and the NVM module PBA (812) is managed in units of 4 KB (8 sectors).
  • the association between the NVM module LBA0 (811) and the NVM module PBA (812) may be managed in an arbitrary unit other than the 4 KB unit.
  • the NVM module PBA (812) is a field for storing the head address of the PBA associated with the NVM module LBA0 (811).
  • the physical storage area of the PBA space is divided and managed for every 512 bytes (one sector).
  • a value (PBA) of “XXX” is associated as a PBA (Physical Block Address) associated with the NVM module LBA0 (811) “0x000_0000_0000”. This value is an address that uniquely indicates a storage area among a plurality of FMs 420 mounted on the NVM module 126.
  • the actual storage size of the 4 KB data specified in the NVM module LBA0 (811) is recorded.
  • the storage size is recorded by the number of sectors.
  • the NVM module 126 in this embodiment compresses uncompressed data instructed by the processor 121 of the storage controller 110 in units of 4 KB.
  • the processor 121 receives a write request for 8 KB data (uncompressed data) starting from the address (0x000_0000_0000) in the LBA0 space
  • 4 KB data in the address range 0x000_0000_0000 to 0x000_0000_0007 (in the LBA0 space) is used as a unit.
  • Compressed data is generated by compression, and then compressed data is generated by compressing 4 KB data in the address range 0x000_0000_0008 to 0x000_0000_000F as a unit, and each compressed data is written in the physical storage area of the FM 420.
  • the present invention is not limited to a mode in which data is compressed in units of 4 KB, and the present invention is effective even in a configuration in which data is compressed in other units.
  • the LBA1-PBA conversion table 820 is stored in the DRAM 413 in the NVM module 126, and includes two pieces of information of the NVM module LBA1 (821) and the NVM module PBA (822).
  • the processor 245 of the NVM module 126 receives the LBA1 specified at the time of the read request from the upper apparatus, and then uses the LBA1-PBA conversion table 820 to indicate the location where the actual data of the LBA1 is stored. Convert to PBA.
  • the NVM module LBA1 (821) is a logical area of the LBA1 space provided by the NVM module 126 arranged in order for each sector (a numerical value 1 in the NVM module LBA1 (821) means one sector (512 bytes). To do). This is because the NVM module 126 in the present embodiment is described on the premise that the association between the NVM module LBA1 (821) and the NVM module PBA (822) is managed in units of 512B, but this NVM module LBA1 (821). ) And the NVM module PBA (822) are not limited to the mode managed in 512B units, and may be managed in any unit. However, LBA1 is a space that directly maps the physical storage area PBA that is the storage destination of the compressed data, and is preferably equal to the PBA division management size. In this embodiment, the LBA1 is divided in units of 512B. to manage.
  • the NVM module PBA (822) is a field for storing the head address of the PBA associated with LBA1.
  • the PBA is divided and managed for every 512B.
  • the PBA value “ZZZ” is associated with the NVM module LBA1 “0x800 — 0000 — 0002”.
  • This PBA value is an address that uniquely indicates a storage area on a certain FM 420 mounted on the NVM module 126.
  • “0x800 — 0000 — 0002” is received as the head address (LBA1) of the read request destination
  • “ZZZ” is acquired as the head address of the physical read destination in the NVM module 126.
  • a value indicating “unallocated” is stored in the NVM module PBA (822).
  • the above is the contents of the LBA0-PBA logical-physical conversion table 810 and the LBA1-PBA logical-physical change table 820 used by the NVM module 126.
  • the block management information 900 is stored in the DRAM 413 in the NVM module 126 and includes items of an NVM module PBA 901, an NVM chip number 902, a block number 903, and an invalid PBA amount 904.
  • the NVM module PBA 901 is a field for storing a PBA value that uniquely identifies each area in all the FMs 420 managed by the NVM module 126.
  • the NVM module PBA 901 is divided and managed in units of blocks.
  • FIG. 9 shows an example in which the head address is stored as the NVM module PBA value.
  • the field “0x000_0000_0000” indicates that the NVM module PBA range from “0x000_0000_0000” to “0x000_0000_0FFF” is applicable.
  • the NVM chip number 902 is a field for storing a number for uniquely specifying the FM Chip 420 mounted on the NVM module 126.
  • the block number 903 is a field for storing the block number in the FM Chip 420 specified by the stored value of the NVM Chip number 902.
  • the invalid PBA amount 904 is a field for storing the invalid PBA amount of the block specified by the stored value of the block number 903 in the FM Chip specified by the stored value of the NVM Chip number 902.
  • the invalid PBA amount is associated with the LBA0 space and / or LBA1 space specified by the NVM module LBA0 (811) and the NVM module LBA1 (821) in the LBA0-PBA conversion table 810 and the LBA1-PBA conversion table 820. This is the amount of the area (on the PBA space) that was later released from the association.
  • the PBA associated with the NVM module LBA0 or LBA1 by the LBA0-PBA conversion table 810 or the LBA1-PBA conversion table 820 is referred to as an effective PBA in this specification.
  • the invalid PBA area is inevitably generated when a pseudo-overwrite is attempted in a non-volatile memory where data cannot be overwritten.
  • the NVM module 126 records the update data in an unwritten PBA (different from the PBA in which the pre-update data is written) at the time of data update, and the NVM module PBA 812 of the LBA0-PBA conversion table 810. And the PBA length 813 field are rewritten to the start address and PBA length of the PBA area in which the update data is recorded. At this time, the association by the LBA0-PBA conversion table 810 is released for the PBA area in which the pre-update data is recorded.
  • the NVM module 126 also checks the LBA1-PBA conversion table 820 and sets an area that is not associated in the LBA1-PBA conversion table as an invalid PBA area.
  • the NVM module 126 counts the amount of invalid PBA for each block, which is the minimum erase unit of FM, and preferentially selects a block with a large amount of invalid PBA as a garbage collection target area.
  • the block number 0 of the NVM chip number 0 managed by the NVM module 126 has an invalid PBA area of 160 KB as an example.
  • garbage collection when the total amount of invalid PBA areas managed by the NVM module 126 exceeds a predetermined garbage collection start threshold (depletion of unwritten pages), blocks including invalid PBA areas are erased and unwritten. Create a PBA area. This operation is called garbage collection.
  • garbage collection When an effective PBA area is included in an erasure target block at the time of garbage collection, it is necessary to copy the effective PBA area to another block before erasing the block. Since this data copy involves a write operation to the FM, the destruction of the FM progresses, and resources such as the processor of the NVM module 126 and the bus bandwidth are consumed as the copy operation, which causes a decrease in performance. For this reason, it is desirable that the number of valid PBA areas be as small as possible.
  • the NVM module 126 refers to the block management information 900 at the time of garbage collection, and deletes the effective PBA by sequentially deleting the blocks having a larger storage value of the invalid PBA amount 904 (including many invalid PBA areas). Operates to reduce the amount of space copy.
  • the amount of area released from the association with the NVM modules LBA0 (811) and LBA1 (821) is managed by the PBA amount (number of sectors). Is not limited to this management unit. For example, instead of the invalid PBA amount, there may be a mode of managing the number of pages that are the minimum writing unit.
  • the above is the content of the block management information 900 used by the NVM module to which the present invention is applied.
  • NVM Module Control commands used by the NVM module 126 to which the present invention is applied will be described.
  • the NVM module 126 analyzes the content of the received command, performs predetermined processing, and sends one response (response information) after the processing is completed. Reply to the storage controller.
  • This process is realized by the processor 415 in the NVM module 126 executing a command processing program stored in the RAM 413.
  • the command includes a set of information necessary for the NVM module 126 to perform predetermined processing.
  • the command is a write command that instructs the NVM module 126 to write data
  • the command includes a write command and information necessary for writing (write data write position, data length, etc.).
  • the NVM module 126 supports a plurality of types of commands. First, information common to each command will be described.
  • Each command includes information such as an operation code (Opcode) and a command ID at the head as common information. Then, after the command ID, information (parameter) unique to each command is added to form one command.
  • FIG. 10 is a diagram showing the format of the write command of the NVM module 126 and the format of the response information for the write command in this embodiment.
  • the element (field) 1011 in FIG. 10 is Opcode, and the element 1012 is a command. ID.
  • Elements 1013 to 1016 are parameters specific to the write command.
  • the command ID and status (Status) are information included in all response information, and information unique to each response information is added after the status. Sometimes.
  • the operation code is information for notifying the NVM module 126 of the type of command, and the NVM module 126 that has acquired the command refers to this information to confirm that the notified command is a write command. Recognize For example, in the case of a write command, the Opcode is 0x01, and in the case of a read command, the Opcode is 0x02.
  • the command ID is a field for storing a unique ID of the command.
  • the ID specified in this field is used so that the storage controller 110 can recognize which command is the response information. Is granted.
  • the storage controller 110 generates an ID capable of uniquely identifying the command when creating the command, creates a command storing this ID in the command ID field, and transmits the command to the NVM module 126. Then, when the process corresponding to the received command is completed, the NVM module 126 includes the command ID of the command in response information and returns it to the storage controller 110.
  • the storage controller 110 recognizes the completion of the command by acquiring the ID included in the response information.
  • the status (element 1022 in FIG. 10) included in the response information is a field in which information indicating whether or not the command processing has been normally completed is stored. If the command process is not completed normally (error), the status stores a number that can identify the cause of the error, for example.
  • FIG. 10 is a diagram showing a write command of the NVM module 126 and response information for the write command in this embodiment.
  • the write command 1010 of the NVM module 126 in this embodiment includes, as command information, an operation code 1011, a command ID 1012, an LBA0 / 1 start address 1013, an LBA0 / 1 length 1014, a compression necessity flag 1015, a list number 1016, and a write data address. 1017 and a write data length 1018.
  • an example of a command composed of the above information will be described, but there may be additional information above. For example, information related to DIF (Data Integrity Field) or the like may be given to the command.
  • DIF Data Integrity Field
  • the LBA 0/1 start address 1013 is a field for designating the start address of the write destination logical space.
  • the LBA0 space is a space in the range of addresses 0x000_0000_0000 to 0x07F_FFFF_FFFF
  • the LBA1 space is defined as a space in the range after the address 0x800_0000_0000. Therefore, the NVM module 126 uses the LBA0 / 1 of the write command.
  • the LBA 0/1 length 1014 is a field for designating the range (length) of the recording destination LBA 0 or LBA 1 starting from the LBA 0/1 start address 1013, and stores the length represented by the number of sectors.
  • the NVM module 126 performs processing for associating the PBA area storing the write data with the LBA0 or LBA1 area in the range indicated by the LBA0 or LBA1 start address 1013 and the LBA0 / 1 length 1014 described above.
  • the compression necessity flag 1015 is a field for designating whether to compress the write target data indicated by this command. However, in this embodiment, when the NVM module 126 receives a write command designating LBA1, it operates so as to determine that the transfer data need not be compressed. Therefore, the compression necessity flag 1015 is not necessary. As another embodiment, the NVM module 126 may not perform compression unless the compression necessity flag 1015 explicitly indicates that compression is necessary.
  • the write data address 1017 and the write data length 1018 are fields for storing the start address of the current storage destination (for example, the DRAM 125) of the write target data indicated by this command and the length of the data.
  • the write target data is stored in the continuous area, only one set of the write data address 1017 and the write data length 1018 is stored in the write command, and “1” is stored in the list number 1016 at that time. Is done.
  • the write target data is discretely stored in a plurality of areas, a plurality of sets of the write data address 1017 and the write data length 1018 are stored in the write command, and the number of lists 1016 includes the write data address 1017. And the number of stored sets of write data lengths 1018 are stored.
  • the NVM module 126 acquires write data by acquiring, from the storage destination (DRAM 125), data of an area having a size stored in the LBA 0/1 length (1014) from the area specified in this field.
  • DRAM 125 data of an area having a size stored in the LBA 0/1 length (1014) from the area specified in this field.
  • another command format may be adopted.
  • the pointer information address where the list is stored
  • the NVM module 126 stores the pointer information.
  • the write response information 1020 includes a command ID 1021, a status 1022, and a compressed data length 1023. Since the command ID ID 1021 and the status 1022 are response information common to each command, description thereof is omitted.
  • the compressed data length 1023 is a field for recording the data length when the written data is reduced by data compression.
  • the storage controller 110 can grasp the data size after compression of the written data by acquiring this field. However, the storage controller 110 cannot accurately grasp the actual compressed data size associated with the specific LBA0 area as the update write is performed. For this reason, when the total of the compressed data lengths 1023 acquired by the write command reaches a predetermined value, the storage apparatus issues a compressed data size acquisition command to be described later for mapping to LBA1. In this embodiment, when the write destination (LBA 0/1 start address 1013) is LBA 1, compressed data is recorded, so this field is invalid.
  • the write command processing shown in FIG. 11 is started. First, in S1101, it is determined whether the address specified by the LBA0 / 1 start address 1013 is an address in the LBA0 space or an address in the LBA1 space. If it is an address in the LBA0 space, the process proceeds to S1102, and if it is an address in the LBA1 space, the process proceeds to S1108.
  • step S ⁇ b> 1108 the NVM module 126 secures a page next to the page that was previously written to the FM 420.
  • the NVM module 126 stores information on the page on which writing was performed last time (including writing by a write command as well as writing generated by a parity generation command process described later). For example, the NVM module 126 performed writing last.
  • the page stores the page number 1 in the block with the block number (903) in the 32nd block of the FM chip with the NVM chip number 902 in FIG. 9 and the block number (903).
  • the last written PBA is stored, and based on the stored PBA and block management information 900, the last written FM Chip, block number, and page number are calculated. Also good.
  • the last written page is the NVM Chip number 902 is No. 1
  • the block number (903) is No. 32
  • the Page number is No. 1
  • data is written in order from the top of the page in the block. Therefore, in S1108, a page having an NVM Chip number 902 of No. 1, a block number (903) of No. 32, and a Page number of No. 2 is secured. .
  • the write data length is within one page will be described here, when the write data length covers a plurality of pages, a plurality of pages are secured in S1108.
  • the address specified by the LBA 0/1 start address 1013 is an address in the LBA 0 space
  • the data write ranges specified by the write command (the start address and the end address in the LBA 0 space) are respectively set. It is determined whether the start and end of the 4 KB boundary match, and if they match, the process proceeds to S1103, and if they do not match, the process proceeds to S1104. For example, when the LBA 0/1 start address 1013 specified by the write command is 0x000_0000_0000 and the LBA 0/1 length 1014 is 8, the start address matches the 4 KB boundary.
  • the process proceeds to S1103. If the LBA 0/1 start address 1013 is 0x000 — 0000 — 0001 and the LBA 0/1 length 1014 is 7, the process proceeds to S1104 because the start address is not a 4 KB boundary. When the LBA 0/1 start address 1013 is 0x000_0000_0000 and the LBA 0/1 length 1014 is 10 (in decimal notation), the end of the write data is 0x000_0000_0009. That is, since the end address is not a 4 KB boundary, the process proceeds to S1104.
  • the NVM module 126 reads the data from the data storage destination pointed by the write data address 1017, stores the data in the data buffer 416, and subsequently stores the data stored in the data buffer 416 using the data compression / decompression unit 418.
  • Compress When the data compression / decompression unit 418 has a function capable of directly reading and compressing data from the data storage location pointed to by the write data address 1017, the data compression / decompression unit 418 reads from the data storage location pointed to by the write data address 1017. There may be an embodiment in which data is compressed without being temporarily stored in the data buffer 416 and the data is stored in the data buffer. Thereafter, the processing from S1108 to S1111 is performed, and the write command processing is terminated. In this case, the write response information 1020 created in S1111 stores information on the data length of the compressed data created in S1103.
  • step S1104 the LBA0-PBA conversion table 810 is referred to, and it is determined whether or not a PBA area has been allocated to the data write range specified by the write command. If the PBA area is not allocated, the write command process ends with an error (information storing the error is created as the write response information 1020, and the write response information 1020 is sent to the processor 121 that issued the write command). Return). If the PBA area has been allocated, the process proceeds to S1105.
  • the compressed data is read from the PBA corresponding to the data write range specified by the write command, and is temporarily stored in the data buffer 416. Subsequently, the data compression / decompression unit 418 is used to store the decompressed data in the data buffer 416, and the compressed data once stored is deleted.
  • the data compression / decompression unit 418 has a function capable of directly decompressing the compressed data stored in the storage area of the FM 420, the compressed data is not directly stored in the data buffer, but directly in the data buffer 416.
  • the decompressed data may be stored in the.
  • data is acquired from the data storage destination specified by the write data address 1017, and the acquired data is overwritten on the decompressed data stored in the data buffer 416 in S1105.
  • the data overwritten in S 1106 is compressed using the data compression / decompression unit 418, and the compressed data is temporarily stored in the data buffer 416. Thereafter, the processing from S1108 to S1111 is performed, and the write command processing is terminated.
  • the write response information 1020 created in S1111 stores information on the data length of the compressed data created in S1107.
  • the write processing is not limited to the contents and processing order described above.
  • the processing of S1108 to S1109 does not necessarily have to be completed before the processing of returning the response response information of the write command (S1111). It may be temporarily stored in the data buffer 416 and executed at an arbitrary timing after the process (S1111) of returning the response response information of the write command. In this way, the response time of the NVM module 126 can be shortened.
  • the procedure may be adopted in which the compressed data is stored directly in the FM 420 without being stored in the data buffer 416 once.
  • the write target data is within 4 KB.
  • the write range of the write target data is divided into a plurality of 4 KB boundaries. 11 processing is performed.
  • data that is aligned with the 4 KB boundary is processed by executing the steps after S1103, and data that is not aligned with the 4 KB boundary is processed by executing the steps after S1104. .
  • the write is a write process for 3 KB data from the beginning, a write process for the next 4 KB data, and the last 1 KB data.
  • Data write processing is processed as three write requests. Among these, when processing a write request for 4 KB data, the data write range coincides with the 4 KB boundary, so the processes from S 1102 to S 1103 are performed. On the other hand, when processing a write request for 3 KB data and a write request for 1 KB data, the process proceeds from S 1102 to S 1104, and the processes after S 1104 are performed.
  • S1201 it is determined whether the address specified by the LBA0 / 1 start address 1013 of the write command is an address in the LBA0 space or the LBA1 space. If the address is in the LBA0 space, the process proceeds to S1202. In S1202, the NVM module LBA0 (811) in the LBA0-PBA conversion table 810 has the address of the NMV module PBA (812) for the entry that matches the current write range, and the NVM module PBA (822) in the LBA1-PBA conversion table 820 Also determine if it exists. In the case of the example of FIG.
  • the write address range is a range between 0x000_0000_0020 and 0x000_0000_0027, for example, an area with PBA of “ZZZ” is assigned to the range of the LBA0 space and the address of the LBA1 space “0x000 — 0000 — 0002” is also assigned areas with PBA “ZZZ” and “ZZZ + 1”. In this case, the process proceeds to S1204. If the write address range is between 0x000_0000_0000 and 0x000_0000_0007, the LBA0 space range is assigned an area with a PBA of "XXX", but this PBA is stored in the LBA1-PBA conversion table 820. not exist. In this case, the process proceeds to S1203. If no PBA is assigned to the range of the LBA0 space, the process proceeds to S1204.
  • the NVM module LBA0 (811) of the LBA0-PBA conversion table 810 uses the PBA stored in the NMV module PBA (812) as the invalid PBA area for the entry that is the current write range, and sets the invalid PBA amount 904. Addition processing is performed.
  • S1205 is the same processing as S1202, and for the entry in which the NVM module LBA1 (821) in the LBA1-PBA conversion table 820 matches the current write range address, the address of the NMV module PBA (822) is in the LBA0-PBA conversion table 810. It is determined whether the NVM module PBA (822) is also present. If it does not exist, the process proceeds to S1206.
  • the NBA module LBA1 (821) in the LBA1-PBA conversion table 820 uses the process similar to S1203 to invalidate the PBA stored in the NMV module PBA (822) for the entry that matches the current write range. This is an area.
  • the information of the PBA in which the write data is written in the current write command process is stored in the NVM module PBA (822) of the LBA1-PBA conversion table 820, and the process ends.
  • FIG. 13 is a diagram showing a read command and response information to the read command supported by the NVM module 126 in this embodiment.
  • the read command 1610 of the NVM module 126 in this embodiment is constituted by an operation code 1011, a command ID 1012, an LBA0 / 1 start address 1613, an LBA0 / 1 length 1614, an expansion necessity flag 1615, and a read data address 1616 as command information.
  • the operation code 1011 and the command ID 1012 are information common to the previous write command, description thereof is omitted.
  • the LBA 0/1 start address 1613 is a field for designating the top address of the logical space of the read destination area in the NVM module 126.
  • the LBA 0/1 length 1614 is a field for designating a range of the recording destination LBA 0 or LBA 1 starting from the LBA 0/1 start address 1613.
  • the NVM module 126 acquires data from the PBA associated with the LBA0 or LBA1 area in the range indicated by the LBA0 or LBA1 start address 1613 and the LBA0 / 1 length 1614 described above, and the acquired data (if necessary) Read processing is performed by decompressing and transferring the data to the storage controller 110.
  • the decompression necessity flag 1615 is a field for designating the necessity of decompression of the read target data indicated by this command. When the storage device creates a read command, this flag is controlled to notify the NVM module 126 that decompression is not necessary. In this embodiment, when the read command specifying the address of the LBA1 space is received, the acquired data is not decompressed, so this decompression necessity flag 1615 is not essential.
  • the head address (for example, an address in the DRAM 125) of the output destination area of the read target data is designated.
  • data having a length designated by the LBA 0/1 length 1614 is continuously stored from the area of the address designated by the read data address 1616.
  • the read response 1620 includes only information common to other command response information (command ID 1021 and status 1022), and thus description thereof is omitted. Note that the read response 1620 may include additional information other than the common information.
  • the address range of the LBA 0/1 space from which data is read by the current read command is specified from the LBA 0/1 start address 1613 and the LBA 0/1 length 1614 specified by the read command. Then, with reference to the LBA0-PBA conversion table 810 or the LBA1-PBA conversion table 820, it is determined whether or not PBA has been assigned to the address range. If PBA has already been assigned to the entire address range, the process advances to step S1302.
  • the read command ends in error (that is, the status 1022 of the read response 1620). Stores information indicating that an error has occurred and returns a read response to the command issuer).
  • the block management information 900 is referred to in S1302, and the range specified by the current read command.
  • the data is read from the page of the FM 420 corresponding to the PBA storing the data (in units of pages) and stored in the data buffer 416.
  • S1303 it is determined whether the address specified by the current read command is an address in the LBA0 space or an address in the LBA1 space. As a result of the determination, in the case of an address in the LBA1 space, the data stored in the NVM module 126 is output as it is (without being expanded), so the process proceeds to S1305. In S1305, a portion of data corresponding to the range specified by the read command is extracted from the page contents read to the data buffer 416 in S1302, and is output to the area of the address specified by the read data address 1616. The lead response information is created and returned, and the process ends.
  • the data for 8 sectors of the LBA 0 space address from 0x000_0000_0020 to 0x000_0000_0027 ”And“ YYY + 5 ” are compressed and stored.
  • the data buffer 416 stores data for one page including the portions corresponding to the areas of PBA “YYY + 4” and “YYY + 5”, so the data compression / decompression unit 418 is used. Then, decompression of the data corresponding to the areas of PBA “YYY + 4” and “YYY + 5” stored in the data buffer 416 is executed.
  • the data for the first sector (512 bytes) from the data expanded in S1304 is output to the area of the address specified by the read data address 1616, and read response information is created and returned. End the process.
  • FIG. 15 is a diagram illustrating a compressed data size acquisition command and response information to the compressed data size acquisition command supported by the NVM module 126 in the present embodiment.
  • the compressed data size acquisition command 1110 of the NVM module 126 in the present embodiment is constituted by an operation code 1111, a command ID 1012, an LBA 0 start address 1113, and an LBA 0 length 1114 as command information.
  • an example of a command based on the above information will be described, but there may be additional information above. Since the command ID 1012 has the same contents as the previous write command, description thereof is omitted.
  • information unique to the compressed data size acquisition command will be described.
  • the LBA 0 start address 1113 is a field for designating the start address of the LBA 0 area that is the target of acquiring the data size after compression.
  • the LBA 0 length 1114 is a field for designating a range of LBA 0 starting from the LBA 0 start address 1113.
  • the NVM module 126 calculates the size of the compressed data associated with the LBA1 area in the range indicated by the LBA0 start address 1113 and the LBA0 length 1114, and notifies the storage apparatus.
  • the address that can be specified as the LBA 0 start address 1113 is limited to a multiple of 8 sectors (4 KB).
  • the length that can be designated as the LBA 0 length 1114 is also limited to a multiple of 8 sectors (4 KB). If an address that does not match the 8-sector boundary (for example, 0x000 — 0000 — 0001) or length is specified as the LBA 0 start address 1113 or the LBA 0 length 1114, an error is returned.
  • the LBA 0 size acquisition response 1120 includes a compressed data length 1123 in addition to the command ID 1021 and the status 1022.
  • the compressed data length 1123 is a field for storing the size of the compressed data associated with the LBA 0 area specified by the compressed data size acquisition command 1110.
  • the storage controller 110 acquires the value of this compressed data length, and recognizes the area size required for the LBA 1 that is the mapping destination by an LBA 1 mapping command described later.
  • variables A and L are prepared (S1411), and the value of the LBA 0 start address 1113 specified by the compressed data size acquisition command is substituted into the variable A, and the variable L is set.
  • Initialization (0 is substituted) is performed (S1412).
  • an entry in which the value of the NVM module LBA0 (811) is equal to the value of the variable A is extracted from the LBA0-PBA conversion table 810, and the PBA (812) and PBA length (813) values of the entry are referred to. (S1413).
  • PBA (812) is unallocated.
  • step S1415 If the PBA (812) is not assigned, the processing of the command is terminated with an error, and the response information returned to the storage controller 110 is returned with information indicating that there is an error. If PBA (812) has been assigned, the process advances to step S1415.
  • step S1415 the value of the PBA length (813) extracted in S1113 is added to the variable L, and 8 is added to the variable A in S1416.
  • step S1417 it is determined whether the value of the variable A is equal to or longer than the LBA0 length specified by the compressed data size acquisition command. If not, the process returns to step S1113. If the length is greater than or equal to the LBA0 length, the L value is returned as the compressed data length to the storage controller 110 and the process ends (S1418). Specifically, response information in which the value of the variable L is stored in the compressed data length 1123 of the response information is created, and the response information is returned to the storage controller 110.
  • FIG. 17 is a diagram schematically showing an LBA1 mapping command 1210 supported by the NVM module 126 in this embodiment and response information for the LBA1 mapping command.
  • the NVM module 126 compresses and writes the data written by designating the LBA 0 area to the FM 420. Thereafter, a RAID parity is generated for the compressed data, and the compressed data is mapped to LBA1 different from LBA0 in order to write the compressed data to the final storage medium in a compressed state.
  • the LBA1 mapping command 1210 of the NVM module 126 in this embodiment is composed of an operation code 1011, a command ID 1012, an LBA0 start address 1213, an LBA0 length 1214, and an LBA1 start address 1215 as command information.
  • an example of a command based on the above information will be described, but there may be additional information above.
  • the LBA 0 start address 1213 is a field for designating a head address for designating the LBA 0 area of the target data for mapping the compressed data to LBA 1.
  • the LBA0 length 1214 is a field for designating a range of LBA0 starting from the LBA0 start address 1213 to be mapped to LBA1. As with the compressed data size acquisition command, the LBA 0 start address 1213 and the LBA 0 length 1214 are limited to multiples of 8 sectors (4 KB).
  • the LBA1 start address 1215 is a field for designating the start address of LBA1 to be mapped.
  • the storage controller 110 acquires the data size to be mapped in advance using the compressed data size acquisition command, secures an LBA1 area to which this data size can be mapped, and stores this head address in the LBA1 start address 1215 field.
  • the command is issued to the NVM module 126. It is to be noted that a specification that designates a plurality of LBA1 start addresses 1215 is adopted, that is, a configuration in which an LBA0 space area specified by an LBA0 start address 1213 and an LBA0 length 1214 is mapped to a discrete LBA1 space area. It is also possible to take
  • the NVM module 126 transfers the compressed data associated with the LBA0 space in the range indicated by the LBA0 start address 1213 and the LBA0 length 1214 from the LBA1 start address 1215 to an area corresponding to the compressed data size. Perform mapping. More specifically, the PBA (NVM module PBA812) associated with the LBA0 space in the range indicated by the LBA0 start address 1213 and the LBA0 length 1214 is acquired by referring to the LBA0-PBA conversion table.
  • the PBA acquired in the PBA 822 in the LBA1 range (entry specified by the NVM module LBA1 (821)) having the same size as the total size of the acquired PBA Enter the address.
  • the LBA1 mapping response 1220 includes a command ID 1021 and a status 1022.
  • a command ID 1021 includes a command ID 1021 and a status 1022.
  • response information includes a command ID 1021 and a status 1022.
  • the compressed data for parity generation is stored in LBA1 by mapping the compressed data to LBA1. Can be specified.
  • the compressed data mapped to LBA1 is designated, and a parity for the compressed data is generated.
  • the other corresponds to the data before update and the data before update stored in the storage medium in addition to the update data when update data is written to the RAID-configured storage medium group.
  • This is a method of generating parity (updated parity) corresponding to update data by performing an XOR operation with the parity before update, and this method is called an “update parity generation method” in this specification.
  • the full stripe parity generation command can be used when all the data constituting the RAID parity is stored in the NVM module 126 and mapped in the LBA1 space. Therefore, in the case of a RAID configuration that generates parity for six data, it is necessary that six data are stored in the NVM module 126 and mapped to the LBA1 space.
  • FIG. 18 is a diagram showing the response information to the full stripe parity generation command and the full stripe parity generation command of the NVM module 126 in the present embodiment.
  • the full stripe parity generation command 1310 includes, as command information, an operation code (Opcode) 1011, command ID 1012, LBA1 length 1313, stripe number 1314, LBA0 start address 0 to X (1315 to 1317), LBA1 start address (for XOR parity) 1318, an LBA1 start address (for RAID 6 parity) 1319.
  • Opcode operation code
  • the NVM module 126 recognizes from the contents of the Opcode 1011 field that the command received from the storage controller 110 is a full stripe parity generation command. Since the type of parity to be generated differs depending on the RAID level, the NVM module 126 in the present embodiment changes the generated parity depending on the contents of the Opcode 1011.
  • any of 0x11, 0x12, and 0x13 is specified in Opcode 1011, full stripe parity generation is performed, but if 0x11 is specified in Opcode, the parity used in RAID 5 (exclusive OR / XOR operation) 1) is generated, and when 0x12 is specified in Opcode, two parities (so-called P parity and Q parity) used in RAID 6 (using Reed-Solomon code) are generated, and 0x13 is generated in Opcode. Is specified, two parities (horizontal parity and diagonal parity) used in RAID 6 (so-called EVENODD system, Row-Diagonal Parity system) are generated.
  • the LBA1 length 1313 is a field for designating the length of the parity to be generated (for RAID parity, the parity and the parity generation source data have the same length).
  • the number of stripes 1314 designates the number of data used for generating parity. For example, when parity is generated for 6 data, 6 is stored in the stripe number 1314.
  • LBA1 start addresses 0 to X are fields for designating the start address of LBA1 with which the parity generation source data is associated. The number of fields matches the number specified by the stripe number 1314 (when a command that does not match is issued, the NVM module 126 returns an error). For example, in a configuration in which two parities are created for six data (RAID6 6D + 2P), six LBA1 start addresses are designated.
  • LBA1 start address Y1 (for XOR parity) 1318 is a field for designating the storage destination of the generated RAID parity (XOR parity).
  • the generated parity (RAID5 parity, RAID6 P parity, or horizontal parity) is stored in an area within the range specified by the LBA1 length 1313 from the start address.
  • the LBA 1 start address (for RAID 6) 1319 is a field for designating the storage destination of the parity for RAID 6 to be generated.
  • the parity for RAID 6 is Q parity of Reed-Solomon code or diagonal parity in the EVENODD system.
  • the generated parity is stored in an area in the range specified by the LBA1 start address (for RAID 6) 1319 and the LBA1 length 1313.
  • the NVM module 126 of this embodiment When the NVM module 126 of this embodiment receives the full stripe parity generation command, the NVM module 126 acquires a plurality of compressed data from the FM 420 indicated by the PBA associated with the area specified by the LBA 0 start address 0 (1315 to 1317) described above.
  • the parity generation unit 419 inside the NVM module 126 is used to generate parity (one or two). Thereafter, the generated parity is recorded in the FM 420.
  • This process is similar to the write command process (S1108 to S1110 in FIG. 11). That is, the next page after the page written last time is secured and the generated parity is stored.
  • the PBA indicating the area of the recording destination FM 420 is associated with the LBA 1 start address Y 1 (for XOR parity) 1318 and the LBA 1 start address Y 2 (for RAID 6) 1319, the corresponding NVM module LBA 1 (821) in the LBA 1 -PBA management information 820. ) In the PBA 822 field of the table entry.
  • the full stripe parity generation response 1320 is composed of a command ID 1021 and a status 1022, both of which are information common to other commands and will not be described.
  • Update parity generation command Update parity generation is performed when update data is recorded in the area of the final storage medium for which parity has already been created. Data) and three data of old parity corresponding to the old data are mapped on the LBA1 space.
  • the storage controller 110 When generating the updated parity, the storage controller 110 according to the present embodiment reads the old data and the old parity from the last storage medium configured in RAID, and writes the old data and the old parity on the LBA1 space of the NVM module 126.
  • the update data, the old data in the area updated by the update data, and the old parity protecting the old data are prepared, and the update parity is generated.
  • FIG. 19 is a diagram showing an update parity generation command of the NVM module 126 and response information to the update parity generation command in the present embodiment.
  • the update parity command 1410 includes, as command information, an operation code 1011, a command ID 1012, an LBA1 length 1413, an LBA1 start address 0 (1414), an LBA1 start address 1 (1415), an LBA1 start address 2 (1416), and an LBA1 start address 3 ( 1417), LBA1 start address 4 (1418), and LBA1 start address 5 (1419).
  • an example of a command based on the above information will be described, but there may be additional information above.
  • the operation code (Opcode) 1011 is a field for notifying the command type to the NVM module 126, and the NVM module 126 that has acquired the command recognizes that the command notified by this field is an update parity generation command. Similarly to the full stripe parity generation command, the type of generated parity varies depending on the contents of Opcode 1011.
  • the LBA1 length 1413 is a field for designating the length of the parity to be generated (for RAID parity, the parity and the parity generation source data have the same length).
  • the LBA 1 start address 0 (1414) is a field indicating the start address of the LBA 1 area to which new data for parity update is mapped.
  • the processor 121 of the storage controller 110 uses this field to notify the NVM module 126 that the data in the area specified by the LBA1 start address 0 (1414) to the length specified by the LBA1 length 1413 is new data.
  • the LBA1 start address 1 (1415) is a field indicating the start address of the LBA1 area to which the old data for parity update is mapped.
  • the processor 121 uses this field to notify the NVM module 126 that the data in the area specified by the LBA1 length 1413 from the LBA1 start address 1 (1415) is old data.
  • LBA1 start address 2 (1416) is a field indicating the start address of the LBA1 area to which the XOR parity before update for parity update is mapped.
  • the processor 121 uses this field to notify the NVM module 126 that the data in the area specified by the LBA1 length 1413 from the LBA1 start address 2 (1416) is an XOR parity.
  • the LBA 1 start address 3 (1417) is a field indicating the start address of the LBA 1 area to which the parity for RAID 6 before update for parity update is mapped.
  • the processor 121 uses this field to notify the NVM module 126 that the data in the area specified by the LBA1 length 1413 from the LBA1 start address 3 (1417) is the parity for RAID 6 before update.
  • LBA1 start address 4 (1418) is a field indicating the start address of the LBA1 area to which the XOR parity newly created by updating is associated.
  • the processor 121 uses this field to instruct the NVM module 126 to map a new XOR parity from the LBA1 start address 4 (1418) to an area having a length specified by the LBA1 length 1413.
  • the LBA 1 start address 5 (1419) is a field indicating the start address of the LBA 1 area to which the parity for RAID 6 newly created by updating is associated.
  • the processor 121 uses this field to instruct the NVM module 126 to map a new parity for RAID 6 in an area having a length specified by the LBA 1 length 1413 from the LBA 1 start address 5 (1419).
  • the processing when the NVM module 126 of this embodiment receives the update parity generation command is the same as the processing performed when the full stripe parity generation command is received.
  • a plurality of compressed data is acquired from the storage area on the FM 420 indicated by the PBA associated with the area specified by the LBA1 start addresses 1414 to 1417 described above, and the parity generation unit 419 inside the NVM module 126 is used to obtain 1 or 2 Generate one parity. Thereafter, the generated parity is recorded in the FM 420.
  • the NVM module 126 which is a cache apparatus, compresses data and generates parity for the compressed data. Parity is acquired from the NVM module 126, and the compressed data and parity are recorded in the final storage medium. At this time, information necessary for decompressing the compressed data (hereinafter referred to as compressed information) is also recorded in the final storage medium.
  • compressed information specifically indicates the structure of the compressed data mapped to LBA1. For example, when four pieces of compressed data that can be decompressed independently are mapped to the designated LBA1 area, the information is information that stores the start positions of the four compressed data and the length of the compressed data after decompression. The present invention does not depend on this method, and the NVM module 126 may permanently hold information necessary for decompression.
  • the storage controller 110 When recording the compressed information in the final storage medium as in this embodiment, the storage controller 110 needs to acquire the compressed information from the NVM module 126 that is a cache device.
  • the compression information acquisition command is used when the storage controller 110 acquires compression information from the NVM module 126.
  • FIG. 20 is a diagram showing a compression information acquisition command and response information to the compression information acquisition command supported by the NVM module 126 in the present embodiment.
  • the compression information acquisition command 1510 includes, as command information, an operation code 1011, a command ID 1012, an LBA1 start address 1513, an LBA1 length 1314, and a compression information address 1515.
  • command information includes, as command information, an operation code 1011, a command ID 1012, an LBA1 start address 1513, an LBA1 length 1314, and a compression information address 1515.
  • an example of a command based on the above information will be described, but there may be additional information above.
  • the LBA1 start address 1513 is a field for designating the start address of the area on the LBA1 from which compression information is to be acquired.
  • the LBA1 length 1514 is a field for designating the range of the LBA1 space starting from the LBA1 start address 1513.
  • the compression information address 1515 is a field for designating a storage destination (for example, an address indicating a specific position on the DRAM 125) on the storage controller 110 of the compression information acquired from the NVM module 126.
  • the NVM module 126 Upon receiving the compression information acquisition command, the NVM module 126 creates compression information necessary for decompressing data recorded in the LBA1 area in the range indicated by the LBA1 start address 1513 and the LBA1 length 1514, and is designated by the storage controller 110. Transfer to compressed information address 1515.
  • the compressed information is information indicating the structure of the compressed data mapped in the LBA1 space, but the specific contents of the compressed information and the specific creation method of the compressed information are directly related to the present invention. Since it is not, description is abbreviate
  • the storage controller 110 acquires the compression information from the NVM module 126 using the compression information acquisition command, and then records the compression information together with the compressed data on the final storage medium.
  • the compressed information is acquired together with the compressed data from the final storage medium, the compressed data is written to the NVM module 126, and then the compressed information is transferred to the NVM module 126 by a compression information transfer command described later. By transferring, the NVM module 126 can be expanded.
  • the compression information acquisition response 1520 includes a command ID 1021, a status 1022, and compression information 1523.
  • the compressed information acquisition command 1510 may employ a command specification in which the compressed information 1523 is not included in the response information in order to store the compressed information at the address specified by the compressed information address 1515.
  • the storage controller 110 maps the data to LBA1 in order to acquire the compressed write data and record it, or to generate parity for the compressed data To do. Further, in order to decompress and acquire the compressed information, LBA1 is designated and data recorded in the NVM module 126 is mapped to LBA0. The mapped area needs to be unmapped when the processing is completed and becomes unnecessary.
  • the storage apparatus of this embodiment uses the mapping release command to release the association between the PBA and the LBA (LBA0 or LBA1) associated with the PBA.
  • FIG. 21 is a diagram showing a mapping cancellation command and response information to the mapping cancellation command supported by the NVM module 126 in the present embodiment.
  • the unmapping command 1710 of the NVM module 126 in this embodiment is composed of an operation code 1011, a command ID 1012, an LBA 0/1 start address 1713, and an LBA 0/1 length 1714 as command information.
  • an example of a command based on the above information will be described, but there may be additional information above.
  • the contents of parameters unique to the mapping cancellation command and the processing performed when the NVM module 126 receives the mapping cancellation command will be described.
  • the LBA 0/1 start address 1713 is a field for designating the start address of the logical space to be unmapped, and addresses in both the LBA 0 space and the LBA 1 space can be designated. However, if an address in the LBA0 space is specified, the address must be an address on a 4 KB (8 sector) boundary. If an address that is not on a 4 KB (8 sector) boundary is specified, the NVM module 126 will generate an error. return it.
  • the LBA 0/1 length 1714 is a field for designating the range of the LBA 0 space or the LBA 1 space starting from the LBA 0/1 start address 1713.
  • the processing when the NVM module 126 receives a mapping release command from the storage controller 110 is as follows.
  • the NVM module 126 associates the PBA associated with the LBA0 or LBA1 space (hereinafter referred to as “target LBA0 / 1 area”) in the range indicated by the LBA0 LBA / 1 start address 1713 and the LBA0 / 1 length 1714 described above. Is deleted.
  • each entry in which the value of the NVM module LBA0 (811) or the NVM module LBA1 (821) belongs to the range of the target LBA0 / 1 area Is updated by changing the field of the NVM module PBA812 or the NVM module PBA822 to unallocated.
  • the PBA whose association with LBA 0 and LBA 1 has been released is detected, and the PBA information is reflected in the block management information 900 (that is, the amount of the area that has become invalid PBA in the invalid PBA amount 904 item) (This can be said to be processing corresponding to S1202 to S1204 or S1205 to S1207 in FIG. 12).
  • the NVM module 126 in the embodiment of the present invention selects a block having a relatively large invalid PBA amount 904 among a plurality of blocks (that is, selects a block having the largest invalid PBA amount 904 in order), Garbage collection is carried out. Garbage collection is a well-known process and will not be described here.
  • the storage system 101 in this embodiment stores the data compressed by the NVM module 126 in the final storage medium, and then receives a read request for the data from a host device such as the host 103. Then, it is necessary to decompress the compressed data stored in the final storage medium and transfer it to the host device. At this time, the storage controller 110 acquires the compressed data from the final storage medium, transfers the compressed data to the NVM module 126, and then transfers the compression information necessary for decompressing the compressed data.
  • FIG. 22 is a diagram showing a compressed information transfer command and response information to the compressed information transfer command supported by the NVM module 126 in the present embodiment.
  • the compression information transfer command 1810 of the NVM module 126 in this embodiment is constituted by an operation code 1011, a command ID 1012, an LBA1 start address 1813, an LBA1 length 1814, and a compression information address 1815 as command information.
  • an example of a command based on the above information will be described, but there may be additional information above.
  • the contents of parameters unique to the compressed information transfer command and processing performed when the NVM module 126 receives the compressed information transfer command will be described.
  • the LBA1 start address 1813 is a field for designating the start address of the area on the LBA1 that is the target of the compression information to be transferred.
  • the LBA1 length 1814 is a field for designating the range of the LBA1 space starting from the LBA1 start address 15813.
  • the compression information address 1815 is a field for designating the current storage destination (for example, an address on the DRAM 125) of the compression information to be transferred to the NVM module 126.
  • the NVM module 126 acquires the compression information from the address specified by the compression information address 1815, and enables decompression of a plurality of compressed data in the area specified by the LBA1 start address 1813 and the LBA1 length 1814. Specifically, after the compressed data associated with LBA1 is mapped to LBA0 with the LBA0 mapping command described later, the compression transferred with the compression information transfer command when a read request for LBA0 is received from the storage device The compressed data is decompressed using the information and transferred to the storage.
  • the compressed information transfer response 1820 includes a command ID 1021 and a status 1022. Since the command ID 1021 and the status 1022 have the same contents as the previous write response, description thereof is omitted. In the present embodiment, an example of response information based on the above information will be described, but there may be additional information above.
  • the NVM module 126 records the compressed data written by designating the LBA 1 area in the FM 420. Further, since the compressed data recorded in the FM 420 needs to be transferred in an expanded state when there is a read request from the higher-level device 103, the LBA 0 mapping command is used at that time.
  • FIG. 23 is a diagram showing an LBA0 mapping command supported by the NVM module 126 in this embodiment and response information to the LBA0 mapping command.
  • the LBA0 mapping command 1210 of the NVM module 126 in the present embodiment is configured with an operation code 1011, a command ID 1012, an LBA1 start address 1913, an LBA1 length 1914, and an LBA0 start address 1915 as command information.
  • an example of a command based on the above information will be described, but there may be additional information above.
  • the LBA1 start address 1913 is a field for designating the start address of the range of the LBA1 space of the compressed data to be mapped.
  • the LBA1 length 1914 is a field for designating a range of the LBA1 space starting from the LBA1 start address 1913 to be mapped to LBA0.
  • the LBA 0 start address 1915 is a field for designating the start address of LBA 0 to be mapped.
  • the storage controller 110 knows the data size after decompression of the compressed data recorded in the LBA 1 from the compression information managed by the storage device, secures an area of the LBA 0 to which this data size can be mapped, and sets the head address to the LBA 0 Fill in the start address 1915.
  • the address that can be specified as the LBA 0 start address 1915 is limited to a multiple of 8 sectors (4 KB).
  • the NVM module 126 of the present embodiment converts the compressed data associated with the LBA1 space in the range indicated by the LBA1 start address 1913 and the LBA1 length 1914 to the LBA0 start address 1915. Mapping is performed over the area corresponding to the data size after decompression. More specifically, referring to the LBA1-PBA conversion table, the PBA associated with the LBA in the range indicated by the LBA1 start address 1913 and the LBA1 length 1914 is acquired.
  • the LBA0-PBA conversion table obtain from the LBA0 start address 1915 to the PBA 822 in the LBA0 range that has the same size after decompression based on the compression information obtained from the storage controller 110 by the NVM module 126 using the compression information transfer command. Enter the address of the PBA.
  • the LBA 0 mapping response 1920 includes only information (command ID 1021, status 1022) common to response information of other commands, and thus the description thereof is omitted. A configuration in which additional information other than the common information is included in the LBA 0 mapping response 1920 may be used.
  • the storage apparatus 101 of the present invention provides one or a plurality of volumes 5000 to the host apparatus 103.
  • the volume provided to the host apparatus 103 is referred to as “decompression VOL” (elements in the figure).
  • VOL volume provided to the host apparatus 103
  • the decompressed VOL 5000 is written to the NVM module 126 that is a cache of the storage device 101.
  • the data is written into the storage area (configured by FM 420) of the NVM module 126 in a compressed state as described above.
  • the host device 103 issues a read request to the decompressed VOL 5000 and reads the data previously written in the decompressed VOL 5000, the data is not compressed. Data is read out.
  • the object of the present invention is to store the compressed data in the final storage medium (SSD 111 or HDD 112)
  • the compressed data stored in the NVM module 126 is stored in the final storage medium (111 112).
  • the problem in this case is that when the data is compressed, the data size varies depending on the data contents.
  • the update data is overwritten and stored in an area where pre-update data of the update data is stored.
  • the compressed data is stored in the final storage medium, if an update (overwrite) request is received for the compressed data stored in the volume first, the update data is compressed as a result of the compression of the update data.
  • the size of the data may be larger than the size of the compressed data stored first. In that case, it becomes impossible to overwrite the final storage medium. Therefore, the storage apparatus 101 of the present invention has a configuration in which update data is not written to the same area as the pre-update data, but is additionally written to the final storage media 111 and 112.
  • a volume referred to as a compressed VOL 5500
  • the data written in the decompressed VOL (the substance is stored as compressed data in the cache) is simulated. The process of moving to the compression VOL 5500 is performed.
  • the compression VOL 5500 is a logical volume (logical volume) composed of a plurality of final storage media 111 and 112, and the plurality of final storage media constituting the logical volume is configured as one RAID group, Parity is generated when data is stored by RAID technology, and the data and parity are written to the final storage medium.
  • the compressed VOL (logical volume) is the same as the logical volume provided to a host device such as a host computer by a well-known storage device that employs RAID technology.
  • the processing to be written to the final storage medium or the processing for the storage device to read data from the final storage medium in response to a data read request for the compressed VOL is the same as the write processing and read processing performed by a known storage device.
  • the storage apparatus 101 needs to maintain and manage the correspondence between the decompression VOL and the compression VOL, and has the inter-volume mapping information 3000 as shown in FIG. 28 as an example. .
  • the inter-volume mapping information 3000 as shown in FIG. 28 as an example.
  • each element constituting each row (entry) of the inter-volume mapping information 3000 will be described.
  • Each entry has an area on the decompression VOL 5000 identified by the LBA 3020 which is the LBA information of the decompression VOL identified by the VVOL # 3010 and the identification number of the decompression VOL identified by the VVOL # 3010 in the storage apparatus 101 of the decompression VOL. This indicates that it is associated with the area on the compressed VOL 5500 identified by the identification number LDEV # 3060 and the LBA 3070 which is LBA information of the compressed VOL 5500 identified by the LDEV # 3060.
  • Cache LBA0 (3030) is the NVM module 126 in which the cached data is stored when the data in the area on the decompressed VOL 5000 specified by VVOL # 3010 and LBA3020 is cached on the NVM module 126. This indicates the address (LBA0 address) of the area, and Cache LBA1 (3080) is cached when the data in the area above the compressed VOL 5500 specified by LDEV # 3060 and LBA3070 is cached on the NVM module 126. It represents the address (LBA1 address) of the area where data is stored.
  • Each entry is provided corresponding to an area of 8 sectors of the decompression VOL 5000.
  • the first row in FIG. 28 (entry where VVOL # 3010 is 0 and LBA (3020) is 0) is VVOL #. Is information on an area corresponding to 8 sectors from 0 to 7 in the expansion VOL of 0. That is, the LBA 3020 stores the leading LBA of the area for 8 sectors.
  • the size 3040 stores the compressed size of the area for the eight sectors.
  • the status information 3050 stores auxiliary information related to the area for the eight sectors, for example, information such as the last access time. This information is used as reference information when generating parity from cache data.
  • the free list 3500 includes a free LBA0 list 3510 and a free LBA1 list 3520.
  • Each list (3510, 3520) includes an unused LBA0 / 1 (specifically, Cache LBA0 of the inter-volume mapping information 3000). (3030) and Cache LBA1 (3080), a list of LBA0 / 1) in which no value is stored is stored.
  • Data transferred from the decompression VOL to the compression VOL is written to the final storage medium (111, 112) (referred to as destage).
  • the storage apparatus 101 maintains and manages management information called a logical-physical conversion table 3700 (FIG. 30) in order to manage the correspondence relationship between the compressed VOL and the final storage medium constituting the compressed VOL.
  • the LDEV # 3710 stores the identification number in the storage apparatus 101 of the compressed VOL
  • the LBA 3720 stores the LBA of the compressed VOL
  • PDEV # 3730 stores the identification number of the last storage medium constituting LDEV # 3710
  • LBA3740 stores the LBA of the last storage medium.
  • Parity 3750 and the PLBA 3760 the identification number of the final storage medium storing the parity corresponding to the area on the compressed VOL specified by the LDEV # 3710 and the LBA 3720 and the LBA of the final storage medium are stored.
  • FIG. 30 shows an example of a configuration in which the RAID level of the RAID group configured with the final storage medium group is configured to generate one parity such as RAID 4 and 5, and a RAID level (a plurality of parity levels generated) In the case of RAID 6), Parity 3750 stores the identification numbers of a plurality of final storage media.
  • Cache LBA1 (770) an area (LBA space) of the NVM module 126 for temporarily storing the parity generated on the storage controller 110 is stored.
  • the compression information # 3780 and the LBA 3790 store the identification number and LBA of the final storage medium that stores the compression information corresponding to the area on the compression VOL specified by the LDEV # 3710 and the LBA 3720.
  • the storage apparatus 101 receives a write command from the host apparatus 103
  • the write data is stored in the NVM module 126 via the DRAM 125.
  • data compression is performed in the NMV module 126 and the compressed data is stored in the FM 420.
  • the storage apparatus 101 instructs the NVM module 126 to generate parity using the compressed data stored earlier, and causes the NVM module 126 to generate parity.
  • the compressed data and parity are read from the NVM module 126 and written to the final storage medium.
  • the processor 121 of the storage controller 110 specifies the write data, the LUN (Logical Unit Number) of the write destination LU and the LU area from the host apparatus 103.
  • An address (LBA) is received (hereinafter, the LUN and LBA are collectively referred to as “write address”).
  • the write data is once recorded in the DRAM 125 of the storage controller 110 as in the data flow 311 shown in FIG. If there is a function of transferring data directly from the Host interface 124 to the NVM module 126, the process of recording in the DRAM 125 can be omitted.
  • the processor 121 performs a cache hit determination using the write address acquired in S2001.
  • the cache hit determination is performed with reference to the inter-volume mapping information 3000.
  • the write target area indicated by the write address is staged on the cache configured by the NVM module 126 (when a value is stored in Cache LBA 0 (3030) of the inter-volume mapping information 3000)
  • a write hit occurs.
  • the target indicated by the write address is not on the cache configured by the NVM module 126 (when no value is stored in Cache LBA 0 (3030) of the inter-volume mapping information 3000)
  • a write miss occurs.
  • S2003 is a step that branches depending on the determination result of S2002. If the result of S2001 is a cache hit, the process proceeds to S2004. If the result of S2001 is a cache miss, the process proceeds to S2009.
  • the processor 121 acquires LBA0 of the area staged on the NVM module 126 (acquires Cache LBA0 (3030) of the inter-volume mapping information 3000).
  • step S2009 following S2003 the processor 121 newly acquires LBA0 of the NVM module 126 that records the write data.
  • the processor 121 refers to the free LBA0 list 3510 and acquires an unused free LBA0. At the same time, the acquired free LBA0 is deleted from the free LBA0 list 3510.
  • the processor 121 specifies LBA0 acquired in S2004 or S2009, and writes data to the NVM module 126 using the write command 1010 shown in FIG.
  • the processor 121 acquires the write response information 1020 shown in FIG. 10 from the NVM module 126, and the data size after compression of the data written in S2005 from the compressed data length 1023 field of the write response information 1020. To get.
  • the processor 121 updates the management information and returns to the upper level device 103 that the write processing has been completed.
  • One piece of management information is inter-volume mapping information 3000, and the information acquired in S2006 is registered in size 3040.
  • the newly acquired LBA0 information is stored in Cache LBA0 (3030) of the inter-volume mapping information 3000.
  • the processor 121 determines whether or not the total amount of data for which no RAID parity has been generated among the compressed data held on the cache configured by the NVM module 126 has reached a threshold value or more. When the total amount of data for which RAID parity is not generated among the compressed data held in the cache exceeds a threshold value, the processor 121 generates parity for the data recorded after being compressed in the cache. It judges that it is necessary, and makes a transition to a parity generation operation. On the other hand, if the total amount of data for which no RAID parity is generated among the compressed data held in the cache is less than or equal to the threshold value, the processor 121 determines that parity generation is not necessary and ends the write data cache storage operation. To do. The above is the write data cache storage operation in this embodiment.
  • the processor 121 refers to the inter-volume mapping information 3000, and is stored in the decompressed VOL 5000 (more precisely, it is configured by the NVM module 126 as a result of being written to the decompressed VOL 5000.
  • Data stored in the cache area (LBA 0 space) to be parity generation target data is selected.
  • the processor 121 selects data for parity generation according to a predetermined rule.
  • This rule is, for example, a rule that determines data that has a long elapsed time since being recorded in the cache area, data that has a relatively low update frequency, and the like as a parity generation target. For example, it can be determined with reference to the last access time stored in the status information 3050 of the inter-volume mapping information 3000.
  • the accurate data size after compression of the data selected by the processor 121 in S2101 (recorded in the area of the LBA0 space) is acquired.
  • the processor 121 issues an LBA0 size acquisition command 1110 illustrated in FIG. 15 to the NVM module 126 for each of a plurality of LBA0 areas selected as parity generation target areas. Then, the processor 121 individually acquires the compressed data size by an LBA0 size acquisition response.
  • the processor 121 associates the data selected in S2101 with the LBA of the compressed VOL.
  • Various methods can be used to select the LBA of the compressed VOL. In this embodiment, a method of additionally writing each write data to the compressed VOL is adopted. For this reason, the data selected in S2101 is associated in order from the next address of the LBA associated with the compressed VOL last time. The result of the association is recorded in the LBA 3070 of the volume mapping information 3000.
  • the data selected in S2101 is stored in the NVM module 126 (LBA0 space), but since the association with the LBA1 space is not performed, the processor 121 stores the selected data.
  • the assigned LBA0 space area is mapped to the LBA1 space area.
  • the processor 121 refers to the free LBA1 list 3520, acquires the LBA1 area to which the data size after compression acquired in S2102 can be mapped, and records it in Cache LBA1 (3080) of the inter-volume mapping information 3000.
  • the compressed data size is a size corresponding to a plurality of sectors, it is necessary to acquire a plurality of LBA1s from the free LBA1 list 3520, but LBA1s having consecutive addresses are acquired.
  • the LBA1 mapping command shown in FIG. 17 specifying each LBA0 and each LBA1 is transferred to the NVM module 126, and the LBA0 data (compressed data) selected in S2101 is mapped to the LBA1 area.
  • the LBA0 start address of the LBA1 mapping command 1210 is Cache LBA0 (3030) of the inter-volume mapping information 3000
  • the LBA1 start address is Cache LBA1 (3080) of the inter-volume mapping information 3000
  • the LBA0 length is LBA0 length.
  • the processor 121 secures a recording destination area for the parity to be generated in the LBA1 space, which is a logical space provided by the NVM module 126, and stores information on the recording destination area (LBA1) in the cache LBA1 in the logical-physical conversion table 3700. Store in the column (3770).
  • S2105 is a step of determining whether to generate full stripe parity.
  • the processor 121 determines that full stripe parity generation is to be performed when all the data belonging to the same stripe column (all data necessary for generating parity) exists in the cache for the data constituting the parity, and S2106. Transition to. On the other hand, if there is only a part of data necessary for generating parity for the data constituting the parity, it is determined that update parity generation is to be performed, and the flow shifts to S2108.
  • a RAID parity is generated for the compressed data mapped to LBA1 in S2103, and the NVM module 126 is instructed to map the RAID parity to the parity LBA1 area secured in S2104. More specifically, in order to divide a data string composed of one or a plurality of compressed data mapped to LBA1 into data (compressed data) necessary to generate a fixed-size parity, and generate these parities Parity for the data string is generated based on the data necessary for the data.
  • the processor 121 stores the information of the storage address (LBA1) of the compressed data necessary for generating the parity and the information of the storage position (LBA1) of the generated parity as LBA1 of the full stripe parity generation command 1310 shown in FIG. A command specified in the start addresses 1315 to 1319 is created, and the command is issued to the NVM module 126.
  • S2108 is a parity generation process by the update parity generation method.
  • the processor 121 reads out the old compressed data and the old parity from the final storage medium and temporarily stores them in the DRAM 125. Subsequently, a recording destination area for old compressed data and old parity is secured in the LBA1 space which is a logical space provided by the NVM module 126, and the old compressed data and old data are stored in LBA1 using the write command 1010 shown in FIG. Write parity.
  • the processor 121 instructs generation of updated parity using the compressed data mapped to LBA1 in S2103, the old compressed data recorded in LBA1 in S2108, and the old parity.
  • the processor 121 creates an update parity generation command 1410 specifying the compressed data, the old compressed data, and the old parity area (the address of the LBA1 space) and issues it to the NVM module 126.
  • S2107 is a step of determining whether destage is necessary.
  • the processor 121 determines whether the compressed data on the cache that has generated the parity should be recorded in the final storage medium. This determination is made, for example, based on the cache free area. If the free area is less than or equal to the threshold value in the cache, the storage apparatus starts destage processing to create a free area. On the other hand, if it is determined that there is a sufficient free area in the cache, the parity generation process ends.
  • the destage operation of the present embodiment may be executed except when it is determined that the destage is necessary in step 2107 in the RAID parity generation operation shown in FIG. For example, it may be performed when there are few or no requests from the host device.
  • the destage operation of this embodiment is the processing 320 to 321 of the write data compression operation of this embodiment shown in FIG. The destage operation will be described with reference to the flowchart of FIG.
  • S2201 is a step of selecting data to be destaged from the NVM module 126 which is a cache device.
  • the processor 121 selects an area to be destaged from the LBA 1 to which the compressed data is mapped instead of the LBA 0 to which the decompressed image is mapped.
  • the destage is performed preferentially for data that is not frequently accessed from the host device or that is determined to be sequential write data.
  • the storage apparatus may map the compressed data of the data to LBA1 using the LBA1 mapping command 1210 and set the LBA1 area as a destage target. Good.
  • the processor 121 acquires the compression information necessary for decompressing the data in the LBA1 area selected in S2201 from the NVM module 126. Specifically, the processor 121 transfers the compression information acquisition command 1510 to the NVM module 126, and the NVM module 126 is necessary to expand the LBA1 area specified in S2201 to the compression information address specified in the command. The correct compression information.
  • the processor 121 acquires the compressed data of the LBA1 area selected in S2201.
  • the processor 121 uses the read command 1610 to specify the LBA1 address from which the compressed data is acquired by the LBA0 / 1 start address 1613.
  • the NVM module 126 transfers the compressed data associated with the LBA 1 to the storage device without decompressing it.
  • the compressed information acquired in S2202 and the compressed data acquired in S2203 are recorded in the final storage medium.
  • the processor 121 refers to the logical-physical conversion table 3700, records the compressed data in the area specified by PDEV # 3730 and LBA 3740 in the table 3700, and records the parity in the area specified by Parity 3750 and PLBA 3760. Further, the compression information is stored in the area specified by the compression information # 3780 and the LBA 3790.
  • the mapping of the LBA1 area (CBA LBA1 (3080) in the inter-volume mapping information 3000 and LBA1 specified in Cache LBA1 (3770) in the logical-physical conversion table 3700) is released in S2205.
  • the processor 121 designates the LBA1 area to be released using the mapping release command 1710.
  • the NVM module 126 updates the LBA1-PBA conversion table and cancels the association of the compressed data with LBA1.
  • the processor 121 updates the contents of the inter-volume mapping information 3000 and the logical-physical conversion table 3700, and ends the destage processing.
  • the storage apparatus responds by expanding the data in response to a read request from the host apparatus for the data recorded in the final storage medium by the write data compression operation of the storage apparatus.
  • the processor 121 receives a read request and a read target address from the host apparatus 103.
  • the processor 121 checks whether or not a cache (LBA0 space) is allocated to the read address of the decompressed VOL 5000 acquired in S2301, using the inter-volume mapping information 3000. This process is the same process as S2002.
  • S2303 is a step that branches depending on the condition determined in S2302. If it is determined in S2202 that there is a cache miss, the process proceeds to S2304. On the other hand, if the cache hit is determined in S2302, the process proceeds to S2311.
  • the processor 121 uses the inter-volume mapping information 3000 and the logical-physical conversion table 3700 to acquire the address of the final storage medium in which the compressed data of the read target area and the compression information necessary for the decompression are stored.
  • the storage apparatus acquires compressed information and compressed data from the final storage medium. The acquired data is temporarily stored in the DRAM 125.
  • the processor 121 acquires an unused LBA 1 from the free LBA 1 list 3520 and registers it in the inter-volume mapping information 3000. Further, the compressed data is stored in the NVM module 126 using the acquired LBA1 as the storage destination address. At this time, the compressed data is stored by issuing the write command 1010 of FIG. 10 to the NVM module 126. In S2307, the processor 121 transfers the compression information acquired in S2305 to the NVM module 126 using the compression information transfer command 1810.
  • the processor 121 maps the compressed data to LBA0 in order to decompress and acquire the compressed data written in S2306.
  • the processor 121 acquires an unused LBA 0 from the free LBA 0 list 3510 and registers it in the inter-volume mapping information 3000.
  • the NVM module 126 is instructed to map the acquired LBA 0 and the LBA 1 of the area where the compressed data is stored using the LBA 0 mapping command of FIG.
  • the NVM module 126 that has acquired the command refers to the compression information related to the compressed data associated with LBA1, and associates the compressed data with the area of LBA0 corresponding to the data size after expansion of the compressed data.
  • the processor 121 is a step in which the compressed data stored in the NVM module 126 in S2306 is expanded and acquired by designating and reading LBA0.
  • the NVM module 126 that has acquired the read command designating LBA0 acquires the compressed data associated with LBA0 from the FM, decompresses it with the compression / decompression unit, and transfers it to the storage controller 110 (the DRAM 125).
  • the decompressed data acquired in S2309 is transferred to the server as response data to the read request, and the process ends.
  • the processor 121 refers to the inter-volume mapping information 3000, acquires the LBA0 in which the read target area is already stored, and decompresses the compressed data from the NVM module 126 using the LBA0.
  • the data is read (S2309), the decompressed data is transferred to the server (S2310), and the process is terminated.
  • the storage apparatus 101 receives an I / O request (read, write command) from the host apparatus 103.
  • the write data is once recorded in the DRAM 125, and then the write data is transferred from the DRAM 125 to the data compression / decompression unit 418 of the NVM module 126. After being compressed, it is recorded in the FM 420 (data flows 311 to 313 in FIG. 3). Subsequently, parity generation is performed by the parity generation unit 419 from the compressed data recorded in the FM 420 (data flows 315 to 316 in FIG. 3).
  • the write data (compressed data) and its parity are recorded on the final storage medium (111/112).
  • the NVM module 126 since the NVM module 126 has a compression function and a parity generation function, data transfer (data flows 313 to 316 in FIG. 3) that occurs along with data compression and parity generation is It is performed only within the NVM module 126 and does not affect the outside of the NVM module 126.
  • the compression function and the parity generation function exist outside the NVM module 126, for example, when compression and parity are generated by the processor 121, the NVM module 126 (or DRAM 125) and the processor 121 each time compression or parity generation is performed.
  • the storage apparatus 101 of the present invention has an advantage that the consumption of the data transfer band between each element in the storage controller 110 can be suppressed by incorporating the compression function and the parity generation function in the NVM module 126.
  • Storage device 102 SAN 103: Host device 104: Management device 110: Storage controller 111: SSD 112: HDD 121: Processor 122: Internal SW 123: Disk interface 124: Host interface 125: DRAM 126: NVM module 410: FM controller 411: I / O interface 413: RAM 414: Switch 416: Data buffer 417: FM interface 418: Data compression / decompression unit 419: Parity generation unit

Abstract

 本発明のストレージ装置は、データ圧縮機能及びパリティ生成機能を備えたキャッシュ装置であるNVMモジュールを有する。上位装置からストレージ装置のボリュームに対して書き込まれたデータは、NVMモジュールに格納される際に圧縮された状態で格納され、また当該NVMモジュールに格納されたデータを上位装置が読み出す場合には、伸長された状態で読み出される。NVMモジュールはまた、圧縮されて格納されたデータを圧縮された状態で読み出す手段を有し、ストレージ装置はNVMモジュールに格納された圧縮データを最終記憶媒体に格納する際には、NVMモジュールのパリティ生成機能を用いてNVMモジュール内の圧縮データからパリティを生成し、圧縮された状態のデータとパリティを読み出して最終記憶媒体に格納する。

Description

ストレージ装置及びその制御方法
 本発明は、半導体記録装置を一次データの記憶装置として用いるストレージ装置、及び装置制御方法に関するものである。
 ストレージ装置は、内部に複数のHDDまたはSSDを搭載し、多量のデータを高信頼に保持する装置である。また、ストレージ装置は複数のHDDまたはSSDを並列に動作させ、サーバ等の上位装置から要求されるリード・ライトリクエストを処理する。
 ストレージ装置は一般にリクエスト処理性能(以降、単に性能と記す)を向上させる目的で、キャッシュというコンポーネントを備えている。キャッシュは、ストレージ装置において大きく2つの役割を担う。役割の一つは、リード・ライトアクセス頻度が相対的に高い領域をキャッシュに格納し、ストレージ装置の平均的な性能を向上させる役割である。2つ目は、サーバからストレージ装置へのライト要求受領時に、ライトデータを一時的に格納する役割である。キャッシュは最終記憶媒体と比べて書き込みが早く、キャッシュ格納完了(最終記憶媒体には未格納)時にサーバに対してライト完了応答を返すことでライト性能が向上する。尚、キャッシュに格納されたライトデータは、非同期でRAID(Redundant Arrays of Inexpensive Disks)におけるデータ保護用のパリティを生成した後、パリティと共にRAID構成された最終記憶媒体に記録される。
 こうしたキャッシュは、従来高速なDRAMにより構成されてきた。DRAMは、HDDと比べてリード・ライト動作が共に高速であり、キャッシュの記憶素子として好適であった。
 一方、近年半導体製造プロセスの微細化とメモリの多値化によりNAND型Flash Memory(以下、FMと記す)等の不揮発性半導体メモリ(以下NVM)のビットコストが低下し、幅広い用途で採用が進んでいる。その中の一つとして、FMをストレージ装置のキャッシュとして用いるキャッシュ装置が公開されている。(例えば特許文献1)
 NVMのビットコストは、従来キャッシュとして利用されてきたDRAMDRAMより廉価であり、キャッシュのビットコストを低下させることが可能である。また、データ圧縮機能を用いればさらにビットコストを低下させることができる。また、キャッシュ領域の低bitコスト化は、キャッシュ容量の増加を可能とし、多くのデータをキャッシュに記録することが可能となりストレージ装置の性能を向上させることが可能となる。
 また、最終記憶媒体についてもキャッシュ装置と同様に、ビットコスト低下の為にデータを圧縮して記録することが望ましい。
米国特許出願公開第2009/0216945号明細書
 先に述べたとおり、低ビットコスト化の観点から、キャッシュ装置に加えて最終記憶媒体にもデータを圧縮して格納することが望ましい。この場合、ストレージ装置は上位装置からのWriteデータを受領した際、データを圧縮して一旦キャッシュ装置に格納し、キャッシュ装置から最終記憶媒体に対してデータを転送する際にも、圧縮データを転送することとなる。
 しかし、データの圧縮は、圧縮演算処理でストレージ装置のプロセッサ負荷を増やし、また圧縮によるデータサイズの変化の管理についてもプロセッサの負荷を増大させる。
 また、従来技術に基づき、ストレージ装置に搭載可能なキャッシュ装置にてデータの圧縮演算処理を実施させることで、ストレージ装置の性能を、キャッシュ装置の追加のみで向上さようとした場合、圧縮後のデータサイズは、圧縮対象データ内容のランダム性に依存して変化するため、ストレージ装置が圧縮後のデータサイズを把握することが困難であった。また従来技術では、データ転送の際に、キャッシュ装置に非圧縮時のLogical Block Address空間を指定して記録するため、圧縮後の圧縮データを取得するインターフェースはなかった。
 さらに、ストレージ装置が、最終記憶媒体の記憶領域をRAID構成にて管理し、記録データに対してRAIDパリティを生成する場合、圧縮データを最終記憶媒体に転送するには、非圧縮のデータではなく圧縮後の圧縮データに対してパリティを生成しなければならない。しかし、従来技術ではパリティ生成対象となる圧縮データを指定する為のアドレス空間が無い為、圧縮データを指定してパリティを生成することは困難であった。
 このため、従来技術ではストレージ装置はキャッシュ装置にてデータを圧縮した場合であっても、キャッシュ装置から圧縮データを取得し最終記憶媒体に転送することは困難であった。
 前記目的を達成するため、本発明は、ストレージ装置のキャッシュ装置として動作するNVMモジュールの内部にて、データ圧縮と圧縮後の圧縮データに対するRAIDパリティを生成することを特徴とする。本発明のストレージ装置の有するNVMモジュールは、データ圧縮/伸長機能と、パリティ生成機能とを内部に備え、ストレージ装置のコントローラ(プロセッサ)からの指示に応じて、NVMモジュールにデータを格納する際にデータを圧縮して格納し、圧縮されたデータを用いたパリティ生成を行う。
 また、本発明のNVMモジュールは、上位の接続装置(ストレージ装置のコントローラ)に対して、二つの論理空間を提供することを特徴とするものである。ストレージ装置のコントローラがNVMモジュールに対して、第一の論理空間を指定したデータリード指示を発行した場合には、NVMモジュールは、NVMモジュール内に圧縮された状態で格納されているデータを伸長した状態で外部に送出する。また、コントローラがNVMモジュールに対して第二の論理空間を指定したデータリード指示を発行した場合には、NVMモジュールは、NVMモジュール内で圧縮されて格納されているデータをそのままの状態(非伸長の状態)で送出する。
 本発明によれば、ストレージ装置において、サーバから受領したライトデータを圧縮して最終記憶媒体に記録する際、キャッシュ装置の内部にてデータ圧縮と圧縮データに対するRAIDパリティの生成を行うことができ、ストレージ装置のプロセッサの指示が必要なデータ転送回数を削減できるため、プロセッサ負荷を軽減することが可能となる。
図1は、本発明に係るストレージ装置を中心とした、コンピュータシステムの概略構成を示した図である。 図2は、ストレージ装置が上位装置に提供する記憶領域(ボリューム)とキャッシュとの関係を示す概念図である。 図3は、ストレージ装置が上位装置からライトコマンドを受信した場合のデータの流れを示した図である。 図4は、NVMモジュール126の内部構成を示した図である。 図5は、FM420の内部構成を示した図である。 図6は、物理ブロック502の内部構成を示した図である。 図7は、本実施例のNVMモジュールがストレージコントローラに提供する論理空間であるLBA0空間及びLBA1空間と、物理領域指定用アドレス空間であるPBA空間との対応付けの概念を示した図である。 図8は、本実施例のNVMモジュールが管理するLBA0-PBA変換テーブル810とLBA1-PBA変換テーブル820の内容を示した図である。 図9は、本実施例のNVMモジュールが用いるブロック管理情報を示した図である。 図10は、本実施例におけるNVMモジュールが受け付ける、ライトコマンドとそのライトコマンドに対する応答情報を示した図である。 図11は、本実施例におけるNVMモジュールがライトコマンドを受け付けた時にNVMモジュールが実施する処理の流れを示した図である。 図12は、本実施例におけるNVMモジュールが実施する、変換テーブル更新処理の流れを示した図である。 図13は、本実施例におけるNVMモジュールが受け付ける、リードコマンドとそのリードコマンドへの応答情報を示した図である。 図14は、本実施例におけるNVMモジュールがリードコマンドを受け付けた時にNVMモジュールが実施する処理の流れを示した図である。 図15は、本実施例におけるNVMモジュールが受け付ける、圧縮データサイズ取得コマンドとその圧縮データサイズ取得コマンドへの応答情報を示した図である。 図16は、本実施例におけるNVMモジュールが圧縮データサイズ取得コマンドを受け付けた時にNVMモジュールが実施する処理の流れを示した図である。 図17は、本実施例におけるNVMモジュールが受け付ける、LBA1マッピングコマンドと、そのLBA1マッピングコマンドに対する応答情報を示した図である。 図18は、本実施例におけるNVMモジュールが受け付ける、フルストライプパリティ生成コマンドとフルストライプパリティ生成コマンドへの応答情報を示した図である。 図19は、本実施例におけるNVMモジュールが受け付ける、更新パリティ生成コマンドと更新パリティ生成コマンドへの応答情報を示した図である。 図20は、本実施例におけるNVMモジュールが受け付ける、圧縮情報取得コマンドと圧縮情報取得コマンドへの応答情報を示した図である。 図21は、本実施例におけるNVMモジュールが受け付ける、マッピング解除コマンドとマッピング解除コマンドへの応答情報を示した図である。 図22は、本実施例におけるNVMモジュールが受け付ける、圧縮情報転送コマンドと圧縮情報転送コマンドへの応答情報を示した図である。 図23は、本実施例におけるNVMモジュールが受け付ける、LBA0マッピングコマンドとLBA0マッピングコマンドへの応答情報を示した図である 図24は、本実施例におけるストレージ装置で行われるライトデータキャッシュ格納処理のフローチャートである。 図25は、本実施例におけるストレージ装置で行われるパリティ生成処理のフローチャートである。 図26は、本実施例におけるストレージ装置で行われるデステージ処理のフローチャートである。 図27は、本実施例におけるストレージ装置で行われるリード処理のフローチャートである。 図28は、ボリューム間マッピング情報3000の例を示す。 図29は、フリーリストの例を示す。 図30は、論理物理変換テーブル3700の例を示す。
 次に、本発明の実施形態を図面に基づいて説明する。尚、本発明は、以下に説明する実施形態に限定されるものではない。尚、半導体記録素子としてNAND型フラッシュメモリ(以下、FM)を例に説明するが、本発明はFMに限定されるものではなく、不揮発性のメモリの全てを対象とする。また、本実施例では、データの圧縮を専用のハードウェア回路で実施する形態について記述するが、本発明はこの実施例に限定されるものではなく、汎用プロセッサによるデータ圧縮演算処理にてデータを圧縮するとしてもよい。また、本実施例では、パリティ(冗長データ)を専用のハードウェア回路で実施する形態について記述するが、本発明は、この実施例に限定されるものではなく、汎用プロセッサによるパリティ生成演算処理にてRAIDパリティを生成するとしてよい。
(1)ハードウェア構成
(1-1)ストレージ装置の構成
 図1は、本発明に係る、FMを記録媒体とした半導体記録装置(以下、「NVMモジュール」と記す)を含むストレージ装置(ストレージシステム)を中心とした、コンピュータシステムの概略構成を示す図である。図1に示すNVMモジュール126は、本発明が適用されるFMを記録媒体とした半導体記録装置で、ストレージ装置内のキャッシュ装置として用いられる。
 ストレージ装置101は複数のストレージコントローラ110を備えている。各ストレージコントローラは、上位装置との接続を行うホストインターフェース124と記録装置との接続を行うディスクインターフェース123を備えている。ホストインターフェース124は例えば、FC(Fibre Channel)、iSCSI(internet Small Computer System Interface)、FCoE(Fibre Channel over Ether)等のプロトコルに対応したデバイスが挙げられ、ディスクインターフェース107は例えば、FC、SAS(Serial Attached SCSI)、SATA(Serial Advanced Technology Attachment)、PCI(Peripheral Component Interconnect)-Express等の各種プロトコルに対応したデバイスが挙げられる。更に、ストレージコントローラ110はプロセッサ121やメモリ125などのハードウェア資源を備え、プロセッサの制御の下、上位装置124からのリード/ライト要求に応じて、SSD111やHDD112等の最終記憶媒体へのリード/ライト要求を行う。また、NVMモジュール126を内部にもち、内部SW122を介してプロセッサ121から制御可能となっている。
 また、ストレージコントローラ110はRAID(Redundant Arrays of Inexpensive Disks)パリティ生成機能及び、RAIDパリティによるデータ復元機能を備え、複数のSSD111や複数のHDD112を任意の単位でRAIDグループとして管理する。上位装置103からのデータライト要求を受信した時には、ライトデータからRAIDパリティを生成し、ライトデータとRAIDパリティとを最終記憶媒体(SSD111またはHDD112)にライトする。また、上位装置からのデータリード要求受信時には、最終記憶媒体からデータをリードした後、データ損失の有無を検査、データ損失が検出された場合にはRAIDパリティを用いてデータを復元し、上位装置にデータを転送する。
 また、ストレージコントローラ110は記録装置の障害、使用状況、動作状況等を監視及び管理する機能を持っている。
 ストレージ装置101は管理装置104とネットワークを介して接続している。このネットワークは例えばLAN(Local Area Network)などが挙げられる。このネットワークは図1では簡略化の為に省略したが、ストレージ装置101内部の各ストレージコントローラ110に接続している。尚、このネットワークはSAN102と同じネットワークによって接続してもよい。
 管理装置104は、プロセッサやメモリ、ネットワークインターフェース、ローカル入出力デバイス等のハードウェア資源と、管理プログラム等のソフトウェア資源を備えたコンピュータである。管理装置104は、プログラムによってストレージ装置から情報を取得し、管理画面を表示する。システム管理者は、管理装置に表示された管理画面を用いて、ストレージ装置101の監視、及び運用における制御を行う。
 SSD111は、ストレージ装置101内に複数(例えば16個)あり、同じくストレージ装置内に複数あるストレージコントローラ110とディスクインターフェース123を介して接続されている。SSD111は、ストレージコントローラからのライト要求に応じて転送されるデータを格納し、リード要求に応じて格納済みのデータを取り出しストレージコントローラに転送する。尚、このときディスクインターフェース107は、リード/ライト要求する論理的な格納位置を論理アドレス(以下LBA:Logical Block Address)によって指定する。また、複数のSSD 111は複数のRAIDグループに分割して管理されており、データ損失時に損失データの復元が可能な構成としている。
 HDD(Hard Disk Drive)112は、ストレージ装置101内に複数(例えば120個)あり、SSD111と同様に、同じストレージ装置内に複数あるストレージコントローラ110とディスクインターフェース123を介して接続されている。HDD112は、ストレージコントローラ110からのライト要求に応じて転送されるデータを格納し、リード要求に応じて格納済みのデータを取り出しストレージコントローラ110に転送する。尚、このときディスクインターフェース123は、リード/ライト要求する論理的な格納位置を論理アドレス(以下LBA:Logical Block Address)によって指定する。また、複数のHDD110~111は複数のRAIDグループに分割して管理されており、データ損失時に損失データの復元が可能な構成としている。
 ストレージコントローラ110は、ホストインターフェース124を介して、上位装置103と接続するSAN102と接続する。尚、図1では簡略化の為に省略しているが、各ストレージコントローラ110は、ストレージコントローラ110間でデータや制御情報を相互に通信する接続パスも備えている。
 上位装置103は、例えば業務システムの中核をなすサーバコンピュータ、ファイルサーバ等が相当する。上位装置103は、プロセッサやメモリ、ネットワークインターフェース、ローカル入出力デバイス等のハードウェア資源を備え、デバイスドライバやオペレーティングシステム(OS)、アプリケーションプログラムなどのソフトウェア資源を備えている。これにより上位装置103は、プロセッサ制御の下、各種プログラムを実行することで、ストレージ装置101との通信及び、データのリード/ライト要求を行う。また、プロセッサ制御の下、各種プログラムを実行することで、ストレージ装置101の使用状況、動作状況等の管理情報を取得する。また、記録装置の管理単位や記録装置制御方法、データ圧縮設定等を指定し、変更を行うことができる。
(1-2)NVMモジュールの構成
 次に図4を用いて、NVMモジュール126の内部構成について説明する。
 NVMモジュール126は内部に、FMコントローラ(FM CTL)410と複数(例えば32個)のFM420を備える。
 FMコントローラ410は、その内部にプロセッサ415、RAM(DRAM)413、データ圧縮/伸長ユニット418、パリティ生成ユニット419、データバッファ416、I/Oインターフェース(I/F)411、FMインターフェース(I/F)417、及びデータ転送を相互に行うスイッチ414を備えている。
 スイッチ414は、FMコントローラ410内のプロセッサ415、RAM413、データ圧縮/伸長ユニット418、パリティ生成ユニット419、データバッファ416、I/Oインターフェース411、FMインターフェース417を接続し、各部位間のデータをアドレスまたはIDによってルーティングし転送する。
 I/Oインターフェース411は、ストレージ装置101内のストレージコントローラ110が備える内部スイッチ122と接続し、スイッチ414を介してフラッシュコントローラ410の各部位と接続する。I/Oインターフェース411は、ストレージ装置101内のストレージコントローラ110が備えるプロセッサ121から、リード/ライト要求と要求対象とする論理的な格納位置(LBA:Logical Block Address)、さらにライト要求時にはライトデータを受領し、FM420に記録する。また、I/Oインターフェース411は、ストレージコントローラ110が備えるプロセッサ121からの指示を受領し、FMコントローラ内部410のプロセッサ415に割り込みを発行する。さらに、I/Oインターフェース411は、ストレージコントローラよりNVMモジュール126の制御用コマンド等も受領し、そのコマンドに応じてNVMモジュール126の動作状況、利用状況、現在の設定値等を、ストレージコントローラ110に通知可能である。
 プロセッサ415は、スイッチ414を介してFMコントローラ410の各部位と接続し、RAM413に記録されたプログラム及び管理情報を基にFMコントローラ410全体を制御する。また、プロセッサ415は、定期的な情報取得、及び割り込み受信機能によって、フラッシュコントローラ410全体を監視する。
 データバッファ416は、フラッシュコントローラ410でのデータ転送処理途中の一時的なデータを格納する。
 FMインターフェース417は、複数バス(例えば16)によってFM420と接続する。各バスには複数(例えば2)のFM420を接続し、同じくFM420に接続されるCE(Chip Enable)信号を用い、同一バスに接続された複数のFM420を独立して制御する。
 FMインターフェース417は、プロセッサ415より指示されるリード/ライト要求に応じて動作する。このときFMインターフェース417はプロセッサ415より要求対象をチップ、ブロック、ページ、の各番号として指示される。リード要求であればFM420から格納データをリードしデータバッファ416に転送し、ライト要求であれば格納すべきデータをデータバッファ416から呼び出し、FM420に転送する。
 また、FMインターフェース417はECC生成回路、ECCによるデータ損失検出回路、ECC訂正回路を有し、データ書き込み時にはデータに対してECCを付加して書き込む。またデータ呼び出し時にECCによるデータ損失検出回路によって、FM420からの呼び出しデータを検査し、データ損失が検出された際には、ECC訂正回路によってデータ訂正を行う。
 データ圧縮/伸長ユニット418は、可逆圧縮のアルゴリズムを用いたデータ圧縮機能を有する。またデータ圧縮アルゴリズムとして複数種のアルゴリズムを有し、さらに圧縮レベルの変更機能も備える。データ圧縮/解凍ユニット418は、プロセッサ415からの指示に従って、データバッファ416からデータをリードし、可逆圧縮のアルゴリズムによりデータ圧縮演算もしくはデータ圧縮の逆変換であるデータ伸長演算を行い、その結果を再度データバッファにライトする。尚、データ圧縮/伸長ユニットは、論理回路として実装してもよいし、圧縮/伸長のプログラムをプロセッサで処理することで、同様の機能を実現してもよい。
 パリティ生成ユニット419は、RAID技術で必要とされる冗長データであるパリティの生成機能を有しており、具体的には、RAID5、6で用いられるXOR演算、RAID6で用いられるリードソロモン符号またはEVENODD法により算出される対角パリティ(Diagonal Parity)の生成機能を有している。パリティ生成ユニット419は、プロセッサ415からの指示に従って、データバッファ416からパリティ生成対象となるデータをリードし、前述のパリティ生成機能により、RAID5またはRAID6のパリティを生成する。
 以上説明した、スイッチ414、ディスクインターフェース411、プロセッサ415、データバッファ416、FMインターフェース417、データ圧縮/伸長ユニット418、パリティ生成ユニット419は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)として、一つの半導体素子内で構成してもよいし、複数の個別専用IC( Integrated Circuit)を相互に接続した構成であってもよい。
 RAM413は具体的にはDRAMなどの揮発性メモリが挙げられる。RAM413は、NVMモジュール126内で用いられるFM420の管理情報、各DMAが用いる転送制御情報を含んだ転送リスト等を格納する。尚、データを格納するデータバッファ416の役割の一部または全てをRAM413に含ませて、RAM413をデータ格納に用いる構成としてもよい。
 ここまで、図4を用いて本発明が適用されるNVMモジュール126の構成について説明した。尚、本実施例では図4に示すようにフラッシュメモリ(Flash Memory)を搭載したNVMモジュール126について記述しているが、NVMモジュール126に搭載する不揮発性メモリはフラッシュメモリに限定されるものではない。Phase Change RAMやResistance RAMであってもよい。また、FM420の一部または全部を揮発性のRAM(DRAM等)とする構成であってもよい。
 次に、図5を用いてFM420について説明する。FM420内の不揮発性メモリ領域は、複数(例えば、4096個)のブロック(物理ブロック)502で構成され、格納されたデータは物理ブロック単位で消去される。またFM420は、I/Oレジスタ501を内部に持つ。I/Oレジスタ501は、物理ページサイズ(例えば8KB)以上の記録容量を持つレジスタである。
 FM420は、FMインターフェース217からのリード/ライト要求の指示に従って動作する。ライト動作の流れは以下の通りである。FM420はまず、FMインターフェース417より、ライトコマンドと要求対象の物理ブロック、物理ページを受信する。次に、FMインターフェース417より転送されるライトデータをI/Oレジスタ501に格納する。その後、I/Oレジスタ501に格納されたデータを、指定された物理ページにライトする。
 リード動作の流れは以下の通りである。FM420はまず、FMインターフェース417からリードコマンドと要求対象の物理ブロック、ページを受信する。次に、指定された物理ブロックの物理ページに格納されたデータをリードしI/Oレジスタ501に格納する。その後、I/Oレジスタ501に格納されたデータをFMインターフェース417に対して転送する。
 次に、図6を用いて物理ブロック502について説明する。物理ブロック502は、複数(例えば128)のページ601に分かれており、格納データの読み出しやデータの書き込みは、ページ単位で処理される。また、ブロック502内の物理ページ601に対して書き込みを行う順序は固定されており、先頭のページから順に書き込みが行われる。つまりPage1、Page2、Page3…の順にデータが書き込まれなければならない。また、書き込み済みのページ601への上書きは原則として禁止されており、書き込み済みのページ601にデータを上書きする場合、そのページ601が属するブロック502内のデータをすべて消去した後でなければ、そのページ601に対してデータを書き込むことができない。
(1-3)NVMモジュールのLBAとPBA対応付けの概要
 続いて、本実施例においてNVMモジュール126がストレージ装置101に提供する記憶空間について説明する。本実施例におけるNVMモジュール126は、複数のFM(チップ)420を搭載し、複数のブロック、複数のページにより構成される記憶領域を管理し、自身が接続されるストレージコントローラ110(のプロセッサ121)に対して、論理的な記憶空間を提供する。ここで、「記憶空間を提供する」とは、ストレージコントローラ110に対してアクセスさせる各記憶領域にアドレスが付けられており、NVMモジュール126が接続されるストレージコントローラ110のプロセッサ121が、当該アドレスを指定したアクセス要求(コマンド)を発行することにより、当該アドレスで特定された領域に格納されているデータの参照・更新が可能な状態にされていることを意味する。FM420により構成される物理記憶領域は、NVMモジュール126内部のみで用いるアドレス空間に一意に対応づけて管理される。以降、このNVMモジュール126内部のみで用いる物理領域指定用アドレス空間(物理アドレス空間)を、PBA(Physical Block Address)空間と呼び、PBA空間内の各物理記憶領域(セクタ。本発明の実施例では、1セクタは512バイトとする)の位置(アドレス)をPBA(Physical Block Address)と記す。本実施例のNVMモジュール126は、このPBAと、ストレージ装置に提供する論理記憶空間の各領域のアドレスであるLBA(Logical Block Address)との対応付けを管理する。
 従来のSSD等の記憶装置は、記憶装置が接続される上位装置(ホスト計算機等)に対して一つの記憶空間を提供している。一方で本実施例のNVMモジュール126は、二つの論理記憶空間を有し、NVMモジュール126が接続されるストレージコントローラ110に2つの論理記憶空間を提供することを特徴とする。この2つの論理記憶空間LBAとPBAの関係について図7を用いて説明する。
 図7は、本実施例のNVMモジュール126がストレージコントローラ110に提供する論理記憶空間であるLBA0空間701及びLBA1空間702と、PBA空間703との対応付けの概念を示した図である。
 NVMモジュール126は、LBA0空間701とLBA1空間702という2つの論理記憶空間を提供する。なお、これ以降、LBA0空間701上の各記憶領域に付されたアドレスのことを「LBA0」または「LBA0アドレス」と呼び、LBA1空間702上の各記憶領域に付されたアドレスのことを「LBA1」または「LBA1アドレス」と呼ぶ。また、本発明の実施例では、LBA0空間701のサイズ及びLBA1空間702のサイズはいずれも、PBA空間のサイズ以下とするが、LBA0空間701のサイズがPBA空間のサイズよりも大きい場合でも、本発明は有効である。
 LBA0空間701は、FM420により構成される物理記憶領域に記録された圧縮データを非圧縮データとして、ストレージコントローラ110のプロセッサ121にアクセスさせるための論理記憶空間である。プロセッサ121がLBA0空間701上のアドレス(LBA0)を指定してNVMモジュール126にライト要求を発行すると、NVMモジュール126は、ストレージコントローラ110からライトデータを取得し、データ圧縮/伸長ユニット418にて圧縮した後、NVMモジュール126が動的に選択したPBAにより指定されるFM420上の物理記憶領域にデータを記録し、LBA0とPBAの対応付けを行う。また、プロセッサ121がLBA0を指定してNVMモジュール126にリード要求を発行すると、NVMモジュール126は、LBA0に対応付けられたPBAが示すFM420の物理記憶領域からデータ(圧縮データ)を取得し、データ圧縮/伸長ユニット418にて伸長した後、この伸長したデータをリードデータとしてストレージコントローラ110に転送する。尚、このLBA0とPBAとの対応づけは、後述するLBA0-PBA変換テーブルにて管理する。
 LBA1空間702は、FM420により構成される物理記憶領域に記録された圧縮データを圧縮データのまま(伸長せず)、ストレージコントローラ110にアクセスさせるための論理記憶空間である。ストレージコントローラ110のプロセッサ121が、LBA1を指定してNVMモジュール126にライト要求を発行すると、NVMモジュール126は、ストレージコントローラ110よりデータ(圧縮済みのライトデータ)を取得し、NVMモジュール126が動的に選択したPBAにより指定されるFMの記憶領域にデータを記録し、LBA1とPBAの対応付けを行う。また、プロセッサ121がLBA1を指定してリード要求を発行すると、NVMモジュール126は、LBA1に対応付けられたPBAが示すFM420の物理記憶領域よりデータ(圧縮データ)を取得し、ストレージコントローラ110にリードデータとして圧縮済みデータを転送する。尚、このLBA1とPBAとの対応づけは、後述するLBA1-PBA変換テーブルにて管理する。
 尚、図7に示すとおり、圧縮データ713が記録された物理記憶領域であるPBA空間上の領域は、同時にLBA0空間の領域とLBA1空間の領域との両方に対応づけられることもある。例えば、圧縮データ713の伸長されたデータがLBA0空間上に伸長データ711として対応づけられ、圧縮データ713がそのままLBA1空間上に圧縮データ712として対応づけられる。たとえばプロセッサ121が、LBA0(仮にLBA0が0x00000001000とする)を指定してNVMモジュール126にデータをライトすると、当該データはNVMモジュール126内のデータ圧縮/伸長ユニット418により圧縮され、圧縮されたデータはNVMモジュール126が動的に選択したPBA空間上(具体的には、FM420の複数のページ中の、いずれかの未書き込みページ)に配置される。またそのデータはLBA0空間のアドレス0x00000001000に対応付けられた状態で管理される。その後プロセッサ121が、0x00000001000に対応づけられたデータを、LBA1空間のアドレス(仮に0x80000000010とする)に対応付ける要求をNVMモジュール126に発行すると、このデータはLBA1空間にも対応づけられ、プロセッサ121がLBA1アドレス0x80000000010のデータをリードする要求(コマンド)をNVMモジュール126に対して発行すると、プロセッサ121は、自身がLBA0アドレス0x00000001000に対して書き込んだデータを、圧縮した状態で読み出すことが出来る。
 本実施例におけるストレージ装置101は、LBA0を指定してNVMモジュール126にライトしたデータをLBA1空間上領域に対応付け、LBA1を指定して、当該データに対応するRAIDパリティ生成の指示を行うことで、圧縮データに対するRAIDパリティ生成を可能とする。
 なお、本発明の実施例におけるNVMモジュール126で生成される圧縮データのサイズは、512バイト(1セクタ)の倍数のサイズに限定され、また非圧縮データのサイズを超えないサイズになるようにしている。つまり4KBのデータを圧縮した場合、最小サイズが512バイトで、最大サイズが4KBになる。
(1-4)LBA-PBA変換テーブル
 続いて、本実施例におけるNVMモジュール126が制御に用いる管理情報について説明する。
 NVMモジュール126が用いる管理情報として、まずLBA0-PBA変換テーブル810とLBA1-PBA変換テーブル820について図8を用いて説明する。
 LBA0-PBA変換テーブル810は、NVMモジュール126内のDRAM413内に格納されており、NVMモジュールLBA0(811)、NVMモジュールPBA(812)、PBA長(813)の情報から構成される。NVMモジュール126のプロセッサ2415は、上位装置からリード要求時に指定されるLBA0を受信した後、そのLBA0を用いて、実際のデータが格納されている場所を示すPBAを取得する。
 また、更新ライト時には、NVMモジュール126は更新データ(ライトデータ)を更新前データが記録されたPBAとは異なる物理記憶領域に記録し、更新データを記録したPBAとPBA長を、LBA0-PBA変換テーブルの該当する箇所に記録し、LBA0-PBA変換テーブルを更新する。NVMモジュール126はこのように動作することによって、LBA0空間上領域のデータの上書きを(疑似的に)可能にしている。
 NVMモジュールLBA0(811)は、NVMモジュール126が提供するLBA0空間の論理領域を4KB単位ごとに順に並べたものである(LBA0空間の各アドレス(LBA0)は、1セクタ(512バイト)ごとに付されている)。本実施例におけるLBA0-PBA変換テーブル810では、NVMモジュールLBA0(811)とNVMモジュールPBA(812)との対応付けが4KB(8セクタ)単位で管理されていることを意図している。但し、このNVMモジュールLBA0(811)とNVMモジュールPBA(812)との対応付けを4KB単位以外の任意の単位で管理してもよい。
 NVMモジュールPBA(812)は、NVMモジュールLBA0(811)に対応付けられたPBAの先頭アドレスを格納するフィールドである。本実施例では、PBA空間の物理記憶領域を512バイト(1セクタ)毎に分割して管理する。図8の例では、NVMモジュールLBA0(811)「0x000_0000_0000」に対応付けられたPBA(Physical Block Address)として、「XXX」という値(PBA)が対応付けられている。この値は、NVMモジュール126が搭載する複数のFM420のうちの、ある記憶領域を一意に示すアドレスである。これにより、リードリクエスト先の先頭アドレス(LBA0)として「0x000_0000_0000」を受領した場合、NVMモジュール126内の物理記憶領域(リード先)の先頭アドレス(PBA)として「XXX」が取得される。また、NVMモジュールLBA0(811)で特定されるLBA0に対応付けられたPBAが無い場合、NVMモジュールPBA(812)には「未割当」であることを示す値(NULLあるいは0xFFFFFFFFなど)が格納される。
 PBA長813には、NVMモジュールLBA0(811)に指定された4KBのデータの、実際の格納サイズが記録される。なお、格納サイズはセクタ数にて記録されている。図8に示す例では、LBA0「0x000_0000_0000」を開始アドレスとする4KB(LBA0空間としては8sector)のデータは、PBA長として「2」すなわち512B×2=1KBの長さで、記録されていることを示している。従って、NVMモジュールPBA(812)の情報と組み合わせるとLBA0[0x000_0000_0000]を開始アドレスとする4KBのデータは、PBA「XXX」から「XXX+1」の1KBの領域に圧縮して格納されていることを表している。なお、本実施例におけるNVMモジュール126では、ストレージコントローラ110のプロセッサ121からライト指示された非圧縮データを、4KB単位で圧縮する。たとえばプロセッサ121から、LBA0空間のアドレス(0x000_0000_0000)を開始アドレスとする8KBのデータ(非圧縮データ)のライト要求があった場合、(LBA0空間の)アドレス範囲0x000_0000_0000~0x000_0000_0007の4KBのデータを単位として圧縮して圧縮データを生成し、続いてアドレス範囲0x000_0000_0008~0x000_0000_000Fの4KBのデータを単位として圧縮して圧縮データを生成し、それぞれの圧縮データをFM420の物理記憶領域に書き込む。ただし、本発明はデータを4KB単位で圧縮する態様に限定されるものではなく、その他の単位でデータが圧縮される構成であっても本発明は有効である。
 続いて、LBA1-PBA変換テーブル820について説明する。LBA1-PBA変換テーブル820は、NVMモジュール126内のDRAM413内に格納されており、NVMモジュールLBA1(821)、NVMモジュールPBA(822)の2つの情報から構成される。NVMモジュール126のプロセッサ245は、上位装置からリード要求時に指定されるLBA1を受信した後、受信したLBA1を、LBA1-PBA変換テーブル820を用いて、LBA1実際のデータが格納されている場所を示すPBAに変換する。
 NVMモジュールLBA1(821)は、NVMモジュール126が提供するLBA1空間の論理領域をセクタごとに順に並べたものである(NVMモジュールLBA1(821)内の数値1は、1セクタ(512バイト)を意味する)。これは、本実施例におけるNVMモジュール126が、NVMモジュールLBA1(821)とNVMモジュールPBA(822)との対応付けを512B単位で管理する前提で記載されているためだが、このNVMモジュールLBA1(821)とNVMモジュールPBA(822)との対応付けは、512B単位にて管理される態様に限定されるものではなく、如何なる単位で管理してもよい。但し、LBA1は、圧縮データの格納先である物理記憶領域PBAを直接マッピングする空間であり、PBAの分割管理サイズと同等であることが望ましいことから、本実施例では、512B単位で分割して管理する。
 NVMモジュールPBA(822)は、LBA1に対応付けられたPBAの先頭アドレスを格納するフィールドである。本実施例では、PBAを512B毎に分割して管理する。図8の例では、NVMモジュールLBA1「0x800_0000_0002」に「ZZZ」というPBA値が対応付けられている。このPBA値は、NVMモジュール126が搭載する、あるFM420上の記憶領域を一意に示すアドレスである。これにより、リードリクエスト先の先頭アドレス(LBA1)として、「0x800_0000_0002」を受領した場合、NVMモジュール126内の物理的なリード先の先頭アドレスとして「ZZZ」が取得される。また、NVMモジュールLBA1(821)で特定されるLBA1に対応付けられたPBAが無い場合、NVMモジュールPBA(822)には「未割当」であることを示す値が格納される。
 以上が、NVMモジュール126が用いるLBA0-PBA論物変換テーブル810とLBA1-PBA論物変化テーブル820の内容である。
(1-5)ブロック管理情報
 続いて、本発明が適用されるNVMモジュールが用いるブロック管理情報について図9を用いて説明する。
 ブロック管理情報900は、NVMモジュール126内のDRAM413内に格納されており、NVMモジュールPBA901、NVM chip番号902、ブロック番号903、無効PBA量904の各項目にて構成される。
 NVMモジュールPBA901は、NVMモジュール126が管理する全FM420内の各領域を一意に特定するPBA値を格納するフィールドである。尚、本実施例では、NVMモジュールPBA901をブロック単位で区分して管理する。図9では、NVMモジュールPBA値として、先頭アドレスを格納した例について示している。例えば、「0x000_0000_0000」のフィールドは、「0x000_0000_0000」~「0x000_0000_0FFF」のNVMモジュール PBA範囲が該当することを示している。
 NVM chip番号902は、NVMモジュール126が搭載するFM Chip420を一意に指定する番号を格納するフィールドである。ブロック番号903は、NVM Chip番号902の格納値により指定されるFM Chip420内のブロック番号を格納するフィールドである。
 無効PBA量904は、NVM Chip番号902の格納値により指定されるFM Chip内の、ブロック番号903の格納値により指定されるブロックの無効PBA量を格納するフィールドである。無効PBA量とは、LBA0-PBA変換テーブル810及びLBA1-PBA変換テーブル820にて、NVMモジュールLBA0(811)及びNVMモジュールLBA1(821)で特定されるLBA0空間及び/またはLBA1空間に対応付けられていたが、のちに対応づけを解除された領域(PBA空間上)の量である。逆に、LBA0-PBA変換テーブル810またはLBA1-PBA変換テーブル820によってNVMモジュールLBA0またはLBA1に対応付けがなされているPBAのことを本明細書では有効PBAと呼ぶ。
 無効PBA領域は、データの上書きが不可能な不揮発性メモリにおいて、疑似的に上書きを実現しようとする際に必然的に生じるものである。具体的には、NVMモジュール126はデータ更新の際に更新データを(更新前データの書き込まれているPBAとは異なる)未書き込みPBAに対して記録し、LBA0-PBA変換テーブル810のNVMモジュールPBA812とPBA長813のフィールドを更新データが記録されたPBA領域の先頭アドレスとPBA長に書き換える。この時、更新前データが記録されたPBA領域は、LBA0-PBA変換テーブル810による対応付けが解除される。NVMモジュール126はこのとき、LBA1-PBA変換テーブル820も調査し、LBA1-PBA変換テーブルにおいても対応付けがなされていない領域を無効PBA領域とする。NVMモジュール126は、FMの最小消去単位であるブロック毎にこの無効PBAの量をカウントし、無効PBA量が多いブロックを優先的にガーベッジコレクション対象領域として選択する。図9の例では、NVMモジュール126が管理するNVM chip番号0のブロック番号0には、無効PBA領域が160KBあることを一例として示している。
 本実施例では、NVMモジュール126が管理する無効PBA領域の総量が、所定のガーベッジコレクション開始閾値以上となった(未書き込みページの枯渇)際に、無効PBA領域を含むブロックを消去し、未書き込みPBA領域を作成する。この動作をガーベッジコレクションと呼ぶ。このガーベッジコレクション時に、消去対象ブロック中に有効PBA領域が含まれる場合、ブロック消去の前に有効PBA領域を別のブロックへとコピーする必要が生じる。このデータコピーは、FMへのライト動作を伴うため、FMの破壊を進展させるとともに、コピー動作としてNVMモジュール126のプロセッサやバス帯域などのリソースを消費するため、性能低下の要因ともなる。このため、有効PBA領域のコピーは可能な限り少ないことが望ましい。本実施例のNVMモジュール126は、ガーベッジコレクション時にブロック管理情報900を参照し、無効PBA量の904の格納値が大きい(無効PBA領域を多く含む)ブロックから順に削除を実施することで、有効PBA領域のコピー量を削減するように動作する。
 尚、本実施例では、NVMモジュールLBA0(811)及びLBA1(821)との対応付けが解除された領域の量をPBA量(セクタ数)にて管理した例について記述しているが、本発明はこの管理単位に限定されるものではない。例えば無効PBA量に代えて、最小書き込み単位であるページの個数を管理する態様もあり得る。
 以上が、本発明が適用されるNVMモジュールが用いるブロック管理情報900の内容である。
(2)NVMモジュール制御用のコマンド
 続いて、本発明が適用されるNVMモジュール126が用いるコマンドについて説明する。本実施例におけるNVMモジュール126は、ストレージコントローラ110のプロセッサ121から1つのコマンドを受理すると、当該受理したコマンドの内容を解析して所定の処理を行い、処理完了後に1つの応答(応答情報)をストレージコントローラに返答する。この処理は、NVMモジュール126内のプロセッサ415が、RAM413に格納されているコマンド処理用のプログラムを実行することにより実現される。なお、コマンドには、NVMモジュール126が所定の処理を行うために必要となる情報の集合が含まれており、たとえばNVMモジュール126にデータの書き込みを指示するライトコマンドであれば、コマンド中には、そのコマンドがライトコマンドであること、ライトのために必要となる情報(ライトデータの書き込み位置やデータ長など)を含んでいる。NVMモジュール126は複数種類のコマンドをサポートしているが、まず各コマンドに共通の情報について説明する。
 各コマンドには、共通の情報として、オペレーションコード(Opcode)とコマンドIDという情報が、先頭に含まれている。そしてコマンドIDの後に、各コマンドに固有の情報(パラメータ)が付加されて、1つのコマンドが形成される。たとえば図10は、本実施例におけるNVMモジュール126のライトコマンドのフォーマットと、そのライトコマンドに対する応答情報のフォーマットを示した図であるが、図10の要素(フィールド)1011がOpcode、要素1012がコマンドIDである。そして要素1013から1016が、ライトコマンドに固有のパラメータである。また、各コマンドの処理完了後に返送される応答情報として、コマンドIDとステータス(Status)が、全応答情報に共通に含まれる情報であり、ステータスの後に各応答情報に固有の情報が付加されることもある。
 オペレーションコード(Opcode)は、コマンドの種別をNVMモジュール126に通知するための情報であり、コマンドを取得したNVMモジュール126は、この情報を参照することにより、通知されたコマンドがライトコマンドであることを認知する。たとえばライトコマンドの場合、0x01というOpcodeで、リードコマンドの場合、0x02というOpcodeである。
 コマンドIDは、コマンドの固有のIDを格納するフィールドであり、コマンドの応答情報には、どのコマンドに対する応答情報であるかを、ストレージコントローラ110に認識させるために、このフィールドに、指定されたIDが付与される。ストレージコントローラ110は、コマンド作成時にコマンドを一意に識別可能なIDを生成して、このコマンドIDのフィールドにこのIDを格納したコマンドを作成し、NVMモジュール126にコマンドを送信する。そして、NVMモジュール126では、受信したコマンドに対応した処理が完了すると、当該コマンドのコマンドIDを応答情報に含めてストレージコントローラ110に返送する。ストレージコントローラ110は、この応答情報を受領した際、応答情報に含まれるIDを取得することで、当該コマンドの完了を認識する。また、応答情報に含まれるステータス(図10の要素1022)は、コマンドの処理が正常に完了したか否かを表す情報が格納されるフィールドである。コマンドの処理が正常に完了しなかった(エラー)場合、ステータスには、例えばエラー原因等を識別できる番号が格納される。
(2-1)ライトコマンド
 図10は、本実施例におけるNVMモジュール126のライトコマンドとそのライトコマンドに対する応答情報を示した図である。本実施例におけるNVMモジュール126のライトコマンド1010は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA0/1開始アドレス1013、LBA0/1長1014、圧縮要否フラグ1015、リスト数1016、ライトデータアドレス1017、ライトデータ長1018により構成される。尚、本実施例では、上記の情報から構成されるコマンドの例について記すが、上記以上の付加的な情報があってもよい。例えば、DIF(Data Integrity Field)等に関連する情報がコマンドに付与されていたとしてもよい。
 LBA0/1開始アドレス1013は、ライト先の論理空間の先頭アドレスを指定するフィールドである。なお、本発明の実施例におけるLBA0空間はアドレス0x000_0000_0000から0x07F_FFFF_FFFFの範囲の空間であり、LBA1空間はアドレス0x800_0000_0000以降の範囲の空間と定められているので、NVMモジュール126は、ライトコマンドのLBA0/1開始アドレス1013に0x000_0000_0000から0x07F_FFFF_FFFFの範囲のアドレスが格納されていた場合、LBA0空間のアドレスが指定されたと認識し、0x800_0000_0000から0x8FF_FFFF_FFFFの範囲のアドレスが指定されていた場合、LBA1空間のアドレスが指定されたと認識することができる。ただLBA0空間とLBA1空間のいずれのアドレス空間に従うアドレスが指定されたかを認識する方法は、上で説明した方法以外の方法を採用することも可能である。たとえばOpcode1011の内容によってLBA0空間とLBA1空間を識別する方法などもありえる。
 LBA0/1長1014は、LBA0/1開始アドレス1013から始まる記録先LBA0またはLBA1の範囲(長さ)を指定するフィールドで、セクタ数で表された長さが格納される。NVMモジュール126は、前述のLBA0またはLBA1開始アドレス1013とLBA0/1長1014が示す範囲のLBA0またはLBA1領域に対して、ライトデータを格納したPBA領域を対応づける処理を行う。
 圧縮要否フラグ1015は、このコマンドが指示するライト対象データの圧縮要否を指定するフィールドである。ただし本実施例では、LBA1を指定したライトコマンドをNVMモジュール126が受信すると、転送データの圧縮が不要であると判断するよう動作するため、この圧縮要否フラグ1015は無くとも良い。また別の実施態様として、圧縮要否フラグ1015によって明示的に圧縮が必要であることを示さない限り、NVMモジュール126が圧縮を行わないという態様もありえる。
 ライトデータアドレス1017とライトデータ長1018はそれぞれ、このコマンドが指示するライト対象データの現在の格納先(たとえばDRAM125)の先頭アドレス、そしてデータの長さを格納するフィールドである。ライト対象データが連続領域に格納されている場合、ライトコマンド中には、ライトデータアドレス1017とライトデータ長1018の組は1つだけ格納されており、その時リスト数1016には「1」が格納される。一方、ライト対象データが複数の領域に離散的に格納されている場合、ライトコマンド中にはライトデータアドレス1017とライトデータ長1018の組が複数格納され、リスト数1016には、ライトデータアドレス1017とライトデータ長1018の組が格納されている数が格納される。NVMモジュール126は、このフィールドに指示された領域から、LBA0/1長(1014)に格納されているサイズの領域のデータを格納先(DRAM125)より取得することでライトデータの取得を行う。尚、ライトコマンド中にライトデータアドレス1017とライトデータ長1018の組を複数格納するフォーマット以外に、別のコマンドフォーマットを採用してもよい。たとえば、複数のアドレス(ライトデータアドレス1017とライトデータ長1018の組)が格納されたリストのポインタ情報(リストが格納されているアドレス)をライトコマンドに格納し、NVMモジュール126が当該ポインタ情報を参照してライトデータアドレス1017とライトデータ長1018を取得する態様もあり得る。
 ライト応答情報1020は、コマンドID1021、ステータス1022、圧縮データ長1023により構成される。コマンドIDID1021とステータス1022は、各コマンド共通の応答情報であるので説明を省略する。圧縮データ長1023は、ライトしたデータが、データ圧縮により縮小した際のデータ長を記録するフィールドである。ストレージコントローラ110は、このフィールドを取得することで、ライトしたデータの圧縮後のデータサイズを把握できる。但し、ストレージコントローラ110は、更新ライトをするにしたがって、特定のLBA0領域に対応づけられている実際の圧縮データサイズを正確に把握できなくなる。このため、ストレージ装置は、ライトコマンドにて取得した圧縮データ長1023の合計が所定値に達した際、LBA1にマッピングするために後述の圧縮データサイズ取得コマンドを発行する。また、本実施例では、ライト先(LBA0/1開始アドレス1013)がLBA1であるとき、圧縮済みのデータを記録することとなっている為、本フィールドは無効となる。
 NVMモジュール126がライトコマンドを受け取った時の処理の概要を、図11を用いて説明する。なお、図11で記載されていないが実際には行われる処理として、LBA0/1開始アドレス1013にLBA0空間の範囲外のアドレスが指定されていないかを判定する等の、一種のパラメータチェック処理がある。ただしこの場合、NVMモジュール126は即座に処理を終了する(エラーを返却する)だけであるため、以下の説明ではこれらのパラメータチェック処理については記載を省略している。
 NVMモジュール126がコマンドを受け取り、Opcode1011を参照した結果、コマンドがライトコマンドであることを検出すると、図11に記載のライトコマンド処理が開始される。まずS1101で、LBA0/1開始アドレス1013で指定されたアドレスが、LBA0空間のアドレスかLBA1空間のアドレスかを判定する。LBA0空間のアドレスであった場合、S1102に進み、LBA1空間のアドレスであった場合、S1108に進む。
 以下ではまず、LBA0/1開始アドレス1013で指定されたアドレスが、LBA1空間のアドレスであった場合、つまり圧縮処理を行わずそのままデータを格納する場合の処理について説明する。S1108では、NVMモジュール126は、前回FM420に対して書き込みを行ったページの次のページを確保する。NVMモジュール126は、前回最後に書き込み(ライトコマンドによる書き込みの他、後述するパリティ生成コマンド処理で発生する書き込みなども含む)を行ったページの情報を記憶しており、たとえば最後に書き込みを行ったページが、図9のNVM Chip番号902が1番のFM Chip内の、ブロック番号(903)が32番のブロック内の、Page番号1番のページであることを記憶している。あるいは最後に書き込みを行ったPBAを記憶しておき、当該記憶しておいたPBAとブロック管理情報900に基づいて、最後に書き込みを行ったFM Chip、ブロック番号、Page番号を算出するようにしてもよい。ここで、最後に書き込みを行ったページが、NVM Chip番号902が1番、ブロック番号(903)が32番、Page番号が1番だったとすると、先に述べたとおり、本発明の実施例におけるNVMモジュール126では、ブロック内のページの先頭から順にデータを書き込んでいくため、S1108では、NVM Chip番号902が1番、ブロック番号(903)が32番、Page番号が2番のページを確保する。なお、ここではライトデータ長が1ページ以内の場合について説明するが、ライトデータ長が複数ページにわたる場合には、S1108で複数のページを確保する。
 S1109では、ライトデータアドレス1017で指定されたデータ格納先からデータを取得して、S1108で確保したページにデータを書き込む。S1110で、LBA0-PBA変換テーブル810、LBA1-PBA変換テーブル820、ブロック管理情報900の更新を行う。S1110で行われる処理の詳細は、後述する。そして最後に応答情報の作成を行って(S1111)、ライトコマンドの処理を終了する。
 続いてLBA0/1開始アドレス1013で指定されたアドレスが、LBA0空間のアドレスであった場合、S1102では、ライトコマンドで指定されたデータの書き込み範囲(LBA0空間上の先頭アドレスと終端アドレス)がそれぞれ、4KB境界の先頭と終端に一致するか判定し、一致する場合にはS1103に進み、一致しない場合にはS1104に進む。たとえばライトコマンドで指定されたLBA0/1開始アドレス1013が0x000_0000_0000、LBA0/1長1014が8の場合、開始アドレスは4KB境界に一致している。またこの場合、ライトデータはLBA0空間上のアドレス0x000_0000_0000から、0x000_0000_0007の範囲に書き込まれることになるから、終端アドレスは0x000_0000_0007で4KB単位領域の終端である。この場合にはS1103に進む。またLBA0/1開始アドレス1013が0x000_0000_0001でLBA0/1長1014が7の場合、先頭アドレスが4KB境界でないためS1104に進む。またLBA0/1開始アドレス1013が0x000_0000_0000でLBA0/1長1014が10(10進数表記で)の場合、ライトデータの終端が0x000_0000_0009になる。つまり終端アドレスが4KB境界でないためS1104に進む。
 S1103では、NVMモジュール126は、ライトデータアドレス1017でポイントされるデータ格納先からデータを読み出してデータバッファ416に格納し、続いてデータ圧縮/伸長ユニット418を用いて、データバッファ416に格納したデータを圧縮する。なお、データ圧縮/伸長ユニット418が、ライトデータアドレス1017でポイントされるデータ格納先から直接データを読み出して圧縮可能な機能を備える場合、ライトデータアドレス1017でポイントされるデータ格納先から読み出してきたデータを一旦データバッファ416に格納することなくデータ圧縮し、そのデータをデータバッファに格納するという実施態様もあり得る。その後S1108からS1111の処理を行ってライトコマンド処理を終了する。なお、この場合S1111で作成されるライト応答情報1020には、S1103で作成された圧縮データのデータ長の情報を格納する。
 続いてS1104に進んだ場合、つまりライトコマンドで指定されたデータの書き込み範囲が4KB境界ではない場合の処理を説明する。なおここでは、書き込み対象データが4KB以内の場合を例にとって説明する。S1104では、LBA0-PBA変換テーブル810を参照し、ライトコマンドで指定されたデータの書き込み範囲に、PBA領域が割り当て済みか否か判定する。PBA領域が割り当てられていない場合、ライトコマンド処理はエラー終了する(ライト応答情報1020として、エラーである旨を格納した情報を作成して、ライトコマンドの発行元であるプロセッサ121にライト応答情報1020を返送する)。PBA領域が割り当てられていた場合、S1105に進む。
 S1105では、ライトコマンドで指定されたデータの書き込み範囲に対応するPBAから圧縮データを読み出して、一旦データバッファ416に格納する。続いてデータ圧縮/伸長ユニット418を用いて、データバッファ416に伸長したデータを格納し、一旦格納していた圧縮データは削除する。なおデータ圧縮/伸長ユニット418が、FM420の記憶領域に格納されている圧縮データを直接伸長可能な機能を備えている場合には、圧縮データを一旦データバッファに格納することなく、直接データバッファ416に伸長データを格納するようにしてもよい。
 S1106では、ライトデータアドレス1017で指定されたデータ格納先からデータを取得して、取得したデータをS1105でデータバッファ416に格納した伸長データに対して上書きする。S1107で、S1106で上書きされたデータをデータ圧縮/伸長ユニット418を用いて圧縮し、圧縮されたデータを一旦データバッファ416に格納する。その後S1108からS1111の処理を行ってライトコマンド処理を終了する。なお、この場合S1111で作成されるライト応答情報1020には、S1107で作成された圧縮データのデータ長の情報を格納する。
 なお、ライト処理は上で説明した内容、処理順序に限定されるものではない。たとえばS1108~S1109の処理(FM420上ページへの書き込み)を、ライトコマンドの処理応答情報を返信する処理(S1111)より前に必ず完了させなければならないわけではなく、S1108の前に、ライトデータをデータバッファ416に一時的に格納しておき、ライトコマンドの処理応答情報を返信する処理(S1111)の後の任意のタイミングで実施するようにしてもよい。このようにすると、NVMモジュール126の応答時間を短くすることが可能である。逆に、ライトデータを圧縮して格納する(S1103の処理を実行する)場合、一旦圧縮データをデータバッファ416に格納することなく、直接FM420上に格納するという手順を採用してもよい。
 また、上では書き込み対象データが4KB以内の場合について説明したが、書き込み対象データが4KB以上の場合は、ライト対象データの書き込み範囲を4KB境界で複数に区分して、区分されたデータごとに図11の処理を行う。区分されたデータのうち、4KB境界に揃っているデータについては、S1103以降のステップを実行することで処理し、4KB境界に揃っていないデータについてはS1104以降のステップを実行することで処理される。例えば、書き込み対象データが8KBであり、その開始アドレスが4KB境界から1KBシフトしていた場合、ライトは、先頭から3KBのデータのライト処理、次の4KBのデータのライト処理、最後尾の1KBのデータのライト処理、という3つのライトリクエストとして処理される。このうち、4KBデータのライトリクエストを処理する場合、データ書き込み範囲が4KB境界に一致している為、S1102からS1103以降の処理を行う。一方で、3KBデータのライトリクエスト及び1KBデータのライトリクエストを処理する場合、S1102よりS1104に遷移し、S1104以降の処理が行われる。
 続いて、S1110で行われる、LBA0-PBA変換テーブル810、LBA1-PBA変換テーブル820、ブロック管理情報900の更新処理について図12を用いて説明する。ライトコマンドによるデータ書き込みの結果、LBA0空間あるいはLBA1空間に、新たなPBA領域が割り当てられるので、S1110の処理ではこれらの情報をLBA0-PBA変換テーブル810、LBA1-PBA変換テーブル820に反映する。またライトコマンドによるデータ書き込み先に、すでにPBA領域が割り当てられていた場合、当該領域を必要に応じて無効化する。
 S1201では、ライトコマンドのLBA0/1開始アドレス1013で指定されたアドレスが、LBA0空間、LBA1空間のいずれのアドレスであるか判定し、LBA0空間のアドレスであった場合S1202に進む。S1202では、LBA0-PBA変換テーブル810のNVMモジュールLBA0(811)が、今回のライト範囲と一致するエントリについて、NMVモジュールPBA(812)のアドレスがLBA1-PBA変換テーブル820のNVMモジュールPBA(822)にも存在するか判定する。図8の例の場合、たとえばライトアドレス範囲が0x000_0000_0020から0x000_0000_0027の間の範囲であったとすると、当該LBA0空間の範囲には、PBAが「ZZZ」の領域が割り当てられているとともに、LBA1空間のアドレス「0x000_0000_0002」にもPBAが「ZZZ」および「ZZZ+1」の領域が割り当てられている。この場合にはS1204に進む。またライトアドレス範囲が0x000_0000_0000から0x000_0000_0007の間の範囲であったとすると、当該LBA0空間の範囲には、PBAが「XXX」の領域が割り当てられているが、このPBAはLBA1-PBA変換テーブル820には存在しない。この場合にはS1203に進む。また当該LBA0空間の範囲にPBAが割り当てられていなかった場合にはS1204に進む。
 S1203では、LBA0-PBA変換テーブル810のNVMモジュールLBA0(811)が、今回のライト範囲であるエントリについて、NMVモジュールPBA(812)に格納されているPBAを無効PBA領域とし、無効PBA量904の加算処理を行う。
 S1204では、LBA0-PBA変換テーブル810のNVMモジュールPBA(812)とPBA長(813)に、今回のライトコマンド処理においてライトデータ(圧縮データ)の書き込まれた先頭PBAとPBA長の情報(S1108で確保された記憶領域)を格納し、処理を終了する。
 一方S1201で、ライトコマンドのLBA0/1開始アドレス1013で指定されたアドレスが、LBA1空間のアドレスと判定された場合、S1205以降の処理に進む。S1205はS1202と同様の処理で、LBA1-PBA変換テーブル820のNVMモジュールLBA1(821)が今回のライト範囲アドレスと一致するエントリについて、NMVモジュールPBA(822)のアドレスがLBA0-PBA変換テーブル810のNVMモジュールPBA(822)にも存在するか判定する。存在しない場合にはS1206に進む。S1206では、S1203と類似した処理で、LBA1-PBA変換テーブル820のNVMモジュールLBA1(821)が、今回のライト範囲と一致するエントリについて、NMVモジュールPBA(822)に格納されているPBAを無効PBA領域とする。S1207では、LBA1-PBA変換テーブル820のNVMモジュールPBA(822)に、今回のライトコマンド処理においてライトデータの書き込まれたPBAの情報を格納して処理を終了する。
(2-2)リードコマンド
 図13は、本実施例におけるNVMモジュール126がサポートする、リードコマンドとそのリードコマンドへの応答情報を示した図である。本実施例におけるNVMモジュール126のリードコマンド1610は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA0/1開始アドレス1613、LBA0/1長1614、伸長要否フラグ1615、リードデータアドレス1616により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。尚、オペレーションコード1011、コマンドID1012は先のライトコマンドと共通する情報の為、説明は省略する。
 LBA0/1開始アドレス1613は、NVMモジュール126内リード先領域の論理空間の先頭アドレスを指定するフィールドである。LBA0/1長1614は、LBA0/1開始アドレス1613から始まる記録先LBA0またはLBA1の範囲を指定するフィールドである。NVMモジュール126は、前述のLBA0またはLBA1開始アドレス1613とLBA0/1長1614が示す範囲のLBA0またはLBA1領域に対して対応付けられたPBAからデータを取得し、取得したデータを(必要に応じて伸長して)ストレージコントローラ110に転送することでリード処理を行う。
 伸長要否フラグ1615は、このコマンドが指示するリード対象データの伸長要否を指定するフィールドである。ストレージ装置がリードコマンドを作成する際、このフラグを制御することで、NVMモジュール126に伸長が不要であることを通知する。尚、本実施例ではLBA1空間のアドレスを指定したリードコマンドを受信した場合には取得データの伸長を行わないので、この伸長要否フラグ1615は必須ではない。
 リードデータアドレス1616は、リード対象データの出力先領域の先頭アドレス(たとえばDRAM125内のアドレス)が指定される。リードされたデータはリードデータアドレス1616で指定されたアドレスの領域から、連続的にLBA0/1長1614で指定された長さのデータが格納されることになる。なお、ライトコマンドと同様に、リードデータアドレス1616とデータ長の組を複数、リードコマンドのパラメータとして指定できるようにし、離散的な領域にデータを出力することを可能とする態様もありえる。
 リード応答1620は、その他のコマンドの応答情報と共通の情報(コマンドID1021、ステータス1022)のみを含むものであるため、説明は省略する。なお、共通の情報以外の付加的な情報がリード応答1620に含まれている構成でもよい。
 続いて、NVMモジュール126がリードコマンドを受信した時の処理の流れを、図14を用いて説明する。S1301で、リードコマンドで指定されているLBA0/1開始アドレス1613とLBA0/1長1614とから、今回のリードコマンドでデータが読み出されるLBA0/1空間のアドレス範囲を特定する。そしてLBA0-PBA変換テーブル810またはLBA1-PBA変換テーブル820を参照し、当該アドレス範囲にPBAが割り当て済みか否か判定する。アドレス範囲の全てにPBAが割当済みである場合にはS1302に進む。一方今回のリードコマンドでデータが読み出されるLBA0/1空間のアドレス範囲の一部または全部に、PBAが未割当の領域が存在する場合、リードコマンドはエラー終了する(つまりリード応答1620のステータス1022に、エラーが発生した旨の情報を格納し、そのリード応答をコマンド発行元に返送する)。
 S1301の処理によって、今回のリードコマンドで指定されている範囲のデータが格納されているPBAが判明しているので、S1302ではブロック管理情報900を参照し、今回のリードコマンドで指定されている範囲のデータが格納されているPBAに対応する、FM420のページから(ページ単位で)データを読み出して、データバッファ416に格納する。
 S1303では、今回のリードコマンドで指定されているアドレスはLBA0空間のアドレスかLBA1空間のアドレスか判定する。判定の結果、LBA1空間のアドレスの場合にはNVMモジュール126に格納されているデータをそのまま(伸長せずに)出力するので、S1305に進む。S1305では、S1302でデータバッファ416に読み出したページ内容の中から、リードコマンドで指定されている範囲に相当する部分のデータを抽出し、リードデータアドレス1616で指定されたアドレスの領域に出力し、リード応答情報を作成、返却して、処理を終了する。
 S1303で、今回のリードコマンドで指定されているアドレスがLBA0空間のアドレスであった場合、伸長したデータをコマンド発行元に返送する必要があるため、S1304でデータの伸長を実行する。データの伸長はS1302で読み出した1ページ分のデータのうち、今回のリードコマンドで指定されているLBA0空間に相当する部分だけを伸長する。たとえばLBA0/1開始アドレス1613が「0x000_0000_0020」、LBA0/1長1614が1で、LBA0空間が図8の状態だった場合、LBA0空間アドレスが0x000_0000_0020から0x000_0000_0027の8セクタ分のデータは、PBA「YYY+4」と「YYY+5」の領域に圧縮されて格納されている。またS1303の実行時点で、データバッファ416にはPBA「YYY+4」と「YYY+5」の領域に相当する部分を含む、1ページ分のデータが格納されているので、データ圧縮/伸長ユニット418を用いて、データバッファ416に格納されているPBA「YYY+4」と「YYY+5」の領域に相当する部分のデータの伸長を実行する。そしてS1305では、S1304で伸長したデータの中から先頭の1セクタ(512バイト)分のデータを、リードデータアドレス1616で指定されたアドレスの領域に出力し、リード応答情報を作成、返却して、処理を終了する。
(2-3)圧縮データサイズ取得コマンド
 図15は、本実施例におけるNVMモジュール126がサポートする、圧縮データサイズ取得コマンドとその圧縮データサイズ取得コマンドへの応答情報を示した図である。本実施例におけるNVMモジュール126の圧縮データサイズ取得コマンド1110は、コマンド情報として、オペレーションコード1111、コマンドID1012、LBA0開始アドレス1113、LBA0長1114により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。尚、コマンドID1012は先のライトコマンドと同一の内容の為、説明は省略する。以下、圧縮データサイズ取得コマンドに固有の情報について説明する。
 LBA0開始アドレス1113は、圧縮後のデータサイズ取得の対象となるLBA0領域の先頭アドレスを指定するフィールドである。LBA0長1114は、LBA0開始アドレス1113から始まるLBA0の範囲を指定するフィールドである。NVMモジュール126は、前述のLBA0開始アドレス1113とLBA0長1114が示す範囲のLBA1領域に対応づけられている圧縮データのサイズを算出し、ストレージ装置に通知する。なお、LBA0開始アドレス1113に指定できるアドレスは、8セクタ(4KB)の倍数に限定される。同様にLBA0長1114に指定できる長さも8セクタ(4KB)の倍数に限定される。8セクタ境界と一致しないアドレス(たとえば0x000_0000_0001など)や長さがLBA0開始アドレス1113またはLBA0長1114に指定された場合には、エラーが返却される。
 LBA0サイズ取得応答1120は、コマンドID1021、ステータス1022に加えて、圧縮データ長1123により構成される。尚、本実施例では、上記の情報による応答情報の例について記すが、上記以上の付加的な情報があってもよい。圧縮データ長1123は、圧縮データサイズ取得コマンド1110にて指示されたLBA0領域に対応づけられた圧縮データのサイズを格納するフィールドである。ストレージコントローラ110は、この圧縮データ長の値を取得することで、後述のLBA1マッピングコマンドにてマッピング先となるLBA1に必要な領域サイズを認識する。
 NVMモジュール126が圧縮データサイズ取得コマンドを受け取った時の処理の概要を、図16を用いて説明する。なお、、LBA0開始アドレス1113とLBA0長1114の内容が8セクタ(4KB)の倍数か否か、LBA0開始アドレス1113にLBA0空間の範囲外のアドレスが指定されていないかを判定する等の、一種のパラメータチェック処理も実際には行われるが、この場合には即座に処理を終了する(エラーを返却する)だけであるため、以下の説明ではこれらのパラメータチェック処理については記載を省略している。
 NVMモジュール126が圧縮データサイズ取得コマンドを受け取ると、まず変数A、Lを用意し(S1411)、変数Aに圧縮データサイズ取得コマンドで指定されたLBA0開始アドレス1113の値を代入し、変数Lを初期化(0を代入)する(S1412)。続いてLBA0-PBA変換テーブル810の中から、NVMモジュールLBA0(811)の値が変数Aの値と等しいエントリを抽出し、当該エントリのPBA(812)、PBA長(813)の値を参照する(S1413)。S1414では、PBA(812)が未割当か否か判定する。もしPBA(812)が未割当の場合、当該コマンドの処理はエラー終了とし、ストレージコントローラ110に返却する応答情報にはエラーである旨の情報を含ませたものを返却する。PBA(812)が割り当て済みの場合、S1415に進む。
 S1415では、変数LにS1113で抽出したPBA長(813)の値を加算し、S1416では変数Aに8を加算する。S1417では、変数Aの値が圧縮データサイズ取得コマンドで指定されたLBA0長以上であるか判定し、LBA0長以上でない場合にはS1113に戻る。LBA0長以上の場合には、ストレージコントローラ110に圧縮データ長としてLの値を返却して処理を終了する(S1418)。具体的には、応答情報の圧縮データ長1123に変数Lの値を格納した応答情報を作成し、ストレージコントローラ110に応答情報を返却する。
(2-4)LBA1マッピングコマンド
 図17は、本実施例におけるNVMモジュール126でサポートされる、LBA1マッピングコマンド1210と、そのLBA1マッピングコマンドに対する応答情報を模式的に示した図である。本実施例におけるNVMモジュール126では、LBA0の領域を指定してライトしたデータを、NVMモジュール126が圧縮してFM420に記録する。そしてその後、この圧縮データに対してRAIDパリティを生成し、また圧縮データを圧縮状態のまま最終記憶媒体へ書き込むため、LBA0とは異なるLBA1にマッピングする。
 本実施例におけるNVMモジュール126のLBA1マッピングコマンド1210は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA0開始アドレス1213、LBA0長1214、LBA1開始アドレス1215、により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
 LBA0開始アドレス1213は、LBA1に圧縮データをマッピングする対象データのLBA0領域を指定する先頭アドレスを指定するフィールドである。LBA0長1214は、LBA1へのマッピング対象となるLBA0開始アドレス1213から始まるLBA0の範囲を指定するフィールドである。なお、圧縮データサイズ取得コマンドと同様、LBA0開始アドレス1213とLBA0長1214は、8セクタ(4KB)の倍数に限定される。
 LBA1開始アドレス1215は、マッピングするLBA1の開始アドレスを指定するフィールドである。ストレージコントローラ110は、圧縮データサイズ取得コマンドを用いて予めマッピングするデータサイズを取得しており、このデータサイズがマッピング可能なLBA1の領域を確保し、この先頭アドレスをLBA1開始アドレス1215フィールドに格納して、当該コマンドをNVMモジュール126に発行する。なお、LBA1開始アドレス1215を複数指定するような仕様を採用する、つまりLBA0開始アドレス1213とLBA0長1214で特定されるLBA0空間の領域が、離散的なLBA1空間上領域にマッピングされるような構成をとることも可能である。
 本実施例のNVMモジュール126は、前述のLBA0開始アドレス1213とLBA0長1214が示す範囲のLBA0空間に対応づけられている圧縮データを、LBA1開始アドレス1215から、圧縮データサイズ分の領域に渡ってマッピングを行う。より具体的には、LBA0-PBA変換テーブルを参照し、LBA0開始アドレス1213とLBA0長1214が示す範囲のLBA0空間に対応付けられたPBA(NVMモジュールPBA812)を取得する。そして、LBA1-PBA変換テーブルを参照し、LBA1開始アドレス1215から、取得したPBAの総サイズと同サイズとなるLBA1範囲(NVMモジュールLBA1(821)で特定されるエントリ)のPBA822に取得したPBAのアドレスを記入する。
 LBA1マッピング応答1220は、コマンドID1021、ステータス1022、により構成される。尚、本実施例では、上記の情報による応答情報の例について記すが、上記以上の付加的な情報があってもよい。
(2-5)フルストライプパリティ生成コマンド
 本実施例では、非圧縮データをNVMモジュール126のLBA0にライトした後、圧縮したデータをLBA1にマッピングすることで、パリティ生成対象の圧縮データをLBA1にて指定可能とする。本実施例では、LBA1にマッピングした圧縮データを指定し、その圧縮データに対するパリティを生成する。RAID技術におけるパリティの生成方法には大きく2通りある。1つは、パリティを生成するために必要なすべてのデータによって、XOR等のパリティデータの演算を行ってパリティ生成を行う方法で、この方法を本明細書では「フルストライプパリティ生成方法」と呼ぶ。もう一方は、RAID構成された記憶媒体群に対して更新データの書き込みが行われる場合、当該更新データに加えて、記憶媒体に格納されている更新前のデータ及び当該更新前のデータに対応する更新前パリティとのXOR演算等を行って、更新データに対応するパリティ(更新後パリティ)を生成する方法で、この方法を本明細書では「更新パリティ生成方法」と呼ぶ。フルストライプパリティ生成コマンドは、RAIDパリティを構成する全てのデータがNVMモジュール126に格納されており、且つLBA1空間にマッピングされているときに用いることができる。従って、6つのデータに対してパリティを生成するRAID構成の場合、6つのデータがNVMモジュール126に格納されており、且つLBA1空間にマッピングされている必要がある。
 図18は、本実施例におけるNVMモジュール126のフルストライプパリティ生成コマンドとフルストライプパリティ生成コマンドへの応答情報を示した図である。フルストライプパリティ生成コマンド1310は、コマンド情報として、オペレーションコード(Opcode)1011、コマンドID1012、LBA1長1313、ストライプ数1314、LBA0開始アドレス0~X(1315~1317)、LBA1開始アドレス(XOR パリティ用)1318、LBA1開始アドレス(RAID6パリティ用)1319により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
 NVMモジュール126は、Opcode1011フィールドの内容から、ストレージコントローラ110から受け取ったコマンドがフルストライプパリティ生成コマンドであることを認知する。また、生成すべきパリティの種類は、RAIDレベルによって異なるため、本実施例におけるNVMモジュール126では、Opcode1011の内容によって、生成されるパリティを変えるものとする。たとえばOpcode1011に0x11,0x12,0x13のいずれかが指定された場合、いずれもフルストライプパリティ生成を行うが、Opcodeに0x11が指定された場合にはRAID5で用いられるパリティ(排他的論理和/XOR演算により生成されるデータ)を1つ生成し、Opcodeに0x12が指定された場合にはRAID6(リードソロモンコード使用)で用いられる2つのパリティ(いわゆるPパリティとQパリティ)を生成し、Opcodeに0x13が指定された場合にはRAID6(いわゆるEVENODD方式、Row-DiagonalParity方式)で用いられる2つのパリティ(水平パリティ、対角パリティ)を生成する。
 LBA1長1313は、生成するパリティの長さ(RAID パリティは、パリティとパリティ生成元データの長さは同一)を指定するフィールドである。ストライプ数1314は、パリティを生成のために使用するデータの個数を指定する。たとえば6つのデータに対してパリティを生成する場合、ストライプ数1314には6が格納される。
 LBA1開始アドレス0~X(1315~1317)は、パリティ生成元のデータが対応づけられているLBA1の開始アドレスを指定するフィールドである。このフィールドの個数はストライプ数1314で指定された個数と一致している(一致していないコマンドが発行された場合、NVMモジュール126はエラーを返却する)。例えば、6つのデータに対して2つのパリティを作成する構成(RAID6 6D+2P)では、6つのLBA1開始アドレスを指定する。
 LBA1開始アドレスY1(XOR パリティ用)1318は、生成するRAID パリティ(XOR パリティ)の格納先を指定するフィールドである。この開始アドレスからLBA1長1313に指定された範囲の領域に、生成されたパリティ(RAID5のパリティ、あるいはRAID6のPパリティ、水平パリティ)が格納される。
 LBA1開始アドレス(RAID6用)1319は、生成するRAID6用のパリティの格納先を指定するフィールドである。RAID6用のパリティは先に述べたとおり、リードソロモン符号のQパリティ、あるいはEVENODD方式における対角パリティである。このLBA1開始アドレス(RAID6用)1319からLBA1長1313に指定された範囲の領域に、生成されたパリティが格納される。
 本実施例のNVMモジュール126はフルストライプパリティ生成コマンドを受け付けると、前述のLBA0開始アドレス0(1315~1317)に指定された領域に対応付けられたPBAが示すFM420より複数の圧縮データを取得し、NVMモジュール126内部のパリティ生成ユニット419を使って、パリティ(1つまたは2つ)を生成する。その後、生成したパリティをFM420に記録するが、この処理はライトコマンドの処理(図11のS1108~S1110)と類似した処理を行う。つまり、前回書き込みがあったページの次のページを確保して、生成されたパリティを格納する。そして記録先FM420の領域を示すPBAをLBA1開始アドレスY1(XOR パリティ用)1318、LBA1開始アドレスY2(RAID6用)1319に対応付けるため、LBA1-PBA管理情報820内の、該当するNVMモジュールLBA1(821)のテーブルエントリのPBA822のフィールドに記録する。
 フルストライプパリティ生成応答1320は、コマンドID1021、ステータス1022、により構成されるが、いずれも他のコマンドと共通の情報であるため説明は省略する。
(2-6)更新パリティ生成コマンド
 更新パリティ生成は、既にパリティが作成されている最終記憶媒体の領域に更新データを記録する際、更新データ、更新データにより更新される領域の更新前データ(旧データ)、旧データに対応する旧パリティの3つのデータがLBA1空間上にマッピングされているときに行う。本実施例のストレージコントローラ110は、更新パリティを生成する際、RAID構成されている最終記憶媒体から旧データと旧パリティを読出し、NVMモジュール126のLBA1空間に対してライトすることで、LBA1空間上に更新データ、更新データにより更新される領域の旧データ、旧データを保護している旧パリティを揃え、更新パリティ生成を行う。
 図19は、本実施例におけるNVMモジュール126の更新パリティ生成コマンドと更新パリティ生成コマンドへの応答情報を示した図である。更新パリティコマンド1410は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA1長1413、LBA1開始アドレス0(1414)、LBA1開始アドレス1(1415)、LBA1開始アドレス2(1416)、LBA1開始アドレス3(1417)、LBA1開始アドレス4(1418)、LBA1開始アドレス5(1419)により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
 オペレーションコード(Opcode)1011は、コマンドの種別をNVMモジュール126に通知するフィールドであり、コマンドを取得したNVMモジュール126は、このフィールドにより通知されたコマンドが更新パリティ生成コマンドであることを認知する。またフルストライプパリティ生成コマンドと同様、Opcode1011の内容によって、生成されるパリティの種類が変わる。
 LBA1長1413は、生成するパリティの長さ(RAID パリティは、パリティとパリティ生成元データの長さは同一)を指定するフィールドである。LBA1開始アドレス0(1414)は、パリティ更新のための新データがマッピングされているLBA1の領域の開始アドレスを示すフィールドである。ストレージコントローラ110のプロセッサ121はこのフィールドを用いて、LBA1開始アドレス0(1414)からLBA1長1413で特定される長さの領域のデータが新データであることをNVMモジュール126に通知する。LBA1開始アドレス1(1415)は、パリティ更新のための旧データがマッピングされているLBA1の領域の開始アドレスを示すフィールドである。プロセッサ121はこのフィールドを用いてLBA1開始アドレス1(1415)からLBA1長1413で特定される長さの領域のデータが旧データであることをNVMモジュール126に通知する。
 LBA1開始アドレス2(1416)は、パリティ更新のための更新前のXOR パリティがマッピングされているLBA1の領域の開始アドレスを示すフィールドである。プロセッサ121はこのフィールドを用いてLBA1開始アドレス2(1416)からLBA1長1413で特定される長さの領域のデータがXOR パリティであることをNVMモジュール126に通知する。LBA1開始アドレス3(1417)は、パリティ更新のための更新前のRAID6用のパリティがマッピングされているLBA1の領域の開始アドレスを示すフィールドである。プロセッサ121はこのフィールドを用いてLBA1開始アドレス3(1417)からLBA1長1413で特定される長さの領域のデータが更新前のRAID6用パリティであることをNVMモジュール126に通知する。
 LBA1開始アドレス4(1418)は、更新によって新たに作成するXOR パリティを対応付けるLBA1の領域の開始アドレスを示すフィールドである。プロセッサ121はこのフィールドを用いてLBA1開始アドレス4(1418)からLBA1長1413で特定される長さの領域に新たなXOR パリティをマッピングするようにNVMモジュール126に指示する。LBA1開始アドレス5(1419)は、更新によって新たに作成するRAID6用のパリティを対応付けるLBA1の領域の開始アドレスを示すフィールドである。プロセッサ121はこのフィールドを用いてLBA1開始アドレス5(1419)からLBA1長1413で特定される長さの領域に新たなRAID6用のパリティをマッピングするようにNVMモジュール126に指示する。
 本実施例のNVMモジュール126が更新パリティ生成コマンドを受け付けた時の処理は、フルストライプパリティ生成コマンドを受け付けた場合に行われる処理と同様である。前述のLBA1開始アドレス1414~1417に指定された領域に対応付けられたPBAが示すFM420上記憶領域から複数の圧縮データを取得し、NVMモジュール126内部のパリティ生成ユニット419を使って、1または2つのパリティを生成する。その後、生成したパリティをFM420に記録する。
(2-7)圧縮情報取得コマンド
 本実施例におけるストレージ装置101では、キャッシュ装置であるNVMモジュール126にてデータを圧縮し、その圧縮データに対してパリティを生成した後、ストレージ装置は圧縮データとパリティをNVMモジュール126より取得し、圧縮データとパリティを最終記憶媒体に記録する。このとき、圧縮データの伸長に必要な情報(以降圧縮情報と記す)についても、最終記憶媒体に記録する。圧縮情報は、具体的にLBA1にマッピングされた圧縮データの構造を示すものである。例えば、指定されたLBA1領域に、4つの独立に伸長可能な圧縮データがマッピングされていた場合、その4つの圧縮データの開始位置と、圧縮データの伸長後の長さを格納した情報である。尚、本発明はこの方式に依存するものではなく、伸長に必要な情報をNVMモジュール126が恒久的に保持するとしてもよい。
 本実施例のように圧縮情報を最終記憶媒体に記録する場合、ストレージコントローラ110はキャッシュ装置であるNVMモジュール126より、圧縮情報を取得する必要がある。圧縮情報取得コマンドは、ストレージコントローラ110が圧縮情報をNVMモジュール126から取得する際に利用する。
 図20は、本実施例におけるNVMモジュール126がサポートする、圧縮情報取得コマンドと圧縮情報取得コマンドへの応答情報を示した図である。圧縮情報取得コマンド1510は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA1開始アドレス1513、LBA1長1314、圧縮情報アドレス1515により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
 LBA1開始アドレス1513は、圧縮情報の取得対象とするLBA1上の領域の開始アドレスを指定するフィールドである。LBA1長1514は、LBA1開始アドレス1513から始まるLBA1空間の範囲を指定するフィールドである。圧縮情報アドレス1515は、NVMモジュール126から取得された圧縮情報の、ストレージコントローラ110上の格納先(たとえばDRAM125上の特定位置を表すアドレス)を指定するフィールドである。
 NVMモジュール126は圧縮情報取得コマンドを受け取ると、LBA1開始アドレス1513とLBA1長1514が示す範囲のLBA1領域に記録されたデータを伸長する際に必要な圧縮情報を作成し、ストレージコントローラ110が指定する圧縮情報アドレス1515に転送する。圧縮情報は先に述べたとおり、LBA1空間にマッピングされた圧縮データの構造を示す情報であるが、圧縮情報の具体的内容や圧縮情報の具体的な作成方法は、本発明に直接関係するものではないため、説明を省略する。
 本実施例のストレージコントローラ110は、圧縮情報取得コマンドにより圧縮情報をNVMモジュール126から取得した後、最終記憶媒体に、圧縮データと共に圧縮情報を記録する。また、圧縮データを伸長して読み出す際、最終記憶媒体より、圧縮データと共に圧縮情報を取得し、圧縮データをNVMモジュール126にライトした後、後述の圧縮情報転送コマンドにより圧縮情報をNVMモジュール126に転送することで、NVMモジュール126に伸長可能とさせる。
 圧縮情報取得応答1520は、コマンドID1021、ステータス1022、圧縮情報1523により構成される。尚、本実施例では、上記の情報による応答情報の例について記すが、上記以上の付加的な情報があってもよい。また、圧縮情報取得コマンド1510では、圧縮情報アドレス1515で指定されるアドレスに圧縮情報を格納するため、圧縮情報1523を応答情報に含めないコマンド仕様を採用してもよい。逆に応答情報に圧縮情報1523を含めて、圧縮情報アドレス1515をコマンドパラメータに含めない仕様を採用することも可能である。
(2-8)マッピング解除コマンド
 本実施例では、ストレージコントローラ110は圧縮して記録したライトデータを圧縮した状態で取得する為、または圧縮データに対してパリティを生成する為、データをLBA1にマッピングする。また、圧縮した情報を伸長して取得するために、LBA1を指定してNVMモジュール126に記録したデータをLBA0にマッピングする。こうしてマッピングした領域は、処理が終了し不要となった場合、マッピングを解除する必要がある。本実施例のストレージ装置は、マッピング解除コマンドを用いて、PBAと、当該PBAに対応付けられたLBA(LBA0またはLBA1)との対応付けを解除する。
 図21は、本実施例におけるNVMモジュール126がサポートする、マッピング解除コマンドとそのマッピング解除コマンドへの応答情報を示した図である。本実施例におけるNVMモジュール126のマッピング解除コマンド1710は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA0/1開始アドレス1713、LBA0/1長1714、により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。以下、マッピング解除コマンドに固有のパラメータの内容と、マッピング解除コマンドをNVMモジュール126が受け付けた時に行われる処理について説明する。
 LBA0/1開始アドレス1713は、マッピングを解除する論理空間の先頭アドレスを指定するフィールドで、LBA0空間、LBA1空間の両方のアドレス空間のアドレスが指定可能である。ただし、LBA0空間のアドレスが指定される場合には、そのアドレスは4KB(8セクタ)境界のアドレスでなければならず、4KB(8セクタ)境界でないアドレスが指定された場合、NVMモジュール126はエラーを返す。LBA0/1長1714は、LBA0/1開始アドレス1713から始まるLBA0空間またはLBA1空間の範囲を指定するフィールドである。
 NVMモジュール126がストレージコントローラ110からマッピング解除コマンドを受け付けた時の処理は以下の通りである。NVMモジュール126は、前述のLBA0LBA/1開始アドレス1713とLBA0/1長1714が示す範囲のLBA0またはLBA1空間(以下、「ターゲットLBA0/1領域」と呼ぶ)に対応づけられたPBAについて、対応づけを削除する。具体的には、LBA0-PBA変換テーブル810またはLBA1-PBA変換テーブル820を参照し、NVMモジュールLBA0(811)またはNVMモジュールLBA1(821)の値が、ターゲットLBA0/1領域の範囲に属する各エントリについて、NVMモジュールPBA812またはNVMモジュールPBA822のフィールドを未割当に変更して更新する。このとき、LBA0及びLBA1への対応づけが共に解除されたPBAを検出し、そのPBAの情報をブロック管理情報900に反映する(つまり無効PBA量904の項目に、無効PBAとなった領域の量をカウントする。これは図12のS1202~S1204またはS1205~S1207相当の処理を行っているものといえる)。なお、本発明の実施例におけるNVMモジュール126は、複数のブロックのうち、この無効PBA量904が相対的に多いブロックを選択(つまり、無効PBA量904が最も多いブロックから順に選択)して、ガーベッジコレクションを実施するが、ガーベッジコレクションは周知の処理であり、ここでの説明は省略する。
(2-9)圧縮情報転送コマンド
 本実施例におけるストレージシステム101は、NVMモジュール126にて圧縮したデータを最終記憶媒体に記憶した後、ホスト103等の上位装置からの当該データのリード要求を受け付けると、最終記憶媒体に記憶した圧縮データを伸長して上位装置に転送する必要が生じる。この時、ストレージコントローラ110は、最終記憶媒体から圧縮データを取得し、圧縮データをNVMモジュール126に転送した後、圧縮データを伸長するのに必要な圧縮情報についても転送する。
 図22は、本実施例におけるNVMモジュール126がサポートする、圧縮情報転送コマンドと圧縮情報転送コマンドへの応答情報を示した図である。本実施例におけるNVMモジュール126の圧縮情報転送コマンド1810は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA1開始アドレス1813、LBA1長1814、圧縮情報アドレス1815により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。以下、圧縮情報転送コマンドに固有のパラメータの内容と、圧縮情報転送コマンドをNVMモジュール126が受け付けた時に行われる処理について説明する。
 LBA1開始アドレス1813は、転送すべき圧縮情報の対象となるLBA1上の領域の開始アドレスを指定するフィールドである。LBA1長1814は、LBA1開始アドレス15813から始まるLBA1空間の範囲を指定するフィールドである。
 圧縮情報アドレス1815は、NVMモジュール126に転送すべき圧縮情報の現在の格納先(たとえばDRAM125上のアドレス)を指定するフィールドである。
 NVMモジュール126は、圧縮情報アドレス1815に指定されたアドレスから圧縮情報を取得し、LBA1開始アドレス1813とLBA1長1814にて指定された領域の複数の圧縮データについて、伸長を可能とする。具体的には、後述するLBA0マッピングコマンドにてLBA1に対応付けられている圧縮データをLBA0にマッピングした後、ストレージ装置よりLBA0に対するリード要求を受領した際、圧縮情報転送コマンドにて転送された圧縮情報を用いて圧縮データを伸長しストレージに転送する。
 圧縮情報転送応答1820は、コマンドID1021、ステータス1022、により構成される。コマンドID1021とステータス1022は先のライト応答と同一の内容の為、説明は省略する。尚、本実施例では、上記の情報による応答情報の例について記すが、上記以上の付加的な情報があってもよい。
(2-10)LBA0マッピングコマンド
 本実施例では、LBA1の領域を指定してライトした圧縮データを、NVMモジュール126がFM420に記録する。また、FM420に記録された圧縮データは、上位装置103からのリード要求等があった場合に伸長された状態で転送される必要があるので、LBA0マッピングコマンドはその時に用いられる。
 図23は、本実施例におけるNVMモジュール126がサポートするLBA0マッピングコマンドと、当該LBA0マッピングコマンドへの応答情報を示した図である。本実施例におけるNVMモジュール126のLBA0マッピングコマンド1210は、コマンド情報として、オペレーションコード1011、コマンドID1012、LBA1開始アドレス1913、LBA1長1914、LBA0開始アドレス1915、により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
 LBA1開始アドレス1913は、マッピング対象となる圧縮データのLBA1空間の範囲の先頭アドレスを指定するフィールドである。LBA1長1914は、LBA0へのマッピング対象となるLBA1開始アドレス1913から始まるLBA1空間の範囲を指定するフィールドである。
 LBA0開始アドレス1915は、マッピングするLBA0の開始アドレスを指定するフィールドである。ストレージコントローラ110は、ストレージ装置が管理する圧縮情報より、LBA1に記録した圧縮データの伸長後のデータサイズを知っており、このデータサイズがマッピング可能なLBA0の領域を確保し、この先頭アドレスをLBA0開始アドレス1915に記入する。また、LBA0開始アドレス1915に指定できるアドレスは、8セクタ(4KB)の倍数に限定される。
 本実施例のNVMモジュール126は、ストレージコントローラ110からLBA0マッピングコマンドを受け付けると、前述のLBA1開始アドレス1913とLBA1長1914が示す範囲のLBA1空間に対応づけられている圧縮データを、LBA0開始アドレス1915から伸長後のデータサイズ分の領域に渡ってマッピングを行う。より具体的には、LBA1-PBA変換テーブルを参照し、LBA1開始アドレス1913とLBA1長1914が示す範囲のLBAに対応付けられたPBAを取得する。そして、LBA0-PBA変換テーブルを参照し、LBA0開始アドレス1915から、NVMモジュール126が圧縮情報転送コマンドによりストレージコントローラ110より取得した圧縮情報を基に伸長後の同サイズとなるLBA0範囲のPBA822に取得したPBAのアドレスを記入する。
 LBA0マッピング応答1920は、その他のコマンドの応答情報と共通の情報(コマンドID1021、ステータス1022)のみを含むものであるため、説明は省略する。なお、共通の情報以外の付加的な情報がLBA0マッピング応答1920に含まれている構成でもよい。
(3)I/O処理の流れ
 ここまで、NVMモジュール126の構成と機能について説明してきたが、以下ではストレージ装置101が上位装置103からI/O要求(リード、ライトコマンド)を受信した場合、NVMモジュール126をどのように用いて処理を行うか、概説する。まず、ストレージ装置101が上位装置103に提供する記憶領域(ボリューム)とキャッシュ(NVMモジュール126から構成される)との関係について、図2の概念図を用いて説明する。
 本発明のストレージ装置101は、上位装置103に対して1または複数のボリューム5000を提供するが、以下ではこの上位装置103に対して提供されるボリュームのことを「伸長VOL」(図中の要素5000に対応する)と呼ぶ。伸長VOL5000に対して上位装置103から書き込まれたライトデータは、ストレージ装置101のキャッシュであるNVMモジュール126に書き込まれる。その時、先に述べたとおり圧縮された状態で、NVMモジュール126の記憶領域(FM420で構成される)に書き込まれる。ただし上位装置103には、データが圧縮されていることは見せないようにし、上位装置103が伸長VOL5000に対してリード要求を発行し、以前伸長VOL5000に書き込んだデータを読み出した場合、非圧縮のデータが読み出される。
 本発明の目的は、データを圧縮した状態で最終記憶媒体(SSD111あるいはHDD112)に格納することであるため、NVMモジュール126に格納された圧縮データを、圧縮された状態のまま最終記憶媒体(111、112)に書き込む。この場合の問題は、データを圧縮する際、データサイズがデータ内容に依存して変動する点である。一般的なストレージ装置では、ボリュームに対するデータ更新要求と更新データを受け取った時、当該更新データの更新前データの格納されている領域に当該更新データを上書きして格納する。しかし、圧縮データを最終記憶媒体に格納する構成の場合、ボリュームに最初に格納された圧縮データに対し、更新(上書き)の要求が来たとすると、更新データの圧縮の結果、当該更新データの圧縮データのサイズは、最初に格納された圧縮データのサイズよりも大きくなることもある。その場合、最終記憶媒体に対する上書きが不可能になる。そこで本発明のストレージ装置101では、更新データを更新前データと同一領域には書き込まず、最終記憶媒体111、112に追記書きする構成をとる。また圧縮データを格納、管理するために、伸長VOLとは別のボリューム(圧縮VOL5500と呼ぶ)を用意し、伸長VOLに書き込まれたデータ(実体はキャッシュに圧縮データとして格納されている)を疑似的に圧縮VOL5500に移動する処理を行う。
 圧縮VOL5500は、複数の最終記憶媒体111、112から構成される論理的なボリューム(論理ボリューム)であり、また当該論理ボリュームを構成する複数の最終記憶媒体は1つのRAIDグループとして構成されており、RAID技術によりデータ格納時にパリティを生成し、データとパリティとを最終記憶媒体に書き込む構成をとる。つまり圧縮VOL(論理ボリューム)は、RAID技術を採用した周知のストレージ装置が、ホスト計算機等の上位装置に対して提供する論理ボリュームと同じものであるので、圧縮VOLに対して書き込まれたデータが最終記憶媒体に書き込まれる処理、あるいは圧縮VOLに対するデータ読み出し要求に応じてストレージ装置が最終記憶媒体からデータを読み出す処理は、周知のストレージ装置で行われるライト処理、リード処理と同じものである。
 このような構成を実現するために、ストレージ装置101では、伸長VOLと圧縮VOL間の対応関係を維持管理する必要があり、一例として図28に示されているようなボリューム間マッピング情報3000を有する。以下、ボリューム間マッピング情報3000の各行(エントリ)を構成する各要素について説明する。
 各エントリは、伸長VOLのストレージ装置101内における識別番号であるVVOL#3010、VVOL#3010で特定される伸長VOLのLBA情報であるLBA3020で特定される、伸長VOL5000上の領域が、圧縮VOL5500の識別番号であるLDEV#3060、当該LDEV#3060で特定される圧縮VOL5500のLBA情報であるLBA3070とで特定される、圧縮VOL5500上の領域と対応付けられていることを表す。また,Cache LBA0(3030)は、VVOL#3010、LBA3020で特定される伸長VOL5000上の領域のデータがNVMモジュール126上にキャッシュされている時、キャッシュされているデータが格納されているNVMモジュール126の領域のアドレス(LBA0アドレス)を表し、またCache LBA1(3080)は、LDEV#3060、LBA3070で特定される圧縮VOL5500上領域のデータがNVMモジュール126上にキャッシュされている時、キャッシュされているデータの格納されている領域のアドレス(LBA1アドレス)を表す。
 また、各エントリは、伸長VOL5000の8セクタ分の領域に対応して設けられるものであり、例えば図28の先頭行(VVOL#3010が0、LBA(3020)が0のエントリ)は、VVOL#が0の伸長VOLのLBA0~7までの8セクタ分の領域についての情報である。つまり、LBA3020には、8セクタ分の領域の先頭LBAが格納されている。そしてサイズ3040は、当該8セクタ分の領域の圧縮後のサイズが格納される。状態情報3050には、当該8セクタ分の領域に関する補助的な情報、たとえば最終アクセス時刻等の情報が格納される。この情報は、キャッシュデータからパリティ生成を行う時などに参考情報として用いられる。
 初期状態では、ボリューム間マッピング情報3000のVVOL#3010とLBA(3020)にはすべての値が格納されているが、それ以外の欄には値は格納されておらず、ライト処理、リード処理が進行する過程で、各欄に情報が格納されていく。これについては、以下で述べるライト処理、リード処理の説明の中で触れる。
 また、ストレージ装置101は、NVMモジュール126のLBA0空間、LBA1空間の記憶空間の中で、未使用(キャッシュデータが格納されていない)領域を管理する必要があるため、未使用領域一覧の情報を有する。これをフリーリスト3500と呼び、一例を図29に示す。フリーリスト3500には、フリーLBA0リスト3510と、フリーLBA1リスト3520があり、それぞれのリスト(3510、3520)には、未使用のLBA0/1(具体的にはボリューム間マッピング情報3000の、Cache LBA0(3030)やCache LBA1(3080)に値が格納されていないLBA0/1)のリストが格納されている。
 伸長VOLから圧縮VOLに移されたデータは、最終記憶媒体(111、112)に書き込まれる(デステージと呼ぶ)。ストレージ装置101は圧縮VOLと圧縮VOLを構成する最終記憶媒体の対応関係を管理するため、一例として、論理物理変換テーブル3700(図30)という管理情報を維持管理している。図30において、LDEV#3710には圧縮VOLのストレージ装置101内での識別番号、LBA3720が当該圧縮VOLのLBAが格納される。PDEV#3730にはLDEV#3710を構成する最終記憶媒体の識別番号、LBA3740には当該最終記憶媒体のLBAが格納される。またParity3750とPLBA3760は、LDEV#3710、LBA3720で特定される圧縮VOL上の領域に対応するパリティが格納される最終記憶媒体の識別番号と当該最終記憶媒体のLBAが格納される。なお、図30は、最終記憶媒体群で構成されるRAIDグループのRAIDレベルが、RAID4や5のように1つのパリティを生成する構成の場合の例であり、複数のパリティを生成するRAIDレベル(RAID6)の場合には、Parity3750には、複数の最終記憶媒体の識別番号が格納される。
 そしてCache LBA1(3770)には、ストレージコントローラ110上で生成したパリティを一時格納するためのNVMモジュール126の領域(LBA空間)が格納される。また圧縮情報#3780とLBA3790には、LDEV#3710、LBA3720で特定される圧縮VOL上の領域に対応する圧縮情報を格納する、最終記憶媒体の識別番号とLBAが記憶される。
 続いてストレージ装置101で行われるI/O処理の流れについて説明する。まず図3を用いて、ストレージ装置101が上位装置103からライトコマンドを受信した場合のデータの流れの概要を説明する。ストレージ装置101が上位装置103より、ライト要求とライトデータを受信すると、当該ライトデータはDRAM125を経由してNVMモジュール126へと格納される。その際NMVモジュール126内でデータ圧縮が行われ、圧縮データがFM420に格納される。その後ストレージ装置101はNVMモジュール126に対して、先ほど格納された圧縮データを用いたパリティ生成を指示して、NVMモジュール126内でパリティを生成させる。最後に圧縮データとパリティとをNVMモジュール126から読み出して、最終記憶媒体へと書き込む。これらの処理は、ストレージ装置101のプロセッサ121が、DRAM125に格納されているプログラムを実行することにより実現される。以下、ライトデータをキャッシュ(NVMモジュール126)に格納する処理、パリティの生成処理、最終記憶媒体への圧縮データとパリティの書き込み(デステージ)処理、そしてデータのリード処理について、フローチャートを用いて説明する。
(3-1)ストレージ装置のライトデータキャッシュ格納動作
 ライトデータキャッシュ格納処理について図24を用いて説明する。ストレージ装置101のライトデータキャッシュ格納動作の最初のステップS2001では、ストレージコントローラ110のプロセッサ121が、上位装置103よりライトデータとライト先となるLUのLUN(Logical Unit Number)とLU内領域を特定するアドレス(LBA)を受領する(以下、このLUNとLBAとをあわせて、「ライトアドレス」と呼ぶ)。この時ライトデータは、図3に示すデータフロー311のように一旦、ストレージコントローラ110のDRAM125に記録される。尚、Hostインターフェース124より、NVMモジュール126に直接データを転送する機能がある場合、DRAM125に記録する処理は省略可能である。
 S2002では、プロセッサ121がS2001にて取得したライトアドレスを用いて、キャッシュヒット判定を行う。キャッシュヒット判定は、ボリューム間マッピング情報3000を参照して行う。ライトアドレスが示すライト対象領域が、NVMモジュール126により構成されるキャッシュ上にステージングされている場合(ボリューム間マッピング情報3000のCache LBA0(3030)に値が格納されている場合)、ライトヒットとなる。一方で、ライトアドレスが示す対象がNVMモジュール126により構成されるキャッシュ上に無い場合(ボリューム間マッピング情報3000のCache LBA0(3030)に値が格納されていない場合)、ライトミスとなる。
 S2003は、S2002の判定結果により分岐するステップである。S2001の結果がキャッシュヒットの場合、S2004に遷移する。また、S2001の結果がキャッシュミスの場合S2009に遷移する。
 S2004では、プロセッサ121はNVMモジュール126上にステージングされている領域のLBA0を取得する(ボリューム間マッピング情報3000のCache LBA0(3030)を取得する)。
 S2003より続くステップS2009では、プロセッサ121はライトデータを記録するNVMモジュール126のLBA0を新規に取得する。プロセッサ121はフリーLBA0リスト3510を参照し、未使用のフリーLBA0を取得する。同時にフリーLBA0リスト3510から、取得したフリーLBA0は削除する。
 S2005では、プロセッサ121はS2004またはS2009にて取得したLBA0を指定し、図10にて示したライトコマンド1010を用いてNVMモジュール126に対してデータをライトする。
 S2006では、プロセッサ121は、図10にて示したライト応答情報1020をNVMモジュール126より取得し、ライト応答情報1020の圧縮データ長1023のフィールドより、S2005にてライトしたデータの圧縮後のデータサイズを取得する。
 S2007では、プロセッサ121は管理情報を更新し、上位装置103にライト処理が完了した旨を返送する。管理情報の1つがボリューム間マッピング情報3000で、サイズ3040にS2006で取得した情報を登録する。またS2009で新規LBA0を取得した場合、新規に取得したLBA0の情報をボリューム間マッピング情報3000のCache LBA0(3030)に格納する。この管理情報を用いることで、その後、同一アドレスへのライト要求を受領した際には、キャッシュヒットと判定することが可能となる。
 S2008では、プロセッサ121はNVMモジュール126により構成されるキャッシュ上に保持されている圧縮データのうち、RAIDパリティが生成されていないデータの総量が閾値以上になったかを判断する。キャッシュ上に保持されている圧縮データのうち、RAIDパリティが生成されていないデータの総量が閾値以上になった場合、プロセッサ121は、キャッシュに圧縮して記録されたデータに対してパリティを生成する必要があると判断し、パリティ生成動作に遷移する。一方で、キャッシュ上に保持されている圧縮データの内、RAIDパリティが生成されていないデータの総量が閾値以下の場合、プロセッサ121はパリティ生成が不要と判断し、ライトデータのキャッシュ格納動作を終了する。以上が本実施例におけるライトデータのキャッシュ格納動作である。
(3-2)ストレージ装置のRAIDパリティ生成動作
 続いて本実施例におけるストレージ装置のRAIDパリティ生成動作について、図25を用いて説明する。本実施例のキャッシュ格納動作は、図24に示したライトデータのキャッシュ格納動作におけるステップS2008にてキャッシュ上に保持されている圧縮データの内、RAIDパリティが生成されていないデータの総量が閾値以上になったと判定された場合にのみ実行されるものではない。例えば、上位装置からのリクエストが少ない時や、全くない時等、任意のタイミングで実施してもよい。
 RAIDパリティ生成処理の最初のステップS2101では、プロセッサ121はボリューム間マッピング情報3000を参照し、伸長VOL5000に格納されたデータ(正確には、伸長VOL5000に書き込まれた結果、NVMモジュール126にて構成されるキャッシュ領域(LBA0空間)に格納されているデータ)の中から、パリティ生成対象とするデータを選択する。このとき、プロセッサ121は、所定のルールによりパリティ生成対象とするデータを選択する。このルールは、例えば、キャッシュ領域に記録されてからの経過時間が長いデータや、更新頻度の相対的に低いデータ等をパリティ生成対象と決定するルールである。たとえばボリューム間マッピング情報3000の状態情報3050に格納される、最終アクセス時刻等を参考に決定可能である。
 S2102では、プロセッサ121がS2101にて選択したデータ(LBA0空間の領域に記録されている)の、圧縮後の正確なデータサイズを取得する。プロセッサ121は、パリティ生成対象領域として選択した複数のLBA0領域毎に、図15に示したLBA0サイズ取得コマンド1110をNVMモジュール126に発行する。そしてプロセッサ121は、LBA0サイズ取得応答により、圧縮後のデータサイズを個々に取得する。
 S2103では、プロセッサ121は、S2101にて選択したデータを圧縮VOLのLBAに対応付ける。圧縮VOLのLBAの選択は様々な方法が利用できるが、本実施例では、各ライトデータを圧縮VOLに対して追記書きする方法を採用する。そのため、前回最後に圧縮VOLに対して対応付けを行ったLBAの次のアドレスから順に、S2101で選択したデータを対応付ける。対応付けの結果は、ボリューム間マッピング情報3000のLBA3070に記録する。
 またこの時点では、S2101にて選択したデータはNVMモジュール126内(LBA0空間)に格納されているが、LBA1空間への対応づけが行われていないので、プロセッサ121は、当該選択したデータが格納されているLBA0空間の領域をLBA1空間の領域にマッピングする。プロセッサ121は、フリーLBA1リスト3520を参照し、S2102にて取得した圧縮後のデータサイズがマッピング可能なLBA1領域を取得して、ボリューム間マッピング情報3000のCache LBA1(3080)に記録する。この時、圧縮後のデータサイズが複数セクタ分のサイズの場合、複数のLBA1をフリーLBA1リスト3520から取得する必要があるが、アドレスが連続しているLBA1を取得する。そして、各LBA0と各LBA1を指定した図17に示したLBA1マッピングコマンドをNVMモジュール126に転送し、S2101にて選択したLBA0データ(圧縮データ)をLBA1領域にマッピングする。具体的には、LBA1マッピングコマンド1210のLBA0開始アドレスにはボリューム間マッピング情報3000のCache LBA0(3030)を、LBA1開始アドレスにはボリューム間マッピング情報3000のCache LBA1(3080)を、LBA0長には8(8セクタ)を指定したコマンドを発行する。また必要に応じてこのコマンドを複数回発行する。
 S2104では、プロセッサ121はNVMモジュール126の提供する論理空間であるLBA1空間上に、これから生成するパリティの記録先領域を確保し、記録先領域の情報(LBA1)を論理物理変換テーブル3700内Cache LBA1(3770)の欄に格納する。
 S2105は、フルストライプパリティ生成を行うか判断するステップである。プロセッサ121は、パリティを構成するデータについて、同一ストライプ列に属する全てのデータ(パリティを生成するために必要なすべてのデータ)がキャッシュに存在する場合、フルストライプパリティ生成を行うと決定し、S2106に遷移する。一方で、パリティを構成するデータについて、パリティを生成するために必要なデータが一部しかない場合、更新パリティ生成を行うと決定し、S2108に遷移する。
 S2106では、S2103にてLBA1にマッピングした圧縮データに対してRAIDパリティを生成し、S2104にて確保したパリティ用LBA1領域にRAIDパリティをマッピングするようNVMモジュール126に指示する。より詳細には、LBA1に対してマッピングされた1又は複数の圧縮データからなるデータ列を、一定サイズのパリティを生成するために必要なデータ(圧縮データ)に分割し、これらパリティを生成するために必要なデータに基づき、データ列に対するパリティを生成する。プロセッサ121は、パリティを生成するために必要な圧縮データの格納アドレス(LBA1)の情報及び生成されるパリティの格納位置(LBA1)の情報を、図18に示したフルストライプパリティ生成コマンド1310のLBA1開始アドレス1315~1319に指定したコマンドを作成し、当該コマンドをNVMモジュール126に発行する。
 S2108は、更新パリティ生成方式によるパリティ生成の処理である。プロセッサ121は、最終記憶媒体より旧圧縮データと旧パリティを読み出して、一旦DRAM125に格納する。続いてNVMモジュール126の提供する論理空間であるLBA1空間上に、旧圧縮データと旧パリティの記録先領域を確保し、図10に示したライトコマンド1010を用いて、LBA1に旧圧縮データと旧パリティをライトする。
 S2109では、プロセッサ121はS2103にてLBA1にマッピングした圧縮データとS2108にてLBA1に記録された旧圧縮データ、旧パリティを用いて更新パリティ生成を指示する。プロセッサ121は圧縮データ、旧圧縮データ、旧パリティの領域(LBA1空間のアドレス)を指定した更新パリティ生成コマンド1410を作成して、NVMモジュール126に発行する。
 S2107は、デステージが必要か判断するステップである。プロセッサ121は、パリティを生成したキャッシュ上の圧縮データを最終記憶媒体に記録すべきか判断する。この判断は例えば、キャッシュの空き領域により決定する。ストレージ装置は、キャッシュに空き領域が閾値以下であれば、空き領域を作成するために、デステージ処理を開始する。一方、キャッシュに十分な空き領域があると判断すれば、パリティ生成処理は終了となる。
 以上が本実施例におけるパリティ生成動作である。なお、ここまで本実施例におけるRAID6のパリティ生成動作を前提に記述したが、RAID5も同様である。
(3-3)ストレージ装置のデステージ動作
 続いて本実施例におけるストレージ装置のデステージ動作について説明する。本実施例のデステージ動作は、図25に示したRAIDパリティ生成動作におけるステップ2107にてデステージ要と判断された場合以外に実行されてもよい。例えば、上位装置からのリクエストが少ない時や、全くない時に実施するようにしてもよい。本実施例のデステージ動作は、図3に示した本実施例のライトデータ圧縮動作の処理320~321である。デステージ動作について図26のフローを用いて説明する。
 S2201は、キャッシュ装置であるNVMモジュール126からデステージするデータを選択するステップである。この時プロセッサ121は、伸長されたイメージがマッピングされているLBA0ではなく、圧縮データがマッピングされているLBA1からデステージする領域を選択する。デステージは、上位装置からのアクセス頻度が低い、またはシーケンシャルライトのデータと判断されるデータを対象に優先的に実施する。尚、アクセス頻度が低いデータがLBA0にのみマッピングされている場合、ストレージ装置は、LBA1マッピングコマンド1210を用いてそのデータの圧縮データをLBA1にマッピングし、そのLBA1領域をデステージ対象とするとしてもよい。
 S2202では、プロセッサ121はS2201にて選択したLBA1領域のデータの伸長に必要な圧縮情報を、NVMモジュール126から取得する。具体的には、プロセッサ121は圧縮情報取得コマンド1510をNVMモジュール126に転送し、NVMモジュール126はそのコマンドに指定された圧縮情報アドレスに、S2201にて指定されたLBA1領域を伸長するのに必要な圧縮情報を転送する。
 S2203では、プロセッサ121はS2201にて選択したLBA1領域の圧縮データを取得する。プロセッサ121は、リードコマンド1610を用いLBA0/1開始アドレス1613により圧縮データの取得先となるLBA1アドレスを指定する。リードコマンドを受領したNVMモジュール126は、LBA1に対応づけられた圧縮データを伸長せずにストレージ装置に転送する。
 S2204では、S2202にて取得した圧縮情報とS2203にて取得した圧縮データを最終記憶媒体に記録するステップである。プロセッサ121は、論理物理変換テーブル3700を参照し、当該テーブル3700内のPDEV#3730、LBA3740で特定される領域に圧縮データを記録し、Parity3750、PLBA3760で特定される領域にパリティを記録する。また圧縮情報#3780、LBA3790で特定される領域に圧縮情報を格納する。ストレージ装置101は上位装置103からのリード要求を受領した際には、圧縮情報を最終記憶媒体より取得し、最終記憶媒体に格納した圧縮データを伸長して上位装置に転送する。
 S2205では、ストレージ装置が利用の終了したLBA1領域(ボリューム間マッピング情報3000のCache LBA1(3080)、論理物理変換テーブル3700のCache LBA1(3770)で特定されるLBA1)のマッピングを解除する。プロセッサ121は、マッピング解除コマンド1710を用いて解除するLBA1領域を指定する。コマンドを受領したNVMモジュール126は、LBA1-PBA変換テーブルを更新し、圧縮データのLBA1への対応づけを解除する。同時にプロセッサ121は、ボリューム間マッピング情報3000、論理物理変換テーブル3700の内容を更新し、デステージ処理を終了する。
(3-4)ストレージ装置のリード動作
 続いて本実施例におけるストレージ装置のリード処理(伸長リード)について図27を用いて説明する。本実施例のストレージ装置は、ストレージ装置のライトデータ圧縮動作にて最終記憶媒体に記録したデータについて、上位装置からのリード要求に対しデータを伸長して返答する。
 S2301では、プロセッサ121は上位装置103よりリード要求とリード対象アドレスを受領する。
 S2302では、プロセッサ121はボリューム間マッピング情報3000を用いて、S2301にて取得した伸長VOL5000のリードアドレスに対してキャッシュ(LBA0空間)が割り当てられているか否か検査する。この処理はS2002と同様の処理である。S2303は、S2302にて判定した条件により分岐するステップである。S2202にてキャッシュミスと判定されている場合、S2304に遷移する。一方で、S2302にてキャッシュヒットと判定されている場合、S2311に遷移する。
 S2304では、プロセッサ121はボリューム間マッピング情報3000、論理物理変換テーブル3700を用いて、リード対象領域の圧縮データとその伸長に必要な圧縮情報が格納されている最終記憶媒体のアドレスを取得する。そしてS2305では、ストレージ装置が最終記憶媒体より圧縮情報と圧縮データを取得する。取得したデータは一時的にDRAM125に格納される。
 S2306では、プロセッサ121はフリーLBA1リスト3520から未使用のLBA1を取得してボリューム間マッピング情報3000に登録する。また、取得したLBA1を格納先アドレスとして、圧縮データをNVMモジュール126に格納する。この時、図10のライトコマンド1010をNVMモジュール126に発行することで、圧縮データの格納を行う。S2307では、プロセッサ121はS2305にて取得した圧縮情報を、圧縮情報転送コマンド1810を用いてNVMモジュール126に転送する。
 S2308では、プロセッサ121はS2306にてライトした圧縮データを伸長して取得するために圧縮データをLBA0にマッピングする。プロセッサ121はフリーLBA0リスト3510から未使用のLBA0を取得し、ボリューム間マッピング情報3000に登録する。また図23のLBA0マッピングコマンドを用いて圧縮データを、当該取得したLBA0と、圧縮データの格納されている領域のLBA1とをマッピングするようNVMモジュール126に指示する。コマンドを取得したNVMモジュール126は、LBA1に対応づけられている圧縮データに関する圧縮情報を参照し、圧縮データの伸長後のデータサイズに対応するLBA0の領域に圧縮データを対応づける。
 S2309では、プロセッサ121は、S2306にてNVMモジュール126に格納した圧縮データを、LBA0を指定してリードすることで伸長して取得するステップである。LBA0を指定したリードコマンドを取得したNVMモジュール126は、LBA0に対応づけられた圧縮データをFMから取得し、圧縮伸長ユニットにて伸長した後、ストレージコントローラ110(のDRAM125)に転送する。S2310では、S2309にて取得した伸長後のデータをリード要求への応答データとしてサーバに転送し、処理を終了する。
 S2311に進んだ(キャッシュヒット)場合、プロセッサ121はボリューム間マッピング情報3000を参照し、リード対象領域が既に格納されているLBA0を取得し、そのLBA0を用いてNVMモジュール126から圧縮データを伸長して読み出し(S2309)、サーバへと伸長したデータを転送して(S2310)、処理を終了する。
 以上が、ストレージ装置101が上位装置103からI/O要求(リード、ライトコマンド)を受信した場合の処理の流れである。最後に、本発明の効果を説明する。上で述べたとおり、ストレージ装置101が上位装置103からライトデータを受領すると、ライトデータは一旦DRAM125に記録され、続いてライトデータはDRAM125からNVMモジュール126のデータ圧縮伸長ユニット418に転送されてデータ圧縮された後、FM420に記録される(図3のデータフロー311~313)。続いてFM420に記録された圧縮データから、パリティ生成ユニット419によってパリティの生成が行われる(図3のデータフロー315~316)。その後ライトデータ(圧縮データ)とそのパリティは、最終記憶媒体(111/112)へと記録される。本発明のストレージ装置101では、NVMモジュール126内に圧縮機能とパリティ生成機能が存在するため、データの圧縮及びパリティの生成に伴って発生するデータ転送(図3のデータフロー313~316)は、NVMモジュール126内でのみ行われ、NVMモジュール126外には影響を及ぼさない。一方、圧縮機能やパリティ生成機能がNVMモジュール126外に存在する場合、たとえばプロセッサ121で圧縮やパリティを生成する場合には、圧縮やパリティ生成を行うたびにNVMモジュール126(あるいはDRAM125)、プロセッサ121、内部スイッチ122間でのデータ転送が多数発生し、ストレージコントローラ110の性能向上の妨げになる。本発明のストレージ装置101は、NVMモジュール126内に圧縮機能とパリティ生成機能を内蔵することで、ストレージコントローラ110内の各要素間のデータ転送帯域の消費を抑えることができるという利点を有する。
101:ストレージ装置
102:SAN
103:上位装置
104:管理装置
110:ストレージコントローラ
111:SSD
112:HDD
121:プロセッサ
122:内部SW
123:ディスクインターフェース
124:ホストインターフェース
125:DRAM
126:NVMモジュール
410:FMコントローラ
411:I/Oインターフェース
413:RAM
414:スイッチ
416:データバッファ
417:FMインターフェース
418:データ圧縮/伸長ユニット
419:パリティ生成ユニット

Claims (15)

  1.  上位装置からのアクセス要求を受け付けるストレージ装置であって、
     前記ストレージ装置は、プロセッサと、記憶領域を有するキャッシュ装置と、前記上位装置からのライトデータを格納するための最終記憶媒体とを備え、
     前記キャッシュ装置は、前記プロセッサから発行される第1のデータ格納指示を受信すると、前記ストレージ装置が前記上位装置から受け付けたライトデータを圧縮し、前記ライトデータを圧縮された状態で前記キャッシュ装置が有する記憶領域に格納し、
     前記キャッシュ装置は、前記プロセッサから発行される第1のデータ読み出し指示を受信したことに応じて、前記記憶領域に格納された前記ライトデータを圧縮されていない状態で外部に送信し、前記プロセッサから発行される第2のデータ読み出し指示を受信したことに応じて、前記記憶領域に格納された前記ライトデータを前記圧縮した状態で外部に送信することを特徴とする、
    ストレージ装置。
  2.  前記キャッシュ装置は、前記プロセッサからのパリティ生成指示に応じて、前記記憶領域に格納された前記ライトデータからパリティを生成することを特徴とする、請求項1に記載のストレージ装置。
  3.  前記キャッシュ装置は、前記プロセッサからのパリティ生成指示に応じて、前記記憶領域に格納された、圧縮した状態の複数の前記ライトデータの排他的論理和を計算することによってパリティを生成することを特徴とする、請求項2に記載のストレージ装置。
  4.  前記キャッシュ装置は、前記プロセッサに対して第1の論理記憶空間と第2の論理記憶空間を提供し、
     前記プロセッサが発行する前記第1のデータ読み出し指示には、前記第1の論理記憶空間のアドレスが指定されており、前記キャッシュ装置は前記第1の論理記憶空間のアドレスで特定される前記記憶領域上の位置から、前記圧縮された状態のデータを読み出し、前記読み出されたデータを前記圧縮されていない状態に変換した後、外部に送信することを特徴とする、請求項1に記載のストレージ装置。
  5.  前記プロセッサが発行する前記第2のデータ読み出し指示には、前記第2の論理記憶空間のアドレスが指定されており、前記キャッシュ装置は前記第2の論理記憶空間のアドレスで特定される、前記記憶領域上の位置から前記圧縮された状態のデータを読み出し、前記読み出されたデータを圧縮された状態のまま、外部に送信することを特徴とする、請求項4に記載のストレージ装置。
  6.  前記プロセッサが発行する前記第1のデータ格納指示には、前記第1の論理記憶空間上の第1アドレスが指定されており、前記プロセッサが、前記第1アドレスと、前記第2の論理記憶空間上のアドレスである第2アドレスとを含む、マッピング指示を前記キャッシュ装置に発行すると、前記キャッシュ装置は、前記第1アドレスを指定して格納された前記ライトデータを前記第2アドレスに対応付け、
     前記キャッシュ装置がその後、前記プロセッサから、前記第2アドレスが指定された第2のデータ読み出し指示を受信すると、前記第1アドレスを指定して格納された前記ライトデータを前記圧縮されていない状態で外部に送信する、
    ことを特徴とする、請求項4に記載のストレージ装置。
  7.  前記プロセッサが前記キャッシュ装置に対し、データ格納元アドレスと、前記第2の論理記憶空間上のアドレスを格納先アドレスとして指定した第2のデータ格納指示を発行すると、前記キャッシュ装置は、データ格納元アドレスで特定される領域に存在するデータを、前記指定された第2の論理記憶空間上のアドレスで特定される、前記記憶領域上の位置に、そのまま格納する、
    ことを特徴とする、請求項4に記載のストレージ装置。
  8.  前記キャッシュ装置の有する前記記憶領域は、フラッシュメモリで構成されており、
     前記キャッシュ装置が前記プロセッサから、前記第1または第2のデータ格納指示を受け付けると、前記記憶領域上の未書き込み領域を選択し、前記選択された未書き込み領域に、前記第1または第2のデータ格納指示で指定されたデータを格納することを特徴とする、
    請求項7に記載のストレージ装置。
  9.  前記キャッシュ装置は、前記第1または第2のデータ格納指示で指定されたデータが格納された領域と、前記第1または第2のデータ格納指示で指定されたアドレスとの対応関係の情報を記憶しており、
     前記キャッシュ装置は、前記プロセッサから前記対応関係の解除指示を受け付けると、前記データの格納された領域を無効領域として管理し、前記無効領域の量が所定値を超過すると、ガーベッジコレクションを行うことを特徴とする、
    請求項8に記載のストレージ装置。
  10.  プロセッサと、記憶領域を有するキャッシュ装置と、上位装置からのライトデータを格納するための最終記憶媒体とを備えたストレージ装置におけるキャッシュ制御方法であって、
     前記プロセッサは、第1のデータ格納指示を前記キャッシュ装置に発行することによって、前記ストレージ装置に接続される上位装置から受け付けたライトデータを圧縮し、前記ライトデータを圧縮された状態で前記キャッシュ装置が有する記憶領域に格納し、
     前記プロセッサは、前記上位装置からデータ読み出し要求を受信すると、第1のデータ読み出し指示を前記キャッシュ装置に発行することによって、前記記憶領域に格納された前記ライトデータを圧縮されていない状態で読み出して前記上位装置に送信し、
     前記プロセッサはまた、前記記憶領域に格納された前記ライトデータを前記最終記憶媒体に格納する時、第2のデータ読み出し指示を前記キャッシュ装置に発行することによって、前記記憶領域に格納された前記ライトデータを前記圧縮した状態で取得し、前記取得したデータを最終記憶媒体に格納する、
    ことを特徴とするキャッシュ制御方法。
  11.  前記プロセッサは前記ライトデータを前記最終記憶媒体に格納する前に、前記キャッシュ装置にパリティ生成指示を発行し、前記記憶領域に格納された前記ライトデータからパリティを生成させることを特徴とする、請求項10に記載のキャッシュ制御方法。
  12.  前記キャッシュ装置は、前記プロセッサからのパリティ生成指示に応じて、前記記憶領域に格納された、圧縮した状態の複数の前記ライトデータの排他的論理和を計算することによってパリティを生成することを特徴とする、請求項11に記載のキャッシュ制御方法。
  13.  前記キャッシュ装置は、前記プロセッサに対して第1の論理記憶空間と第2の論理記憶空間を提供する装置であって、
     前記プロセッサが発行する前記第1のデータ読み出し指示には、前記第1の論理記憶空間のアドレスが指定されており、前記キャッシュ装置は前記第1の前論理記憶空間のアドレスで特定される前記記憶領域上の位置から前記圧縮された状態のデータを読み出し、前記読み出されたデータを前記圧縮されていない状態に変換した後、外部に送信することを特徴とする、請求項10に記載のキャッシュ制御方法。
  14.  前記プロセッサが発行する前記第2のデータ読み出し指示には、前記第2の論理記憶空間のアドレスが指定されており、前記キャッシュ装置は前記第2の前論理記憶空間のアドレスで特定される、前記記憶領域上の位置から前記圧縮された状態のデータを読み出し、前記読み出されたデータを圧縮された状態のまま、外部に送信することを特徴とする、請求項13に記載のキャッシュ制御方法。
  15.  前記プロセッサが発行する前記第1のデータ格納指示には、前記第1の論理記憶空間上の第1アドレスが指定されており、
     前記プロセッサが前記第1のデータ格納指示を発行した後、さらに前記第1アドレスと、前記第2の論理記憶空間上のアドレスである第2アドレスとを含む、マッピング指示を前記キャッシュ装置に発行すると、前記キャッシュ装置は、前記第1アドレスを指定して格納された前記ライトデータを前記第2アドレスに対応付け、
     前記プロセッサがその後、前記第2アドレスが指定された第2のデータ読み出し指示を前記キャッシュ装置に発行すると、前記キャッシュ装置は前記第1アドレスを指定して格納された前記ライトデータを前記圧縮されていない状態で外部に送信する、
    ことを特徴とする、請求項14に記載のキャッシュ制御方法。
PCT/JP2013/081638 2013-11-25 2013-11-25 ストレージ装置及びその制御方法 WO2015075837A1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/081638 WO2015075837A1 (ja) 2013-11-25 2013-11-25 ストレージ装置及びその制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/081638 WO2015075837A1 (ja) 2013-11-25 2013-11-25 ストレージ装置及びその制御方法

Publications (1)

Publication Number Publication Date
WO2015075837A1 true WO2015075837A1 (ja) 2015-05-28

Family

ID=53179139

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2013/081638 WO2015075837A1 (ja) 2013-11-25 2013-11-25 ストレージ装置及びその制御方法

Country Status (1)

Country Link
WO (1) WO2015075837A1 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10592173B2 (en) 2018-01-10 2020-03-17 International Business Machines Corporation Increasing storage efficiency of a data protection technique
JP2020123041A (ja) * 2019-01-29 2020-08-13 キオクシア株式会社 メモリシステムおよび制御方法
CN113552999A (zh) * 2020-04-01 2021-10-26 株式会社日立制作所 存储装置
CN113918485A (zh) * 2021-10-12 2022-01-11 广东省高峰科技有限公司 一种闪存资料防丢失方法、装置、设备及存储介质
US11645149B2 (en) 2021-03-09 2023-05-09 Kioxia Corporation Information processing system, storage device, and host

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004013373A (ja) * 2002-06-05 2004-01-15 Hitachi Ltd 外部記憶装置システム及び記憶制御装置
JP2004227676A (ja) * 2003-01-23 2004-08-12 Sony Corp 記録装置および記録制御方法、ならびに、記録再生装置
US20050015374A1 (en) * 2003-05-28 2005-01-20 Rob Reinauer System and method for utilizing compression in database caches to facilitate access to database information
JP2007199891A (ja) * 2006-01-25 2007-08-09 Hitachi Ltd ストレージシステム及び記憶制御装置
JP2009104236A (ja) * 2007-10-19 2009-05-14 Hitachi Ltd ストレージ装置及びこれを用いたデータ格納方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004013373A (ja) * 2002-06-05 2004-01-15 Hitachi Ltd 外部記憶装置システム及び記憶制御装置
JP2004227676A (ja) * 2003-01-23 2004-08-12 Sony Corp 記録装置および記録制御方法、ならびに、記録再生装置
US20050015374A1 (en) * 2003-05-28 2005-01-20 Rob Reinauer System and method for utilizing compression in database caches to facilitate access to database information
JP2007199891A (ja) * 2006-01-25 2007-08-09 Hitachi Ltd ストレージシステム及び記憶制御装置
JP2009104236A (ja) * 2007-10-19 2009-05-14 Hitachi Ltd ストレージ装置及びこれを用いたデータ格納方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10592173B2 (en) 2018-01-10 2020-03-17 International Business Machines Corporation Increasing storage efficiency of a data protection technique
JP2020123041A (ja) * 2019-01-29 2020-08-13 キオクシア株式会社 メモリシステムおよび制御方法
JP7159069B2 (ja) 2019-01-29 2022-10-24 キオクシア株式会社 メモリシステムおよび制御方法
CN113552999A (zh) * 2020-04-01 2021-10-26 株式会社日立制作所 存储装置
US11645149B2 (en) 2021-03-09 2023-05-09 Kioxia Corporation Information processing system, storage device, and host
CN113918485A (zh) * 2021-10-12 2022-01-11 广东省高峰科技有限公司 一种闪存资料防丢失方法、装置、设备及存储介质
CN113918485B (zh) * 2021-10-12 2023-04-11 广东省高峰科技有限公司 一种闪存资料防丢失方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US20180173632A1 (en) Storage device and method for controlling storage device
US20230267075A1 (en) Controller for controlling non-volatile semiconductor memory and method of controlling non-volatile semiconductor memory
US9792067B2 (en) Trim command processing in a solid state drive
JP5918906B2 (ja) ストレージ装置及びストレージ制御方法
US9063663B2 (en) Semiconductor storage device and data control method thereof
US9111618B2 (en) De-duplication in flash memory module
US9251052B2 (en) Systems and methods for profiling a non-volatile cache having a logical-to-physical translation layer
US10102117B2 (en) Systems and methods for cache and storage device coordination
JP6429963B2 (ja) ストレージ装置及びストレージ装置の制御方法
JP6007332B2 (ja) ストレージシステム及びデータライト方法
US10956071B2 (en) Container key value store for data storage devices
KR102603070B1 (ko) 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법
US10423339B2 (en) Logical block address mapping for hard disk drives
KR20170125178A (ko) Raid 스토리지 장치 및 그것의 관리 방법
JP6677740B2 (ja) ストレージシステム
KR20150010729A (ko) 플래시 메모리 시스템에서 trim 동작 관리
US10866743B2 (en) Storage control device using index indicating order of additional writing of data, storage control method using index indicating order of additional writing of data, and recording medium recording program using index indicating order of additional writing of data
WO2015075837A1 (ja) ストレージ装置及びその制御方法
US10296229B2 (en) Storage apparatus
JP2019074897A (ja) ストレージ制御装置、及びプログラム
US8086914B2 (en) Storing data to multi-chip low-latency random read memory device using non-aligned striping
WO2015097739A1 (ja) ストレージ装置及びその制御方法
WO2015118680A1 (ja) ストレージ装置
JP6693181B2 (ja) ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム
KR20110089972A (ko) 메모리 장치

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

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 13897855

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP