WO2016151831A1 - ストレージシステム - Google Patents

ストレージシステム Download PDF

Info

Publication number
WO2016151831A1
WO2016151831A1 PCT/JP2015/059312 JP2015059312W WO2016151831A1 WO 2016151831 A1 WO2016151831 A1 WO 2016151831A1 JP 2015059312 W JP2015059312 W JP 2015059312W WO 2016151831 A1 WO2016151831 A1 WO 2016151831A1
Authority
WO
WIPO (PCT)
Prior art keywords
data
compressed
host
host data
control node
Prior art date
Application number
PCT/JP2015/059312
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/JP2015/059312 priority Critical patent/WO2016151831A1/ja
Publication of WO2016151831A1 publication Critical patent/WO2016151831A1/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
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/222Non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • 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 system.
  • Patent Document 1 discloses that redundant data is guaranteed by duplicating host data in two clusters, generating a guarantee code in one cluster, and checking the guarantee code in the other cluster.
  • ⁇ Data compression is a method for reducing the data flow rate. In storage data compression, it is necessary to check whether compression processing is performed correctly to prevent data loss.
  • Japanese Patent Application Laid-Open No. 2004-228561 discloses a method for performing compression processing verification by comparing guarantee codes of data before and after compression using two compression devices. Further, Patent Document 3 discloses that the reliability of compressed data is improved by comparing a guarantee code before compression and a guarantee code regenerated using data obtained by decompressing compressed data.
  • the data flow rate passing through the main memory is larger than that of the host read, and the performance of the main memory affects the performance of the host write.
  • the passage data flow rate of the main memory is increased by performing compression processing with two compression devices.
  • the storage apparatus cannot detect the destruction of data before compression, and may lose data. Therefore, a technology that reduces the data flow rate in the storage system and maintains the reliability of the host data is desired.
  • a typical example of the present invention is a storage system including a first control node, a second control node, and a final storage device that provides a compressed volume, and the first control node is uncompressed from a host.
  • Receiving host data compressing the uncompressed host data to generate compressed host data, holding the compressed host data as cache data in a first memory, decompressing the compressed host data, and If the compressed host data is correct, the compressed host data is transferred to the second control node, and the second control node uses the compressed data as cache data in the second memory. It is to hold.
  • FIG. 1 shows an example of the configuration of a storage apparatus in the first embodiment.
  • FIG. 2 shows a hardware configuration of the NVM module in the first embodiment.
  • FIG. 3A shows data areas existing on the main memory and the NVM module in the first embodiment.
  • FIG. 3B shows a configuration example of host data in the first embodiment.
  • FIG. 3C shows an example of control data on the main memory in the first embodiment.
  • FIG. 4 illustrates the concept of association between the LBA0 space and the LBA1 space, which are logical storage spaces provided by the NVM module to the storage node in the first embodiment, and the PBA space.
  • FIG. 5 shows the storage space handled by the storage apparatus and its correspondence in the first embodiment.
  • FIG. 6A shows an LBA0-PBA conversion table in the first embodiment.
  • FIG. 6B shows an LBA1-PBA conversion table in the first embodiment.
  • FIG. 7 shows a data format generated by each component of the storage apparatus when the host apparatus writes 4 KB data in the first embodiment.
  • FIG. 8A shows a write command supported by the NVM module in the first embodiment.
  • FIG. 8B shows response information to the write command supported by the NVM module in the first embodiment.
  • FIG. 9A shows an LBA1 mapping command supported by the NVM module in the first embodiment.
  • FIG. 9B shows an LBA0 mapping command supported by the NVM module in the first embodiment.
  • FIG. 9C shows a compressed data size acquisition command supported by the NVM module in the first embodiment.
  • FIG. 10 is a diagram illustrating a full stripe parity generation command supported by the NVM module in the first embodiment.
  • FIG. 11 shows a flow of compression host write processing of the storage apparatus in the first embodiment.
  • FIG. 12 illustrates a process in which the storage apparatus analyzes the request contents of the host and determines the sequentiality of the IO process in the first embodiment.
  • FIG. 13 illustrates a process in which the storage apparatus determines the compression processing effect by data compression in the first embodiment.
  • FIG. 14 shows a table that includes compression history information in the first embodiment and stores information for the MP core to manage the compression history information.
  • FIG. 15 shows a data flow of the front end light in the compression sequential write specialization process in the first embodiment.
  • FIG. 16 shows a processing flow of front-end write processing specialized for sequential write processing in the first embodiment.
  • FIG. 17 shows a data flow of the front end light in the normal sequential write process in the first embodiment.
  • FIG. 18 shows a processing flow of normal front end light processing in the first embodiment.
  • FIG. 19 shows an example of the configuration of the storage apparatus in the second embodiment.
  • FIG. 20 shows the storage space handled by the storage apparatus and its correspondence in the second embodiment.
  • FIG. 21 shows a flow of compression sequential write processing of the storage apparatus in the second embodiment.
  • FIG. 22 shows a data flow of the front end write process in the compressed sequential write special process in the second embodiment.
  • FIG. 23 shows a processing flow of front-end write processing specialized for sequential write processing in the second embodiment.
  • FIG. 24 shows a data flow of normal front end write processing and compression processing of the storage apparatus in the second embodiment.
  • FIG. 25 shows a normal front-end write process in the sequential write process in the second embodiment.
  • FIG. 26 shows a compression processing flow performed after the normal front end write processing in the second embodiment.
  • FIG. 27 shows the configuration of the storage apparatus in the third embodiment.
  • FIG. 28 shows a hardware configuration of an NVM module having two PCIe I / Fs in the third embodiment.
  • FIG. 29 shows a processing flow of data redundancy recovery processing when recovering from a one-node blockage in the fourth embodiment.
  • FIG. 1 shows an example of the configuration of a storage system.
  • the storage device 1002 is connected to a storage area network 1001 where the host 1000 and the storage device 1002 are connected to each other by Fiber Channel (FC), Ethernet, etc., and exchanges data with the host 1000.
  • the storage apparatus 1002 includes two control nodes, a node 1100 and a node 1200, and a drive box 1300 including a drive 1117 on which a nonvolatile medium is mounted. Fault tolerance is improved by duplicating control nodes.
  • the node 1100 includes a host I / F 1101 that is an interface (I / F) for exchanging data with the host 1000, and a drive I / F 1104 for exchanging data with a nonvolatile medium in the drive box 1300.
  • a host I / F 1101 that is an interface (I / F) for exchanging data with the host 1000
  • drive I / F 1104 for exchanging data with a nonvolatile medium in the drive box 1300.
  • the node 1100 further includes an external switch 1105 that connects the main memory 1103 that stores data to be transmitted to and received from the host and control data for controlling the storage apparatus 1002, the NVM module 1106, the NVM module 1106, the cache device, and the node 1200. And a microprocessor (MP) 1102 for controlling these devices.
  • MP microprocessor
  • the host I / F 1101 is a device for communicating with the host, and is connected to the MP 1102 via a standard bus such as PCI express. It converts network protocols such as FC and Ethernet and communicates with the host.
  • the drive I / F 1104 is a device for communicating with a non-volatile medium in the drive box 1300, and is connected by a standard bus such as PCI express like the host I / F 1101.
  • a protocol such as SAS or SATA is converted to communicate with the drive 1117.
  • the main memory 1103 is a device including a volatile element such as a DRAM, and is connected to the MP 1102 by a memory I / F (not shown) such as a Double Data Rate (DDR) I / F to perform data transfer. .
  • the main memory 1103 is used to temporarily store control data for controlling the storage apparatus 1002 and host data transferred from the host.
  • the main memory 1103 may include a non-volatile element such as PRAM or STT-RAM.
  • the NVM module 1106 includes a large-capacity and low-cost nonvolatile element such as NAND, a small-capacity and high-speed volatile element such as DDR-SDRAM, and a controller that controls these elements and communicates with the MP 1102. It is a non-volatile medium. Details will be described later.
  • the external switch 1105 is a device for connecting one or more NVM modules 1106 and the MP 1102 and is typically connected by a bus such as PCI express.
  • the external switch 1105 incorporates a node I / F 1114 for realizing communication between the node 1100 and the node 1200.
  • the hardware configurations of the node 1100 and the node 1200 are the same, and a detailed description of the node 1200 is omitted.
  • the node 1200 includes a host I / F 1201, a drive I / F 1204, a main memory 1203, an external switch 1205, an MP 1202, and an NVM module 1206.
  • the external switch 1205 includes a node I / F 1214.
  • the node 1100 and the node 1200 connect the node I / Fs 1114 and 1214 of the two external switches 1105 and 1205 to each other to realize inter-node data transfer, and the storage apparatus can have a redundant configuration. As a result, it is possible to improve the storage device availability at the time of failure.
  • the node I / Fs 1114 and 1214 are typically connected by a bus such as PCI Express, but may be realized by a network adapter such as Infini Band or Ethernet that is connected by PCI Express of the external switches 1105 and 1205.
  • the MP 1102 is a device that controls the operation of the storage apparatus 1002, and controls devices connected by PCI express, such as the host I / F 1101, the drive I / F 1104, and the NVM module 1106.
  • the MP 1102 includes an MP core 1111 that operates according to a program, a DMA 1112 that performs data transfer, a PCIe I / F (not shown) for connecting to a PCIe device by a PCI express, and a main memory (not shown) that controls elements of the main memory 1103.
  • a memory I / F is installed. Circuits that realize these functions are connected to each other by an internal switch 1113 inside the MP 1102.
  • the storage device 1002 Since the configurations of the two nodes 1100 and 1200 are the same, the storage device 1002 will be described below mainly with reference to the configuration of the node 1100.
  • FIG. 2 shows the hardware configuration of the NVM module 1106.
  • the NVM module 1106 includes an NVM memory 1130 configured to include nonvolatile elements such as NAND, PRAM, and STT-RAM, and a controller 1120 that controls the NVM memory 1130.
  • the controller 1120 manages the storage area inside the NVM memory 1130 in units of pages and performs data transfer.
  • the controller 1120 includes a PCIe I / F 1124 for connecting to the MP 1102 and a volatile element, and includes a data buffer 1121 that is a volatile medium for temporarily storing data transferred from the MP 1102.
  • the controller 1120 further includes data compression / decompression logic 1122 that compresses data transferred from the MP 1102 or decompresses the compressed data, and parity generation logic 1123 that generates parity data based on the data transferred from the MP 1102. .
  • the controller 1120 includes an NVM controller 1128 that controls the NVM memory 1130, an NVM processor 1127 that controls other elements of the controller 1120, an NVM processor memory 1126 that stores control data for the NVM processor 1127, and these devices. Includes switch to connect.
  • the NVM controller 1128 can perform data transfer with a plurality of NVM memories 1130.
  • FIG. 3A shows data areas existing on the main memory 1103 and the NVM module 1106.
  • the main memory 1103 includes a control data area 2001 for storing control data, which is data necessary for the MP core 1111 to operate the storage apparatus, and a host data area 2002 for storing host data transmitted to and received from the host. .
  • the main memory 1103 further includes a temporary data area 2003 indicating a temporary area for the MP core 1111 to perform processing such as data transfer and addition / removal of data to / from control data for all data including host data or control data. Exists.
  • control data area 2001 typically, operating system data for operating the storage apparatus 1002, commands for controlling devices, and data shared with other nodes are arranged.
  • Host data transferred from the host 1000 is arranged in the host data area 2002 with the aim of improving performance due to a cache hit.
  • temporary data area 2003 host data and control data to be processed are temporarily stored.
  • the NVM module 1106 includes an NVM module control data area 2004 and an NVM module host data area 2005.
  • FIG. 3B schematically shows the structure of the host data D100.
  • the minimum unit of host data managed by the control program of the node 1100 is called a block.
  • a block D103 indicates a continuous area on the main memory 1103 of 512 bytes (B).
  • a data structure composed of a plurality of blocks D103 is called a segment.
  • a segment D102 indicates a continuous area on the main memory 1103. The size of the segment D102 depends on the design.
  • a data structure composed of a plurality of segments D102 is called a slot D101.
  • the number of segments D102 that a slot can have depends on the design.
  • the segment D102 is composed of a plurality of blocks D103.
  • block D103 host data read / written by the host 1000 is stored.
  • the MP 1102 can create an unused block D103 by initializing the block D103 or the segment D102 storing the host data, for example, by clearing it to 0.
  • FIG. 3C shows a main memory host data cache management table D200 which is control data stored on the main memory 1103.
  • the main storage host data cache management table D200 includes a slot management table pointer D210, a slot management table D220, and a segment management table D230.
  • the slot management table pointer D210 is a table for storing a pointer of the slot management table D220.
  • the processor core can access a predetermined slot management table D220 by accessing this table.
  • the slot management table D220 includes a slot ID (D221), which is information for specifying a slot, Most Recent Used (MRU) information D222, which is information indicating that access is frequently performed, and information that access is performed less frequently. It includes Most Last Used (LRU) information D223 which is information to be shown. Further, it includes a slot status D224 for storing clean or dirty cache control information and medium type information for the slot, and a segment management table pointer D225 for storing a segment management table pointer corresponding to a segment included in the slot.
  • MRU Most Recent Used
  • LRU Most Last Used
  • the segment management table D230 includes a segment ID (D231) which is information for specifying a segment, and a memory address D232 where the segment is arranged.
  • FIG. 4 shows the concept of correspondence between LBA (Logical Block Address) 0 space 3001 and LBA1 space 3002, which are logical storage spaces provided by the NVM module 1106 to the storage node 1100, and PBA (Physical Block Address) space 3000.
  • the NVM module 1106 provides two logical storage spaces, an LBA0 space 3001 and an LBA1 space 3002, to the storage node 1100 that is the host device.
  • LBA0 the address assigned to each storage area on the LBA0 space 3001
  • LBA1 the address assigned to each storage area on the LBA1 space 3002
  • LBA1 address This is called “LBA1 address”.
  • the size of the LBA0 space 3001 and the size of the LBA1 space 3002 are usually equal to or smaller than the size of the PBA space. However, the size of the LBA0 space 3001 may be larger than the size of the PBA space.
  • the LBA0 space 3001 is a logical storage space for allowing the MP core 1111 of the storage node 1100 to access the compressed data stored in the physical storage area provided by the NVM memory 1130 as uncompressed data.
  • the MP core 1111 issues a write request to the NVM module 1106 by designating an address (LBA0) on the LBA0 space 3001.
  • the NVM module 1106 acquires write data from the storage node 1100 and compresses it with the data compression / decompression logic 1122. Thereafter, the NVM module 1106 dynamically selects a PBA and stores data in a physical storage area on the NVM memory 1130 designated by the PBA. Furthermore, the NVM module 1106 associates LBA0 and PBA.
  • the MP core 1111 issues a read request to the NVM module 1106 specifying LBA0.
  • the NVM module 1106 acquires data (compressed data) from the physical storage area of the NVM memory 1130 indicated by the PBA associated with LBA 0, and decompresses the data by the data compression / decompression logic 1122.
  • the NVM module 1106 transfers the decompressed data to the storage node 1100 as read data.
  • the association between LBA0 and PBA is managed in an LBA0-PBA conversion table 5100 described later.
  • the LBA1 space 3002 is a logical storage space for allowing the storage node 1100 to access the compressed data stored in the physical storage area provided by the NVM memory 1130 as it is (not expanded).
  • the MP core 1111 issues a write request to the NVM module 1106 by designating LBA1.
  • the NVM module 1106 acquires data (compressed write data) from the storage node 1100 and stores the data in the storage area of the NVM memory 1130 specified by the dynamically selected PBA. Furthermore, the NVM module 1106 associates LBA1 and PBA.
  • the MP core 1111 issues a read request specifying LBA1.
  • the NVM module 1106 acquires data (compressed data) from the physical storage area of the NVM memory 1130 indicated by the PBA associated with the LBA 1 and transfers the compressed data as read data to the storage node 1100.
  • the association between LBA1 and PBA is managed in an LBA1-PBA conversion table 5200 described later.
  • the area on the PBA space 3000 which is a physical storage area in which compressed data is stored, may be associated with both the LBA0 space 3001 area and the LBA1 space 3002 area at the same time.
  • the decompressed data of the compressed data is associated with the LBA 0 space 3001 as decompressed data
  • the compressed data is directly associated with the LBA 1 space 3002 as compressed data.
  • the MP core 1111 specifies LBA0 (assuming LBA0 is 0x000000011000) and writes data to the NVM module 1106.
  • the data is compressed by data compression / decompression logic 1122 within the NVM module 1106.
  • the compressed data is arranged on the PBA space dynamically selected by the NVM module 1106, specifically, on any unwritten page among a plurality of pages of the NVM memory 1130.
  • the data is managed in a state associated with the address 0x000000011000 in the LBA0 space 3001.
  • the MP core 1111 issues a request to the NVM module 1106 to associate the data associated with 0x000000011000 with the address of the LBA1 space 3002 (assumed to be 0x80000000010).
  • the NVM module 1106 associates the data with the LBA1 space 3002.
  • the MP core 1111 can read the data written to the LBA0 address 0x000000011000 in a compressed state. .
  • the size of the compressed data generated by the NVM module 1106 varies depending on the data content, but it is easy to handle when the size is a multiple of 512B (1 sector). Therefore, as will be described later, when the compressed data is not a multiple of 512B, the NVM module 1106 adds padding data to the rear end of the compressed data to make a multiple of 512B.
  • the NVM module 1106 adds padding data so that the size of the compressed data does not exceed the size of the uncompressed data. That is, when 4 KB data is compressed, the minimum size of the compressed data is 512 B, and the maximum size is 4 KB.
  • FIG. 5 shows the storage space handled by the storage apparatus 1002 and its corresponding relationship.
  • the storage apparatus 1002 hides the compressed volume 3200 from the host 1000.
  • the compressed volume 3200 is a destage destination of the compressed data, and is provided to one or a plurality of drives (final storage devices) 1114 of the drive box 1300.
  • the storage apparatus 1002 provides the host 1000 with one or more virtual expanded volumes 3100.
  • the host 1000 recognizes that the compressed data is stored in the decompressed volume 3100 in an uncompressed state (expanded state).
  • the host 1000 designates the address of the decompression volume 3100 and sends a read / write request to the storage apparatus 1002.
  • the address of the decompression volume 3100 corresponds to the address (LBA0) of the LBA0 space 3001.
  • the host 1000 When storing data in the storage apparatus 1002, the host 1000 designates an address in the decompression volume 3100 and transmits write data 5000 to the storage apparatus 1002.
  • the storage apparatus 1002 uses an NVM module 1106 having an internal compression function as a cache apparatus.
  • the NVM module 1106 provides the storage apparatus 1002 with an LBA0 space 3001 and an LBA1 space 3002 which are two independent logical storage spaces.
  • the storage apparatus 1002 (MP1102) stores the write data 5000 acquired from the host 1000 in the NVM module 1106 with the address of the LBA0 space 3001 specified.
  • the NVM module 1106 compresses the received write data 5000 to generate compressed data 5020, and stores the compressed data 5020 in the NVM memory 1130 as cache data. Further, the storage apparatus 1002 (MP1102) maps the compressed data 5020 of the data 5000 stored by designating the address of the LBA0 space 3001 onto the LBA1 space 3002.
  • the storage apparatus 1002 acquires the compressed data 5020 from the NVM module 1106 by designating an address on the LBA1 space 3002, designates the address of the compressed volume 3200, and stores it in the final storage device (drive 1117). Stage.
  • the compressed volume 3200 is provided by a final storage device 1117 such as an HDD or an SSD.
  • the compressed volume 3200 is a logical volume configured using a storage area of one or more final storage devices (drives 1117) similar to a volume provided to a host by a known storage device.
  • the address of the compressed volume 3200 corresponds to the address (LBA1) of the LBA1 space 3002, and the LBA1 space is hidden from the host 1000 and is invisible.
  • the storage apparatus 1002 acquires the compressed data 5020 from the compressed volume 3200 in response to the read request received from the host 1000, and assigns the address on the LBA1 space 3002 to the cache apparatus configured including the NVM module 1106. Specify and write.
  • the storage apparatus 1002 maps the decompressed data 5000 of the compressed data 5020 stored by designating an address on the LBA1 space 3002 to the LBA0 space 3001.
  • the storage apparatus 1002 designates the address of LBA0 from the NVM module 1106, acquires the decompressed data 5000 from the compressed data 5020, and transfers it to the host 1000 as read data.
  • the storage apparatus 1002 adds the compressed data 5020 to the compressed volume 3200 when storing the compressed data 5020 in the compressed volume 3200. That is, the compressed data 5020 is stored in order from the head area of the compressed volume 3200 in the order of destage. In this additional recording method, the address in the compressed volume 3200 that is the storage destination of the compressed data 5020 is determined by controlling the destage.
  • the LBA0-PBA conversion table 5100 is stored in the NVM processor memory 1126 in the NVM module 1106, and includes information on the NVM module LBA0 (5101), the NVM module PBA 5102, and the PBA length 5103.
  • the NVM module 1106 receives the LBA 0 specified at the time of the read request from the MP core 1111 and then uses the LBA 0 to acquire the PBA indicating the location where the actual data is stored.
  • the NVM module 1106 stores the update data (write data) in a physical storage area different from the PBA in which the pre-update data is stored.
  • the NVM module 1106 stores the PBA and the PBA length in which the update data is stored in the corresponding part of the LBA0-PBA conversion table 5100, and updates the LBA0-PBA conversion table 5100.
  • the NVM module 1106 operates in this manner, thereby enabling (pseudo) overwriting of data in the area on the LBA0 space 3001.
  • the NVM module LBA0 (5101) is a logical area of the LBA0 space 3001 provided by the NVM module 1106 arranged in units of 4 KB. Each address (LBA0) in the LBA0 space 3001 is assigned to each sector (512B).
  • LBA0 address
  • 512B sector
  • the association between the NVM module LBA0 (5101) and the NVM module PBA5102 is managed in units of 4 KB (8 sectors). However, the association between the NVM module LBA0 (5101) and the NVM module PBA 5102 may be managed in an arbitrary unit other than the 4 KB unit.
  • the NVM module PBA 5102 is a field for storing the head address of the PBA associated with the NVM module LBA0 (5101).
  • the physical storage area of the PBA space 3000 is divided and managed for every 512 B (one sector).
  • the value (PBA) “XXX” is associated as the PBA associated with the NVM module LBA0 “0x000_0000_0000”. This value is an address that uniquely indicates a storage area among a plurality of NVM memories 1130 mounted on the NVM module 1106.
  • the NVM module PBA 5102 stores a value indicating “unallocated”. For example, (NULL or 0xFFFFFFFF is used.
  • the actual storage size of 4 KB data designated by the NVM module LBA0 (5101) is stored.
  • the storage size is stored in the number of sectors.
  • the NVM module 1106 receives a write request for 8 KB data (uncompressed data) starting from the address 0x000 — 0000 — 0000 of the LBA 0 space 3001 from the MP core 1111.
  • the NVM module 1106 compresses 4 KB data in the address range 0x000_0000_0000 to 0x000_0000_0007 in the LBA0 space 3001 as a unit, and generates compressed data.
  • the NVM module 1106 compresses 4 KB data in the address range 0x000_0000_0008 to 0x000_0000_000F as a unit to generate compressed data.
  • the NVM module 1106 writes each compressed data in the physical storage area of the NVM memory 1130.
  • 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 5200 is stored in the NVM processor memory 1126, and is composed of two pieces of information: the NVM module LBA1 (5201) and the NVM module PBA5202.
  • the NVM module 1106 receives the LBA 1 specified at the time of the read request from the MP core 1111, and converts the received LBA 1 into a PBA indicating a data storage location using the LBA 1 -PBA conversion table 5200.
  • the NVM module LBA1 (5201) is a logical area of the LBA1 space 3002 provided by the NVM module 1106 arranged in order for each sector.
  • the numerical value 1 in the NVM module LBA1 (5201) means one sector (512B). This is because the NVM module 1106 manages the association between the NVM module LBA1 (5201) and the NVM module PBA5202 in units of 512B.
  • the association between the NVM module LBA1 (5201) and the NVM module PBA5202 is not limited to the mode managed in units of 512B, and may be managed in any unit.
  • the LBA1 space 3002 is a space that directly maps the PBA space 3000, which is a physical storage space where compressed data is stored, and is preferably equal to the PBA division management size. Divide and manage with.
  • the NVM module PBA5202 is a field for storing the head address of the PBA associated with LBA1.
  • the PVM 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 an NVM memory 1130 that is installed in the NVM module 1106.
  • FIG. 7 shows data formats 4000 to 4009 generated by each component of the storage apparatus 1002 when the host 1000 writes 4 KB of data.
  • the storage apparatus 1002 according to the first embodiment compresses and manages data in units of 4 KB, but the present invention is not limited to a management unit for compressed data of 4 KB. In a second embodiment to be described later, data compression is performed in units of 8 KB.
  • the data compression / decompression logic 1122 is an arithmetic circuit that compresses / decompresses data in units of 4 KB.
  • the present invention is limited to the data compression / decompression logic 1122 in which the compression / decompression unit is 4 KB. Is not to be done.
  • the data format 4004 indicates 4 KB data transferred from the host 1000 to the storage apparatus 1002.
  • the minimum access unit (sector) when the host 1000 accesses the volume of the storage apparatus 1002 is 512 B, and the storage apparatus 1002 can specify host data in 512 B units.
  • the host data is uncompressed data.
  • 4KB data is composed of 8 sectors. In the first embodiment, a case where one sector is 512 B will be described. However, one sector may have another data size, for example, 4 KB.
  • the storage apparatus 1002 When the storage apparatus 1002 receives a 4 KB request in the data format 4004, it causes the host I / F 1101 to generate a guarantee code.
  • the 4 KB data in the data format 4004 is an uncompressed data set.
  • an 8B guarantee code is assigned to each 512B sector.
  • the 8B guarantee code is an example in which a 512B sector 4001 is provided with a 2B CRC (Cyclic Redundancy Check) code 4002 and a 6B guarantee code ID 4003.
  • the sector 4000 to which the guarantee code is assigned is referred to as a sector with a guarantee code.
  • a set of sectors 4000 with a guarantee code is a data set 4005 with a guarantee code.
  • the size is typically 4 KB to 64 KB.
  • a guarantee code including only the CRC code 4002 and the guarantee code ID 4003 will be described.
  • the guarantee code ID 4003 may be changed during the control of the storage apparatus 1002.
  • CRC code 4002 is 2B data generated using 512B data 4001.
  • bit value constituting the host data 4000 changes for some reason and an error bit occurs, a change in the bit value can be detected by performing an inspection using the CRC code 4002.
  • the received hardware detects a bit error using the host data 4001 and CRC code 4002 of the sector with a guarantee code to be transferred. If no error bit is detected, the hardware performs data transfer. On the other hand, if an error bit is detected, the data transfer is stopped and the hardware notifies the MP core 1111 of the error.
  • the size of the CRC code 4002 is 2B, but the size of the CRC code 4002 is not limited to 2B.
  • the size of the CRC 4002 may be increased according to the required detection capability.
  • the CRC code 4002 of the first embodiment is generated only from the host data 4001, the present invention is not limited to this CRC generation method.
  • the CRC code 4002 may be generated from the host data 4001 and the guarantee code ID 4003. In this case, it is possible to detect an error bit generated in the guarantee code ID 4003. On the other hand, it is necessary to recalculate the CRC code 4002 when the guarantee code ID 4003 is replaced.
  • the guarantee code ID 4003 is an ID that can identify a sector with a guarantee code.
  • a logical address (LBA) of an expansion volume that is a virtual storage destination of uncompressed data is used as an ID.
  • LBA logical address
  • a configuration is shown in which a sector can be uniquely identified from an ID. However, even if a sector with a guarantee code cannot be uniquely identified from an ID, it does not matter if reliability is not significantly impaired.
  • the same guarantee code ID may be assigned to different sectors.
  • the data size of the guarantee code ID 4003 is 6B, but the size of the guarantee code ID 4003 is not limited to 6B.
  • the data size of the guarantee code ID 4003 may be larger than 6B in order to reduce the probability of transferring erroneous data.
  • the ID used in the storage apparatus 1002 guarantees the correctness of the operation of the storage apparatus 1002.
  • the MP core 1111 notifies the expected value of ID to the hardware that performs the transfer at the time of data transfer.
  • the hardware instructed to transfer acquires the guarantee code ID 4003 in the sector with the guarantee code to be transferred, and confirms that it matches the expected value.
  • the hardware instructed to transfer notifies the MP core 1111 of an error.
  • a compressed sector with a guarantee code which will be described later, is configured by storing compressed data in the data 4001 and adding a guarantee code including a CRC code created from the compressed data and a guarantee code ID assigned to the compressed data. . Since the size of each field of the compressed sector with the guarantee code is the same as that of the sector with the guarantee code, a detailed description is omitted.
  • the compressed data 4006 will be described.
  • a sector with a guarantee code is stored in the NVM module 1106.
  • the NVM module 1106 compresses the data set 4005 by the data compression / decompression logic 1122. Data generated by this compression processing is compressed data 4006.
  • compressed data 4006 of 1210B is generated.
  • the size of the compressed data 4006 depends on the data content.
  • the host data 4001 and the guarantee codes 4002 and 4003 are compressed together in the sector with the guarantee code, but the present invention is not limited to this example.
  • the guarantee codes 4002 and 4003 may not be compressed. You may create the compressed data 4006 of the structure given to the head or the end of the data which compressed the uncompressed guarantee code 4002,4003 collectively.
  • the NVM module 1106 adds padding data 4007 to the compressed data 4006, and arranges the generated data to a specific data size, for example, 4 KB.
  • the padding data 4007 may be inserted at any position of the compressed data 4006.
  • Padding data 4007 may be empty data or other compressed data 4006.
  • Compressed data 4006 and padding data 4007 arranged in a specific size constitute a compressed data set 4008.
  • Data obtained by dividing the compressed data set 4008 into 512B or 4KB is referred to as a divided compressed data set 4009.
  • a set of generated divided compressed data sets 4009 constitutes a data set 4010.
  • the data compression / decompression logic 1122 assigns a CRC code and an ID to each 512B divided compressed data.
  • the size of the divided compressed data may be 4 KB instead of 512 B.
  • the contents and generation method of the CRC code and ID are as described for the uncompressed data.
  • FIG. 8A shows a write command 5003 supported by the NVM module 1106.
  • the read command has a similar configuration.
  • FIG. 8B shows response information 5005 to the write command 5003.
  • the write command 5003 to the NVM module 1106 includes, as command information, an operation code (Opcode), command ID, LBA 0/1 start address, LBA 0/1 length, compression necessity flag, write data address, expected value of guarantee code ID, Includes seed of guarantee code ID.
  • the write command 5003 may include other additional information.
  • the operation code and command ID are fields that exist in common for each command supported by the NVM module 1106.
  • the operation code is a field in which information for notifying the NVM module 1106 of the command type is stored. As an example, a value of 0x01 is stored in the field of the write command, and a value of 0x02 is stored in the field of the read command.
  • the NVM module 1106 that acquired the command recognizes that the notified command is a write command by referring to this field.
  • the command ID is a field for storing a unique ID of the command.
  • the command issuer node 1100 recognizes which command is the response information.
  • the specified ID is given.
  • the node 1100 stores an ID capable of uniquely identifying the command in the command ID.
  • the node 1100 acquires the ID included in the response information 5005 to recognize the completion of the command.
  • the LBA 0/1 start address is a field for designating the head address of the write destination logical space (LBA 0 space 3001 or LBA 1 space 3002).
  • the LBA0 space 3001 in the present embodiment is a space in the range from addresses 0x000_0000_0000 to 0x07F_FFFF_FFFF, and the LBA1 space 3002 is defined as a space in the range after the address 0x800_0000_0000.
  • the NVM module 1106 When the address in the range from 0x000_0000_0000 to 0x07F_FFFF_FFFF is stored in the LBA0 / 1 start address of the write command, the NVM module 1106 recognizes that the address of the LBA0 space 3001 is designated. If an address in the range of 0x800_0000_0000 to 0x8FF_FFFF_FFFF is stored in the LBA0 / 1 start address of the write command, the NVM module 1106 recognizes that the address of the LBA1 space 3002 has been designated.
  • the address according to which address space of the LBA0 space and the LBA1 space 3002 is specified by another method that is, whether data is compressed and written, or the data is written as it is without being compressed. It may be recognized whether or not this is instructed.
  • the LBA0 space 3001 and the LBA1 space 3002 can be identified by the contents of the operation code.
  • the LBA0 / 1 length is a field for designating the range (length) of the data storage destination LBA0 or LBA1 starting from the LBA0 / 1 start address.
  • the NVM module 1106 associates an area on the PBA space for storing write data with an area on the LBA0 space 3001 or an area on the LBA1 space 3002 in the range indicated by the LBA0 or LBA1 start address and the LBA0 / 1 length. .
  • the compression necessity flag is a field for designating whether or not the write target data indicated by this command needs to be compressed.
  • the write data address is a field for storing the current storage destination of the write target data indicated by this command, for example, the start address of the main memory 1103 of the node 1100.
  • the NVM module 1106 acquires write data by reading data existing in the range of the length specified by the LBA 0/1 length from the position specified by this field.
  • the ride data address field stores a plurality of addresses.
  • This field may store pointer information of a list storing a plurality of addresses, that is, addresses of areas in which the list is stored.
  • the NVM module 1106 refers to the pointer information and acquires a write data address.
  • the expected value of the guarantee code ID is a field for storing the expected value of the guarantee code assigned to the write target data.
  • the storage apparatus 1002 according to the first embodiment uses 6B data as the ID of the guarantee code. For this reason, this field also specifies an ID expectation value of 6B.
  • the NVM module 1106 that has received the command checks whether the guarantee code ID added to each 512B of the data to be written matches the expected value of the guarantee code ID.
  • the specific method of inspection is as follows. When the write data size is 4 KB (8 sectors), the NVM module 1106 compares the IDs of the eight sectors with guarantee codes.
  • the NVM module 1106 generates the expected values of the IDs of eight guarantee code-added sectors from the expected values of the guarantee code ID.
  • the expected value of the ID of the sector with the first guarantee code in the write data is the expected value of the guarantee code ID
  • the expected value of the ID of the sector with the guarantee code thereafter is incremented by one expected value of the guarantee code ID. It is the value.
  • the NVM module 1106 compares each of the eight sectors with a guarantee code with an expected value obtained by adding a value of 0 to 7 to the expected value of the guarantee code ID.
  • the storage apparatus 1002 stores the write data from the host 1000 in the NVM module 1106 that is a cache.
  • the host interface 124 of the storage apparatus 1002 assigns a 2B CRC code 4002 and a 6B ID 4003 as a guarantee code for each 512B data acquired from the host 1000.
  • the ID given during the host write operation is the lower 6B of the logical address (LBA) of the decompression volume 3100 to which the write data (host data) is written, so the lower 6B value of the LBA of the decompression volume 3100 Is added as an ID.
  • LBA logical address
  • a value different from the write destination address of the decompression volume 3100 may be used as the guarantee code ID.
  • the NVM module 1106 checks the ID of the guarantee code of each sector of the decompressed data based on the value stored in the expected value field of the guarantee code ID. To do.
  • the NVM module 1106 checks the guarantee code ID of each sector of the compressed data based on the value stored in the expected value field of the guarantee code ID.
  • the storage device 1002 reads data (compressed data) from the final storage device constituting the compressed volume and stores it in the LBA1 space 3002 of the NVM module 1106, the ID portion of the guarantee code of each sector of the compressed data is checked. I do.
  • the seed of the new guarantee code ID is a field used when changing the guarantee code at the time of writing or attaching a new guarantee code to the compressed data.
  • the seed of the new guarantee code ID stores an ID value newly added to the data of the first sector of the write target data in the write request.
  • Example 1 uses 6B data as the ID of the guarantee code. For this reason, this field also specifies the seed of 6B.
  • a value indicating invalidity for example, a value that is not used as a guarantee code ID such as 0xFFFFFF, is stored in the new guarantee code ID seed field.
  • the new guarantee code seed is not used in the storage device 1002 shown in the first embodiment during normal write processing, that is, when write data from the host 1000 is stored in the NVM module 1106. This is because, as described above, when the write data from the host 1000 is stored in the NVM module 1106, the address on the compressed volume in which the data is stored is not determined.
  • the storage apparatus 1002 writes data to the NVM module 1106, if the guarantee code to be newly assigned is known, a new guarantee code seed field may be used.
  • the MP core 1111 of the storage apparatus 1002 changes the guarantee code at the time of data writing to the NVM module 1106, the MP core 1111 stores information that becomes the seed of the new guarantee code in the seed field of the new guarantee code of the write command.
  • the NVM module 1106 Upon receiving the instruction, the NVM module 1106 generates a new guarantee code from the seed of the new guarantee code included in the write command when storing the write data in the NVM memory 1130, and the sector with the guarantee code (or the guarantee code attached). The guarantee code of the compression sector) is changed and stored in the FM.
  • the NVM module 1106 when the write request size specified by the LBA 0/1 length is 4 KB, the NVM module 1106 generates eight new guarantee codes from the seed of the new guarantee code ID. Specifically, the NVM module 1106 sets the ID of the sector with the guarantee code at the head of the 4 KB (8 sectors) data to be transferred as the value specified by the seed of the new guarantee code ID, and adds the next guarantee code.
  • the sector ID value is a value obtained by incrementing the seed of the new guarantee code by one. In this way, if the write request is 4 KB, an ID generated by adding a value of 0 to 7 to the value specified by the seed of the new guarantee code ID for each of the eight sectors with a guarantee code. Give.
  • the ID part included in the sector guarantee code with a guarantee code (included in each sector of the decompressed data)
  • the ID generated based on the value stored in the seed field of the new guarantee code ID is stored in the guarantee code ID portion), and if LBA1 is specified as the LBA0 / 1 start address, the guarantee The ID generated based on the value stored in the seed field of the new guarantee code ID in the ID part in the guarantee code of the compressed sector with code (the ID part of the guarantee code added to each sector of the compressed data) Operates to store.
  • the write response information 5005 includes a command ID, status, and compressed data length.
  • response information based on the above information will be described, but there may be additional information above.
  • the command ID and status are common information included in the response of each command supported by the NVM module 1106.
  • the command ID is a field for storing a number that can uniquely identify a completed command.
  • the status is a field for notifying the command request source (MP core 1111 of the storage apparatus 1002) of the completion or error of the command.
  • the command request source MP core 1111 of the storage apparatus 1002
  • error for example, a number that can identify the cause of the error is stored.
  • Compressed data length is a field for storing the data length when the written data is reduced by data compression.
  • the MP core 1111 that issued the command can obtain the compressed data size of the written data by acquiring the information of this field included in the write response information 5005.
  • this field is invalid because compressed data is stored.
  • FIG. 9A shows an LBA1 mapping command 5600 supported by the NVM module 1106 in this embodiment.
  • the NVM module 1106 specifies the area of the LBA0 space 3001, compresses the written data, and stores the compressed data in the NVM memory 1130.
  • the node 1100 maps the compressed data stored in the NVM memory 1130 to the LBA1 space 3002 using an LBA1 mapping command in order to write the compressed data in the compressed state to the final storage device (drive 1117).
  • the LBA1 mapping command 5600 includes, as command information, an operation code, a command ID, an LBA0 start address, an LBA0 length, and an LBA1 start address.
  • the LBA1 mapping command 5600 may include additional information other than the above.
  • the LBA0 start address is a field for designating the start address of the LBA0 area of the target data for mapping the compressed data to LBA1.
  • the LBA0 length is a field for designating a range of LBA0 starting from the LBA0 start address to be mapped to LBA1. In this example, the LBA0 start address and LBA0 length are limited to multiples of 8 sectors (4 KB).
  • the LBA1 start address is a field for designating the start address of LBA1 to be mapped.
  • the MP core 1111 of the node 1100 has a data size of the data to be mapped (data size when compressed) and an area on the LBA1 space 3002 that can be mapped, that is, on the LBA1 space 3002 to which no other data is mapped. It manages area information.
  • the MP core 1111 of the node 1100 stores the start address of the area on the LBA1 space 3002 to which the mapping target data can be mapped in the LBA1 start address field, and sends the command to the NVM module 1106. Issue.
  • a plurality of LBA1 start addresses may be designated, that is, the LBA0 space 3001 area specified by the LBA0 start address and the LBA0 length may be mapped to a discrete area on the LBA1 space 3002.
  • the NVM module 1106 maps the compressed data associated with the LBA 0 space 3001 in the range indicated by the LBA 0 start address and the LBA 0 length from the LBA 1 start address over the area corresponding to the compressed data size.
  • the NVM module 1106 refers to the LBA0-PBA conversion table 5100, and acquires the PBA (NVM module PBA5102) associated with the LBA0 space 3001 in the range indicated by the LBA0 start address and the LBA0 length.
  • the NVM module 1106 refers to the LBA1-PBA conversion table 5200, and acquires the acquired PBA from the LBA1 start address to the NVM module PBA5202 in the LBA1 range (NVM module LBA1 (5201)) having the same size as the total size of the acquired PBA. Stores the information.
  • the response of the LBA1 mapping command 5600 is notified to the MP core 1111 by a response 5500.
  • the response 5500 includes a command ID and a status.
  • FIG. 9B shows an LBA 0 mapping command 5700 supported by the NVM module 1106 in this embodiment.
  • the node 1100 writes the compressed data stored in the final storage device (drive 1117) to the NVM memory 1130.
  • the node 1100 needs to transfer the compressed data to the host in a decompressed state. There is. Since the host makes a read request by designating LBA0, it is necessary to associate the address of the compressed data on the NVM memory 1130 with LBA0. Therefore, the NVM module 1106 maps to the LBA0 space 3001 using the LBA0 mapping command.
  • the LBA0 mapping command 5700 includes, for example, an operation code, a command ID, an LBA1 start address, an LBA1 length, and an LBA0 start address as command information.
  • the LBA 0 mapping command 5700 may include additional information other than the above.
  • the LBA1 start address is a field for designating the head address of the LBA1 space 3002 of the compressed data to be mapped.
  • the LBA1 length is a field for designating the range of the LBA1 space 3002 to be mapped to LBA0.
  • the LBA0 start address is a field for designating the start address of LBA0 to be mapped.
  • the node 1100 manages the usage state of the LBA 0/1 space 3001/3002 based on the management information of the data cached in the NVM module 1106 managed by the node 1100. Based on the management information, the node 1100 secures a LBA0 area that can be mapped, and stores this start address in the LBA0 start address. In this example, the address that can be specified as the LBA0 start address is limited to a multiple of 8 sectors (4 KB).
  • the NVM module 1106 When receiving the LBA0 mapping command from the node 1100, the NVM module 1106 decompresses the compressed data associated with the range indicated by the LBA1 start address and the LBA1 length in the LBA1 space 3002 from the LBA0 start address in the LBA0 space 3001. Mapping over the area of the data size.
  • the NVM module 1106 refers to the LBA1-PBA conversion table 5200, and acquires the PBA associated with the LBA in the range indicated by the LBA1 start address and the LBA1 length. Further, the NVM module 1106 reads the LBA0-PBA conversion table 5100 from the LBA0 start address to the NVM module PBA5102 and the PBA length 5103 corresponding to the LBA0 range that is the same size as the compressed data after decompression. Store information. Note that the LBA0 mapping response includes a command ID and a status. The LBA 0 mapping response may include other additional information.
  • FIG. 9C shows a compressed data size acquisition command 5750 supported by the NVM module 1106 in this embodiment.
  • the compressed data size acquisition command 5750 is used to specify the compressed data size stored in the NVM memory 1130 of the NVM module 1106.
  • the compressed data size acquisition command 5750 in the present embodiment is composed of operation code, command ID, LBA0 start address or LBA1 start address, LBA0 length or LBA1 length as command information.
  • command ID LBA0 start address
  • LBA1 start address LBA0 length or LBA1 length
  • LBA0 length LBA1 length
  • the LBA 0 start address is a field for designating the start address of the LBA 0 area that is the target of obtaining the compressed data size.
  • the LBA0 length is a field for designating a range of LBA0 starting from the LBA0 start address.
  • the MP core 1111 reads the compressed data size acquisition command 5750 into the NVM module and instructs the compressed data size acquisition.
  • the NVM module 1106 Upon receiving the instruction, the NVM module 1106 calculates the size of the compressed data associated with the LBA 0 area in the range indicated by the LBA 0 start address and the LBA 0 length, and reflects the calculation result in the compressed data length of the response 5500. Transfer and notify the MP core 1111. Specifically, the calculation result is reflected in the compressed data length of the response 5600 and output.
  • the address that can be specified as the LBA0 start address is limited to a multiple of the page size (4 KB) of the NVM memory 1130. If an address or length that does not match the 4 KB boundary is designated as the LBA 0 start address or LBA 0 length, an error is reflected in the status of the response 5500 and returned to the MP core.
  • FIG. 10 shows a full stripe parity generation command 5800 supported by the NVM module 1106 in this embodiment.
  • the other corresponds to the data before update and the data before update stored in the storage device in addition to the update data when update data is written to the RAID-configured storage device group.
  • a parity (post-update parity) corresponding to the update data is generated by performing an XOR operation with the pre-update parity. This method is referred to as an “update parity generation method” in the present disclosure.
  • the full stripe parity generation command 5800 in this embodiment includes, as command information, an operation code, command ID, LBA1 length, number of stripes, LBA1 start address 0 to n, LOR1 start address for XOR parity, and LBA1 start address for RAID6 parity. .
  • the NVM module 1106 recognizes from the contents of the operation code that the command received from the node 1100 is a full stripe parity generation command.
  • the type of parity to be generated varies depending on the RAID level. Therefore, the NVM module 1106 in the present embodiment changes the generated parity according to the contents of the operation code.
  • the NVM module 1106 when the operation code specifies any of 0x11, 0x12, and 0x13, the NVM module 1106 generates a full stripe parity. When the operation code specifies 0x11, the NVM module 1106 generates one parity (XOR data) used in RAID4 and RAID5.
  • the NVM module 1106 When the operation code specifies 0x12, the NVM module 1106 generates two parities (so-called P parity and Q parity) used in RAID 6 (using Reed-Solomon code). When the operation code designates 0x13, the NVM module 1106 generates two parities (horizontal parity and diagonal parity) used in RAID 6 (so-called EVENODD scheme, Row-Diagonal parity scheme).
  • the LBA1 length is a field for designating the length of parity to be generated or the length of parity generation source data.
  • the lengths of RAID parity and parity generation source data are the same.
  • the number of stripes specifies the number of data used for generating parity. For example, when parity is generated for six data, six stripes are stored.
  • the LBA1 start address is a field for designating the start address of LBA1 to which the parity generation source data is associated.
  • the number of fields matches the number specified by the number of stripes. If a command that does not match is issued, the NVM module 1106 returns an error. For example, in a configuration in which two parities are created for six data (6D + 2P RAID6 configuration), six LBA1 start addresses are designated.
  • the XOR parity LBA1 start address 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 in the range specified by the LBA1 length from the start address.
  • the RAID 6 LBA 1 start address is a field for designating the storage destination of the RAID 6 parity to be generated.
  • the parity for RAID 6 is a Reed-Solomon code Q parity or a diagonal parity in the EVENODD system as described above.
  • the parity generated is stored in an area in the range designated by the LBA1 length from the LBA1 start address for RAID6.
  • the RAID5 parity generation command is specified as the operation code (for example, 0x11 is specified), it is not necessary to specify the RAID6 LBA1 start address.
  • the NVM module 1106 of the present embodiment Upon receiving the full stripe parity generation command 5800, the NVM module 1106 of the present embodiment receives a plurality of compressed data from the area on the NVM memory 1130 specified by the PBA associated with the area specified by the LBA1 start address. get. NVM module 1106 uses parity generation logic 1123 to generate parity (one or two).
  • the NVM module 1106 stores the generated parity in an area on the NVM memory 1130.
  • Writing the generated parity is the same as the data writing in the write command.
  • a PBA is dynamically assigned to the LBA1 space 3002 specified by the LBA1 start address for XOR parity and / or the LBA1 start address for RAID6 parity, and the parity is written in the area specified by the assigned PBA.
  • the full stripe parity generation response includes a command ID and a status.
  • FIG. 11 shows a flow of compression host write processing of the storage apparatus 1002.
  • the compressed host write process is a write process for host data from the host 1000 to the compressed volume 3200.
  • the data flow in the apparatus specifically, the access amount to the main memory 1103 is reduced and the apparatus performance is improved.
  • the apparatus response time increases. Therefore, the present embodiment causes a trade-off between device performance and device response time. Therefore, in this embodiment, the storage apparatus 1002 checks the presence / absence of the host write sequentiality, and executes different processing depending on the determination result.
  • the MP core 1111 of the storage apparatus 1002 receives a write request from the host 1000 (1600).
  • the MP core 1111 analyzes the contents of the host write request and determines the presence or absence of sequentiality in the host write access pattern ( 1610). Details of step S1610 will be described later with reference to FIG.
  • the MP core 1111 proceeds to step 1630. If there is no sequentiality (1620: No), the MP core 1111 proceeds to step 1670.
  • the MP core 1111 determines the compression processing effect by the data compression.
  • the sequential write specialized front end processing 1650 described later can improve the compression sequential write throughput performance by reducing the in-device data flow rate, but increases the response time to the host 1000 compared to the normal front end write processing 1670.
  • step S1630 a compression effect determination process is introduced. Details of step S1630 will be described later with reference to FIG. If the compression rate is equal to or greater than the threshold (1640: No), the MP core 1111 determines that there is no effect of the compression process, and proceeds to step 1670.
  • the compression rate is a value obtained by dividing the post-compression data by the pre-compression data.
  • Step 1650 is a sequential write specialized front-end process.
  • step 1650 the MP core 1111 performs front-end write processing specialized for sequential write. Details of step 1650 will be described later with reference to FIG. When step 1650 is completed, the MP core 1111 ends the flow.
  • step 1670 the MP core 1111 performs normal front end light processing. Details of step 1670 will be described later with reference to FIG. When step 1670 is completed, the flow ends.
  • the MP core 1111 After the front end write process is completed in the sequential write process, the MP core 1111 performs the back end write process immediately.
  • the back-end write process is executed only on the node 1100, and the compressed host data is stored in the final storage device (drive 1117).
  • the sequential write specialized front-end process in the sequential host write with a large data flow rate can be effectively reduced and the throughput can be greatly improved.
  • normal front end write processing in a host write with a low compression rate a delay in response to the host 1000 can be avoided when a large improvement in throughput cannot be expected.
  • front end write processing may be switched based on only one of the sequentiality and the compression rate, or the front end write processing may be switched based on the access destination volume and the access source host. Sequential write specialized front-end processing may always be executed.
  • FIG. 12 shows a flow of processing (1610) in which the storage apparatus 1002 analyzes the request contents of the host and determines the sequentiality of the IO processing.
  • the storage apparatus 1002 determines that the host write request has sequentiality when the data length of the host data due to one or a plurality of write requests exceeds a threshold value. The determination can be made based on, for example, the number of consecutive slots reserved for storing host data or the address length specified by the write request.
  • the MP core 1111 analyzes the request for the host light (1611).
  • the host write request includes the identifier of the uncompressed volume, the LBA, the data length (address length), the address of the host 1000 of the data transmission source, and the like.
  • the MP core 1111 acquires information for determining which position on the main memory 1103 to reserve and store the host write data from the slot management table D220 stored in the main memory 1103.
  • the MP core 1111 determines the presence / absence of sequentiality for the host write request (1613). For example, when a slot is reserved for receiving host data from the host 1000, the MP core 1111 checks whether the number of consecutive slots for storing host data is equal to or greater than a prescribed threshold.
  • a continuous slot is a slot having consecutive slot numbers.
  • the MP core 1111 determines that the host write request has sequentiality. If the number of consecutive slots is smaller than the threshold value, the MP core 1111 determines that the host write request does not have sequentiality, and ends the process. In addition, when the continuous address length (the size of the continuous area) indicated by one or a plurality of host write requests is equal to or greater than the threshold, the MP core 1111 may determine that the host write request has sequentiality. .
  • the MP core 1111 sets a sequential access flag (1615).
  • the MP core 1111 ends the process. This process may be executed by a circuit different from MP.
  • FIG. 13 shows processing (1630) for determining the compression effect by data compression.
  • the MP core 1111 refers to the compression rate history information (1631).
  • FIG. 14 shows a compression history table 5900 that stores compression history information.
  • the compression VOL is a field for storing an identifier of the compression VOL currently managed by the storage apparatus 1002.
  • the VOL compression rate is a field for storing the compression rate of the compression VOL.
  • the compression IO processing ID is a field for storing an identifier of host write processing for the compression VOL.
  • the compression rate is a field for storing the value of the compression rate in the host write processing for the compression VOL.
  • the expected compression rate is a field for storing an expected value of the compression rate in the next host write process for the compressed VOL predicted by the MP core 1111.
  • the method for calculating the predicted value will be described later.
  • the effect determination stores the determination result of the presence or absence of the compression effect estimated from the compression rate predicted by the MP core 1111.
  • the field of the compression history table 5900 stores a NULL value when a specific value is not registered.
  • the MP core 1111 searches the compression history table 5900 for a host write destination compression VOL and determines whether or not compression processing has been performed in the past (1632). When the past compression history information is not stored in the entry of the compression VOL and only the NULL value is stored, the compression processing has not been performed in the past.
  • step 1635 If compression processing has not been performed in the past and the current host write is the first time (1632: Yes), the MP core 1111 proceeds to step 1635. If past compression processing has been performed and the current host write is not the first time, the MP core 1111 proceeds to step 1633.
  • the MP core 1111 stores the compression history information of the compression VOL in the compression history table 5900. Specifically, the MP core 1111 stores the compression IO process ID of the immediately subsequent compression process, and further sets a value designated in advance by the user in the field of the expected compression rate. This value can be set for each compression VOL.
  • the MP core 1111 calculates the expected compression rate.
  • the MP core 1111 predicts the compression rate of the host write currently being processed from the result of the compression VOL compression rate of the compression VOL and the previous host write compression rate.
  • the MP core 1111 may predict that the VOL compression rate of the compression VOL is the same as the compression rate of the current host write.
  • the MP core 1111 may predict the compression rate in the current host write based on the average value, median value, minimum value, or moving average value of the compression rate of the past compression IO processing for the compression VOL.
  • the MP core 1111 stores the prediction result of the compression ratio calculated in step 1633 in the field of the expected IO compression ratio of the compression VOL.
  • FIG. 15 shows a data flow of the sequential write specialized front-end write process (1650) of the first embodiment.
  • the host I / F 1101 of the node 1100 assigns a guarantee code (CRC code 4002 and ID 4003) to uncompressed host data received from the host 1000 and transfers it to the main memory 1103 (data flow 101).
  • CRC code 4002 and ID 4003 a guarantee code
  • the MP core 1111 of the node 1100 issues an instruction to read and compress the host data on the main memory 1103 to the data compression / decompression logic 1122 of the NVM module 1106.
  • the data compression / decompression logic 1122 Upon receiving the instruction, the data compression / decompression logic 1122 reads the host data on the main memory 1103 and starts data compression (data flow 102).
  • the data compression / decompression logic 1122 decompresses the compressed host data, and performs the verification of the compression operation (data flow 103). As a result of verification, after determining that there is no problem in the compression process, the compressed host data is output to the data buffer 1121 of the NVM module 1106 (data flow 104), and the MP core 1111 is notified of the completion of the process.
  • the verification in the node 1100 reduces the possibility that an error in the compressed host data is detected in the transfer destination node 1200.
  • the MP core 1111 instructs the data compression / decompression logic 1122 to transfer data.
  • the data compression / decompression logic 1122 reads the compressed host data on the data buffer 1121, directly transfers the data to the main memory 1203 of the node 1200 (data flow 105), and notifies the MP core 1111 of completion.
  • the MP core 1111 notifies the MP core 1211 of the node 1200 of the completion of the compressed host data transfer and requests data transfer to the NVM module 1206. Upon receiving the request, the MP core 1211 of the node 1200 issues an instruction to read the host data on the main memory 1203 to the data compression / decompression logic 1222 of the NVM module 1206 of the node 1200.
  • the data compression / decompression logic 1222 Upon receiving the instruction, the data compression / decompression logic 1222 reads the compressed host data on the main memory 1203 of the node 1200 and transfers it to the data buffer 1221 (data flow 106). At this time, the data compression / decompression logic 1222 reads the guarantee code given to the compressed data, and outputs it to the data buffer (data flow 108) while checking the data integrity (data flow 107). The check time can be shortened by checking with the guarantee code without decompressing the compressed host data.
  • the data compression / decompression logic 1222 notifies the MP core 1211 of completion of processing after completing the transfer to the data buffer 1221. Receiving the notification, the MP core 1211 notifies the MP core 1111 of the node 1100 of the completion of compression host data duplexing. Receiving the double completion notification, the MP core 1111 of the node 1100 notifies the host 1000 of the completion of the host write process and completes the host write request.
  • the sequential write specialized front-end write process (1650) transfers the compressed host data from the node 1100 to the node 1200 without transferring uncompressed data, and the node 1200 transfers the transferred compressed host data. Hold. Therefore, the data flow rate between the node I / Fs 1114 and 1214 can be reduced, and further, the input / output data flow rate of the main memory 1203 in the node 1200 can be reduced. Thereby, throughput can be improved. The larger the size of the uncompressed host data, the greater the data flow reduction effect.
  • the compressed host data is transferred to the node 1200, and the node 1200 performs error checking and stores the compressed data. Due to such serial processing, the response time to the host 1000 becomes long.
  • FIG. 16 shows a processing flow of the front end light processing (1650) specialized for sequential write processing.
  • the MP core 1111 reserves a buffer area in the main memory 1103 for temporarily storing host data.
  • the buffer area is an area that is not associated with either a non-compressed VOL or a compressed VOL logical volume, and is a temporary area for processing host data.
  • step 1652 the MP core 1111 transmits a host data transfer request to the host 1000, and stores the received host data in the buffer area of the main memory 1103.
  • step 1653 the MP core 1111 instructs the data compression / decompression logic 1122 of the NVM module 1106 to transfer the host data stored in the buffer area to the NVM module 1106.
  • the MP core 1111 issues a write command to the NVM module 1106 to the data compression / decompression logic 1122.
  • the compression necessity flag of the write command is set to compression required.
  • the expected value of the guarantee code ID of the host data is the same as the guarantee code ID 4003 assigned by the host I / F 1101.
  • the MP core 1111 stores the same value as the guarantee code ID assigned by the host I / F 1101 in the write command.
  • step 1654 the data compression / decompression logic 1122 transfers the host data from the buffer area of the main memory 1103 to the data buffer 1121 of the NVM module 1106 according to the write command. At this time, the data compression / decompression logic 1122 compresses the host data while reading it. A guarantee code is attached to the compressed host data.
  • Data compression / decompression logic 1122 verifies the compression operation. Specifically, in step 1655, the data compression / decompression logic 1122 decompresses the compressed data. In step 1656, the data compression / decompression logic 1122 checks the integrity of the compression result with the decompressed host data.
  • the data compression / decompression logic 1122 checks the presence or absence of data corruption in the decompressed host data using the CRC code assigned by the host I / F 1101.
  • the data compression / decompression logic 1122 holds the host data subjected to CRC check in advance, compares the host data before compression with the host data after decompression, and checks whether they match.
  • step 1657 the data compression / decompression logic 1122 refers to the check result in step 1656 to determine whether there is an error. If there is an error (1657: Yes), the data compression / decompression logic 1122 notifies the MP core 1111 of the determination result. In step 1658, the MP core 1111 requests the host 1000 to retransmit the host data.
  • step 1659 the data compression / decompression logic 1122 transfers the compressed data of the NVM module 1106 belonging to the node 1100 to the buffer area of the node 1200.
  • the MP core 1111 of the node 1100 creates a read command, and the data compression / decompression logic 1122 transfers the compressed host data to the buffer area of the node 1200 via the external switch 1105 according to the read command.
  • Step 1660 the MP core 1211 of the node 1200 transfers the compressed host data to the data buffer 1221 of the NVM module 1206 of the node 1200.
  • step 1661 the data compression / decompression logic 1222 of the NVM module 1206 calculates a guarantee code given to the compressed host data without decompressing the compressed host data, and checks the reliability of the compressed host data.
  • the node 1200 may perform error checking by decompressing the compressed host data.
  • the data compression / decompression logic 1222 If there is an error (1662: Yes), the data compression / decompression logic 1222 notifies the MP core 1211 of the determination result. In step 1663, the MP core 1211 requests the node 1100 to retransmit the compressed host data.
  • the data compression / decompression logic 1222 notifies the completion of the process to the MP core 1211, and the MP core 1211 notifies the completion of the process to the MP core 1111 of the node 1100.
  • the MP core 1111 issues an LBA1 mapping command 5600 for the compressed host data stored in the data buffer 1121 of the NVM module 1106 of the node 1100.
  • the data compression / decompression logic 1122 associates LBA1 with the compressed host data in response to the LBA1 mapping command 5600.
  • the MP core 1111 issues an LBA 0 mapping command 5700 for the compressed host data stored in the data buffer 1121 of the NVM module 1106 of the node 1100.
  • the data compression / decompression logic 1122 associates LBA0 with the compressed host data in response to the LBA0 mapping command 5700.
  • the node 1200 also performs this process in the same manner before the completion notification to the node 1100.
  • the MP core 1111 acquires the size of the compressed data using the compressed data size acquisition command 5750 described later to the NVM module 1106, and acquires the compressed data size included in the LBA0 area. Since the compressed data at this point is dirty data not stored in the final nonvolatile medium, it is necessary to indicate that the segment including the data has a dirty attribute.
  • the MP core 1111 operates the slot status D224 of the main storage host data cache management table D220 to give a dirty attribute. Finally, the MP core 1111 notifies the host 1000 of the completion of the host write process. This completes the front-end processing specialized for sequential write.
  • FIG. 17 shows a data flow of normal front end write processing (1660) in the first embodiment of the present invention.
  • the host I / F 1101 of the node 1100 transfers uncompressed host data received from the host 1000 to the main memory 1103 (data flow 201).
  • the MP core 1111 of the node 1100 instructs the DMA 1112 to transfer host data.
  • the DMA 1112 reads the host data on the main memory 1103, transfers the data to the main memory 1203 of the node 1200 (data flow 202), and notifies the MP core 1111 of completion.
  • the MP core 1111 notifies the MP core 1211 of the node 1200 of the completion of the host data transfer and requests data transfer to the NVM module 1206 of the node 1200.
  • the MP core 1211 instructs the data compression / decompression logic 1222 of the NVM module 1206 to read the host data on the main memory 1203.
  • the data compression / decompression logic 1222 reads the host data on the main memory 1203 and compresses the data (data flow 223).
  • the data compression / decompression logic 1222 reads the guarantee code attached to the host data, checks the data integrity (data flow 224), and outputs the compressed host data to the data buffer 1221 (data flow 225). When no error is found in the data integrity check, the data compression / decompression logic 1222 outputs the compressed host data to the data buffer 1221 and notifies the MP core 1211 of the completion of processing.
  • the MP core 1211 Upon receiving the notification, the MP core 1211 notifies the MP core 1111 of the node 1100 of the completion of duplication of the compressed host data. In parallel with the process of the node 1200, the node 1100 executes the same process. Data flows 213 to 215 correspond to data flows 223 to 225.
  • the MP core 1111 of the node 1100 that has received the double completion notification of the node 1200 receives the processing completion notification of the NVM module 1106 of the node 1100, notifies the host 1000 of the completion of the host write processing, and completes the host write request. .
  • the normal front-end write processing (1670) performs data compression in parallel in the two nodes 1100 and 1200, so that the response time to the host 1000 can be shortened.
  • FIG. 18 shows a processing flow of normal front end light processing (1670).
  • the MP core 1111 reserves an LBA0 area for storing the host data in the uncompressed VOL 3100.
  • Step 1672 the MP core 1111 issues a host data transfer request to the host 1000 and stores the host data in the buffer area of the main memory 1103.
  • step 1673 the MP core 1111 transfers the host data on the main memory 1103 of the node 1100 to the buffer area of the main memory 1203 of the node 1200.
  • the MP core 1111 creates a data transfer command in the DMA 1112 and transfers it to the buffer area of the node 1200 via the external switch 1105.
  • step 1674 the MP core 1211 of the node 1200 instructs the data compression / decompression logic 1222 of the node 1200 to transfer the host data stored in the buffer area to the NVM module 1206. Specifically, the MP core 1211 issues a write command to the NVM module 1206 to the data compression / decompression logic 1222.
  • the compression necessity flag of the write command is set to compression required.
  • the expected value of the guarantee code ID of the host data is the same as the guarantee code ID 4003 assigned by the host I / F 1101.
  • the MP core 1111 stores the same value as the guarantee code ID assigned by the host I / F 1101 in the write command.
  • step 1675 the data compression / decompression logic 1222 acquires the host data from the buffer area of the main memory 1203 according to the write command, and checks the host data with the guarantee code.
  • the data compression / decompression logic 1222 If there is an error in the data check (1676: Yes), the data compression / decompression logic 1222 notifies the MP core 1211 of the check result. In step 1677, the MP core 1211 requests the host data transmission source node 1100 to retransmit the host data.
  • step 1678 the data compression / decompression logic 1222 compresses the host data according to the write command.
  • step 1679 the data compression / decompression logic 1222 decompresses the compressed data.
  • step 1656 the data compression / decompression logic 1222 checks the integrity of the compression result with the decompressed host data.
  • the data compression / decompression logic 1222 checks the presence or absence of data corruption in the decompressed host data using the CRC code assigned by the host I / F 1101.
  • the data compression / decompression logic 1222 holds the host data subjected to CRC check in advance, compares the host data before compression with the host data after decompression, and checks whether they match.
  • step 1680 the data compression / decompression logic 1122 refers to the check result in step 1679 and determines whether there is an error. If there is an error (1680: Yes), the data compression / decompression logic 1222 returns to step 1678, and the data compression / decompression logic 1222 compresses the host data according to the write command.
  • step 1682 the data compression / decompression logic 1122 attaches a security code to the compressed host data and stores it in the data buffer 1221.
  • the data compression / decompression logic 1222 notifies the MP core 1211 of the completion of processing.
  • the MP 1211 issues an LBA1 mapping command 5600 for the compressed host data stored in the data buffer 1221 of the NVM module 1206 of the node 1200.
  • the data compression / decompression logic 1222 associates LBA1 with the compressed host data in response to the LBA1 mapping command 5600.
  • the MP 1211 issues an LBA 0 mapping command 5700 for the compressed host data stored in the data buffer 1221 of the NVM module 1206 of the node 1200.
  • the data compression / decompression logic 1222 associates LBA0 with the compressed host data in response to the LBA1 mapping command 5700. Thereafter, the MP core 1211 notifies the MP core 1111 of the node 1100 of completion of duplexing of the compressed host data.
  • the node 1100 executes the same processing (1674 to 1683). If the node 1100 finds an error in step 1676, the node 1100 requests the host 1000 to retransmit the host data.
  • the MP core 1111 acquires the compressed data size using the compressed data size acquisition command 5750 described later to the NVM module 1106, and acquires the compressed data size included in the LBA0 area. Since the compressed data at this point is dirty data not stored in the final nonvolatile medium, it is necessary to indicate that the segment including the data has a dirty attribute.
  • the MP core 1111 operates the slot status D224 of the slot management table D220 to add a dirty attribute.
  • the MP core 1111 of the node 1100 that has received the double completion notification of the node 1200 receives the processing completion notification of the NVM module 1106 of the node 1100 and then notifies the host 1000 of the completion of the host write processing and completes the host write request. To do.
  • the data flow rate in the storage apparatus 1002 can be reduced and the reliability of the host data can be maintained.
  • the flow rate of data passing through the main memory can be reduced, and the efficiency of processing with a large data flow rate passing through the main memory can be increased.
  • the sequential write performance can be improved.
  • each storage system is mounted on a storage device connected via a network and uses different drive boxes to store compressed data in different compressed volumes. It may be stored.
  • the second embodiment describes a storage apparatus that includes a device that does not have an NVM memory and performs only data processing such as compression / decompression processing. In the following, differences from the first embodiment will be mainly described.
  • FIG. 19 shows a configuration example of the storage apparatus of the second embodiment.
  • the nodes 1100 and 1200 include data processing devices 1107 and 1207 and node I / Fs 1114 and 1214, respectively.
  • the data processing devices 1107 and 1207 are devices that provide only processing functions such as data compression and decompression for data arranged on the main memories 1103 and 1203, respectively.
  • the data processing devices 1107 and 1207 are equipped with a volatile medium that temporarily stores data to be processed.
  • This volatile medium may be composed of a non-volatile storage element such as PRAM or STT-RAM.
  • the data processing devices 1107 and 1207 are usually provided by an ASIC connected by PCI Express, but a programmable device such as an FPGA or an MP different from the MPs 1102 and MP1202 may be connected and used.
  • FIG. 20 shows the storage space handled by the storage apparatus 1002 of the second embodiment and its corresponding relationship.
  • the host 1000 designates an address in the decompression volume 3100 and transfers write data to the storage apparatus 1002.
  • the storage apparatus 1002 uses the main memory 1103 as a cache device. Although details will be described later, the storage apparatus 1002 provides the storage apparatus 1002 with two independent logical storage spaces in the main memory 1103, LBA0 space 3001 and LBA1 space 3002. The storage apparatus 1002 stores the write data acquired from the host 1000 in the main memory 1103 by designating the address of the LBA0 space 3001.
  • the storage apparatus 1002 compresses the received write data (host data) using the data processing device 1107 and stores it in the main memory 1103. Furthermore, the storage apparatus 1002 specifies the address of the LBA0 space 3001 and maps the stored compressed host data onto the LBA1 space 3002. The storage apparatus 1002 acquires the compressed host data from the main memory 1103 by designating an address on the LBA1 space 3002, and designates the address of the compressed volume 3200 configured by the storage area of the final storage device (drive 1117). Destage.
  • the storage apparatus 1002 acquires compressed host data from the compressed volume 3200, and stores it in the main memory 1103 by specifying an address on the LBA1 space 3002. Next, the storage system 1002 specifies an address on the LBA1 space 3002, and maps the decompressed data of the compressed host data to the LBA0 space 3001. The storage apparatus 1002 decompresses the compressed host data by designating the address of LBA 0 from the main memory 1103 and transfers it to the host 1000 as read data.
  • FIG. 21 shows a flow of compression host write processing of the storage apparatus of the second embodiment.
  • the difference from the first embodiment is the three steps of the sequential write specialized front-end process 2650, the normal front-end write process 2670, and the compression process 2680.
  • the storage apparatus 1002 performs the back-end write process immediately after the front-end write process is completed in the compressed host write process.
  • FIG. 22 shows a data flow of the sequential write specialized front-end write process (2650) in the second embodiment.
  • the host I / F 1101 of the node 1100 transfers uncompressed host data received from the host 1000 to the main memory 1103 (data flow 301).
  • the MP core 1111 of the node 1100 instructs the data processing device 1107 to read and compress the host data on the main memory 1103.
  • the data processing device 1107 Upon receiving the instruction, the data processing device 1107 reads the host data on the main memory 1103 and starts data compression (data flow 302). The data processing device 1107 decompresses the compressed host data in order to perform compression calculation verification (data flow 303). The MP core 1111 checks the presence or absence of an error based on the guarantee code of the decompressed host data (data flow 304). The MP core 1111 may perform verification by comparing host data before compression and host data after decompression.
  • the data processing device 1107 gives a guarantee code to the compressed host data (data flow 305).
  • the MP core 1111 instructs the DMA 1112 to transfer the compressed host data.
  • the DMA 1112 reads the compressed host data on the main memory 1103, transfers the data to the main memory 1203 of the node 1200 (data flow 306), and notifies the MP core 1111 of completion.
  • the MP core 1111 notifies the MP core 1211 of the node 1200 of completion of compressed host data transfer. Receiving the notification, the MP core 1211 of the node 1200 reads the compressed host data on the main memory 1203 and checks the compressed host data with the guarantee code of the compressed host data (data flow 307).
  • the MP core 1211 After completing the check of the compressed host data, the MP core 1211 notifies the MP core 1111 of the node 1100 of the completion of the duplexing of the compressed host data.
  • the MP core 1111 of the node 1100 that has received the double completion notification notifies the host 1000 of the completion of the host write processing and completes the host write request.
  • Sequential write specialized front-end light processing (2650) can reduce data flow and improve throughput.
  • FIG. 23 shows a processing flow of the sequential write specialized front-end light processing (2650) in the second embodiment.
  • the MP core 1111 reserves a buffer area in the main memory 1103 for temporarily storing host data.
  • the MP core 1111 transmits a host data transfer request to the host 1000 and stores the received host data in the buffer area of the main memory 1103.
  • the MP core 1111 compresses the host data stored in the buffer area using the data processing device 1107. Specifically, the MP core 1111 issues a compression command to the data processing device 1107. The compression necessity flag of the write command is set to compression required.
  • step 2654 the data processing device 1107 decompresses the compressed data.
  • step 2655 the MP core 1111 checks the integrity of the compressed data using the host data expanded by the data processing device 1107. For example, the MP core 1111 checks the CRC code provided by the host I / F 1101 in the decompressed host data and checks for data corruption. Alternatively, the MP core 1111 compares the decompressed host data and the pre-compression host data to check for data corruption.
  • step 2657 the MP core 1111 requests the host 1000 to retransmit the host data.
  • step 2658 the MP core 1111 gives a guarantee code to the compressed host data on the main memory 1103.
  • step 2659 the MP core 1111 instructs the DMA 1112 to transfer the compressed host data to the buffer area on the main memory 1203 on the node 1200 side.
  • step 2660 the MP core 1211 of the node 1200 checks the reliability of the compressed host data based on the guarantee code assigned to the compressed host data. If the check result indicates that there is an error (2661: Yes), in step 2662, the MP core 1211 requests the compressed host data transmission source node 1100 to retransmit the compressed host data.
  • step 2663 the MP core 1211 associates LBA1 with the compressed host data for the compressed host data stored in the buffer area of the main memory 1203 of the node 1200.
  • the node 1100 performs this process similarly.
  • the MP core 1211 associates LBA 1 and compressed host data with respect to the compressed host data stored in the buffer area of the main memory 1203 of the node 1200.
  • the node 1100 performs this process similarly.
  • the MP core 1211 notifies the MP core 1111 of the node 1100 of completion of compression host data duplexing.
  • step 2664 the MP core 1111 of the node 1100 notifies the host 1000 of the completion of the host write process and completes the host write request.
  • FIG. 24 shows a data flow of the normal front end write process 2670 and the compression process 2680.
  • the host I / F 1101 transfers uncompressed host data received from the host 1000 to the main memory 1103 (data flow 401).
  • the MP core 1111 instructs the DMA 1112 to transfer uncompressed host data.
  • the DMA 1112 reads uncompressed host data on the main memory 1103, transfers the data to the main memory 1203 of the node 1200 (data flow 402), and notifies the MP core 1111 of completion.
  • the MP core 1111 notifies the MP core 1211 of the node 1200 of the completion of host data transfer. Upon receiving the notification, the MP core 1211 of the node 1200 reads the uncompressed host data on the main memory 1203, and checks the uncompressed host data with the guarantee code of the uncompressed host data (data flow 403).
  • the MP core 1211 After completing the check of uncompressed host data, the MP core 1211 notifies the MP core 1111 of the node 1100 of completion of duplexing of uncompressed host data.
  • the MP core 1111 of the node 1100 that has received the double completion notification notifies the host of the host write processing completion. By notifying completion before compression of host data, the response time to the host 1000 can be shortened.
  • the MP core 1111 of the node 1100 instructs the data processing device 1107 to read and compress the host data on the main memory 1103.
  • the data processing device 1107 Upon receiving the instruction, the data processing device 1107 reads the host data on the main memory 1103 and starts data compression (data flow 404).
  • the data processing device 1107 decompresses the compressed host data in order to check the compression operation (data flow 405).
  • the MP core 1111 compares the host data before compression and the host data after decompression to check whether there is an error (data flow 406).
  • the presence / absence of an error may be checked by the guarantee code of the decompressed host data.
  • the MP core 1111 assigns a guarantee code to the compressed host data (data flow 407).
  • the MP core 1111 instructs the DMA 1112 to transfer the compressed host data.
  • the DMA 1112 reads the compressed host data on the main memory 1103, transfers the data to the main memory 1203 of the node 1200 (data flow 408), and notifies the MP core 1111 of completion.
  • the MP core 1111 notifies the MP core 1211 of the node 1200 of completion of compressed host data transfer.
  • the MP core 1211 of the node 1200 reads the compressed host data on the main memory 1203, and checks the compressed host data with the guarantee code of the compressed host data (data flow 409). After completing the check of the compressed host data, the MP core 1211 notifies the MP core 1111 of the node 1100 of the completion of the duplexing of the compressed host data. By omitting the compression process in the node 1200, the load on the node 1200 can be reduced.
  • FIG. 25 shows the normal front end light processing 2670 in the second embodiment.
  • the MP core 1111 reserves the LBA0 area for storing the host data in the uncompressed VOL 3100.
  • step 2672 the MP core 1111 transmits a host data transfer request to the host 1000, and stores the received host data in the host data area corresponding to the reserved LBA0 area of the main memory 1103.
  • the MP core 1111 transfers the host data on the main memory 1103 of the node 1100 to the host data area of the main memory 1203 of the node 1200. Specifically, the MP core 1111 creates a data transfer command in the DMA 1112 and transfers it to the host data area of the node 1200 via the node I / F 1114.
  • step 2674 the MP core 1211 of the node 1200 checks whether there is an error based on the host data guarantee code stored in the host data area of the main memory 1203.
  • step 2676 the MP core 1211 requests the host data transmission source node 1100 to retransmit the host data.
  • step 2673 If the check result in step 2673 indicates no error (2675: No), the MP core 1211 notifies the MP core 1111 of the node 1100 of the completion of the host data duplexing.
  • step 2677 the MP core 1111 of the node 1100 that has received the double completion notification notifies the host of the completion of the host write process.
  • FIG. 26 shows a flow of compression processing 2680 performed after normal front end light processing 2670.
  • the MP core 1111 copies the host data in the host data area to the buffer area, and compresses the host data stored in the buffer area using the data processing device 1107. Specifically, the MP core 1111 creates a compression command and issues it to the data processing device 1107.
  • step 2682 the data processing device 1107 decompresses the compressed data, and compares the uncompressed host data with the guarantee code of the uncompressed host data. If the verification result indicates that there is an error (2683: Yes), in step 2686, the data processing device 1107 requests the MP core 1111 to recompress the host data.
  • step 2684 the MP core 1111 gives a guarantee code to the compressed host data on the main memory 1103 of the node 1100.
  • the MP core 1111 associates the compressed host data stored in the buffer area of the main memory 1103 of the node 1100 with the area of the LBA1 space 3002.
  • the MP core 1111 instructs the DMA 1112 to transfer compressed host data.
  • the DMA 1112 reads the compressed host data on the main memory 1103 and transfers it to the main memory 1203 of the node 1200.
  • step 2688 the MP core 1211 of the node 1200 reads the compressed host data on the main memory 1203, and checks the compressed host data with the guarantee code of the compressed host data. If the check result indicates no error (2688: No), this process ends.
  • step 2690 the MP core 1211 of the node 1200 that is the data duplex destination requests the node 1100 that is the compressed host data transmission source to retransmit the compressed host data. To do.
  • Embodiment 3 describes a storage apparatus having two PCIe I / Fs for one NVM module. In the following, differences from the first embodiment will be mainly described.
  • FIG. 27 shows the configuration of the storage system 1002 of the third embodiment.
  • the storage apparatus 1002 includes, in addition to the nodes 1100 and 1200, an NVM module box 1400 that stores one or a plurality of NVM modules 9106. NVM modules are not mounted on the nodes 1100 and 1200.
  • the nodes 1100 and 1200 include node I / Fs 1114 and 1214.
  • the NVM module box 1400 is connected to the nodes 1100 and 1200 through different I / Fs so that the nodes 1100 and 1200 can access the NVM module 9106 inside the NVM module box 1400.
  • the NVM module box 1400 and the nodes 1100 and 1200 are connected by a bus such as PCI express.
  • the NVM module box 1400 has a power supply system different from that of the nodes 1100 and 1200, and even when one of the nodes stops failure, the other node can access the NVM module box 1400.
  • FIG. 28 shows a hardware configuration of the NVM module 9106 having two PCIe I / Fs.
  • the configuration of the NVM module 1106 shown in FIG. 2 is the same as that of the NVM module 1106 shown in FIG. 2 except that the controller 9120 has two PCIe I / Fs 1124 for connecting to the MPs 1102 and 1202.
  • the nodes 1100 and 1200 can access the NVM module 9106 without going through the MPs of other nodes.
  • the data of the node in the active state is duplicated in a compressed state with respect to the node recovered from the power interruption state by the maintenance work. Thereby, a high-speed duplex state recovery can be realized.
  • FIG. 29 shows the flow of data redundancy recovery processing when recovering from a single node blockage.
  • the node 1200 recovers from the blockage and the node 1100 is in a normal active state.
  • the MP core 1111 of the node 1100 that is active and capable of IO processing checks the state of the node 1200 that is in the power-off state. Specifically, the MP core 1111 checks the recovery state of the node 1200 according to the energization state of the node 1200 and the presence / absence of message transmission from the node 1200.
  • the MP core 1111 checks the presence or absence of data to be duplicated on the main memory 1103.
  • the data to be duplicated is determined in advance, for example, data shared between the two nodes 1100 and 1200 stored in the host data area and the control data area.
  • step 3004 the MP core 1111 checks whether the duplication target data is compressed. When the target data is compressed (3004: Yes), in step 3006, the MP core 1111 instructs the DMA 1112 to transfer the duplex target data to the other node 1200. The DMA 1112 transfers the data according to the instruction. .
  • step 3005 the MP core 1111 compresses the target data. Thereafter, the MP core 1111 transfers the data to the other node 1200 by the DMA 1112 (3006).
  • the NVM module 1106 may compress and transfer the data.
  • step 3007 the MP core 1211 of the other node 1200 that has received the duplex data decompresses the compressed duplex data.
  • step 3008 the MP core 1211 calculates a guarantee code included in the decompressed duplex data and checks the correctness of the duplex data.
  • the NVM module 1206 may decompress and check the data.
  • the MP core 1211 requests the data transmission source node 1100 to retransmit the data, and the steps after step 3006 are repeated.
  • the check result indicates no error (3008: No)
  • the flow ends.
  • this invention is not limited to the above-mentioned Example, Various modifications are included.
  • the above-described embodiments have been described in detail for easy understanding of the present invention, and are not necessarily limited to those having all the configurations described.
  • a part of the configuration of one embodiment can be replaced with the configuration of another embodiment, and the configuration of another embodiment can be added to the configuration of one embodiment.
  • each of the above-described configurations, functions, processing units, and the like may be realized by hardware by designing a part or all of them with, for example, an integrated circuit.
  • Each of the above-described configurations, functions, and the like may be realized by software by interpreting and executing a program that realizes each function by the processor.
  • Information such as programs, tables, and files for realizing each function can be stored in a memory, a hard disk, a recording device such as an SSD (Solid State Drive), or a recording medium such as an IC card or an SD card.
  • the control lines and information lines are those that are considered necessary for the explanation, and not all the control lines and information lines on the product are necessarily shown. In practice, it may be considered that almost all the components are connected to each other.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

 第1制御ノードと、第2制御ノードと、圧縮ボリュームを提供する最終記憶デバイスと、を含むストレージシステムであって、第1制御ノードは、ホストから未圧縮ホストデータを受信し、未圧縮ホストデータを圧縮して圧縮ホストデータを生成し、圧縮ホストデータを第1メモリにおいてキャッシュデータとして保持し、圧縮ホストデータを伸長して、圧縮ホストデータが正確であるかチェックし圧縮ホストデータが正確である場合に、圧縮ホストデータを第2制御ノードに転送し、第2制御ノードは、第2メモリにおいて圧縮データをキャッシュデータとして保持する。

Description

ストレージシステム
 本発明はストレージシステムに関する。
 特許文献1は、ホストデータを2つのクラスタで二重化し、一方のクラスタで保障コードを生成し、他方のクラスタで保証コードをチェックすることにより冗長データを保証することを開示する。
 データ流量を削減する方法として、データ圧縮がある。ストレージのデータ圧縮では、データロストを防ぐため圧縮処理が正しく行われているかを確認する必要がある。特許文献2は、二つの圧縮デバイスを用いて圧縮前後のデータの保証コードを比較し、圧縮処理の検算を行う方法を開示する。さらに特許文献3は、圧縮前の保証コードと、圧縮データを伸長したデータを使って再生成した保証コードと、を比較することによって、圧縮データの信頼性を向上することを開示する。
米国特許出願公開2011/0154165号 米国特許第6026508号 米国特許第6519733号
 特許文献1の技術において、ホストライトにおけるホストデータの二重化は、主記憶を通過するデータ流量がホストリードと比較して大きく、主記憶の性能がホストライトの性能に影響する。特許文献2の技術において、二つの圧縮デバイスで圧縮処理を行うことにより主記憶の通過データ流量が増加する。特許文献3の技術において、ストレージ装置は、圧縮前のデータの破壊を検出できず、データをロストする可能性がある。したがって、ストレージシステム内のデータ流量を削減し、かつホストデータの信頼性を維持する技術が望まれる。
 本発明の代表的な一例は、第1制御ノードと、第2制御ノードと、圧縮ボリュームを提供する最終記憶デバイスと、を含むストレージシステムであって、前記第1制御ノードは、ホストから未圧縮ホストデータを受信し、前記未圧縮ホストデータを圧縮して圧縮ホストデータを生成し、前記圧縮ホストデータを第1メモリにおいてキャッシュデータとして保持し、前記圧縮ホストデータを伸長して、前記圧縮ホストデータが正確であるかチェックし前記圧縮ホストデータが正確である場合に、前記圧縮ホストデータを前記第2制御ノードに転送し、前記第2制御ノードは、第2メモリにおいて前記圧縮データをキャッシュデータとして保持するものである。
 本発明の一態様によれば、ストレージシステム内のデータ流量を削減し、かつホストデータの信頼性を維持することが可能となる。上記以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
図1は実施例1においてストレージ装置の構成の一例を示す。 図2は実施例1においてNVMモジュールのハードウェア構成を示す。 図3Aは実施例1において主記憶とNVMモジュール上に存在するデータ領域を示す。 図3Bは実施例1においてホストデータの構成例を示す。 図3Cは実施例1において主記憶上の制御データの例を示す。 図4は、実施例1においてNVMモジュールがストレージノードに提供する論理記憶空間であるLBA0空間及びLBA1空間と、PBA空間との対応付けの概念を示す。 図5は実施例1においてストレージ装置が扱う記憶空間とその対応関係を示す。 図6Aは実施例1においてLBA0-PBA変換テーブルを示す。 図6Bは実施例1においてLBA1-PBA変換テーブルを示す。 図7は実施例1において上位装置が4KBのデータをライトした際に、ストレージ装置の各コンポーネントが生成するデータフォーマットを示す。 図8Aは実施例1においてNVMモジュールがサポートする、ライトコマンドを示す。 図8Bは実施例1においてNVMモジュールがサポートする、ライトコマンドへの応答情報を示す。 図9Aは実施例1においてNVMモジュールでサポートされる、LBA1マッピングコマンドを示す。 図9Bは実施例1においてNVMモジュールでサポートされる、LBA0マッピングコマンドを示す。 図9Cは実施例1においてNVMモジュールでサポートされる、圧縮データサイズ取得コマンドを示す。 図10は実施例1においてNVMモジュールがサポートする、フルストライプパリティ生成コマンドを示した図である。 図11は実施例1においてストレージ装置の圧縮ホストライト処理のフローを示す。 図12は実施例1においてストレージ装置がホストの要求内容を分析してIO処理のシーケンシャル性を判定する処理を示す。 図13は実施例1においてストレージ装置がデータ圧縮による圧縮処理効果を判定する処理を示す。 図14は実施例1において圧縮履歴情報を含み、MPコアが圧縮履歴情報を管理するための情報を格納するテーブルを示す。 図15は実施例1において圧縮シーケンシャルライト特化処理におけるフロントエンドライトのデータフローを示す。 図16は実施例1においてシーケンシャルライト処理に特化したフロントエンドライト処理の処理フローを示す。 図17は実施例1において通常シーケンシャルライト処理におけるフロントエンドライトのデータフローを示す。 図18は実施例1において通常フロントエンドライト処理の処理フローを示す。 図19は実施例2においてストレージ装置の構成の一例を示す。 図20は実施例2においてストレージ装置が扱う記憶空間とその対応関係を示す。 図21に実施例2においてストレージ装置の圧縮シーケンシャルライト処理のフローを示す。 図22は実施例2において圧縮シーケンシャルライト特化処理におけるフロントエンドライト処理のデータフローを示す。 図23は実施例2においてシーケンシャルライト処理に特化したフロントエンドライト処理の処理フローを示す。 図24は実施例2においてストレージ装置の通常フロントエンドライト処理と圧縮処理のデータフローを示す。 図25は実施例2においてシーケンシャルライト処理における通常のフロントエンドライト処理を示す。 図26は実施例2において通常のフロントエンドライト処理の後に行う圧縮処理フローを示す。 図27は実施例3においてストレージ装置の構成を示す。 図28は実施例3において2つのPCIeI/Fを持つNVMモジュールのハードウェア構成を示す。 図29は実施例4において片ノード閉塞から回復するときのデータ冗長化回復処理の処理フローを示す。
 以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
 図1は、ストレージシステムの構成の一例を示す。ストレージ装置1002は、Fibre Channel(FC)やEthernet等で、ホスト1000とストレージ装置1002が相互に接続するストレージエリアネットワーク1001に接続し、ホスト1000とデータのやり取りをする。ストレージ装置1002は、ノード1100とノード1200の2つの制御ノードと、不揮発媒体を搭載するドライブ1117を含むドライブボックス1300とを含む。制御ノードが二重化されることで、耐障害性を向上させる。
 ノード1100は、ホスト1000とデータをやり取りするためのインタフェース(I/F)であるホストI/F1101と、ドライブボックス1300内の不揮発媒体とデータをやり取りするためのドライブI/F1104と、を含む。
 ノード1100は、さらに、ホストと送受信するデータとストレージ装置1002を制御するための制御データを格納する主記憶1103と、NVMモジュール1106と、NVMモジュール1106とキャッシュデバイスとノード1200を接続する外部スイッチ1105と、それらのデバイスを制御するマイクロプロセッサ(MP)1102を含む。
 ホストI/F1101は、ホストとの通信を行うためのデバイスであり、MP1102とPCIexpress等の標準規格のバスで接続している。FCやEthernetなどのネットワークプロトコルを変換し、ホストと通信する。
 ドライブI/F1104は、ドライブボックス1300内の不揮発媒体との通信を行うためのデバイスであり、ホストI/F1101と同様にPCIexpress等の標準規格のバスで接続している。SASやSATAといったプロトコルを変換し、ドライブ1117と通信する。
 主記憶1103は、DRAM等の揮発性素子を含んで構成されるデバイスであり、Double Data Rate(DDR)I/F等のメモリI/F(未図示)でMP1102と接続し、データ転送を行う。主記憶1103は、ストレージ装置1002を制御するための制御データやホストから転送されたホストデータを一時的に格納するために用いられる。主記憶1103は、PRAMやSTT-RAMといった不揮発性素子を含んで構成されていてもよい。
 NVMモジュール1106は、NAND等の大容量で低コストの不揮発素子とDDR-SDRAM等の小容量で高速な揮発素子、そして、それらの素子を制御し、MP1102と通信を行うコントローラを含んで構成される不揮発媒体である。詳細は後述する。
 外部スイッチ1105は、1個以上のNVMモジュール1106とMP1102を接続するためのデバイスであり、典型的にはPCI express等のバスで接続する。外部スイッチ1105は、ノード1100とノード1200との間の通信を実現するためのノードI/F1114を内蔵する。
 ノード1100とノード1200のハードウェア構成は同等であり、ノード1200の詳細説明は省略する。ノード1200はホストI/F1201と、ドライブI/F1204と、主記憶1203と、外部スイッチ1205と、MP1202と、NVMモジュール1206を含む。外部スイッチ1205は、ノードI/F1214を内蔵する。
 ノード1100とノード1200は、2つの外部スイッチ1105、1205のノードI/F1114、1214を相互に接続する事で、ノード間データ転送を実現し、ストレージ装置は冗長構成をとることが可能になる。結果、障害発生時のストレージ装置可用性を向上させることが可能になる。
 ノードI/F1114、1214は、典型的にはPCI Express等のバスで接続されるが、外部スイッチ1105、1205のPCI Expressで接続するInfini BandやEthernetのようなネットワークアダプタによって実現してもよい。
 MP1102は、ストレージ装置1002の動作を制御するデバイスであり、ホストI/F1101、ドライブI/F1104及びNVMモジュール1106等、PCI expressで接続したデバイスを制御する。
 MP1102は、プログラムに従い動作するMPコア1111、データ転送を行うDMA1112の他、PCIeデバイスとPCI expressで接続するための不図示のPCIeI/F、さらに、主記憶1103の素子を制御する不図示の主記憶I/Fを搭載する。これらの機能を実現する回路は、MP1102内部の内部スイッチ1113で相互に接続される。
 なお、二つのノード1100、1200の構成は同様であるため、以下においては、主にノード1100の構成を参照して、ストレージ装置1002を説明する。
 図2はNVMモジュール1106のハードウェア構成を示す。NVMモジュール1106は、NAND、PRAM、STT-RAM等の不揮発素子を含んで構成されるNVMメモリ1130と、NVMメモリ1130を制御するコントローラ1120を搭載する。コントローラ1120はNVMメモリ1130内部の記憶領域をページ単位で管理し、データ転送を行う。
 コントローラ1120は、MP1102と接続するためのPCIeI/F1124、揮発素子を含んで構成され、MP1102から転送されたデータを一時的に格納するための揮発媒体であるデータバッファ1121を含む。コントローラ1120は、さらに、MP1102から転送したデータを圧縮又は圧縮したデータの伸長を行うデータ圧縮・伸長ロジック1122、及び、MP1102から転送されたデータを元にパリティデータを生成するパリティ生成ロジック1123を含む。
 さらに、コントローラ1120は、NVMメモリ1130を制御するNVMコントローラ1128、コントローラ1120の他の要素を制御するNVMプロセッサ1127、NVMプロセッサ1127の制御データを格納するNVMプロセッサメモリ1126、そしてこれらのデバイスを相互に接続するスイッチを含む。NVMコントローラ1128は、複数のNVMメモリ1130とデータ転送を行うことができる。
 図3Aは、主記憶1103とNVMモジュール1106上に存在するデータ領域を示す。主記憶1103には、MPコア1111がストレージ装置を動作させるために必要なデータである制御データを格納する制御データ領域2001と、ホストと送受信するホストデータを格納するホストデータ領域2002とが存在する。主記憶1103にはさらに、ホストデータ又は制御データを含む全てのデータについてMPコア1111がデータ転送や制御データに対しデータの付加や除去といった加工を行うための一時的な領域を示す一時データ領域2003が存在する。
 制御データ領域2001には、典型的にはストレージ装置1002を動作させるためのオペレーティングシステムのデータや、デバイスを制御するための命令、また、他のノードと共有するデータが配置される。ホストデータ領域2002には、キャッシュヒットによる性能向上を狙い、ホスト1000から転送されるホストデータが配置される。一時データ領域2003には、加工対象となるホストデータと制御データが、一時的に格納される。
 NVMモジュール1106には、NVMモジュール制御データ領域2004とNVMモジュールホストデータ領域2005が、存在する。NVMモジュール制御データ領域2004には、例えば、NVMメモリ1130に格納されているホストデータのディレクトリテーブルが配置される。NVMモジュールホストデータ領域2005には、ホストデータ領域2002と同様に、ホスト1000から転送されるホストデータが配置される。
 図3Bは、ホストデータD100の構造を模式的に示す。ノード1100の制御プログラムが管理するホストデータの最小の単位をブロックと呼ぶ。ブロックD103は、512バイト(B)の主記憶1103上の連続領域を示す。複数のブロックD103で構成されたデータ構造をセグメントと呼ぶ。セグメントD102は、主記憶1103上の連続領域を示す。セグメントD102の大きさは設計に依存する。
 複数のセグメントD102で構成されたデータ構造をスロットD101と呼ぶ。スロットが持てるセグメントD102の数は設計に依存する。セグメントD102は複数のブロックD103で構成される。
 ブロックD103に、ホスト1000が読み書きするホストデータが格納される。MP1102は、新たなホストデータを格納するために、ホストデータが格納されたブロックD103又はセグメントD102を初期化、例えば0クリアする事により、未使用のブロックD103を作成できる。
 図3Cは、主記憶1103上に格納される制御データである主記憶ホストデータキャッシュ管理テーブルD200を示す。主記憶ホストデータキャッシュ管理テーブルD200は、スロット管理テーブルポインタD210とスロット管理テーブルD220とセグメント管理テーブルD230を含む。
 スロット管理テーブルポインタD210は、スロット管理テーブルD220のポインタを格納するテーブルである。プロセッサコアがこのテーブルにアクセスすることで、所定のスロット管理テーブルD220にアクセスすることができる。
 スロット管理テーブルD220は、スロットを特定するための情報であるスロットID(D221)、アクセスが高頻度である事を示す情報であるMost Recent Used(MRU)情報D222、アクセスが低頻度である事を示す情報であるMost Least Used(LRU)情報D223を含む。さらに、当該スロットのクリーン又はダーティのキャッシュ制御情報や媒体種別の情報を格納するスロットステータスD224、スロットが内包するセグメントに対応するセグメント管理テーブルのポインタを格納するセグメント管理テーブルポインタD225を含む。
 セグメント管理テーブルD230は、セグメントを特定するための情報であるセグメントID(D231)、セグメントが配置されているメモリアドレスD232を含む。
 図4は、NVMモジュール1106がストレージノード1100に提供する論理記憶空間であるLBA(Logical Block Address)0空間3001及びLBA1空間3002と、PBA(Physical Block Address)空間3000との対応付けの概念を示す。NVMモジュール1106は、上位装置であるストレージノード1100に、LBA0空間3001とLBA1空間3002という2つの論理記憶空間を提供する。
 以下において、LBA0空間3001上の各記憶領域に付されたアドレスのことを「LBA0」又は「LBA0アドレス」と呼び、LBA1空間3002上の各記憶領域に付されたアドレスのことを「LBA1」又は「LBA1アドレス」と呼ぶ。LBA0空間3001のサイズ及びLBA1空間3002のサイズは、通常、PBA空間のサイズ以下となる。ただし、LBA0空間3001のサイズがPBA空間のサイズよりも大きくてもよい。
 LBA0空間3001は、NVMメモリ1130により提供される物理記憶領域に格納された圧縮データを、非圧縮データとして、ストレージノード1100のMPコア1111にアクセスさせるための論理記憶空間である。
 MPコア1111は、LBA0空間3001上のアドレス(LBA0)を指定して、NVMモジュール1106にライト要求を発行する。NVMモジュール1106は、ストレージノード1100からライトデータを取得し、データ圧縮/伸長ロジック1122にて圧縮する。その後、NVMモジュール1106は、PBAを動的に選択し、当該PBAにより指定されるNVMメモリ1130上の物理記憶領域に、データを格納する。さらに、NVMモジュール1106は、LBA0とPBAの対応付けを行う。
 MPコア1111は、LBA0を指定してNVMモジュール1106にリード要求を発行する。NVMモジュール1106は、LBA0に対応付けられたPBAが示すNVMメモリ1130の物理記憶領域からデータ(圧縮データ)を取得し、データ圧縮・伸長ロジック1122にて伸長する。NVMモジュール1106は、伸長したデータを、リードデータとして、ストレージノード1100に転送する。このLBA0とPBAとの対応づけは、後述するLBA0-PBA変換テーブル5100にて管理される。
 LBA1空間3002は、NVMメモリ1130により提供される物理記憶領域に格納された圧縮データを、圧縮データのまま(伸長せず)、ストレージノード1100にアクセスさせるための論理記憶空間である。
 MPコア1111は、LBA1を指定して、NVMモジュール1106にライト要求を発行する。NVMモジュール1106は、ストレージノード1100よりデータ(圧縮済みのライトデータ)を取得し、動的に選択したPBAにより指定されるNVMメモリ1130の記憶領域にデータを格納する。さらに、NVMモジュール1106は、LBA1とPBAの対応付けを行う。
 MPコア1111は、LBA1を指定してリード要求を発行する。NVMモジュール1106は、LBA1に対応付けられたPBAが示すNVMメモリ1130の物理記憶領域よりデータ(圧縮データ)を取得し、ストレージノード1100にリードデータとして圧縮済みデータを転送する。このLBA1とPBAとの対応づけは、後述するLBA1-PBA変換テーブル5200にて管理される。
 図4に示すとおり、圧縮データが格納された物理記憶領域であるPBA空間3000上の領域は、同時にLBA0空間3001の領域とLBA1空間3002の領域との両方に対応づけられることもある。たとえば、圧縮データの伸長されたデータが、LBA0空間3001上に伸長データとして対応づけられ、圧縮データがそのままLBA1空間3002上に圧縮データとして対応づけられる。
 たとえばMPコア1111は、LBA0(仮にLBA0が0x00000001000とする)を指定して、NVMモジュール1106にデータをライトする。当該データは、NVMモジュール1106内のデータ圧縮/伸長ロジック1122により圧縮される。圧縮されたデータは、NVMモジュール1106が動的に選択したPBA空間上、具体的には、NVMメモリ1130の複数のページ中の、いずれかの未書き込みページに、配置される。当該データは、LBA0空間3001のアドレス0x00000001000に対応付けられた状態で管理される。
 その後MPコア1111は、0x00000001000に対応づけられたデータを、LBA1空間3002のアドレス(仮に0x80000000010とする)に対応付ける要求を、NVMモジュール1106に発行する。NVMモジュール1106は、当該データを、LBA1空間3002に対応づける。
 この状態のとき、LBA1アドレス0x80000000010のデータをリードする要求をNVMモジュール1106に対して発行すると、MPコア1111は、自身がLBA0アドレス0x00000001000に対して書き込んだデータを、圧縮した状態で読み出すことができる。
 なお、NVMモジュール1106で生成される圧縮データのサイズは、データ内容に依存して変動するが、512B(1セクタ)の倍数のサイズであると取扱いやすい。そのため、後述するように、圧縮後のデータが512Bの倍数のサイズでない場合には、NVMモジュール1106は、圧縮後データの後端にパディングデータを付加し、512Bの倍数のサイズにする。
 また、NVMモジュール1106は、圧縮後データのサイズを、非圧縮データのサイズを超えないようにパディングデータを付加する。つまり4KBのデータを圧縮した場合、圧縮後データの最小サイズは512Bで、最大サイズは4KBである。
 図5は、ストレージ装置1002が扱う記憶空間とその対応関係を示す。ストレージ装置1002は、ホスト1000に対して、圧縮ボリューム3200を隠蔽する。圧縮ボリューム3200は、圧縮後データのデステージ先であり、ドライブボックス1300の1又は複数のドライブ(最終記憶装置)1114に提供される。
 ストレージ装置1002は、ホスト1000に、仮想的な1又は複数の伸長ボリューム3100を提供する。ホスト1000は、圧縮データが非圧縮状態(伸長状態)で、伸長ボリューム3100に格納されているように認識する。ホスト1000は、伸長ボリューム3100のアドレスを指定して、リード/ライト要求をストレージ装置1002に送付する。伸長ボリューム3100のアドレスは、LBA0空間3001のアドレス(LBA0)に対応する。
 ホスト1000は、ストレージ装置1002にデータを格納する際、伸長ボリューム3100内のアドレスを指定してライトデータ5000をストレージ装置1002に送信する。ストレージ装置1002は、内部に圧縮機能を持つNVMモジュール1106をキャッシュ装置として用いる。
 NVMモジュール1106は、独立した二つの論理記憶空間であるLBA0空間3001及びLBA1空間3002をストレージ装置1002に提供する。ストレージ装置1002(MP1102)は、ホスト1000から取得したライトデータ5000を、LBA0空間3001のアドレスを指定してNVMモジュール1106に格納する。
 NVMモジュール1106は、受領したライトデータ5000を圧縮して圧縮データ5020を生成し、キャッシュデータとしてNVMメモリ1130に格納する。さらに、ストレージ装置1002(MP1102)は、LBA0空間3001のアドレスを指定して格納したデータ5000の圧縮データ5020を、LBA1空間3002上にマッピングする。
 ストレージ装置1002(MP1102)は、LBA1空間3002上のアドレスを指定することで、NVMモジュール1106より圧縮データ5020を取得し、圧縮ボリューム3200のアドレスを指定して、最終記憶装置(ドライブ1117)にデステージする。
 圧縮ボリューム3200は、HDDやSSD等の最終記憶装置1117によって提供される。圧縮ボリューム3200は、周知のストレージ装置がホストに対して提供するボリュームと同様の、1以上の最終記憶装置(ドライブ1117)の記憶領域を用いて構成される論理的なボリュームである。圧縮ボリューム3200のアドレスは、LBA1空間3002のアドレス(LBA1)に対応し、ホスト1000からはLBA1空間は隠蔽され、不可視である。
 ストレージ装置1002(MP1102)は、ホスト1000から受領したリード要求に応じて、圧縮データ5020を圧縮ボリューム3200から取得し、NVMモジュール1106を含んで構成されたキャッシュ装置に、LBA1空間3002上のアドレスを指定してライトする。
 次に、ストレージ装置1002(MP1102)は、LBA1空間3002上のアドレスを指定して格納した圧縮データ5020の伸長データ5000を、LBA0空間3001にマッピングする。ストレージ装置1002は、NVMモジュール1106からLBA0のアドレスを指定して、圧縮データ5020から伸長されたデータ5000を取得し、ホスト1000にリードデータとして転送する。
 ストレージ装置1002(MP1102)は、圧縮データ5020を圧縮ボリューム3200に格納する際、圧縮データ5020を圧縮ボリューム3200に対して追記する。つまり、圧縮データ5020はデステージされた順に圧縮ボリューム3200の先頭の領域から順に格納される。この追記格納方式において、圧縮データ5020の格納先となる圧縮ボリューム3200内のアドレスは、デステージを制御において決定される。
 図6A、6Bは、それぞれ、NVMモジュール1106が用いる管理情報である、LBA0-PBA変換テーブル5100とLBA1-PBA変換テーブル5200を示す。LBA0-PBA変換テーブル5100は、NVMモジュール1106内のNVMプロセッサメモリ1126内に格納されており、NVMモジュールLBA0(5101)、NVMモジュールPBA5102、PBA長5103の情報から構成される。
 NVMモジュール1106は、MPコア1111からリード要求時に指定されるLBA0を受信した後、そのLBA0を用いて、実際のデータが格納されている場所を示すPBAを取得する。
 また、ライト要求時には、NVMモジュール1106は、更新データ(ライトデータ)を更新前データが格納されたPBAとは異なる物理記憶領域に格納する。NVMモジュール1106は、更新データを格納したPBAとPBA長を、LBA0-PBA変換テーブル5100の該当する箇所に格納し、LBA0-PBA変換テーブル5100を更新する。NVMモジュール1106は、このように動作することによって、LBA0空間3001上の領域のデータの上書きを、(疑似的に)可能にしている。
 NVMモジュールLBA0(5101)は、NVMモジュール1106が提供するLBA0空間3001の論理領域を、4KB単位ごとに並べたものである。LBA0空間3001の各アドレス(LBA0)は、1セクタ(512B)ごとに付されている。LBA0-PBA変換テーブル5100では、NVMモジュールLBA0(5101)とNVMモジュールPBA5102との対応付けが、4KB(8セクタ)単位で管理されている。但し、NVMモジュールLBA0(5101)とNVMモジュールPBA5102との対応付けを4KB単位以外の任意の単位で管理してもよい。
 NVMモジュールPBA5102は、NVMモジュールLBA0(5101)に対応付けられたPBAの先頭アドレスを格納するフィールドである。本実施例は、PBA空間3000の物理記憶領域を、512B(1セクタ)毎に分割して管理する。
 図6Aに示す例では、NVMモジュールLBA0「0x000_0000_0000」に対応付けられたPBAとして、「XXX」という値(PBA)が対応付けられている。この値は、NVMモジュール1106が搭載する複数のNVMメモリ1130のうちの、ある記憶領域を一意に示すアドレスである。
 これにより、リード要求先の先頭アドレス(LBA0)として「0x000_0000_0000」を受領した場合、NVMモジュール1106内の物理記憶領域(リード先)の先頭アドレス(PBA)として「XXX」が取得される。また、NVMモジュールLBA0(5101)で特定されるLBA0に対応付けられたPBAが無い場合、NVMモジュールPBA5102には「未割当」であることを示す値が格納される。例えば、(NULLあるいは0xFFFFFFFFが使用される。
 PBA長5103には、NVMモジュールLBA0(5101)に指定された4KBのデータの、実際の格納サイズが格納される。格納サイズはセクタ数にて格納されている。図6Aに示す例では、LBA0「0x000_0000_0000」を開始アドレスとする4KBのデータ(LBA0空間3001としては8セクタ)は、PBA長として「2」すなわち512B×2=1KBの長さで、格納されている。
 従って、NVMモジュールPBA5102の情報と組み合わせると、LBA0[0x000_0000_0000]を開始アドレスとする4KBのデータは、PBA「XXX」から「XXX+1」の1KBの領域に圧縮して格納されている。NVMモジュール1106は、ノード1100のMPコア1111からライトを指示された非圧縮データを、4KB単位で圧縮する。
 たとえば、NVMモジュール1106は、MPコア1111から、LBA0空間3001のアドレス0x000_0000_0000を開始アドレスとする8KBのデータ(非圧縮データ)のライト要求を受信する。NVMモジュール1106は、LBA0空間3001のアドレス範囲0x000_0000_0000~0x000_0000_0007の4KBのデータを単位として圧縮して、圧縮データを生成する。
 次に、NVMモジュール1106は、アドレス範囲0x000_0000_0008~0x000_0000_000Fの4KBのデータを単位として圧縮して、圧縮データを生成する。NVMモジュール1106は、それぞれの圧縮データを、NVMメモリ1130の物理記憶領域に書き込む。ただし、本発明はデータを4KB単位で圧縮する態様に限定されるものではなく、その他の単位でデータが圧縮される構成であっても本発明は有効である。
 LBA1-PBA変換テーブル5200は、NVMプロセッサメモリ1126に格納されており、NVMモジュールLBA1(5201)、NVMモジュールPBA5202の2つの情報から構成される。NVMモジュール1106は、MPコア1111からリード要求時に指定されるLBA1を受信し、当該受信したLBA1を、LBA1-PBA変換テーブル5200を用いて、データ格納場所を示すPBAに変換する。
 NVMモジュールLBA1(5201)は、NVMモジュール1106が提供するLBA1空間3002の論理領域をセクタごとに順に並べたものである。NVMモジュールLBA1(5201)内の数値1は、1セクタ(512B)を意味する。これは、NVMモジュール1106が、NVMモジュールLBA1(5201)とNVMモジュールPBA5202との対応付けを、512B単位で管理するからである。
 NVMモジュールLBA1(5201)とNVMモジュールPBA5202との対応付けは、512B単位にて管理される態様に限定されるものではなく、如何なる単位で管理してもよい。LBA1空間3002は、圧縮データの格納先である物理記憶空間であるPBA空間3000を直接マッピングする空間であり、PBAの分割管理サイズと同等であることが望ましいことから、本実施例は、512B単位で分割して管理する。
 NVMモジュールPBA5202は、LBA1に対応付けられたPBAの先頭アドレスを格納するフィールドである。図6Bの例では、NVMモジュールLBA1「0x800_0000_0002」に「ZZZ」というPBA値が対応付けられている。このPBA値は、NVMモジュール1106が搭載する、あるNVMメモリ1130上の記憶領域を一意に示すアドレスである。
 これにより、リード要求先の先頭アドレス(LBA1)として、「0x800_0000_0002」を受領した場合、NVMモジュール1106内の物理的なリード先の先頭アドレスとして「ZZZ」が取得される。また、NVMモジュールLBA1(5201)で特定されるLBA1に対応付けられたPBAが無い場合、NVMモジュールPBA5202には「未割当」であることを示す値が格納される。
 図7は、ホスト1000が4KBのデータをライトした際に、ストレージ装置1002の各コンポーネントが生成するデータフォーマット4000~4009を示す。実施例1のストレージ装置1002は、データを4KB単位で圧縮して管理するが、本発明は、4KBの圧縮データの管理単位に限定されるものではない。後述する実施例2は、8KB単位でデータ圧縮を行う。
 また、実施例1のデータ圧縮/伸長ロジック1122は、データを4KB単位で圧縮・伸長する演算回路であるが、本発明は、データ圧縮/伸長ロジック1122の圧縮伸長単位が4KBであるものに限定されるものではない。
 データフォーマット4004は、ホスト1000がストレージ装置1002に転送する4KBのデータを示している。実施例1において、ホスト1000がストレージ装置1002のボリュームにアクセスする際の最小アクセス単位(セクタ)は512Bで、ストレージ装置1002は、ホストデータを512B単位で指定可能である。当該ホストデータは、未圧縮データである。4KBのデータは8個のセクタで構成される。尚、実施例1では1セクタを512Bとした場合について説明するが、1セクタは他のデータサイズ、例えば、4KBとしてもよい。
 ストレージ装置1002は、データフォーマット4004の4KBのリクエストを受領すると、ホストI/F1101に保証コードを生成させる。データフォーマット4004の4KBデータは、未圧縮データセットである。実施例1は、512Bのセクタ毎に、8Bの保証コードを付与する。8Bの保証コードは、512Bセクタ4001に2BのCRC(Cyclic Redundancy Check)コード4002と6Bの保証コードID4003を付与した例を示している。この保証コードが付与されたセクタ4000を、以降、保証コード付きセクタと呼ぶ。
 保証コード付セクタ4000の集合が、保証コード付データセット4005である。典型的には4KBから64KBの大きさである。尚、実施例1は、CRCコード4002と保証コードID4003のみにより構成された保証コードを説明するが、本発明はこの例に限定されるものではない。ストレージ装置1002の制御中に保証コードID4003を変更してもよい。
 CRCコード4002は、512Bのデータ4001を用いて生成される2Bのデータ。何らかの要因でホストデータ4000を構成するbitの値が変化しエラービットが生じた場合、CRCコード4002を用いた検査を行うことで、bit値の変化を検出できる。
 ストレージ装置1002のMPコア1111がハードウェアに転送を指示したとき、指示を受けたハードウェアは、転送する保証コード付きセクタのホストデータ4001とCRCコード4002を用いて、ビットエラーの検出を行う。そして、エラービットが検出されなかった場合、ハードウェアはデータ転送を行う。一方で、エラービットが検出された場合、データ転送を中止し、ハードウェアは、MPコア1111にエラーを通知する。
 尚、実施例1では、CRCコード4002のサイズが2Bであるが、CRCコード4002のサイズは2Bに限定されるものではない。必要な検出能力に応じてCRC4002のサイズを増やしてもよい。
 実施例1のCRCコード4002はホストデータ4001のみから生成されるが、本発明はこのCRC生成方法に限定されるものではない。例えば、ホストデータ4001と保証コードID4003からCRCコード4002を生成してもよい。この場合、保証コードID4003にて生じたエラービットを検出することが可能となる。一方で、保証コードID4003の付け替え時にCRCコード4002を再計算する必要が生じる。
 保証コードID4003は、保証コード付きセクタを識別可能なIDである。実施例1は、IDとして、未圧縮データの仮想的な格納先となる伸長ボリュームの論理アドレス(LBA)を用いる。尚、実施例1では、IDからセクタを一意に識別できる構成を示すが、IDから保証コード付きセクタを一意に識別できなくても、信頼性が著しく損なわれない場合であれば構わない。
 例えば、同一保証コードIDが付与される確率が極めて低い場合、異なるセクタに同一保証コードIDを付与してもよい。実施例1では、保証コードID4003のデータサイズが6Bであるが、保証コードID4003のサイズは6Bに限定されるものではない。伸長ボリュームのサイズが極めて大きい場合、誤ったデータを転送する確率を低減するために、保証コードID4003のデータサイズが6Bより大きくてもよい。
 ストレージ装置1002で用いられるIDは、ストレージ装置1002の動作の正しさを保証する。MPコア1111は、データ転送時に、転送を行うハードウェアにIDの期待値を通知する。転送を指示されたハードウェアは、転送する保証コード付きセクタ内の保証コードID4003を取得し、期待値と一致していることを確認する。保証コード付きセクタ内の保証コードID4003がMPコア1111から通知された期待値と異なっている場合、転送を指示されたハードウェアは、MPコア1111にエラーを通知する。
 以上が保証コード付きセクタの構成に関する詳細な説明である。尚、後述する保証コード付き圧縮セクタは、データ4001に圧縮データを格納し、圧縮データから作られたCRCコードと圧縮データに対して付与した保証コードIDを含む保証コードを付与して構成される。保証コード付き圧縮セクタの各フィールドのサイズは、保証コード付きセクタと同一であるため、詳細な説明は省略する。
 続いて、圧縮データ4006について説明する。実施例1では、保証コード付きセクタをNVMモジュール1106に格納。NVMモジュール1106は、データ圧縮・伸長ロジック1122にてデータセット4005を圧縮する。この圧縮処理によって生成されるデータが、圧縮データ4006である。
 図7では、4160Bの保証コード付きセクタの集合4005を圧縮した結果、1210Bの圧縮データ4006が生成されている。圧縮データ4006のサイズは、データ内容に依存する。尚、実施例1では、保証コード付きセクタの内、ホストデータ4001と保証コード4002、4003を纏めて圧縮した例を示すが、本発明は、この例に限定されるものではない。
 例えば、他の例は、保証コード付きセクタの内、ホストデータ4001のみを圧縮し、保証コード4002、4003は圧縮しなくてもよい。無圧縮の保証コード4002、4003を纏めて圧縮したデータの先頭又は終端に付与した構成の圧縮データ4006を作成してもよい。
 圧縮データの管理容易化のために、NVMモジュール1106は、圧縮データ4006にパディングデータ4007を付加し、生成データを、特定のデータサイズ、例えば4KBにそろえる。パディングデータ4007は圧縮データ4006のどの位置に挿入してもよい。パディングデータ4007は空データでもよいし、別の圧縮データ4006であってもよい。
 特定の大きさにそろえた圧縮データ4006とパディングデータ4007は、圧縮データセット4008を構成する。圧縮データセット4008を512B又は4KBに分割したデータを、分割圧縮データセット4009という。生成された分割圧縮データセット4009の集合が、データセット4010を構成する。
 未圧縮データセット4004と同様に、圧縮データ4006の内容を保証するため、分割圧縮データセットに対しデータ圧縮/伸長ロジック1122は、512Bの分割圧縮データ毎にCRCコードとIDを付与する。分割圧縮データのサイズは、512Bではなく4KBでもよい。CRCコードとIDの内容及び生成方法は、未圧縮データについて説明した通りである。
 図8Aは、NVMモジュール1106がサポートするライトコマンド5003を示す。リードコマンドも同様の構成を有する。図8Bは、ライトコマンド5003への応答情報5005を示す。NVMモジュール1106へのライトコマンド5003は、コマンド情報として、オペレーションコード(Opcode)、コマンドID、LBA0/1開始アドレス、LBA0/1長、圧縮要否フラグ、ライトデータアドレス、保証コードIDの期待値、保証コードIDの種を含む。ライトコマンド5003は、他の付加的な情報を含んでもよい。
 オペレーションコード及びコマンドIDは、NVMモジュール1106がサポートする各コマンドに共通に存在するフィールドである。オペレーションコードは、コマンドの種別をNVMモジュール1106に通知するための情報が格納されるフィールドである。一例として、ライトコマンドの当該フィールドには0x01という値が格納され、リードコマンドの当該フィールドには0x02という値が格納される。コマンドを取得したNVMモジュール1106はこのフィールドを参照することにより、通知されたコマンドがライトコマンドであることを認知する。
 コマンドIDは、コマンドの固有のIDを格納するフィールドであり、コマンドの応答情報5005には、どのコマンドに対する応答情報であるかをコマンドの発行元(ノード1100)に認識させるために、このフィールドに指定されたIDが付与される。ノード1100はコマンド作成時に、コマンドを一意に識別可能なIDをコマンドIDに格納する。NVMモジュール1106からの応答情報5005を受領した際、ノード1100は、応答情報5005に含まれるIDを取得することで、当該コマンドの完了を認識する。
 LBA0/1開始アドレスは、ライト先の論理空間(LBA0空間3001又はLBA1空間3002)の先頭アドレスを指定するフィールドである。本実施例におけるLBA0空間3001は、アドレス0x000_0000_0000から0x07F_FFFF_FFFFの範囲の空間である、LBA1空間3002は、アドレス0x800_0000_0000以降の範囲の空間と定められている。
 ライトコマンドのLBA0/1開始アドレスに0x000_0000_0000から0x07F_FFFF_FFFFの範囲のアドレスが格納されている場合、NVMモジュール1106は、LBA0空間3001のアドレスが指定されたと認識する。ライトコマンドのLBA0/1開始アドレスに0x800_0000_0000から0x8FF_FFFF_FFFFの範囲のアドレスが格納されている場合、NVMモジュール1106は、LBA1空間3002のアドレスが指定されたと認識する。
 なお、他の方法で、LBA0空間とLBA1空間3002のいずれのアドレス空間に従うアドレスが指定されたか、つまり、データを圧縮して書き込むことを指示しているか、データに圧縮処理を施さずにそのまま書き込むことを指示しているか、を認識してもよい。たとえば、オペレーションコードの内容によってLBA0空間3001とLBA1空間3002を識別できる。
 LBA0/1長は、LBA0/1開始アドレスから始まるデータ格納先のLBA0又はLBA1の範囲(長さ)を指定するフィールドである。NVMモジュール1106は、前述のLBA0又はLBA1開始アドレスとLBA0/1長とが示す範囲の、LBA0空間3001上領域又はLBA1空間3002上領域に対して、ライトデータを格納するPBA空間上領域を対応づける。
 圧縮要否フラグは、このコマンドが指示するライト対象データの圧縮要否を指定するフィールドである。ノード1100がライトコマンド5003を作成する際、ライト対象データにデータ圧縮によるサイズ削減効果が見込めない場合、例えば既に画像圧縮等で圧縮されたデータと認識している場合、このフィールドに「0」を格納する。これにより、NVMモジュール1106に圧縮が不要であることを通知する。逆に、このフィールドに0以外の値が格納されている場合、NVMモジュール1106は圧縮を実行する。
 実施例1では、ノード1100は、LBA1空間3002に対してライトする際、ライト対象データが既に圧縮済みでそれ以上の圧縮処理は不要であることを明示的に伝えるために、このフィールドに「0」を格納する。尚、LBA1空間3002へのデータライト時には、NVMモジュール1106が転送データの圧縮が常に不要であると判定してもよい。その場合、この圧縮要否フラグのフィールドは不要である。
 ライトデータアドレスは、このコマンドが指示するライト対象データの現在の格納先、たとえばノード1100の主記憶1103の先頭アドレスを格納するフィールドである。NVMモジュール1106は、このフィールドで指定された位置から、LBA0/1長で指定された長さの範囲に存在するデータを読み出すことでライトデータの取得を行う。
 尚、ライト対象データが複数の領域に離散的に格納されている場合、ライドデータアドレスのフィールドは、複数のアドレスが格納する。このフィールドは、複数のアドレスを格納するリストのポインタ情報、つまりリストが格納されている領域のアドレスを格納してもよい。NVMモジュール1106は、当該ポインタ情報を参照してライトデータアドレスを取得する。
 保証コードIDの期待値は、ライト対象データに付与されている保証コードの期待値を格納するフィールドである。実施例1に係るストレージ装置1002は、保証コードのIDとして6Bのデータを用いる。このため、本フィールドも6BのID期待値を指定する。
 コマンドを受信したNVMモジュール1106は、ライトするデータの512B毎に付加されている保証コードのIDについて、保証コードIDの期待値と一致しているか検査する。検査の具体的な方法は以下の通りである。ライトデータサイズが4KB(8セクタ)の場合、NVMモジュール1106は8つの保証コード付きセクタのIDについて比較を行う。
 まず、NVMモジュール1106は、8個の保証コード付きセクタのIDのそれぞれの期待値を、保証コードIDの期待値より生成する。ライトデータ中の最初の保証コード付きセクタのIDの期待値は、保証コードIDの期待値であり、以降の保証コード付きセクタのIDの期待値は、保証コードIDの期待値を1つずつ加算した値である。このように、4KBのライト要求であれば、NVMモジュール1106は、8個の保証コード付きセクタそれぞれについて、保証コードIDの期待値に0~7の値を加算した期待値と比較する。
 実施例1では、ストレージ装置1002のライト動作時に、ストレージ装置1002は、ホスト1000からのライトデータをキャッシュであるNVMモジュール1106に格納する。この時、ストレージ装置1002のホストインターフェース124は、ホスト1000から取得した512Bのデータ毎に2BのCRCコード4002と6BのID4003を、保証コードとして付与する。
 実施例1において、ホストライト動作時に付与するIDは、ライトデータ(ホストデータ)の書き込み先の伸長ボリューム3100の論理アドレス(LBA)の下位6Bであるので、伸長ボリューム3100のLBAの下位6Bの値がIDとして付加される。尚、保証コードのIDとして伸長ボリューム3100のライト先アドレスと異なる値が使用されてもよい。
 LBA0/1開始アドレスにLBA0が指定されている場合、NVMモジュール1106は、伸長されたデータの各セクタの保証コードのIDを、保証コードIDの期待値フィールドに格納されている値に基づいて検査する。
 LBA0/1開始アドレスにLBA1が指定されている場合、NVMモジュール1106は、圧縮データの各セクタの保証コードのIDを、保証コードIDの期待値フィールドに格納されている値に基づいて検査する。
 したがって、ストレージ装置1002が圧縮ボリュームを構成している最終記憶装置からデータ(圧縮データ)を読み出してNVMモジュール1106のLBA1空間3002に格納する際、圧縮データの各セクタの保証コードのID部分の検査を行う。
 新保証コードIDの種は、ライト時に保証コードを付け替える際、又は圧縮データに新たな保証コードを付ける際に用いるフィールドである。新保証コードIDの種は、当該ライト要求におけるライト対象データの先頭セクタのデータに新たに付与するIDの値を格納する。
 実施例1は、保証コードのIDとして6Bのデータを用いる。このため、本フィールドも6Bの種を指定する。なお、保証コードを付加しない場合には、新保証コードIDの種のフィールドには、無効であることを示す値、たとえば0xFFFFFFFFのような保証コードIDとして用いられない値、が格納される。
 新保証コードの種は、実施例1に示すストレージ装置1002では、通常のライト処理の際、つまりホスト1000からのライトデータをNVMモジュール1106に格納する際には用いない。これは先に述べたとおり、ホスト1000からのライトデータをNVMモジュール1106に格納する時点では、当該データが格納される圧縮ボリューム上のアドレスが定まっていないからである。ストレージ装置1002がNVMモジュール1106にデータをライトする際、新たに付与する保証コードが既知であった場合には、新保証コードの種フィールドを用いることがある。
 ストレージ装置1002のMPコア1111は、NVMモジュール1106へのデータライト時に保証コードを変更する場合、新保証コードの種となる情報をライトコマンドの新保証コードの種フィールドに格納する。指示を受けたNVMモジュール1106は、ライトデータをNVMメモリ1130に格納する際、ライトコマンドに含まれている新保証コードの種から新たな保証コードを生成し、保証コード付きセクタ(又は保証コード付き圧縮セクタ)の保証コードを変更してFMに格納する。
 実施例1では、LBA0/1長にて指定されるライト要求サイズが4KBの場合、NVMモジュール1106は、8個の新たな保証コードを新保証コードIDの種より生成する。具体的には、NVMモジュール1106は、転送対象である4KB(8セクタ)のデータの先頭の保証コード付きセクタのIDを、新保証コードIDの種で指定された値とし、次の保証コード付きセクタのIDの値は、新保証コードの種を1つインクリメントした値となる。このように、4KBのライト要求であれば、8個の保証コード付きセクタそれぞれについて、新保証コードIDの種で指定される値に対して0~7の値を加算して生成されるIDを付与する。
 なお、実施例1に係るNVMモジュール1106の場合、LBA0/1開始アドレスにLBA0が指定されている場合、保証コード付きセクタ保証コードに含まれているID部分(伸長されたデータの各セクタに含まれている保証コードのID部分)に、新保証コードIDの種フィールドに格納されている値に基づいて生成されるIDを格納し、LBA0/1開始アドレスにLBA1が指定されている場合、保証コード付き圧縮セクタの保証コード内ID部分(圧縮データの各セクタに付加されている保証コードのID部分)に、新保証コードIDの種フィールドに格納されている値に基づいて生成されるIDを格納するよう動作する。
 ライト応答情報5005は、コマンドID、ステータス、圧縮データ長により構成される。尚、本実施例では、上記の情報による応答情報の例について記すが、上記以上の付加的な情報があってもよい。
 コマンドID及びステータスは、NVMモジュール1106がサポートする各コマンドの応答に含まれる、共通の情報である。コマンドIDは、完了したコマンドを一意に特定できる番号を格納するフィールドである。
 ステータスは、コマンドの完了又はエラーを、コマンド要求元(ストレージ装置1002のMPコア1111)に通知する為のフィールドである。エラーである場合、例えばエラー原因等を識別できる番号を格納する。
 圧縮データ長は、ライトしたデータが、データ圧縮により縮小した際のデータ長を格納するフィールドである。コマンドを発行したMPコア1111は、ライト応答情報5005に含まれるこのフィールドの情報を取得することで、ライトしたデータの圧縮後のデータサイズを把握できる。また、本実施例では、ライト先がLBA1であるとき、圧縮済みのデータを格納することとなっているため、本フィールドは無効となる。
 図9Aは、本実施例におけるNVMモジュール1106でサポートされる、LBA1マッピングコマンド5600を示す。NVMモジュール1106は、LBA0空間3001の領域を指定してライトされたデータを圧縮して、NVMメモリ1130に格納する。ノード1100は、NVMメモリ1130に格納された圧縮データを圧縮状態のまま最終記憶装置(ドライブ1117)へ書き込むために、LBA1マッピングコマンドを用いて、LBA1空間3002にマッピングする。
 LBA1マッピングコマンド5600は、コマンド情報として、オペレーションコード、コマンドID、LBA0開始アドレス、LBA0長、LBA1開始アドレスを含む。LBA1マッピングコマンド5600は、上記以外の付加的な情報を含んでもよい。
 LBA0開始アドレスは、LBA1に圧縮データをマッピングする対象データのLBA0領域の先頭アドレスを指定するフィールドである。LBA0長は、LBA1へのマッピング対象となるLBA0開始アドレスから始まるLBA0の範囲を指定するフィールドである。本例で、LBA0開始アドレスとLBA0長は、8セクタ(4KB)の倍数に限定される。
 LBA1開始アドレスは、マッピングするLBA1の開始アドレスを指定するフィールドである。ノード1100のMPコア1111は、マッピングするデータのデータサイズ(圧縮された時のデータサイズ)、及びマッピング可能なLBA1空間3002上の領域、つまり、他のデータがマッピングされていないLBA1空間3002上の領域の情報を管理している。
 ノード1100のMPコア1111は、この情報をもとにして、マッピング対象のデータをマッピング可能なLBA1空間3002上の領域の先頭アドレスを、LBA1開始アドレスフィールドに格納し、当該コマンドをNVMモジュール1106に発行する。なお、LBA1開始アドレスを複数指定する、つまりLBA0開始アドレスとLBA0長で特定されるLBA0空間3001の領域が、LBA1空間3002上の離散的な領域にマッピングされてもよい。
 NVMモジュール1106は、前述のLBA0開始アドレスとLBA0長が示す範囲のLBA0空間3001に対応づけられている圧縮データを、LBA1開始アドレスから、圧縮データサイズ分の領域に渡ってマッピングを行う。
 より具体的には、NVMモジュール1106は、LBA0-PBA変換テーブル5100を参照し、LBA0開始アドレスとLBA0長が示す範囲のLBA0空間3001に対応付けられたPBA(NVMモジュールPBA5102)を取得する。
 NVMモジュール1106は、LBA1-PBA変換テーブル5200を参照し、LBA1開始アドレスから、取得したPBAの総サイズと同サイズとなるLBA1範囲(NVMモジュールLBA1(5201))のNVMモジュールPBA5202に、取得したPBAの情報を格納する。なお、LBA1マッピングコマンド5600の応答は応答5500でMPコア1111に通知する。応答5500は、コマンドID及びステータスを含んで構成される。
 図9Bは、本実施例におけるNVMモジュール1106がサポートするLBA0マッピングコマンド5700を示す。ノード1100は、最終記憶装置(ドライブ1117)に格納された圧縮データを、NVMメモリ1130に書き込むが、ホストから当該データに対するリード要求を受けた場合に圧縮データを伸長した状態でホストに転送する必要がある。ホストはLBA0を指定してリード要求を行うので、NVMメモリ1130上の圧縮データのアドレスをLBA0に対応付ける必要がある。そのためNVMモジュール1106はLBA0マッピングコマンドを用いて、LBA0空間3001にマッピングする。
 LBA0マッピングコマンド5700は、例えば、コマンド情報として、オペレーションコード、コマンドID、LBA1開始アドレス、LBA1長、LBA0開始アドレスを含む。LBA0マッピングコマンド5700は、上記以外の付加的な情報を含んでもよい。
 LBA1開始アドレスは、マッピング対象となる圧縮データのLBA1空間3002の先頭アドレスを指定するフィールドである。LBA1長は、LBA0へのマッピング対象のLBA1空間3002の範囲を指定するフィールドである。
 LBA0開始アドレスは、マッピングするLBA0の開始アドレスを指定するフィールドである。ノード1100は、自身が管理するNVMモジュール1106内にキャッシュしているデータの管理情報により、LBA0/1空間3001/3002の使用状態を管理している。ノード1100は、当該管理情報をもとに、マッピング可能なLBA0の領域を確保し、この先頭アドレスをLBA0開始アドレスに格納する。本例で、LBA0開始アドレスに指定できるアドレスは、8セクタ(4KB)の倍数に限定される。
 NVMモジュール1106は、ノード1100からLBA0マッピングコマンドを受信すると、LBA1空間3002において上記LBA1開始アドレスとLBA1長が示す範囲に対応づけられている圧縮データを、LBA0空間3001において、LBA0開始アドレスから伸長後のデータサイズ分の領域に渡ってマッピングする。
 より具体的には、NVMモジュール1106は、LBA1-PBA変換テーブル5200を参照し、LBA1開始アドレスとLBA1長が示す範囲のLBAに対応付けられたPBAを取得する。さらに、NVMモジュール1106は、LBA0-PBA変換テーブル5100において、LBA0開始アドレスから、圧縮データの伸長後のサイズと同サイズとなるLBA0範囲に対応するNVMモジュールPBA5102及びPBA長5103に、取得したPBAの情報を格納する。なお、LBA0マッピング応答は、コマンドID及びステータスを含んで構成される。LBA0マッピング応答は、他の付加的な情報を含んでもよい。
 図9Cは、本実施例におけるNVMモジュール1106がサポートする圧縮データサイズ取得コマンド5750を示す。圧縮データサイズ取得コマンド5750は、NVMモジュール1106のNVMメモリ1130に格納されている圧縮データサイズの特定のために用いられる。本実施例における圧縮データサイズ取得コマンド5750は、コマンド情報として、オペレーションコード、コマンドID,LBA0開始アドレスまたはLBA1開始アドレス、LBA0長またはLBA1長により構成される。尚、本実施例では上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
 以下、圧縮データサイズ取得コマンド5750の効果について説明する。LBA0開始アドレスは、圧縮後データサイズ取得の対象となるLBA0領域の先頭アドレスを指定するフィールドである。LBA0長はLBA0開始アドレスから始まるLBA0の範囲を指定するフィールドである。MPコア1111はこの圧縮データサイズ取得コマンド5750をNVMモジュールに読み込ませて、圧縮データサイズ取得の指示をする。
 指示を受けたNVMモジュール1106は、前述のLBA0開始アドレスとLBA0長が示す範囲のLBA0領域に対応付けられている圧縮データのサイズを算出し、算出結果を応答5500の圧縮データ長に反映させ、MPコア1111に転送、通知する。具体的には、応答5600の圧縮データ長に算出結果を反映させて出力する。
 尚、LBA0開始アドレスに指定できるアドレスはNVMメモリ1130のページサイズ(4KB)の倍数に限定される。4KB境界と一致しないアドレスや長さがLBA0開始アドレスまたはLBA0長に指定された場合には、応答5500のステータスにエラーが反映されMPコアに返却される。
 図10は、本実施例におけるNVMモジュール1106がサポートする、フルストライプパリティ生成コマンド5800を示す。RAID技術におけるパリティの生成方法には大きく2通りある。1つは、パリティを生成するために必要なすべてのデータによって、XOR等のパリティデータの演算を行ってパリティ生成を行う。この方法を本開示では「フルストライプパリティ生成方法」と呼ぶ。
 もう一方は、RAID構成された記憶装置群に対して更新データの書き込みが行われる場合、当該更新データに加えて、記憶装置に格納されている更新前のデータ及び当該更新前のデータに対応する更新前パリティとのXOR演算等を行って、更新データに対応するパリティ(更新後パリティ)を生成する。この方法を本開示では「更新パリティ生成方法」と呼ぶ。
 本実施例におけるフルストライプパリティ生成コマンド5800は、コマンド情報として、オペレーションコード、コマンドID、LBA1長、ストライプ数、LBA1開始アドレス0~n、XORパリティ用LBA1開始アドレス、RAID6パリティ用LBA1開始アドレスを含む。
 尚、フルストライプパリティ生成コマンド5800、他の付加的な情報を含んでもよい。NVMモジュール1106は、オペレーションコードの内容から、ノード1100から受け取ったコマンドがフルストライプパリティ生成コマンドであることを認知する。
 生成すべきパリティの種類は、RAIDレベルによって異なる。そのため、本実施例におけるNVMモジュール1106は、オペレーションコードの内容によって、生成されるパリティを変える。
 たとえば、オペレーションコードが、0x11、0x12、0x13のいずれかを指定する場合、NVMモジュール1106は、フルストライプパリティを生成する。オペレーションコードが、0x11を指定する場合、NVMモジュール1106は、RAID4、5で用いられるパリティ(XORデータ)を1つ生成する。
 オペレーションコードが、0x12を指定する場合、NVMモジュール1106は、RAID6(リードソロモンコード使用)で用いられる2つのパリティ(いわゆるPパリティとQパリティ)を生成する。オペレーションコードが、0x13を指定する場合、NVMモジュール1106は、RAID6(いわゆるEVENODD方式、Row-Diagonalパリティ方式)で用いられる2つのパリティ(水平パリティ、対角パリティ)を生成する。
 LBA1長は、生成するパリティの長さあるいはパリティ生成元データの長さを指定するフィールドである。RAIDパリティとパリティ生成元データの長さは同一である。ストライプ数は、パリティを生成のために使用するデータの個数を指定する。たとえば6つのデータに対してパリティを生成する場合、ストライプ数は6を格納する。
 LBA1開始アドレスは、パリティ生成元のデータが対応づけられているLBA1の開始アドレスを指定するフィールドである。このフィールドの個数はストライプ数で指定された個数と一致している。一致していないコマンドが発行された場合、NVMモジュール1106はエラーを返却する。例えば、6つのデータに対して2つのパリティを作成する構成(6D+2PのRAID6構成)では、6つのLBA1開始アドレスが指定される。
 XORパリティ用LBA1開始アドレスは、生成するRAIDパリティ(XORパリティ)の格納先を指定するフィールドである。この開始アドレスからLBA1長に指定された範囲の領域に、生成されたパリティ(RAID5のパリティ、あるいはRAID6のPパリティ、水平パリティ)が格納される。
 RAID6用LBA1開始アドレスは、生成するRAID6用のパリティの格納先を指定するフィールドである。RAID6用のパリティは先に述べたとおり、リードソロモン符号のQパリティ又はEVENODD方式におけるDiagonalパリティである。
 本実施例では、RAID6用LBA1開始アドレスからLBA1長に指定された範囲の領域に生成されたパリティが格納される。もちろん、オペレーションコードにRAID5用パリティ生成コマンドが指定された(たとえば0x11が指定された)場合には、RAID6用LBA1開始アドレスの指定は不要である。
 本実施例のNVMモジュール1106は、フルストライプパリティ生成コマンド5800を受信すると、上記LBA1開始アドレスに指定された領域に対応付けられたPBAにより特定されるNVMメモリ1130上領域から、複数の圧縮データを取得する。NVMモジュール1106は、パリティ生成ロジック1123を使って、パリティ(1つ又は2つ)を生成する。
 その後、NVMモジュール1106は、生成したパリティをNVMメモリ1130上領域に格納する。生成したパリティの書き込みは、ライトコマンドにおけるデータ書き込みと同様である。具体的には、XORパリティ用LBA1開始アドレス及び/又はRAID6パリティ用LBA1開始アドレスで特定されるLBA1空間3002に対して動的にPBAを割り当て、当該割り当てたPBAにより特定される領域にパリティを書き込む。フルストライプパリティ生成応答は、コマンドID及びステータスにより構成される。
 図11は、ストレージ装置1002の圧縮ホストライト処理のフローを示す。圧縮ホストライト処理は、ホスト1000からのホストデータの圧縮ボリューム3200に対するライト処理である。
 本実施例は、装置内データ流量、具体的には、主記憶1103に対するアクセス量を削減し装置性能を向上させる。しかし、後述するように、ホスト1000にライト完了応答を返すまでの処理が通常のホストライト処理と比較して増えるため、装置応答時間が増大する。そのため本実施例により、装置性能と装置応答時間のトレードオフが生じる。そこで、本実施例において、ストレージ装置1002は、ホストライトのシーケンシャル性の有無をチェックし、判定結果に応じて異なる処理を実行する。
 まず、ストレージ装置1002のMPコア1111は、ホスト1000からライト要求を受領する(1600)MPコア1111は、ホストライト要求の内容を分析し、ホストライトのアクセスパターンにおいてシーケンシャル性の有無を判定する(1610)。ステップS1610の詳細は、図12を参照して後述する。
 ホストライトのアクセスパターンにシーケンシャル性がある場合(1620:Yes)、MPコア1111は、ステップ1630に進む。シーケンシャル性が無い場合(1620:No)、MPコア1111は、ステップ1670に進む。
 ステップ1630において、MPコア1111は、データ圧縮による圧縮処理効果を判定する。後述するシーケンシャルライト特化フロントエンド処理1650は、装置内データ流量削減によって、圧縮シーケンシャルライトスループット性能を向上できる一方、通常のフロントエンドライト処理1670と比較してホスト1000への応答時間が増大する。
 そのため、スループットと応答時間のトレードオフの判定が重要である。本実施例は、圧縮効果判定処理を導入する。ステップS1630の詳細は、図13を参照して後述する。圧縮率が閾値以上の場合(1640:No)、MPコア1111は、圧縮処理の効果が無いと判定し、ステップ1670に進む。圧縮率は、圧縮後データを圧縮前データで割った値である。
 圧縮率が閾値より小さい場合(閾値を超える場合)(1640:Yes)、MPコア1111は、圧縮処理の効果があると判定し、ステップ1650に進む。ステップ1650は、シーケンシャルライト特化フロントエンド処理である。
 ステップ1650において、MPコア1111は、シーケンシャルライトに特化したフロントエンドライト処理を行う。ステップ1650の詳細は、図16を参照して後述する。ステップ1650が完了すると、MPコア1111は、当該フローを終了する。
 ステップ1670において、MPコア1111は、通常のフロントエンドライト処理を行う。ステップ1670の詳細は、図18を参照して後述する。ステップ1670が完了したら当該フローを終了する。
 シーケンシャルライト処理においてフロントエンドライト処理が完了した後、MPコア1111は、速やかにバックエンドライト処理を行う。バックエンドライト処理はノード1100のみに実行され、最終記憶装置(ドライブ1117)に圧縮ホストデータを格納する。
 上述のように、データ流量が多いシーケンシャルホストライトにおいてシーケンシャルライト特化フロントエンド処理を実行することで、装置内データ流量を効果的に削減し、スループットの大きな向上を図ることができる。また、圧縮率が小さいホストライトにおいて通常フロントエンドライト処理を実行することで、スループットの大きな向上が期待できない場合に、ホスト1000への応答遅延を避けることができる。
 なお、シーケンシャル性又は圧縮率の一方のみを基準としてフロントエンドライト処理を切り替えてもよく、アクセス先ボリュームやアクセス元ホストを基準としてフロントエンドライト処理を切り替えてもよい。常に、シーケンシャルライト特化フロントエンド処理を実行してもよい。
 図12は、ストレージ装置1002がホストの要求内容を分析し、IO処理のシーケンシャル性を判定する処理(1610)のフローを示す。ストレージ装置1002は、1又は複数のライト要求によるホストデータのデータ長が閾値を超える場合に、当該ホストライト要求がシーケンシャル性を有すると判定する。判定は、例えば、ホストデータを格納するために確保される連続スロット数又はライト要求が指定するアドレス長に基づいて行うことができる。
 まず、MPコア1111は、ホストライトの要求を分析する(1611)。ホストライトの要求は、非圧縮ボリュームの識別子、LBA、データ長(アドレス長)、データ送信元のホスト1000のアドレス等を含む。
 次に、MPコア1111は、主記憶1103に格納されているスロット管理テーブルD220から、主記憶1103上のどの位置を予約してホストライトデータを格納するかを判定するための情報を取得する。
 次に、MPコア1111は、ホストライト要求についてシーケンシャル性の有無を判定する(1613)。例えば、ホスト1000からのホストデータを受信するためにスロットを確保する時、MPコア1111は、ホストデータ格納用の連続スロットの数が規定の閾値以上であるか調べる。連続スロットは、スロット番号が連続するスロットである。
 連続スロット数が閾値以上である場合、MPコア1111は、ホストライト要求は、シーケンシャル性を有すると判定する。連続スロット数が閾値より小さい場合、MPコア1111は、ホストライト要求は、シーケンシャル性を有していないと判定し、処理を終了する。この他、1又は複数のホストライト要求が示す連続アドレス長(連続領域のサイズ)が閾値以上の場合、MPコア1111は、ホストライト要求が、シーケンシャル性を有していると判定してもよい。
 ホストライト要求がシーケンシャル性を有する場合(1614:Yes)、MPコア1111は、シーケンシャルアクセスフラグをセットする(1615)。ホストライト要求がシーケンシャル性を有していない場合(1614:No)、MPコア1111は、当該処理を終了する。なお、本処理は、MPと異なる回路により実行されてもよい。
 図13は、データ圧縮による圧縮効果を判定する処理(1630)を示す。MPコア1111は、圧縮率履歴情報を参照する(1631)。図14は、圧縮履歴情報を格納する圧縮履歴テーブル5900を示す。
 圧縮VOLは、ストレージ装置1002が現在管理している圧縮VOLの識別子を格納するフィールドである。VOL圧縮率は、圧縮VOLの圧縮率を格納するフィールドである。圧縮IO処理IDは、圧縮VOLに対するホストライト処理の識別子を格納するフィールドである。圧縮率は、圧縮VOLに対するホストライト処理における圧縮率の値を格納するフィールドである。各圧縮VOLに対して、複数の圧縮IO処理ID及び圧縮率が格納され得る。
 予想圧縮率は、MPコア1111が予想した圧縮VOLに対する次のホストライト処理における圧縮率の予想値を格納するフィールドである。予想値の計算方法は後述する。効果判定は、MPコア1111が予想した圧縮率から推定した圧縮効果有無の判定結果を格納する。圧縮履歴テーブル5900のフィールドは、特定の値が登録されていない場合、NULL値を格納する。
 図13に戻って、MPコア1111は、圧縮履歴テーブル5900において、ホストライト先の圧縮VOLを探索し、過去に圧縮処理が行われた否かを判定する(1632)。当該圧縮VOLのエントリに過去の圧縮履歴の情報が格納されておらず、NULL値のみが格納されている場合、過去に圧縮処理が行われていない。
 過去に圧縮処理が行われておらず、今回のホストライトが初回である場合(1632:Yes)、MPコア1111は、ステップ1635に進む。過去圧縮処理が行われ、今回のホストライトが初回でない場合、MPコア1111はステップ1633に進む。
 ステップ1635において、MPコア1111は、当該圧縮VOLの圧縮履歴情報を圧縮履歴テーブル5900に格納する。具体的には、MPコア1111は直後の圧縮処理の圧縮IO処理IDを格納し、さらに、予想圧縮率のフィールドにユーザにより予め指定されている値をセットする。当該値は、圧縮VOL毎に設定可能である。
 ステップ1633において、MPコア1111は、予想圧縮率を計算する。MPコア1111は、当該圧縮VOLの圧縮VOL圧縮率及び直前のホストライトの圧縮率の結果から、現在処理しようとしているホストライトにおける圧縮率を予測する。
 例えば、MPコア1111は、当該圧縮VOLのVOL圧縮率と、今回ホストライトにおける圧縮率が同じと予測してもよい。または、MPコア1111は、当該圧縮VOLに対する過去の圧縮IO処理の圧縮率の平均値、中央値、最小値、又は移動平均値により、今回ホストライトにおける圧縮率を予測してもよい。ステップ1634において、MPコア1111は、当該圧縮VOLの予想IO圧縮率のフィールドに、ステップ1633で計算した圧縮率の予想結果を格納する。
 図15は、実施例1のシーケンシャルライト特化フロントエンドライト処理(1650)のデータフローを示す。ノード1100のホストI/F1101はホスト1000から受領した未圧縮のホストデータに保証コード(CRCコード4002及びID4003)を付与し、主記憶1103に転送する(データフロー101)。
 ノード1100のMPコア1111は、NVMモジュール1106のデータ圧縮/伸長ロジック1122に、主記憶1103上のホストデータをリードし圧縮する指示を発行する。指示を受けたデータ圧縮/伸長ロジック1122は、主記憶1103上のホストデータを読み込み、データ圧縮を開始する(データフロー102)。
 データ圧縮/伸長ロジック1122は、圧縮ホストデータを伸長し、圧縮演算の検算を実施する(データフロー103)。検算の結果、圧縮処理に問題がないと判定した後に、圧縮したホストデータをNVMモジュール1106のデータバッファ1121に出力し(データフロー104)、MPコア1111に処理完了を通知する。ノード1100における検算により、転送先ノード1200において、圧縮ホストデータのエラーが検出される可能性を低減する。
 MPコア1111は、データ圧縮/伸長ロジック1122にデータ転送を指示する。指示を受けたデータ圧縮/伸長ロジック1122はデータバッファ1121上の圧縮ホストデータを読み込み、ノード1200の主記憶1203に直接データ転送した後に(データフロー105)、MPコア1111に完了を通知する。
 MPコア1111は、ノード1200のMPコア1211に圧縮ホストデータ転送完了を通知し、NVMモジュール1206へのデータ転送を依頼する。依頼を受けたノード1200のMPコア1211は、ノード1200のNVMモジュール1206のデータ圧縮/伸長ロジック1222に対し主記憶1203上のホストデータをリードする指示を発行する。
 指示を受けたデータ圧縮/伸長ロジック1222は、ノード1200の主記憶1203上の圧縮ホストデータを読み込み、データバッファ1221に転送する(データフロー106)。この時、データ圧縮/伸長ロジック1222は、圧縮データに付与された保証コードを読み込み、データインテグリティをチェックしながら(データフロー107)、データバッファに出力する(データフロー108)。圧縮ホストデータを伸長することなく、保証コードによりチェックすることで、チェック時間を短縮できる。
 データ圧縮/伸長ロジック1222は、データバッファ1221への転送を完了させた後、MPコア1211に処理完了を通知する。通知を受けたMPコア1211はノード1100のMPコア1111に対し、圧縮ホストデータ二重化の完了を通知する。二重完了通知を受け取ったノード1100のMPコア1111は、ホスト1000にホストライト処理完了を通知し、ホストライト要求を完了させる。
 上述のように、シーケンシャルライト特化フロントエンドライト処理(1650)は、未圧縮データを転送することなく、圧縮ホストデータをノード1100からノード1200に転送し、ノード1200が、転送された圧縮ホストデータを保持する。したがって、ノードI/F1114、1214間のデータ流量を低減し、さらに、ノード1200における主記憶1203の入出力データ流量を低減できる。これにより、スループットを向上できる。未圧縮ホストデータのサイズが大きい程、大きなデータ流量削減効果を奏することができる。
 一方、ノード1100での圧縮処理の後、圧縮ホストデータがノード1200に転送され、ノード1200が、エラーチェックを行い、圧縮データを格納する。このようなシリアル処理のため、ホスト1000への応答時間が長くなる。
 図16はシーケンシャルライト処理に特化したフロントエンドライト処理(1650)の処理フローを示す。ステップ1651において、MPコア1111は、ホストデータを一時的に格納するための主記憶1103のバッファ領域を予約する。バッファ領域は非圧縮VOL又は圧縮VOLのいずれの論理ボリュームにも対応付けられていない領域であり、ホストデータを処理するための一時領域である。
 ステップ1652において、MPコア1111は、ホスト1000に対し、ホストデータの転送要求を送信し、受信したホストデータを、主記憶1103のバッファ領域に格納する。ステップ1653において、MPコア1111は、NVMモジュール1106のデータ圧縮/伸長ロジック1122に対し、バッファ領域に格納されているホストデータをNVMモジュール1106に転送するよう指示する。
 具体的には、MPコア1111は、NVMモジュール1106へのライトコマンドをデータ圧縮/伸長ロジック1122に発行する。ライトコマンドの圧縮要否フラグは、圧縮要に設定される。ホストデータの保証コードIDの期待値は、ホストI/F1101がつけた保証コードID4003と同じである。MPコア1111は、ホストI/F1101がつけた保証コードIDと同じ値を、ライトコマンドに格納する。
 ステップ1654において、データ圧縮/伸長ロジック1122は、ライトコマンドに従って主記憶1103のバッファ領域から、NVMモジュール1106のデータバッファ1121にホストデータを転送する。この時、データ圧縮/伸長ロジック1122は、ホストデータを読み込みながら圧縮する。圧縮されたホストデータには、保証コードが付される。
 データ圧縮/伸長ロジック1122は、圧縮演算の検算を行う。具体的には、ステップ1655において、データ圧縮/伸長ロジック1122は、圧縮したデータを伸長する。ステップ1656において、データ圧縮/伸長ロジック1122は、伸長したホストデータによって圧縮結果のインテグリティをチェックする。
 例えば、データ圧縮/伸長ロジック1122は、伸長したホストデータにおいて、ホストI/F1101が付与したCRCコードにより、データ破損の有無をチェックする。または、データ圧縮/伸長ロジック1122は、予めCRCチェックを行ったホストデータを保持しておき、圧縮前のホストデータと伸長後のホストデータを比較して、一致しているかどうかをチェックする。
 ステップ1657において、データ圧縮/伸長ロジック1122は、ステップ1656のチェック結果を参照し、エラーの有無を判定する。エラーが有る場合(1657:Yes)、データ圧縮/伸長ロジック1122はその判定結果をMPコア1111に通知する。ステップ1658において、MPコア1111は、ホスト1000に対して、ホストデータの再送を要求する。
 エラーが無い場合(1657:No)、ステップ1659において、データ圧縮/伸長ロジック1122は、ノード1100に属するNVMモジュール1106の圧縮データをノード1200のバッファ領域に転送する。ノード1100のMPコア1111がリードコマンドを作成し、データ圧縮/伸長ロジック1122は、リードコマンドに従って、外部スイッチ1105を経由してノード1200のバッファ領域に圧縮ホストデータを転送する。
 ステップ1660において、ノード1200のMPコア1211は、圧縮ホストデータをノード1200のNVMモジュール1206のデータバッファ1221に転送する。ステップ1661において、NVMモジュール1206のデータ圧縮/伸長ロジック1222は、圧縮ホストデータを伸長することなく、圧縮ホストデータに付与された保証コードを計算し、圧縮ホストデータの信頼性をチェックする。ノード1200は、圧縮ホストデータを伸長して、エラーチェックを行ってもよい。
 エラーが有る場合(1662:Yes)、データ圧縮/伸長ロジック1222はその判定結果をMPコア1211に通知する。ステップ1663において、MPコア1211は、ノード1100に対して、圧縮ホストデータの再送を要求する。
 エラーが無い場合(1662:No)、データ圧縮/伸長ロジック1222は処理の完了をMPコア1211に通知し、MPコア1211は、処理の完了をノード1100のMPコア1111に通知する。
 ステップ1664において、MPコア1111は、ノード1100のNVMモジュール1106のデータバッファ1121に格納された圧縮ホストデータについてLBA1マッピングコマンド5600を発行する。データ圧縮/伸長ロジック1122は、LBA1マッピングコマンド5600に応じて、LBA1と圧縮ホストデータを対応付ける。
 同様にMPコア1111は、ノード1100のNVMモジュール1106のデータバッファ1121に格納された圧縮ホストデータについてLBA0マッピングコマンド5700を発行する。データ圧縮/伸長ロジック1122は、LBA0マッピングコマンド5700に応じて、LBA0と圧縮ホストデータを対応付ける。ノード1200も、ノード1100への完了通知前に、この処理を完同様に実施する。
 ステップ1665において、MPコア1111はNVMモジュール1106に対し後述の圧縮データサイズ取得コマンド5750を用いて圧縮データのサイズを取得し、LBA0領域に含まれる圧縮データサイズを取得する。この時点での圧縮データは最終不揮発媒体に格納されていないダーティデータであるので、当該データを含むセグメントがダーティ属性であることを示す必要がある。
 そのため、MPコア1111は、主記憶ホストデータキャッシュ管理テーブルD220のスロットステータスD224を操作し、ダーティ属性を付与する。最後にMPコア1111は、ホスト1000に、ホストライト処理完了を通知する。以上をもってシーケンシャルライト特化のフロントエンド処理が終了する。
 図17は本発明の実施例1における通常フロントエンドライト処理(1660)のデータフローを示す。ノード1100のホストI/F1101は、ホスト1000から受領した未圧縮のホストデータを主記憶1103に転送する(データフロー201)。
 ノード1100のMPコア1111は、DMA1112にホストデータのデータ転送を指示する。指示を受けたDMA1112は、主記憶1103上のホストデータを読み込み、ノード1200の主記憶1203にデータ転送した(データフロー202)後、MPコア1111に完了を通知する。
 MPコア1111は、ノード1200のMPコア1211にホストデータ転送完了を通知し、ノード1200のNVMモジュール1206へのデータ転送を依頼する。依頼を受けたMPコア1211は、NVMモジュール1206のデータ圧縮/伸長ロジック1222に対し主記憶1203上のホストデータをリードすることを指示する。指示を受けたデータ圧縮/伸長ロジック1222は、主記憶1203上のホストデータを読み込み、データを圧縮する(データフロー223)。
 データ圧縮/伸長ロジック1222は、ホストデータに付与された保証コードを読み込み、データインテグリティをチェックしながら(データフロー224)、データバッファ1221に圧縮ホストデータを出力する(データフロー225)。データ圧縮/伸長ロジック1222は、データインテグリティチェックでエラーを発見しない場合に、圧縮したホストデータをデータバッファ1221に出力し、MPコア1211に処理完了を通知する。
 通知を受けたMPコア1211は、ノード1100のMPコア1111に対し、圧縮ホストデータの二重化の完了を通知する。ノード1200の処理と並行して、ノード1100は同様の処理を実行する。データフロー213~215は、データフロー223~225に対応する。
 ノード1200の二重完了通知を受け取ったノード1100のMPコア1111は、ノード1100のNVMモジュール1106の処理完了通知を受け取った後に、ホスト1000にホストライト処理完了を通知し、ホストライト要求を完了する。
 上述のように、通常のフロントエンドライト処理(1670)は、二つのノード1100、1200においてデータ圧縮を並列に実行するので、ホスト1000への応答時間を短縮することができる。
 図18は通常のフロントエンドライト処理(1670)の処理フローを示す。ステップ1671において、MPコア1111は、ホストデータを非圧縮VOL3100に格納するためのLBA0領域を予約する。
 ステップ1672において、MPコア1111は、ホスト1000に対しホストデータの転送要求を出し、ホストデータを主記憶1103のバッファ領域に格納する。ステップ1673において、MPコア1111は、ノード1100の主記憶1103上のホストデータをノード1200の主記憶1203のバッファ領域にデータ転送する。具体的には、MPコア1111は、DMA1112にデータ転送命令を作成し、外部スイッチ1105を経由してノード1200のバッファ領域に転送させる。
 ステップ1674において、ノード1200のMPコア1211は、ノード1200のデータ圧縮・伸長ロジック1222に対し、バッファ領域に格納されているホストデータをNVMモジュール1206に転送するよう指示する。具体的には、MPコア1211は、NVMモジュール1206へのライトコマンドをデータ圧縮/伸長ロジック1222に発行する。
 ライトコマンドの圧縮要否フラグは、圧縮要に設定される。ホストデータの保証コードIDの期待値は、ホストI/F1101がつけた保証コードID4003と同じである。MPコア1111は、ホストI/F1101がつけた保証コードIDと同じ値を、ライトコマンドに格納する。
 ステップ1675において、データ圧縮/伸長ロジック1222は、ライトコマンドに従って主記憶1203のバッファ領域から、ホストデータを取得し、保証コードでホストデータをチェックする。
 データチェックにおいてエラーが存在する場合(1676:Yes)、データ圧縮/伸長ロジック1222はそのチェック結果をMPコア1211に通知する。ステップ1677において、MPコア1211は、ホストデータ送信元のノード1100に、ホストデータの再送を要求する。
 データチェックにおいてエラーが存在しない場合(1676:No)、ステップ1678において、データ圧縮/伸長ロジック1222は、ライトコマンドに従って、ホストデータを圧縮する。
 ステップ1679において、データ圧縮/伸長ロジック1222は、圧縮したデータを伸長する。ステップ1656において、データ圧縮/伸長ロジック1222は、伸長したホストデータによって圧縮結果のインテグリティをチェックする。
 例えば、データ圧縮/伸長ロジック1222は、伸長したホストデータにおいて、ホストI/F1101が付与したCRCコードにより、データ破損の有無をチェックする。または、データ圧縮/伸長ロジック1222は、予めCRCチェックを行ったホストデータを保持しておき、圧縮前のホストデータと伸長後のホストデータを比較して、一致しているかどうかをチェックする。
 ステップ1680において、データ圧縮/伸長ロジック1122は、ステップ1679のチェック結果を参照し、エラーの有無を判定する。エラーが有る場合(1680:Yes)、データ圧縮/伸長ロジック1222は、ステップ1678に戻って、データ圧縮/伸長ロジック1222は、ライトコマンドに従って、ホストデータを圧縮する。
 エラーが無い場合(1680:No)、ステップ1682において、データ圧縮/伸長ロジック1122は、圧縮ホストデータに保障コードを付けて、データバッファ1221に格納する。データ圧縮/伸長ロジック1222は処理の完了をMPコア1211に通知する。 
 ステップ1683において、MP1211は、ノード1200のNVMモジュール1206のデータバッファ1221に格納された圧縮ホストデータについてLBA1マッピングコマンド5600を発行する。データ圧縮/伸長ロジック1222は、LBA1マッピングコマンド5600に応じて、LBA1と圧縮ホストデータを対応付ける。
 同様にMP1211は、ノード1200のNVMモジュール1206のデータバッファ1221に格納された圧縮ホストデータについてLBA0マッピングコマンド5700を発行する。データ圧縮/伸長ロジック1222は、LBA1マッピングコマンド5700に応じて、LBA0と圧縮ホストデータを対応付ける。その後、MPコア1211は、ノード1100のMPコア1111に対し、圧縮ホストデータの二重化の完了を通知する。
 ノード1200の処理と並行して、ノード1100は同様の処理(1674~1683)を実行する。ノード1100は、ステップ1676においてエラーを発見した場合、ホスト1000に対してホストデータの再送を要求する。
 最後に、ステップ1684において、MPコア1111はNVMモジュール1106に対し後述の圧縮データサイズ取得コマンド5750を用いて圧縮データのサイズを取得し、LBA0領域に含まれる圧縮データサイズを取得する。この時点での圧縮データは最終不揮発媒体に格納されていないダーティデータであるので、当該データを含むセグメントがダーティ属性であることを示す必要がある。
 そのため、MPコア1111は、スロット管理テーブルD220のスロットステータスD224を操作し、ダーティ属性をつける。そしてノード1200の二重完了通知を受け取ったノード1100のMPコア1111は、ノード1100のNVMモジュール1106の処理完了通知を受け取った後に、ホスト1000にホストライト処理完了を通知し、ホストライト要求を完了する。
 以上のように、本実施例によれば、ストレージ装置1002内のデータ流量を削減し、かつホストデータの信頼性を維持することができる。特に、主記憶を通過するデータ流量を低減し、主記憶を通過するデータ流量が大きい処理の効率を上げることができ、その結果、シーケンシャルライト性能を向上できる。
 なお、ノード1100、1200が実装されるストレージシステムは上記構成に限定されず、例えば、ネットワークを介して接続するストレージ装置にそれぞれ実装され、異なるドライブボックスを使用して、異なる圧縮ボリュームに圧縮データを格納してもよい。
 実施例1は、NVMメモリを搭載したストレージ装置のホストライト動作について説明した。実施例2は、NVMメモリを搭載せず、圧縮/伸長処理等のデータ処理のみを行うデバイスを含むストレージ装置について説明する。以下において、主に実施例1との差分を説明する。
 図19は実施例2のストレージ装置の構成例を示す。ノード1100、1200は、それぞれ、データ処理デバイス1107、1207及びノードI/F1114、1214を含む。データ処理デバイス1107、1207は、それぞれ、主記憶1103、1203上に配置されるデータに対し、データ圧縮や伸長といった処理機能のみを提供するデバイスである。
 データ処理デバイス1107、1207は、処理対象のデータを一時的に格納する揮発媒体を搭載する。この揮発媒体はPRAMやSTT-RAMといった不揮発記憶素子で構成されていてもよい。
 データ処理デバイス1107、1207は、通常、PCIExpressで接続するASICで提供されるが、FPGA等のプログラマブルなデバイス、又はMP1102、MP1202と異なるMPを接続し利用してもよい。
 図20は、実施例2のストレージ装置1002が扱う記憶空間とその対応関係を示す。ホスト1000はストレージ装置1002にデータを格納する際、伸長ボリューム3100内のアドレスを指定してライトデータをストレージ装置1002に転送する。
 実施例2のストレージ装置1002は、主記憶1103をキャッシュデバイスとして用いる。詳細は後述するが、ストレージ装置1002は、主記憶1103において独立した二つの論理記憶空間である、LBA0空間3001、LBA1空間3002を、ストレージ装置1002に提供する。ストレージ装置1002は、ホスト1000から取得したライトデータを、LBA0空間3001のアドレスを指定して主記憶1103に格納する。
 ストレージ装置1002は、受信したライトデータ(ホストデータ)を、データ処理デバイス1107を用いて圧縮し、主記憶1103に格納する。さらに、ストレージ装置1002は、LBA0空間3001のアドレスを指定して、格納した圧縮ホストデータをLBA1空間3002上にマッピングする。ストレージ装置1002は、LBA1空間3002上のアドレスを指定することで主記憶1103より圧縮ホストデータを取得し、最終記憶装置(ドライブ1117)の記憶領域で構成される圧縮ボリューム3200のアドレスを指定して、デステージする。
 ストレージ装置1002は、ホスト1000から受信したリード要求に応じて、圧縮ホストデータを圧縮ボリューム3200から取得し、主記憶1103にLBA1空間3002上アドレスを指定して格納する。次に、ストレージ装置1002は、LBA1空間3002上のアドレスを指定して、圧縮ホストデータの伸長データを、LBA0空間3001にマッピングする。ストレージ装置1002は、主記憶1103からLBA0のアドレスを指定して圧縮ホストデータを伸長し、ホスト1000にリードデータとして転送する。
 図21に実施例2のストレージ装置の圧縮ホストライト処理のフローを示す。実施例1との差分は、シーケンシャルライト特化フロントエンド処理2650、通常フロントエンドライト処理2670、及び圧縮処理2680の3ステップである。実施例1と同様に、ストレージ装置1002は、圧縮ホストライト処理においてフロントエンドライト処理が完了した後、速やかにバックエンドライト処理を行う。
 図22は実施例2におけるシーケンシャルライト特化フロントエンドライト処理(2650)のデータフローを示す。ノード1100のホストI/F1101は、ホスト1000から受領した未圧縮のホストデータを主記憶1103に転送する(データフロー301)。ノード1100のMPコア1111は、データ処理デバイス1107に主記憶1103上のホストデータをリードし圧縮することを指示する。
 指示を受けたデータ処理デバイス1107は、主記憶1103上のホストデータを読み込み、データ圧縮を開始する(データフロー302)。データ処理デバイス1107は、圧縮演算の検算を実施するため、圧縮ホストデータを伸長する(データフロー303)。MPコア1111は、伸長後のホストデータの保証コードによって、エラーの有無をチェックする(データフロー304)。MPコア1111は、圧縮前ホストデータと伸長後ホストデータの比較により検算を行ってもよい。
 検算の結果、圧縮処理に問題がないと判定された後、データ処理デバイス1107は、圧縮ホストデータに対し保証コードを付与する(データフロー305)。MPコア1111は、DMA1112に圧縮ホストデータのデータ転送を指示する。指示を受けたDMA1112は、主記憶1103上の圧縮ホストデータを読み込み、ノード1200の主記憶1203にデータを転送し(データフロー306)、MPコア1111に完了を通知する。
 MPコア1111は、ノード1200のMPコア1211に圧縮ホストデータ転送完了を通知する。通知を受けたノード1200のMPコア1211は、主記憶1203上の圧縮ホストデータをリードし、圧縮ホストデータの保証コードによって、圧縮ホストデータをチェックする(データフロー307)。
 MPコア1211は、圧縮ホストデータのチェックを完了した後、ノード1100のMPコア1111に対し圧縮ホストデータ二重化の完了を通知する。二重完了通知を受け取ったノード1100のMPコア1111は、ホスト1000にホストライト処理完了を通知し、ホストライト要求を完了する。
 シーケンシャルライト特化フロントエンドライト処理(2650)により、データ流量を低減し、スループットを向上できる。
 図23は、実施例2におけるシーケンシャルライト特化フロントエンドライト処理(2650)の処理フローを示す。ステップ2651において、MPコア1111は、ホストデータを一時的に格納するための主記憶1103のバッファ領域を予約する。
 ステップ2652において、MPコア1111は、ホスト1000に対しホストデータの転送要求を送信し、受信したホストデータを主記憶1103のバッファ領域に格納する。ステップ2653において、MPコア1111は、データ処理デバイス1107を用いてバッファ領域に格納されているホストデータを圧縮する。具体的には、MPコア1111は、圧縮コマンドをデータ処理デバイス1107に発行する。ライトコマンドの圧縮要否フラグは、圧縮要に設定される。
 ステップ2654において、データ処理デバイス1107は、圧縮したデータを伸長する。ステップ2655において、MPコア1111は、データ処理デバイス1107が伸長したホストデータによって、圧縮データのインテグリティをチェックする。例えば、MPコア1111は、伸長したホストデータにおいて、ホストI/F1101が付与したCRCコードのチェックを行い、データ破損の有無をチェックする。または、MPコア1111は、伸長ホストデータと圧縮前ホストデータを比較してデータ破損の有無をチェックする。
 ステップ2656のチェック結果がエラー有を示す場合(2656:Yes)、ステップ2657において、MPコア1111は、ホスト1000に対しホストデータの再送を要求する。
 ステップ2656のチェック結果がエラー無を示す場合(2656:No)、ステップ2658において、MPコア1111は、主記憶1103上の圧縮ホストデータに対し保証コードを付与する。ステップ2659において、MPコア1111は、DMA1112に命令し、圧縮ホストデータをノード1200側の主記憶1203上のバッファ領域に転送する。
 ステップ2660において、ノード1200のMPコア1211は、圧縮ホストデータに付与された保証コードによって、圧縮ホストデータの信頼性をチェックする。チェック結果がエラー有を示す場合(2661:Yes)、ステップ2662において、MPコア1211は、圧縮ホストデータ送信元のノード1100に圧縮ホストデータの再送を要求する。
 チェック結果がエラー無を示す場合(2661:No)、ステップ2663において、MPコア1211は、ノード1200の主記憶1203のバッファ領域に格納した圧縮ホストデータについて、LBA1と圧縮ホストデータを対応付ける。ノード1100でも同様にこの処理を実施する。
 同様にMPコア1211は、ノード1200の主記憶1203のバッファ領域に格納した圧縮ホストデータについて、LBA1と圧縮ホストデータを対応付ける。ノード1100でも同様にこの処理を実施する。MPコア1211は、ノード1100のMPコア1111に対し圧縮ホストデータ二重化の完了を通知する。
 ステップ2664において、ノード1100のMPコア1111は、ホスト1000にホストライト処理完了を通知し、ホストライト要求を完了する。
 図24は、通常フロントエンドライト処理2670と圧縮処理2680のデータフローを示す。始めに通常フロントエンドライト処理2670を説明する。ホストI/F1101は、ホスト1000から受領した未圧縮のホストデータを主記憶1103に転送する(データフロー401)。
 MPコア1111は、DMA1112に未圧縮ホストデータ転送を指示する。指示を受けたDMA1112は、主記憶1103上の未圧縮ホストデータを読み込み、ノード1200の主記憶1203にデータ転送し(データフロー402)、MPコア1111に完了を通知する。
 MPコア1111は、ノード1200のMPコア1211にホストデータ転送完了を通知する。通知を受けたノード1200のMPコア1211は、主記憶1203上の未圧縮ホストデータをリードし、未圧縮ホストデータの保証コードによって、未圧縮ホストデータをチェックする(データフロー403)。
 MPコア1211は、未圧縮ホストデータのチェックを完了した後、ノード1100のMPコア1111に対し未圧縮ホストデータ二重化の完了を通知する。二重完了通知を受け取ったノード1100のMPコア1111は、ホストにホストライト処理完了を通知する。ホストデータ圧縮前に完了を通知することで、ホスト1000への応答時間を短縮できる。
 次に、圧縮処理2680を説明する。ノード1100のMPコア1111は、データ処理デバイス1107に主記憶1103上のホストデータをリードし圧縮することを指示する。指示を受けたデータ処理デバイス1107は、主記憶1103上のホストデータを読み込み、データ圧縮を開始する(データフロー404)。データ処理デバイス1107は圧縮演算の検算を実施するため、圧縮ホストデータを伸長する(データフロー405)。
 MPコア1111は、圧縮前のホストデータと伸長後のホストデータを比較してエラーの有無をチェックする(データフロー406)。伸長後のホストデータの保証コードによってエラーの有無をチェックしてもよい。比較の結果、圧縮処理に問題がないと判定した後、MPコア1111は、圧縮したホストデータに対し保証コードを付与する(データフロー407)。
 MPコア1111は、DMA1112に圧縮ホストデータの転送を指示する。指示を受けたDMA1112は、主記憶1103上の圧縮ホストデータを読み込み、ノード1200の主記憶1203にデータ転送し(データフロー408)、MPコア1111に完了を通知する。
 MPコア1111は、ノード1200のMPコア1211に圧縮ホストデータ転送完了を通知する。通知を受けたノード1200のMPコア1211は、主記憶1203上の圧縮ホストデータをリードし、圧縮ホストデータの保証コードによって、圧縮ホストデータをチェックする(データフロー409)。MPコア1211は、圧縮ホストデータのチェックを完了させた後、ノード1100のMPコア1111に対し圧縮ホストデータ二重化の完了を通知する。ノード1200における圧縮処理を省略することで、ノード1200の負荷を低減できる。
 図25は実施例2における通常フロントエンドライト処理2670を示す。ステップ2671において、MPコア1111は、ホストデータを非圧縮VOL3100に格納するためのLBA0領域を予約する。
 ステップ2672において、MPコア1111は、ホスト1000に対しホストデータの転送要求を送信し、受信したホストデータを主記憶1103の予約したLBA0領域に対応するホストデータ領域に格納する。
 ステップ2673において、MPコア1111は、ノード1100の主記憶1103上のホストデータを、ノード1200の主記憶1203のホストデータ領域にデータ転送する。具体的には、MPコア1111は、DMA1112にデータ転送命令を作成し、ノードI/F1114を経由して、ノード1200のホストデータ領域に転送させる。
 ステップ2674において、ノード1200のMPコア1211は、主記憶1203のホストデータ領域に格納されているホストデータの保証コードによって、エラーの有無をチェックする。
 ステップ2674のチェック結果がエラー有を示す場合(2675:Yes)、ステップ2676において、MPコア1211は、ホストデータ送信元のノード1100にホストデータの再送を要求する。
 ステップ2674のチェック結果がエラー無を示す場合(2675:No)、MPコア1211は、ノード1100のMPコア1111に対しホストデータ二重化の完了を通知する。
 ステップ2677において、二重完了通知を受け取ったノード1100のMPコア1111は、ホストにホストライト処理完了を通知する
 図26は通常フロントエンドライト処理2670の後に行う圧縮処理2680のフローを示す。ステップ2681において、MPコア1111は、ホストデータ領域のホストデータをバッファ領域にコピーし、データ処理デバイス1107を用いてバッファ領域に格納されているホストデータを圧縮する。具体的には、MPコア1111は、圧縮コマンドを作成し、データ処理デバイス1107に発行する。
 ステップ2682において、データ処理デバイス1107は、圧縮したデータを伸長し、圧縮前のホストデータと比較して又は未圧縮ホストデータの保証コードによって検算を行う。検算結果がエラー有を示す場合(2683:Yes)、ステップ2686において、データ処理デバイス1107は、MPコア1111に対しホストデータの再圧縮処理を要求する。
 ステップ2682の検算結果がエラー無を示す場合(2683:No)、ステップ2684において、MPコア1111は、ノード1100の主記憶1103上の圧縮ホストデータに対し保証コードを付与する。
 ステップ2685において、MPコア1111は、ノード1100の主記憶1103のバッファ領域に格納した圧縮ホストデータを、LBA1空間3002の領域に対応付ける。ステップ2687において、MPコア1111は、DMA1112に圧縮ホストデータ転送を指示する。指示を受けたDMA1112は、主記憶1103上の圧縮ホストデータを読み込み、ノード1200の主記憶1203に転送する。
 ステップ2688において、ノード1200のMPコア1211は、主記憶1203上の圧縮ホストデータをリードし、圧縮ホストデータの保証コードによって圧縮ホストデータをチェックする。チェック結果がエラー無を示す場合(2689:No)、本処理は終了する。
 ステップ2688のチェック結果がエラー有を示す場合(2689:Yes)、ステップ2690において、データ二重化先であるノード1200のMPコア1211は、圧縮ホストデータ送信元のノード1100に圧縮ホストデータの再送を要求する。
 実施例3は、一つのNVMモジュールに対して二つのPCIeI/Fを持つストレージ装置について説明する。以下において、実施例1との差分を主に説明する。図27は実施例3のストレージ装置1002の構成を示す。
 ストレージ装置1002は、ノード1100、1200に加え、1又は複数のNVMモジュール9106を格納するNVMモジュールボックス1400を含む。ノード1100、1200には、NVMモジュールが搭載されていない。ノード1100、1200は、ノードI/F1114、1214を含む。
 ノード1100、1200のそれぞれからNVMモジュールボックス1400内部のNVMモジュール9106へのアクセスできるよう、NVMモジュールボックス1400は、異なるI/Fで、ノード1100、1200に接続されている。典型的には、NVMモジュールボックス1400とノード1100、1200とは、PCIexpress等のバスで接続される。
 NVMモジュールボックス1400は、ノード1100、1200と異なる電源系統をもち、一方のノードが障害停止した場合でも、他方のノードがNVMモジュールボックス1400にアクセスできる。
 図28は、2つのPCIeI/Fを持つNVMモジュール9106のハードウェア構成を示す。コントローラ9120が、MP1102、1202と接続するための二つのPCIeI/F1124を持つ点を除き、図2に示すNVMモジュール1106の構成と同様である。二つのPCIeI/F1124を持つことによって、ノード1100、1200それぞれが、他ノードのMPを経由することなく、NVMモジュール9106にアクセスできる。
 ストレージ装置1002において障害が発生し、ストレージ装置1002のノードが電断状態に陥る場合がある。実施例4は、保守作業により電断状態から回復したノードに対し、活性状態のノードのデータを圧縮した状態で二重化する。これにより、高速な二重化状態回復を実現できる。
 図29は、片ノード閉塞から回復するときのデータ冗長化回復処理のフローを示す。ノード1200が閉塞から回復し、ノード1100は正常な活性状態であるとする。ステップ3001において、活性状態でありIO処理が可能なノード1100のMPコア1111は、電断状態となっているノード1200の状態をチェックする。具体的には、MPコア1111は、ノード1200の電源の通電状態や、ノード1200からのメッセージ送信の有無により、ノード1200の回復状態をチェックする。
 ノード1200が回復している場合(3002:Yes)、ステップ3003において、MPコア1111は、主記憶1103上で二重化の対象となるデータの有無をチェックする。二重化の対象となるデータは予め決められており、例えば、ホストデータ領域や制御データ領域に格納されている、二つのノード1100、1200で共有されているデータである。
 ステップ3004において、MPコア1111は、二重化対象データが圧縮されているか否かチェックする。対象データが圧縮されている場合(3004:Yes)、ステップ3006において、MPコア1111は、DMA1112に対し二重化対象データを他ノード1200に転送することを指示する、DMA1112は、指示に従ってデータを転送する。
 対象データが圧縮されてない場合(3004:No)、ステップ3005において、MPコア1111は、対象データを圧縮する。その後、MPコア1111は、DMA1112により当該データを他ノード1200に転送する(3006)。NVMモジュール1106が、データを圧縮し転送してもよい。
 ステップ3007において、二重化データを受け取った他ノード1200のMPコア1211は、圧縮された二重化データを伸長する。ステップ3008において、MPコア1211は、伸長した二重化データに含まれる保証コードを計算し、二重化データの正しさをチェックする。NVMモジュール1206が、データを伸長しチェックしてもよい。
 チェック結果がエラー有を示す場合(3008:Yes)、MPコア1211は、データ送信元であるノード1100にデータの再送を要求し、ステップ3006以降のステップが繰り返される。チェック結果がエラー無を示す場合(3008:No)、当該フローは終了する。
 なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
 また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。

Claims (15)

  1.  第1制御ノードと、
     第2制御ノードと、
     圧縮ボリュームを提供する最終記憶デバイスと、
     を含むストレージシステムであって、
     前記第1制御ノードは、
     ホストから未圧縮ホストデータを受信し、
     前記未圧縮ホストデータを圧縮して圧縮ホストデータを生成し、
     前記圧縮ホストデータを第1メモリにおいてキャッシュデータとして保持し、
     前記圧縮ホストデータを伸長して、前記圧縮ホストデータが正確であるかチェックし
     前記圧縮ホストデータが正確である場合に、前記圧縮ホストデータを前記第2制御ノードに転送し、
     前記第2制御ノードは、第2メモリにおいて前記圧縮データをキャッシュデータとして保持する、ストレージシステム。
  2.  請求項1に記載のストレージシステムであって、
     前記第1制御ノードは、
     前記ホストデータが予め定められた条件を満たす場合に、前記圧縮ホストデータを前記第2制御ノードに転送し、
     前記ホストデータが予め定められた条件を満たさない場合に、前記未圧縮ホストデータを前記第2制御ノードに転送し、
     前記第2制御ノードは、前記未圧縮ホストデータを受信すると、前記未圧縮ホストデータを圧縮して前記第2メモリで保持する、ストレージシステム。
  3.  請求項2に記載のストレージシステムであって、
     前記予め定められた条件は、前記未圧縮ホストデータの推定圧縮率が閾値より小さいことを含む、ストレージシステム。
  4.  請求項2に記載のストレージシステムであって、
     前記予め定められた条件は、前記未圧縮ホストデータのデータ長が閾値を超えることを含む、ストレージシステム。
  5.  請求項1に記載のストレージシステムであって、
     前記第1制御ノードは、前記圧縮ホストデータに保障コードを付与し、
     前記第2制御ノードは、前記保障コードにより前記圧縮ホストデータのエラーをチェックし、
     前記圧縮ホストデータがエラーを含む場合、前記第2制御ノードは、前記第1制御ノードに前記圧縮ホストデータの再送を要求する、ストレージシステム。
  6.  請求項1に記載のストレージシステムであって、
     前記第1制御ノードは、前記圧縮ホストデータが所定データ単位の倍数と一致するように、前記未圧縮ホストデータを圧縮したデータにパディングデータを付加する、ストレージシステム。
  7.  請求項1に記載のストレージシステムであって、
     前記第1制御ノードは、
     前記ホストデータが予め定められた条件を満たす場合に、前記未圧縮データを前記第2制御ノードに転送することなく、前記前記圧縮ホストデータを前記第2制御ノードに転送し、
     前記ホストデータが予め定められた条件を満たさない場合に、前記未圧縮ホストデータを前記第2制御ノードに転送した後、前記圧縮データを前記第2制御ノードに転送し、
     前記第2制御ノードは、転送された前記圧縮データを前記キャッシュデータとして保持し、
     前記第1制御ノードは、前記圧縮データを前記第2制御ノードに転送する前に、前記ホストにライト完了を通知する、ストレージシステム。
  8.  請求項1に記載のストレージシステムであって、
     前記第1メモリ及び前記第2メモリは、前記第1制御ノード及び前記第2制御ノードの双方からアクセス可能な不揮発メモリである、ストレージシステム。
  9.  請求項1に記載のストレージシステムであって、
     前記第2制御ノードが閉塞から回復すると、前記第1制御ノードは、前記第1メモリにおいて二重化対象データを検索し、前記二重化対象データが未圧縮である場合には、格納されているデータを圧縮し、前記第2制御ノードに転送する、ストレージシステム。
  10.  第1制御ノードと、第2制御ノードと、圧縮ボリュームを提供する最終記憶デバイスと、を含むストレージシステムの制御方法であって、
     前記第1制御ノードが、
     ホストから未圧縮ホストデータを受信し、
     前記未圧縮ホストデータを圧縮して圧縮ホストデータを生成し、
     前記圧縮ホストデータを第1メモリにおいてキャッシュデータとして保持し、
     前記圧縮ホストデータを伸長して、前記圧縮ホストデータが正確であるかチェックし
     前記圧縮ホストデータが正確である場合に、前記圧縮ホストデータを前記第2制御ノードに転送し、
     前記第2制御ノードが、第2メモリにおいて前記圧縮データをキャッシュデータとして保持する、方法。
  11.  請求項10に記載の方法であって、
     前記第1制御ノードが、
     前記ホストデータが予め定められた条件を満たす場合に、前記圧縮ホストデータを前記第2制御ノードに転送し、
     前記ホストデータが予め定められた条件を満たさない場合に、前記未圧縮ホストデータを前記第2制御ノードに転送し、
     前記第2制御ノードが、前記未圧縮ホストデータを受信すると、前記未圧縮ホストデータを圧縮して前記第2メモリで保持する、方法。
  12.  請求項11に記載の方法であって、
     前記予め定められた条件は、前記未圧縮ホストデータのデータ長が閾値を超えることを含む、方法。
  13.  請求項11に記載の方法であって、
     前記予め定められた条件は、前記未圧縮ホストデータの推定圧縮率が閾値より小さいことを含む、方法。
  14.  請求項10に記載の方法であって、
     前記第1制御ノードが、前記圧縮ホストデータに保障コードを付与し、
     前記第2制御ノードが、前記保障コードにより前記圧縮ホストデータのエラーをチェックし、
     前記圧縮ホストデータがエラーを含む場合、前記第2制御ノードは、前記第1制御ノードに前記圧縮ホストデータの再送を要求する、方法。
  15.  請求項10に記載の方法であって、
     前記第1制御ノードが、前記圧縮ホストデータが所定データ単位の倍数と一致するように、前記未圧縮ホストデータを圧縮したデータにパディングデータを付加する、方法。
PCT/JP2015/059312 2015-03-26 2015-03-26 ストレージシステム WO2016151831A1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/059312 WO2016151831A1 (ja) 2015-03-26 2015-03-26 ストレージシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/059312 WO2016151831A1 (ja) 2015-03-26 2015-03-26 ストレージシステム

Publications (1)

Publication Number Publication Date
WO2016151831A1 true WO2016151831A1 (ja) 2016-09-29

Family

ID=56977088

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2015/059312 WO2016151831A1 (ja) 2015-03-26 2015-03-26 ストレージシステム

Country Status (1)

Country Link
WO (1) WO2016151831A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018116433A1 (ja) * 2016-12-22 2018-06-28 株式会社日立製作所 情報処理装置および記憶デバイス
US20190042354A1 (en) * 2018-06-30 2019-02-07 Intel Corporation Technologies for error recovery in compressed data streams
US11543972B1 (en) 2021-11-02 2023-01-03 Hitachi, Ltd. Storage system and control method thereof

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0573413A (ja) * 1991-09-12 1993-03-26 Mitsubishi Electric Corp キヤツシユメモリ・データ制御装置
JPH0855063A (ja) * 1994-08-10 1996-02-27 Hitachi Ltd 記憶装置のデータ保証方法
JP2009104236A (ja) * 2007-10-19 2009-05-14 Hitachi Ltd ストレージ装置及びこれを用いたデータ格納方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0573413A (ja) * 1991-09-12 1993-03-26 Mitsubishi Electric Corp キヤツシユメモリ・データ制御装置
JPH0855063A (ja) * 1994-08-10 1996-02-27 Hitachi Ltd 記憶装置のデータ保証方法
JP2009104236A (ja) * 2007-10-19 2009-05-14 Hitachi Ltd ストレージ装置及びこれを用いたデータ格納方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018116433A1 (ja) * 2016-12-22 2018-06-28 株式会社日立製作所 情報処理装置および記憶デバイス
US20190042354A1 (en) * 2018-06-30 2019-02-07 Intel Corporation Technologies for error recovery in compressed data streams
US10936404B2 (en) * 2018-06-30 2021-03-02 Intel Corporation Technologies for error detection in compressed data streams
US11543972B1 (en) 2021-11-02 2023-01-03 Hitachi, Ltd. Storage system and control method thereof
US11816336B2 (en) 2021-11-02 2023-11-14 Hitachi, Ltd. Storage system and control method thereof

Similar Documents

Publication Publication Date Title
US10664345B2 (en) Physical page, logical page, and codeword correspondence
US11175984B1 (en) Erasure coding techniques for flash memory
US8209595B2 (en) Storage sub-system and method for controlling the same
JP6134857B2 (ja) 記憶デバイス、記憶デバイスを有する装置、及び記憶制御方法
US7487289B2 (en) Apparatus and method for detecting disk write omissions
US9465561B2 (en) Storage system and storage control method
US9304685B2 (en) Storage array system and non-transitory recording medium storing control program
US20150301964A1 (en) Methods and systems of multi-memory, control and data plane architecture
US10691339B2 (en) Methods for reducing initialization duration and performance impact during configuration of storage drives
WO2015052798A1 (ja) ストレージシステム及び記憶制御方法
JP6677740B2 (ja) ストレージシステム
US10067833B2 (en) Storage system
JP2006079380A (ja) ディスクアレイ装置
US20200133836A1 (en) Data management apparatus, data management method, and data management program
WO2012073287A1 (en) Storage control apparatus and storage control method
WO2015029230A1 (ja) 記憶装置及びデータ制御方法
JP4884721B2 (ja) 記憶装置のフォーマットを不要としたストレージシステム及び記憶制御方法
WO2016151831A1 (ja) ストレージシステム
WO2018185800A1 (ja) ストレージ装置
JP6817340B2 (ja) 計算機
WO2017212514A1 (ja) ストレージシステム及び記憶制御方法
US20230236932A1 (en) Storage system
WO2015118680A1 (ja) ストレージ装置
WO2015196416A1 (zh) 数据存储方法、装置和非易失性存储器

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 15886384

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

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP