WO2014170984A1 - ストレージシステム及び記憶制御方法 - Google Patents

ストレージシステム及び記憶制御方法 Download PDF

Info

Publication number
WO2014170984A1
WO2014170984A1 PCT/JP2013/061485 JP2013061485W WO2014170984A1 WO 2014170984 A1 WO2014170984 A1 WO 2014170984A1 JP 2013061485 W JP2013061485 W JP 2013061485W WO 2014170984 A1 WO2014170984 A1 WO 2014170984A1
Authority
WO
WIPO (PCT)
Prior art keywords
data
storage
fmpk
input
redundant code
Prior art date
Application number
PCT/JP2013/061485
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 US14/241,784 priority Critical patent/US9122399B2/en
Priority to PCT/JP2013/061485 priority patent/WO2014170984A1/ja
Publication of WO2014170984A1 publication Critical patent/WO2014170984A1/ja
Priority to US14/828,912 priority patent/US9465561B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data

Definitions

  • the present invention relates to storage control of a storage system having a storage device capable of executing predetermined processing on data to be stored.
  • the storage controller controls the IO for the storage device that is the final storage device for data.
  • the cost for storing data has increased due to an increase in storage devices necessary for storing data. For this reason, reduction of the data retention cost in a storage system is required.
  • One of the technologies that answer this need is a technology that reduces the amount of data stored by compressing data stored in a storage device (for example, HDD (Hard Disk Drive) or SSD (Solid State Drive)). Due to the increase in data volume, data compression technology is required to be applied not only to backup volumes but also to volumes used in normal business (primary volumes).
  • Patent Document 1 discloses a technique in which a flash device performs data compression processing in order to reduce a data capacity stored in a flash device such as an SSD using a flash memory having a high bit cost as a storage medium. Is disclosed.
  • a RAID (Redundant Array of Independent Disks) group may be configured to generate parity (redundant code) for the purpose of speeding up IO processing and improving fault tolerance.
  • parity generation method in a RAID group there are a conventionally known method in which a controller of a storage system generates parity, and a method in which a storage device disclosed in Patent Document 2 generates parity.
  • the compression technique is applied to such a system, at the time of random writing, it is necessary to expand old data and old parity and compress new data and new parity for one host write. That is, since the compression / decompression process is performed twice, the performance deterioration rate is further increased.
  • a storage system includes a storage device having a storage medium for storing data, a device controller for executing an additional process involving a change in the data state on the data, and a storage for controlling input / output of data to the storage device And a controller.
  • the storage controller transmits to the storage device determination information that can be used to determine whether or not the device controller executes the additional processing in accordance with the input / output processing related to the input / output target data.
  • the device controller controls the execution of the addition process for the input / output target data based on the determination information transmitted from the storage controller.
  • the flash device determines whether or not compression processing is necessary based on information transmitted from the storage controller. As a result, the data storage amount can be reduced and the cost can be reduced, and the write performance can be improved as compared with the case where all data is compressed.
  • FIG. 1 is a hardware configuration diagram of the computer system according to the first embodiment.
  • FIG. 2 is a hardware configuration diagram of the FMPK according to the first embodiment.
  • FIG. 3 is a diagram illustrating an overview of parity generation processing during random writing according to the first embodiment.
  • FIG. 4 is a flowchart of parity generation processing during random writing according to the first embodiment.
  • FIG. 5 is a flowchart of the XDWRITE process according to the first embodiment.
  • FIG. 6 is a flowchart of the XDREAD process according to the first embodiment.
  • FIG. 7 is a flowchart of the XPWRITE process according to the first embodiment.
  • FIG. 8 is a diagram illustrating an overview of parity determination information registration processing according to the second embodiment.
  • FIG. 9 is a configuration diagram of an example of parity determination information according to the second embodiment.
  • FIG. 10 is a diagram illustrating an overview of RMW parity generation processing according to the second embodiment.
  • FIG. 11 is a diagram illustrating an overview of all stripe parity generation processing according to the second embodiment.
  • FIG. 12 is a flowchart of parity generation processing according to the second embodiment.
  • FIG. 13 is a flowchart of the READ process according to the second embodiment.
  • FIG. 14 is a flowchart of the WRITE process according to the second embodiment.
  • FIG. 15 is a diagram illustrating an outline of the collection copy process according to the second embodiment.
  • FIG. 16 is a flowchart of the collection copy process according to the second embodiment.
  • FIG. 17 is a diagram illustrating an overview of RMW parity generation processing when parity is generated using compressed data according to the third embodiment.
  • FIG. 18 is a diagram illustrating an overview of RMW parity generation processing when parity is generated using pre-compression data according to the third embodiment.
  • FIG. 19 is a diagram illustrating an overview of all stripe parity generation processing according to the third embodiment.
  • FIG. 20 is a configuration diagram of an example of an XDREAD / XDWRITE / XPWRITE command according to the third embodiment.
  • FIG. 21 is a flowchart of parity generation processing according to the third embodiment.
  • FIG. 22 is a flowchart of the RMW parity generation process according to the third embodiment.
  • FIG. 23 is a flowchart of the XDWRITE process according to the third embodiment.
  • FIG. 24 is a flowchart of the XDREAD process according to the third embodiment.
  • FIG. 25 is a flowchart of XPWRITE processing according to the third embodiment.
  • FIG. 26 is a diagram illustrating an outline of a collection copy process for a stripe column having parity generated using pre-compression data according to the third embodiment.
  • FIG. 27 is a diagram illustrating an outline of a collection copy process for a stripe column having parity generated using the compressed data according to the third embodiment.
  • FIG. 28 is a flowchart of the collection copy process according to the third embodiment.
  • FIG. 29 is a configuration diagram of an example of a READ / WRITE command according to the third embodiment.
  • FIG. 30 is a flowchart of the READ process according to the third embodiment.
  • FIG. 31 is a flowchart of the WRITE process according to the third embodiment.
  • FIG. 32 is a diagram illustrating an overview of the function execution determination information registration processing according to the fourth embodiment.
  • FIG. 33 is a diagram illustrating an overview of command processing according to the fourth embodiment.
  • FIG. 34 is a flowchart of command processing according to the fourth embodiment.
  • the process may be described using “program” as a subject, but the program is executed by a processor (for example, a CPU (Central Processing Unit)), so that a predetermined process is appropriately performed. Since the processing is performed using a storage resource (for example, a memory) and / or a communication interface device (for example, a port), the subject of processing may be a program.
  • the processing described with the program as the subject may be processing performed by a processor or a computer having the processor (for example, a management computer, a host computer, a storage system, etc.).
  • the processor may include a hardware circuit that performs part or all of the processing performed by the processor.
  • the program may be installed in each controller from a program source.
  • the program source may be, for example, a program distribution server or a storage medium.
  • the storage system 10 may be an apparatus configured with a single housing, or may be configured in combination with an external storage apparatus 40.
  • the storage system 10 includes a plurality of storage devices such as an FMPK (Flash Memory Package) 160, for example.
  • FMPK Flash Memory Package
  • a RAID (Redundant Array of Independent Disks) group is configured using a plurality of storage devices.
  • each storage device is managed by being divided into sub storage areas called stripes. That is, each storage device includes a plurality of stripes.
  • the storage area of the RAID group is composed of a plurality of stripe columns. Each stripe column includes one stripe included in each storage device. That is, the stripe column straddles a plurality of storage devices constituting the RAID group.
  • RAID levels There are several levels of RAID (hereinafter referred to as (RAID levels)).
  • the write target data designated by the host computer 30 is divided into a plurality of data elements, and the plurality of data elements are written in a plurality of stripes of the same stripe column.
  • redundant information called “parity” (hereinafter referred to as “parity”) is used from a plurality of data elements included in a stripe column in order to restore data elements that cannot be read from the storage device due to a failure in the storage device.
  • “Redundant code”) is generated, and the redundant code is also written in the stripe of the same stripe column.
  • the stripe column includes three data elements and a parity generated from the three data elements.
  • the parity is also updated. Parity is generated by, for example, an XOR operation of a plurality of data elements included in the same stripe column.
  • the data element and the redundant code are not distinguished from each other, they may be referred to as stripe data elements.
  • RAID 6 two data elements of a plurality of data elements constituting a data unit are read due to a failure of two storage devices of a plurality of storage devices constituting a RAID group. If the two data elements cannot be restored, two types of redundant codes (P parity and Q parity) are generated for each data unit, and the redundant codes are the same. Written to the stripe in the stripe column.
  • RAID levels other than those described above (for example, RAID 1 to 4).
  • a triple parity technique using a triple mirror (Triplication) and three types of parity is also available.
  • the redundant code generation technique there are various techniques such as a Reed-Solomon code using Galois operation and EVEN-ODD.
  • RAID level is RAID 5 will be mainly described, but this is not intended to limit the present invention, and other RAID levels may be used. It can also be applied to.
  • the first method is a calculation method using all data elements in the stripe column (hereinafter referred to as “all stripe parity generation”).
  • the first method is used when the access pattern is a sequential write, for example, when all data elements included in the stripe column are updated.
  • the second method is to update data (new data) and data before update (old data, that is, data updated by new data), parity before update (old parity) for some data elements. (Hereinafter referred to as “RMW (Read Modify Write) parity generation”).
  • the second method is used when the access pattern is a random write, for example, when a part of data elements included in the stripe column is updated.
  • all stripe parity generation and RMW parity generation may be used separately in consideration of the load of the storage system.
  • RMW parity generation will be described with reference to FIG.
  • necessary data is read from the FMPK 160 into the CM 131 and the BE controller 142 or the MP 121 generates a redundant code (hereinafter referred to as conventional RMW), or a storage device such as the FMPK 160 generates a redundant code ( Hereinafter, there is an off-road RMW).
  • the storage controller 11 uses a command described below in addition to the conventional READ / WRITE command.
  • One is an XDWRITE command used to transfer data transmitted from the host computer 30 (hereinafter, new data) to the FMPK 160 and instruct the FMPK to generate parity.
  • the FMPK 160 that has received the XDWRITE command generates intermediate data using the transmitted new data and the data (old data) stored in the storage area of the FMPK 160 having the same address as the new data.
  • Another one is an XDREAD command used to read intermediate data generated by the FMPK 160.
  • the FMPK 160 Upon receiving the XDREAD command, the FMPK 160 transfers the intermediate data generated based on the XDWRITE command to the Buffer 143 of the BEPK 140. Another one is to generate a redundant code (new parity) corresponding to the new data based on the intermediate data and write it to the storage area of the storage address of the redundant code (old parity) so far XPWRITE command used for The FMPK 160 that has received the XPWRITE command generates a new parity using the transmitted intermediate data and the old parity stored in the FMPK 160, and stores the new parity at the corresponding address.
  • these commands include information that can specify whether the input / output target is user data or a redundant code, and are examples of determination information.
  • FIG. 1 is a hardware configuration diagram of the computer system according to the first embodiment.
  • the computer system includes one or more host computers (hereinafter referred to as hosts) 30, a management computer 20, and a storage system 10.
  • the host computer 30 and the storage system 10 are connected via a network 50.
  • the network 50 may be a local area network or a wide area network.
  • the management computer 20 and the storage system 10 are connected by an internal network 150.
  • one or more external storage devices 40 may be connected to the storage system 10 via the network 50.
  • the external storage device 40 includes one or more storage devices.
  • the storage device includes a nonvolatile storage medium such as a magnetic disk, a flash memory, and other semiconductor memories.
  • the host 30 is, for example, a computer that executes an application, and reads data used for the application from the storage system 10 and writes data created by the application to the storage system 10.
  • the management computer 20 is a computer used by an administrator for executing a management process for managing a computer system, and has an input device and a display device.
  • the management computer 20 accepts the RAID level setting for the RAID group by the operation of the administrator with respect to the input device, and performs settings for the storage system 10 so as to configure the RAID group at the accepted RIAD level.
  • the storage system 10 includes one or more front-end packages (FEPK) 100, one or more microprocessor packages (MPPK) 120, one or more cache memory packages (CMPK) 130, and one or more back-end packages (BEPK). 140, an internal network 150, and a plurality of flash packages (FMPK) 160.
  • the FEPK 110, MPPK 120, CMPK 130, and BEPK 140 are connected via the internal network 150.
  • the storage controller 11 is configured by the FEPK 110, the MPPK 120, the CMPK 130, and the BEPK 140.
  • the BEPK 140 is connected to the FMPK 160 through a plurality of paths.
  • the storage device connected to the BEPK 140 is a non-volatile storage medium, such as a magnetic disk, flash memory, other semiconductor memory (PRAM (phase change memory), ReRAM (resistance change memory), MRAM (magnetoresistance memory). ) Etc.).
  • PRAM phase change memory
  • ReRAM resistance change memory
  • MRAM magnetoresistance memory
  • the FEPK 100 is an example of an interface device, and includes one or more ports 101, an FE controller 112, and a buffer 113.
  • the port 101 connects the storage system 10 to various devices via the network 50 or the like.
  • the FE controller 112 controls communication with the host computer 30.
  • the MPPK 120 includes a microprocessor (MP) 121 as an example of a control device and a local memory (LM) 122.
  • the MP 121 and the LM 122 are connected via an internal bus 123.
  • the LM 122 stores various programs and various information.
  • the MP 121 executes a program stored in the LM 122 and executes various processes.
  • the MP 121 transmits various commands (for example, a SCSI READ command and a Write command) to the FMPK 160 via the BEPK 140. Further, the MP 121 transmits various commands to the external storage device 40 via the FEPK 100. In addition, an upper code generation process is performed.
  • the MP 121 For example, for a data unit of a RAID group configured with RAID 5, the MP 121 generates a redundant code (parity) by taking an exclusive OR (XOR) of a plurality of data elements constituting the data unit. In addition, for the data unit of the RAID group composed of RAID 6, the MP 121 further multiplies a plurality of data elements constituting the data unit by a predetermined coefficient, and then performs exclusive OR of the respective data. Thus, parity is generated. In addition, the MP 121 performs restoration processing for restoring any data element in the data unit based on one or more stripe data elements (at least one of the data element and the parity) for the data unit. Parity generation may be performed by the MP 121 executing a program, or a parity generation circuit may be used.
  • the CMPK 130 includes a cache memory (CM) 131 and a shared memory (SM) 132.
  • the CM 131 temporarily stores data (write data) to be written from the host 30 to the FMPK 160 and data read from the FMPK 160 (read data).
  • the SM 132 stores information shared by a plurality of MPPKs 120 when the MPPK 120 executes various processes.
  • the BEPK 140 has one or more ports 141, a BE controller 142, and a buffer 143.
  • the port 141 connects the storage system 10 and a storage device such as the FMPK 160.
  • the BE controller 142 is a processor, for example, and performs data transfer between the CMPK 130 and the FMPK 160.
  • the BEPK 140 may perform a redundant code generation process instead of the MP 121. In this case, the circuit for generating the redundant code may be in the BEPK 140 or may be separate from the BEPK 140.
  • Buffer 143 temporarily stores data transmitted from FMPK 160 and data transmitted to FMPK 160.
  • FMPK 160 stores data.
  • the FMPK 160 has a compression and expansion function for executing compression processing and expansion processing.
  • the data to be written can be compressed and stored in a compressed state. it can.
  • the data stored in the compressed state in the FMPK 160 can be expanded and transmitted to the BEPK 140.
  • the FMPK 160 may store the data in the flash chip 166 after compressing the data, or temporarily store the data in the flash chip 166 and store the data from the storage controller 11. Data may be read out from the flash chip 166 and compressed asynchronously with writing.
  • the storage controller 11 provides a logical volume to the host computer 30.
  • the logical volume is configured based on storage areas of a plurality of FMPKs 160 included in the RAID group.
  • a storage area is assigned to the entire logical address range of the logical volume.
  • the storage controller 11 can provide the host computer 30 with a virtual volume according to thin provisioning.
  • a virtual volume has a volume capacity defined at the stage of creation and an address range of the virtual volume is set, but no storage area is allocated.
  • the storage controller 11 receives a write request from the host computer 30, the storage controller 11 allocates a storage area of a predetermined size (hereinafter referred to as a chunk) to an area including an address specified by the virtual volume write request, and data accompanying the write request. Write.
  • the chunk is configured based on storage areas of a plurality of FMPKs 160 included in the RAID group.
  • the storage controller 11 manages a plurality of chunks using a pool.
  • the pool includes chunks based on a plurality of RAID groups.
  • the storage controller 11 when the storage controller 11 receives a write request for a virtual volume, the storage controller 11 selects a chunk from the pool and assigns it to the virtual volume. If it is a write request to an address range in which a chunk has already been allocated to the virtual volume, there is no need to allocate a new chunk.
  • the logical volume and the virtual volume may be collectively referred to as a volume.
  • FIG. 2 is a hardware configuration diagram of the FMPK according to the first embodiment.
  • the FMPK 160 has a package controller 168 and one or more flash chips 166.
  • the package controller 168 includes a buffer 161, a package memory 162, a package processor 163 as an example of a device controller, a compression / decompression circuit 164, a bus transfer device 165, a communication IF 167, and a parity generation circuit 169.
  • the communication IF 167 receives data transmitted from the BEPK 140.
  • the buffer 161 temporarily stores data transmitted from the BEPK 140 and data transmitted to the BEPK 140.
  • the package memory 162 stores various programs and various information.
  • the package processor 163 executes programs stored in the package memory 162 and executes various processes. For example, the package processor 163 causes the compression / decompression circuit 164 to execute data compression / decompression. Further, the package processor 163 causes the parity operation circuit 169 to generate parity (XOR operation). Further, the package processor 163 causes the bus transfer device 165 to execute data input / output with the flash chip 166.
  • the flash chip 166 is an example of a storage medium and is a flash memory chip.
  • the FMPK 160 provides a logical address space to the external device (storage controller 11). The storage controller 11 designates a logical address in the logical address space and transmits a read / write command or the like to the FMPK 160.
  • the flash memory is a nonvolatile semiconductor storage medium.
  • the flash memory chip 166 has a plurality of blocks as physical storage areas, and each block is a data erasing unit. Each block has a plurality of pages, and each page is a unit of data read / write.
  • the flash memory has a characteristic that it cannot be overwritten when data stored in a page is updated. For this reason, when updating data, the package processor 163 writes the data on a page (second page) different from the page (first page) where the data before update is stored. Here, the package processor 163 maps the logical address range mapped to the first page to the second page.
  • the package memory 162 stores conversion information (logical-physical mapping information) between the logical address and the physical page position (physical address).
  • processing in the FMPK 160 will be described with the package processor 163 as the main body, but it can also be said that the package controller 168 executes data transfer in the FMPK 160 and data compression / decompression processing.
  • FIG. 3 is a diagram illustrating an overview of parity generation processing during random writing according to the first embodiment.
  • the host computer 30 designates the volume number of the logical volume provided by the storage controller 11 and the address on the volume, and sends a write request with write data. It is assumed that this write request is for updating data (old data) already stored in the volume.
  • the MP 121 specifies the FMPK 160 that stores the data based on the volume number specified by the write request and the address on the volume from among the plurality of FMPKs 160 configuring the RAID group, and transmits the data to the FMPK 160.
  • the FMPK 160 executes the parity generation process that has been executed by the storage controller 11 in the past. As a result, the load on the MP 163 that has controlled the parity generation processing is reduced, and the processing performance of the entire storage system 10 is improved. Furthermore, as described below, the FMPK 160 determines whether or not data compression / decompression is necessary, thereby suppressing a decrease in performance of the FMPK 160 due to compression / decompression.
  • processing involving parity generation and data compression / decompression by the FMPK 160 will be described.
  • the MP 121 of the storage system 10 stores the write data (user data: hereinafter referred to as new D1) transmitted from the host 30 in the CM 131 of the CMPK 130 via the FEPK 100 (FIG. 3 (1)).
  • the MP 121 transfers the new D1 to the Buffer 143 of the BEPK 140 (FIG. 3 (2)).
  • the BE controller 142 issues an XDWRITE command to the FMPK 160 and transmits a new D1 (FIG. 3 (3)).
  • the XDrite command is transmitted by designating a logical address corresponding to the old data.
  • the FMPK 160 that has received the XDWRITE command stores the transmitted new D1 in the Buffer 161 (FIG. 3 (4)). Since the received command is the XDWRITE command, the package processor 163 determines that the received new D1 is user data, compresses the new D1 by the compression / decompression circuit 164, and stores it in the flash chip 166 (FIG. 3). (5)). Here, the data obtained by compressing the new D1 is referred to as a new cD1. The process of compressing the new D1 and storing it in the flash chip 166 may be performed asynchronously with the reception of the XDWRITE command.
  • the package processor 163 decompresses the data (hereinafter referred to as old cD1) obtained by compressing the data before update (old D1) corresponding to the new D1 stored in the flash chip 166 by the compression / decompression circuit 164.
  • the old D1 is acquired, and the old D1 is stored in the Buffer 161 ((6) in FIG. 3).
  • the package processor 163 generates intermediate data (hereinafter, referred to as intermediate D1 and intermediate parity) used to generate a parity (redundant code) of the stripe column including D1 from the new D1 and the old D1. (FIG. 3 (7)).
  • the package processor 163 generates an intermediate D1 by taking an exclusive OR of the new D1 and the old D1.
  • the MP 121 of the storage system 10 issues an XDREAD command to the FMPK 160, thereby reading the intermediate D1 from the FMPK 160 to the Buffer 143 of the BEPK 140 (FIG. 3 (8)).
  • the FMPK 160 that has received the XDREAD command reads the intermediate D1 from the Buffer 161 and transmits it to the BEPK 140, and the BE controller 142 receives the intermediate D1 and writes the intermediate D1 to the Buffer 143 of the BEPK 140.
  • the MP 121 of the storage system 10 identifies the intermediate D1 as the FMPK 160 in which the parity of the stripe column including D1 is stored, issues a XPWRITE command specifying the logical address corresponding to the old parity, and outputs the intermediate D1.
  • the FMPK 160 that has received the XPWRITE command stores the intermediate D1 in the Buffer 161 ((9) in FIG. 3). Since the received command is the XPWRITE command, the package processor 163 reads the parity (hereinafter referred to as old P) before updating the stripe column including the old D1 stored in the flash chip 166 to the Buffer 161 (FIG. 3 (10)). )).
  • the package processor 163 generates a parity (hereinafter, new P) corresponding to the new D1 using the intermediate D1 and the old P (FIG. 3 (11)).
  • the package processor 163 generates a new P by taking an exclusive OR of the intermediate D1 and the old P.
  • the package processor 163 determines that the received command is an XPWRITE command, the data generated based on this command is parity, and the generated data, that is, the new P is not compressed, and the flash chip It is stored in 166 (FIG. 3 (12)).
  • the parity is stored in the flash chip 166 without being compressed, the processing load on the FMPK 160 can be reduced. That is, the decompression process in the old P reading process (10) is unnecessary, and the compression process in the new P writing process (12) is not necessary.
  • the parity of the stripe column is updated. For this reason, the frequency of reading / writing parity is higher than that of user data, and the effect of suppressing performance degradation by not performing the accompanying compression / decompression processing is great.
  • the storage capacity used in the storage system 10 can be suppressed.
  • the intermediate parity is data that is used for generating a new parity, but becomes unnecessary when the new parity is stored in the flash chip 166. If the intermediate parity is stored on the buffer and a new parity is generated, the intermediate parity need not be stored in the flash chip 166. For this reason, the necessity to compress the intermediate parity is small, and the package processor 163 can reduce the overhead due to the compression processing by not compressing the intermediate parity.
  • This embodiment is effective for parity generation processing in random writing when data is compressed. For example, in OLTP with a relatively large number of random writes, it is possible to achieve both the cost reduction effect by data compression and the suppression of performance degradation by compression.
  • FIG. 4 is a flowchart of parity generation processing during random writing according to the first embodiment.
  • Parity generation processing at the time of random writing is to generate parity necessary for data update when storing write data transferred from the host 30 stored in the CM 131 by the MP 121 in a storage device such as the FMPK 160. Executed to do.
  • the MP 121 detects write data (new data) for which parity generation has not been performed from the CM 131 (S41).
  • the MP 121 reserves an area in the Buffer 143 of the BEPK 140 in order to transfer the new data to the FMPK 160, and stores the new data therein (S42).
  • the MP 121 executes an XDWRITE command with respect to the FMPK 160 (data FMPK) that stores the pre-update data (old data) corresponding to the new data (S43).
  • the data FMPK that has received the XDWRITE command executes the XDWRITE process (see FIG. 5), performs an XOR operation using the old data and the new data, and generates intermediate data for generating parity.
  • And stored in the Buffer 161 of the FMPK 160 Details of the XDWRITE process will be described later.
  • the MP 121 secures an area in the Buffer 143 in order to acquire intermediate data from the FMPK 160 (S44).
  • the MP 121 executes an XDREAD command for the data FMPK (S45).
  • the data FMPK that has received the XDREAD command executes the XDREAD process (see FIG. 6) and transmits intermediate data to the BEPK 140.
  • intermediate data is stored in the Buffer 143 of the BEPK 140. Details of the XDREAD process will be described later.
  • the MP 121 issues an XPWRITE command to the FMPK 160 (parity FMPK) storing the parity of the stripe column corresponding to the new data, and transmits the intermediate data stored in the Buffer 143 (S46).
  • the generation process ends. Note that, in the parity FMPK that has received the XPWRITE command, an XPWRITE process (see FIG. 7) for generating a parity based on the intermediate data is executed. Details of the XPWRITE process will be described later.
  • FIG. 5 is a flowchart of the XDWRITE process according to the first embodiment.
  • the XDWRITE process is executed when the FMPK 160 receives an XDWRITE command from the MP 121.
  • the package processor 163 of the FMPK 160 stores the write data (new data) transferred by the MP 121 in the Buffer 161 (S52).
  • the package processor 163 determines that the target data (new data) from the XDWRITE command is user data, and stores the old data (old data) corresponding to the write data stored in the flash chip 166. Is compressed by the compression / decompression circuit 164 (S53).
  • the package processor 163 stores the decompressed old data in the Buffer 161 (S54).
  • the package processor 163 performs an XOR operation on the new data and the old data to generate intermediate data (S55).
  • the package processor 163 determines that the target data (new data) from the XDWRITE command is user data, and compresses the new data by the compression / decompression circuit 164 (S56).
  • the package processor 163 stores the compressed new data in the flash chip 166 (S57).
  • Data compression / decompression processing may be performed by the package processor 163 without using the dedicated compression / decompression circuit 164. Further, the XOR operation may be performed using a dedicated circuit.
  • FIG. 6 is a flowchart of the XDREAD process according to the first embodiment.
  • the XDREAD process is executed when the FMPK 16 receives an XDREAD command from the MP 121.
  • the package processor 163 of the FMPK 160 determines whether there is intermediate data in the area of the Buffer 161 corresponding to the address specified by the XDREAD command (S62). As a result, when the intermediate data exists (S62: Yes), the package processor 163 returns the intermediate data of Buffer 161 to the MP 121, and ends the XDREAD process. On the other hand, if there is no intermediate data (S62: No), an abnormal end response is returned to the MP 121 (S64), and the XDREAD process is terminated.
  • FIG. 7 is a flowchart of the XPWRITE process according to the first embodiment.
  • the XPWRITE process is executed when the FMPK 160 receives an XPWRITE command from the MP 121.
  • the package processor 163 of the FMPK 160 stores the intermediate data transferred by the MP 121 in the Buffer 161 (S72).
  • the package processor 163 expands the old redundant code (old parity) from the flash chip 166. Instead, it is stored in Buffer 161 (S73).
  • the package processor 163 generates a new parity by performing an XOR operation on the intermediate data and the old parity (S74).
  • the package processor 163 stores the generated new parity in the flash chip 166 without compressing it. (S75).
  • the storage device can grasp whether or not the data to be input / output is a redundant code from the type of command issued from the storage controller 11, and is a redundant code.
  • input / output target data can be stored in a storage medium without being compressed. For this reason, the processing load of the storage device at the time of random writing can be reduced, and the random writing performance can be improved. Further, since the storage device creates a redundant code, the processing load on the storage controller 11 can be reduced.
  • compression / decompression processing is taken as an example of additional processing executed by the storage device.
  • the additional processing is not limited to this, and processing for changing the state of input / output data, input / output targets, etc.
  • a process of adding predetermined data (guarantee code or the like) to the data may be performed.
  • the addition process may be an encryption process for encrypting input target data.
  • whether or not to execute the process for determining whether or not to execute the additional process may be turned ON / OFF according to an instruction from the management computer 20.
  • the computer system according to the second embodiment is basically the same as the computer system according to the first embodiment shown in FIG.
  • the storage controller 11 transfers determination information for determining whether or not the code is a redundant code to the storage device (for example, FMPK16), and the determination information transferred from the storage controller 11 is also included. Whether the storage device is a redundant code or not is determined.
  • FIG. 8 is a diagram illustrating an overview of the parity determination information registration processing according to the second embodiment.
  • Parity determination information registration processing is executed in the storage system 10 before IO processing is executed by the host 30, for example.
  • the parity determination information 124 (see FIG. 9) is created in advance and stored in the LM 122, for example.
  • the MP 121 of the MPPK 120 of the storage controller 11 transfers the parity determination information 124 stored in the LM 122 to each FMPK 160. Note that the parity determination information 124 transmitted to each FMPK 160 only needs to include information about the area managed by the FMPK 160.
  • the FMPK 160 stores the transferred parity determination information 124 in the package memory 162 (FIG. 8 (1)).
  • the parity determination information 124 is used to determine whether or not the target data of the IO command is a redundant code when an IO command is issued to the FMPK 160.
  • FIG. 9 is a configuration diagram of an example of parity determination information according to the second embodiment.
  • Parity determination information 124 is information indicating whether or not the data of this stripe is a redundant code for each stripe address of the logical volume (logical VOL).
  • the parity determination information 124 includes an address field 124a and an attribute field 124b.
  • the address field 124a stores the start address for each fixed size (stripes) from the beginning to the end of the logical volume. Note that the start address and the end address of the stripe may be stored in the address field 124a.
  • the attribute field 124b stores a value indicating whether or not the data stored in the stripe corresponding to the head address of the address field 124a is a redundant code. For example, when the data stored in the stripe is user data, “data” is stored in the attribute field 124b, and when the data stored in the stripe is a redundant code, the attribute field 124b. Stores “parity”.
  • the parity determination information may have entries for a plurality of stripes in a partial area of the logical VOL, and the number of repetitions thereof, instead of having an entry for the entire logical VOL stripe.
  • the parity determination information 124 is transmitted from the storage controller 11 to the FMPK 160.
  • the storage controller 11 notifies the RAID configuration and the drive position in the RAID configuration, and the FMPK 160 is based on the RAID configuration and the drive position.
  • the parity determination information 124 may be generated.
  • the parity determination information 124 (for the IO command or the transfer data targeted by the IO command when the IO command is issued is not registered in advance in the FMPK 160 from the storage controller 11. Alternatively, only the information of the area corresponding to the IO command target) may be embedded and notified to the FMPK 160.
  • FIG. 10 is a diagram illustrating an outline of RMW parity generation processing according to the second embodiment.
  • the MP 121 of the storage system 10 stores the write data (hereinafter, new D1) received from the host 30 in the CM 131 of the CMPK 130 via the FEPK 100 (FIG. 10 (1)).
  • the MP 121 issues a READ command for reading old data (hereinafter referred to as old D1) stored at the same address as the new D1 to the FMPK 160 and reads the old D1 (FIGS. 10 (2), (3), (4 )).
  • old D1 old data
  • the FMPK 160 that has received the READ command determines whether or not the old D1 is a redundant code based on the parity determination information 124 stored in the package memory 162.
  • the FMPK 160 determines that the old D1 is compressed and stored in the flash chip 166.
  • the data obtained by compressing the old D1 is referred to as the old cD1.
  • the FMPK 160 decompresses the old cD1 stored in the flash chip 166 by the compression / decompression circuit 164 to acquire the old D1 (FIG. 10 (2)), and stores the old D1 in the Buffer 161 (FIG. 10 (3)). Then, the data is transferred to the Buffer 143 of the BEPK 140 designated by the READ command ((4) in FIG. 10).
  • the MP 121 issues a READ command for reading a redundant code (hereinafter referred to as old P) corresponding to the old D1 to the FMPK 160 storing the old P, and reads the old P (FIG. 10 (5), (6 )).
  • old P a redundant code
  • the FMPK 160 that has received the READ command determines from the parity determination information 124 that the old P is a redundant code, and determines that the old P is stored in the flash chip 166 without being compressed.
  • the FMPK 160 stores the old P from the flash chip 166 in the Buffer 161 without decompressing it (FIG. 10 (5)), and transfers it to the Buffer 143 of the BEPK 140 designated by the READ command (FIG. 10 (6)).
  • the MP 121 reads the data (old D, old P) stored in the buffer 143 by the FMPK 160 into the CMPK 130 (FIG. 10 (7)), and performs an XOR operation on the new D1, old D1, and old P. Then, a new redundant code (new P) corresponding to the new D1 is generated and stored in the CMPK 130 (FIG. 10 (8)).
  • the MP 121 transfers the new P of the CMPK 130 to the Buffer 143 of the BEPK 140 (FIG. 10 (9)), and issues a WRITE command to the FMPK 160 (FIG. 10 (10)).
  • the FMPK 160 that has received the WRITE command stores the new P in the Buffer 161.
  • the FMPK 160 determines from the parity determination information 124 that the new P is a redundant code, and determines that the new P is stored in the flash chip 166 without being compressed.
  • the FMPK 160 takes out the new P from the buffer 161, and stores it in the flash chip 166 without compression (FIG. 10 (11)).
  • FIG. 11 is a diagram illustrating an overview of all stripe parity generation processing according to the second embodiment.
  • the all stripe parity generation process is a process for generating a redundant code that is executed when all data in the stripe column is stored in the CMPK 130.
  • the MP 121 of the storage system 10 stores the write data received from the host 30 (hereinafter referred to as new D1 to new Dn) in the CM 131 of the CMPK 130 via the FEPK 100 (FIG. 11 (1)).
  • the MP 121 generates a redundant code (new P) corresponding to the write data by performing an XOR operation using all the data (new D1 to new Dn) constituting the same stripe column, and stores it in the CMPK 130 ( FIG. 11 (2)).
  • the MP 121 issues a WRITE command for writing the new P to the FMPK 160 via the BEPK 140 (FIG. 11 (3)).
  • the FMPK 160 that has received the WRITE command stores the new P in the buffer 161.
  • the FMPK 160 determines from the parity determination information 124 that the new P is a redundant code, and determines to store the new P in the flash chip 166 without compression.
  • the FMPK 160 stores the new P in the flash chip 166 without compressing it (FIG. 11 (4)).
  • FIG. 12 is a flowchart of parity generation processing according to the second embodiment.
  • the redundant code generation method is changed depending on whether or not all data in the same stripe column is available.
  • the all stripe write parity generation processing shown in FIG. 11 is performed.
  • the RMW parity generation process shown in FIG. 10 is performed.
  • the MP 121 detects data before parity generation (hereinafter, new D) from the CMPK 130 (S121). Next, the MP 121 determines whether all the data of the stripe column to which the new D belongs are stored in the CMPK 130 (S122).
  • the MP 121 secures an area for storing the redundant code (new P) corresponding to the new D in the CMPK 130. (S129).
  • the MP 121 generates a new P by performing an XOR operation on all the data in the stripe column to which the new D belongs in the CMPK 130, and stores it in an area secured by the CMPK 130 (S130).
  • the MP 121 secures an area for the new P in the Buffer 143 of the BEPK 140, and stores the new P in that area (S131).
  • the MP 121 issues a WRITE command for writing the new P to the FMPK 160 storing the redundant code corresponding to the stripe column (S132).
  • the FMPK 160 executes the WRITE process (see FIG. 14) and stores the new P.
  • the MP 121 sets an area for storing the data before the new D update (hereinafter referred to as the old D) as the CMPK 130 and It secures to Buffer 131,143 of BEPK140 (S123).
  • the MP 121 issues a READ command for reading the old D to the FMPK 160 in which the old D is stored (S124).
  • the FMPK 160 executes the READ process (see FIG. 13), and the old D is stored in the Buffers 131 and 143 of the CMPK 130 and the BEPK 140.
  • the MP 121 secures an area for storing a redundant code (hereinafter referred to as old P) corresponding to the old D in the Buffers 131 and 143 of the CMPK 130 and BEPK 140 (S125).
  • old P a redundant code
  • the MP 121 issues a READ command for reading the old P to the FMPK 160 in which the old P is stored (S126).
  • the FMPK 160 executes the READ process (see FIG. 13), and the old P is stored in the Buffers 131 and 143 of the CMPK 130 and the BEPK 140.
  • the MP 121 secures an area for storing the new P in the CMPK 130 (S127).
  • the MP 121 generates a new P by performing an XOR operation on the new D, the old D, and the old P, and stores them in the reserved area (S128).
  • the MP 121 secures an area for storing the new P in the Buffer 143 of the BEPK 140 (S131).
  • the MP 121 issues a WRITE command for writing the new P to the FMPK 160 storing the redundant code corresponding to the stripe column (S132).
  • the FMPK 160 executes the WRITE process (see FIG. 14) and stores the new P.
  • FIG. 13 is a flowchart of the READ process according to the second embodiment.
  • the READ process is a process executed by the FMPK 160 that has received the READ command.
  • the FMPK 160 When the FMPK 160 receives the READ command (S141), whether the READ target is a redundant code (parity) using the parity determination information 124 stored in the package memory 162 and the READ target address in the READ command. Is determined (S142).
  • the FMPK 160 uses the flash package 166 because the READ target is not a redundant code. Is compressed and stored, and the READ target data is expanded via the compression / decompression circuit 164 (S143). Next, the FMPK 160 stores the decompressed READ target data in the Buffer 161 (S144), and transmits the data to the BEPK 140 (S145).
  • the FMPK 160 determines that the READ target is a redundant code and is stored in the flash package 166 without being compressed. Are stored in the buffer 161 without being expanded from the flash chip 166 (S144). Next, the FMPK 160 transmits the redundancy code to be read by the Buffer 161 to the BEPK 140 (S145).
  • This READ process eliminates the need for decompression when reading redundant codes, and reduces the processing load on the storage device.
  • FIG. 14 is a flowchart of the WRITE process according to the second embodiment.
  • the WRITE process is a process executed by the FMPK 160 that has received the WRITE command.
  • the FMPK 160 when the FMPK 160 receives a WRITE command (S151), it stores WRITE target data (user data or redundant code) in the Buffer 161 (S152). Next, the FMPK 160 uses the parity determination information 124 stored in the package memory 162 and the WRITE target address in the WRITE command to determine whether the WRITE target data is a redundant code (S153). ).
  • the FMPK 160 stores the data in the flash package 166 because the WRITE target is not a redundant code. It is determined that the data is compressed and stored, the WRITE target data is compressed via the compression / decompression circuit 164 (S154), and the WRITE target data is stored in the flash chip 166 (S155).
  • the FMPK 160 determines that the WRITE target is a redundant code and stores it in the flash package 166 without compression, and compresses the redundant code. Instead, the data is stored in the flash chip 166 (S155).
  • This WRITE process eliminates the need for compression when writing redundant codes, and reduces the processing load on the storage device.
  • FIG. 15 is a diagram illustrating an outline of the collection copy process according to the second embodiment.
  • the collection copy process is a process executed to restore data stored in the failed storage device when a part of the storage device constituting the RAID group fails.
  • the MP 121 issues to each FMPK 160 a READ command for reading data (hereinafter referred to as D2 to Dn) and a redundant code (hereinafter referred to as P) in a stripe column including data to be restored (hereinafter referred to as D1).
  • D2 to Dn and P are obtained from the FMPK 160 and stored in the CMPK 130 (FIGS. 15 (1) to (5)).
  • the MP 121 restores D1 by performing an XOR operation on the data (D2 to Dn) and P stored in the CMPK 130 (FIG. 15 (6)).
  • the MP 121 issues a WRITE command for writing D1 to the spare FMPK 160 for storing D1 (FIGS. 15 (7) and (8)).
  • the FMPK 160 executes the WRITE process, and D1 is compressed and stored in the flash chip 166 (FIG. 15 (9)).
  • the READ process and the WRITE process executed by the FMPK 160 upon receipt of a READ / WRITE command issued in the collection copy process are as shown in FIGS.
  • FIG. 16 is a flowchart of the collection copy process according to the second embodiment.
  • FIG. 16 is a flowchart for realizing the collection copy process shown in FIG.
  • the MP 121 registers the parity determination information 124 in the spare FMPK 160 by the method shown in FIG. 8 (S161).
  • the MP 121 secures an area for storing the data of the stripe column and the redundant code in the Buffer 143 of the BEPK 140 and the CMPK 130 (S162).
  • the MP 121 removes data (hereinafter referred to as D2 to Dn) and redundant code (hereinafter referred to as P) of a certain stripe column to be processed, excluding data (hereinafter referred to as D1) stored in the FMPK 160 where the failure occurred.
  • a READ command for READ is issued to each FMPK 160 (S163).
  • the FMPK 160 executes the READ process (see FIG. 13), and D2 to Dn and P are stored in the Buffers 131 and 143 of the CMPK 130 and the BEPK 140.
  • the MP 121 restores D1 stored in the failed FMPK 160 by performing an XOR operation on D2 to Dn and P (S164).
  • the MP 121 secures and stores an area for storing D1 in the Buffer 143 of the BEPK 140 (S165).
  • the MP 121 issues a WRITE command to write D1 restored to the spare FMPK 160 (S166).
  • the FMPK 160 executes the WRITE process (see FIG. 14), and D1 is stored in the flash chip 166.
  • the MP 121 determines whether or not the data of the last area of the failed FMPK 160 has been restored (S167). As a result, when the last area has not been restored (S167: No), the MP 121 changes the processing target to the next area (S168), and performs the processing of S162 to S167 for the processing target area. . On the other hand, when restoring to the last area (S167: Yes), the MP 121 ends the collection copy process.
  • the compression process is described as an example of the additional process executed by the storage device.
  • the additional process may be an encryption process.
  • whether or not to execute the process for determining whether or not to execute the additional process may be turned ON / OFF according to an instruction from the management computer 20.
  • the computer system according to the third embodiment is basically the same as the computer system according to the first embodiment shown in FIG.
  • the storage controller 11 transfers determination information for determining whether the code is a redundant code to the storage device (for example, FMPK16), and the determination information and command transferred from the storage controller 11 Whether the storage device is a redundant code or not is determined based on the type.
  • the method for determining the redundant code may be any method described in the first or second embodiment.
  • a redundant code is generated for the compressed data, not only the redundant code but also the data is restored in the restoration process (hereinafter referred to as rebuild) when any of the storage devices that make up the RAID group fails.
  • the data (more precisely, the compressed data stored in the flash chip 166) can be restored without compression / decompression, and the rebuild process can be speeded up.
  • FIG. 17 is a diagram illustrating an outline of RMW parity generation processing when parity is generated using compressed data according to the third embodiment.
  • the MP 121 stores the old redundant code (old P) of the stripe column corresponding to the new D1 in the compressed data from the FMPK 160 storing the redundant code of the stripe column corresponding to the WRITE data (hereinafter referred to as the new D1).
  • Parity generation trigger information (generation trigger information) indicating whether or not it has been created is acquired (FIG. 17 (1), (2)).
  • the MP 121 determines whether it is a redundant code created for the compressed data based on the acquired information. In the example of FIG. 17, it is determined that the old P is a redundant code created for the compressed data.
  • the MP 121 issues an XDWRITE command to the FMPK 160 for the new D1 (FIG. 17 (3)).
  • the MP 121 gives information instructing to generate a redundant code for the compressed data to the XDWRITE command (hereinafter, instructing to generate a redundant code for the compressed data) (The command to which information is assigned is described with (RAW) added after the command name.)
  • the FMPK 160 that has received the XDWRITE (RAW) command stores the new D1 in the Buffer 161.
  • the FMPK 160 stores the compressed data (hereinafter referred to as old cD1) of the data before update of the new D1 (hereinafter referred to as old D1) from the flash chip 166 to the Buffer 161 (FIG. 17 (4)).
  • the FMPK 160 compresses the new D1 by the compression / decompression circuit 164 to generate compressed data (new cD1), and stores the new cD1 in the flash chip 166 (FIG. 17 (5)).
  • the FMPK 160 stores the new cD1 in the Buffer 161 (FIG. 17 (6)).
  • the FMPK 160 inserts padding (pad in the figure) to match the sizes of the new cD1 and the old cD1 (FIG. 17 (7)).
  • a method of generating data with padding it may be generated by overwriting a new cD1 in an area of a predetermined length in which a padding value (for example, 0) is stored in advance,
  • the FMPK 160 may generate the padding value for the new cD1, or may be added at the time of transfer by hardware such as the bus transfer device 165.
  • any method may be used to generate data with padding.
  • the FMPK 160 generates intermediate data (intermediate cD1) for generating a redundant code by performing an XOR operation of the new cD1 and the old cD1 with the same data size by padding (FIG. 17 (8)). ).
  • the FMPK 160 attaches the size information (SizeD1) of the new cD1 to the intermediate cD1 and stores it in the Buffer 161 (FIG. 17 (9)).
  • the size information may be embedded in the data or in the command.
  • the size information is stored for each compressed block unit. Instead of adding size information, a terminal symbol may be embedded at the end of each compressed block unit of data (new cD1).
  • the MP 121 issues an XDREAD (RAW) command to the FMPK 160 and reads the intermediate cD1 into the Buffer 143 of the BEPK 140 (FIG. 17 (10)).
  • the MP 121 issues an XPWRITE (RAW) command to the FMPK 160 that stores the parity of the stripe column corresponding to D1 (FIG. 17 (11)).
  • the FMPK 160 Upon receiving the XPWRITE (RAW) command, the FMPK 160 stores the intermediate cD1, SizeD1, and parity generation trigger information transferred by the XPWRITE command in the Buffer 161.
  • the FMPK 160 reads into the buffer 161 the redundant code (old P) corresponding to the old D1 and the size information (Size) of each data in the parity stripe assigned to the redundant code (FIG. 17 (12)).
  • the FMPK 160 puts padding for each compressed block of the intermediate cD1 to make the size of the old P uniform (FIG. 17 (13)).
  • the FMPK 160 generates a redundant code (hereinafter, new P) corresponding to the new D1 by performing an XOR operation on the intermediate cD1 and the old P having the same size (FIG. 17 (14)).
  • the FMPK 160 updates the size information corresponding to D1 in the Size based on SizeD1 and assigns it to the new P, and information (post) indicating that the parity has been generated after compression as parity generation trigger information.
  • the new P is given and stored in the flash chip 166 (FIGS. 17 (15) and (16)).
  • the size and parity generation trigger information to be added to the redundant code may be embedded in the data, may be held as information corresponding to the address in the package memory 162, or held as information corresponding to the address in the LM 122 of the MPPK 120. May be.
  • FIG. 18 is a diagram illustrating an outline of RMW parity generation processing when parity is generated using pre-compression data according to the third embodiment. Since the RMW parity generation process has the same part as the parity generation process of the first embodiment shown in FIG. 3, the description of the same part will be omitted and only the difference will be described.
  • the MP 121 acquires the parity generation trigger information of the redundant code (old P) corresponding to the new D1 from the FMPK 160 in order to determine the parity generation trigger (FIGS. 18 (1) and (2)).
  • the MP 121 determines whether it is a redundant code created for the compressed data based on the acquired information. In the example of FIG. 18, it is determined that the old P is a redundant code created for data before compression.
  • the MP 121 issues an XDWRITE command and an XDREAD command to the FMPK 160 in the same manner as in the example of FIG. 3, and acquires the intermediate D1 (FIGS. 18 (3) to (8)).
  • the MP 121 gives parity generation trigger information (before compression) to the intermediate D1, and issues an XPWRITE command to the FMPK 160 ((9) in FIG. 18).
  • the FMPK 160 that has received the XPWRITE command generates a new P as in the example of FIG. 3 (FIG. 18 (10)).
  • the FMPK 160 attaches parity generation trigger information (before compression) to the new P and stores it in the flash chip 166 (FIGS. 18 (11) and (12)).
  • FIG. 19 is a diagram illustrating an overview of all stripe parity generation processing according to the third embodiment.
  • the all-strip parity generation process according to the third embodiment has the same part as the all-strip parity generation process shown in FIG. 11, and thus description of the same part is omitted, and only the difference is described.
  • the MP 121 generates a new P as in FIG. 11 (FIGS. 19 (1) and (2)).
  • the MP 121 WRITEs the FMPK 160 by issuing a WRITE command (WRITE (D) in FIG. 19) for writing the new D1 to the new Dn to the FMPK 160 (FIG. 19 (3)).
  • the FMPK 160 attaches parity generation trigger information (before compression: pre) to the new P, and issues a WRITE command (WRITE (P) in FIG. 19) to write this data to the FMPK 160 (FIG. 19).
  • the WRITE process In the FMPK 160 that has received the WRITE command, the WRITE process is executed, and the new P to which the parity generation opportunity information is added is stored in the flash chip 166 (FIG. 19 (5)).
  • FIG. 20 is a configuration diagram of an example of an XDREAD / XDWRITE / XPWRITE command according to the third embodiment.
  • the command 170 of the XDREAD / XDWRITE / XPWRITE command includes a command type 170a, an LBA 170b, a transfer length 170c, a parity generation opportunity 170d, a number of compressed blocks 170e, and a compressed block size 170f.
  • the command type 170a indicates the type of command. For example, XDREAD, XDWRITE, or XPWRITE is set as the command type.
  • the LBA 170b is a logical block address of the logical VOL.
  • the transfer length 170c is the length of data transferred by a command.
  • the parity generation opportunity 170d is parity generation opportunity information indicating whether to generate parity for the compressed data or to generate parity for the uncompressed data.
  • the parity generation opportunity 170d is set to “post-compression (post)” when generating parity for data after compression, and “pre-compression” when generating parity for data before compression. (Pre) ".
  • the number of compressed blocks 170e is a field that is valid only when the parity generation opportunity 170d is “after compression”, and is a value indicating the number of compressed blocks included in the data to be transferred.
  • the compressed block size 170f is a valid field only when the parity generation opportunity 170d is “after compression”, and the command 170 has the compressed block size 170f as many as the number of compressed blocks.
  • Each compressed block size 170 is a size after compression of each compressed block. Note that the parity generation opportunity 170d, the number of compressed blocks 170e, and the compressed block size 170f may be embedded in data instead of a command.
  • FIG. 21 is a flowchart of parity generation processing according to the third embodiment.
  • symbol is attached
  • the MP 121 determines whether or not all the data in the stripe column to which the data for which parity is generated belongs are prepared (S122). As a result, when all the data in the stripe column is not complete (S122: No), the RMW parity generation process (see FIG. 22) is executed (S212), and the process is terminated. On the other hand, when all the data in the stripe column is available (S122: Yes), the MP 121 generates a new P as in FIG. 12 (S129 to S131), and parity generation trigger information (before compression) in the new P Is given (S211). Next, the MP 121 issues a WRITE command to the FMPK 160 (S132) and ends the process.
  • FIG. 22 is a flowchart of the RMW parity generation process according to the third embodiment. Note that portions similar to those in the parity generation processing illustrated in FIG.
  • the MP 121 obtains parity generation opportunity information from the FMPK 160 storing the redundant code, and determines which is the parity generation opportunity (S221).
  • the MP 121 issues an XDWRITE command to the FMPK 160 (S43).
  • parity generation trigger information indicating that the parity generation trigger is after compression is added to the XDWRITE command.
  • the MP 121 issues an XDREAD (RAW) command for reading the intermediate data to the FMPK 160 (S45).
  • the MP 121 adds parity generation trigger information (after compression) to the intermediate data that has been read (S227).
  • the MP 121 issues an XPWRITE (RAW) command to the FMPK 160 (S47).
  • the MP 121 issues an XDWRITE command to the FMPK 160.
  • information that the parity generation trigger is before compression is added to the command (S43).
  • the MP 121 issues an XDREAD (CMP) command for reading the intermediate data from the FMPK 160 (S45).
  • CMP XDREAD
  • the MP 121 adds parity generation trigger information (before compression) to the intermediate data that has been read (S222).
  • the MP 121 issues an XPWRITE (CMP) command to the FMPK 160 (S47).
  • FIG. 23 is a flowchart of the XDWRITE process according to the third embodiment.
  • symbol is attached
  • the XDWRITE process is a process executed when the FMPK 160 receives an XDWRITE command.
  • the FMPK 160 receives an XDWRITE command
  • the FDK 160 executes a process on the assumption that the target of the command is not a redundant code.
  • the FMPK 160 After receiving the XDWRITE command (after S51 and S52), the FMPK 160 determines which is the parity generation trigger for the data targeted by the XDWRITE command (S231).
  • the FMPK 160 executes the processing of steps S53 to S57, and ends the XDWRITE processing.
  • the FMPK 160 obtains compressed data (hereinafter referred to as new cD1) obtained by compressing the new D1 via the compression / decompression circuit 164 (S232).
  • the cD1 is stored in the flash chip 166 (S233).
  • the FMPK 160 reads the new cD1 from the flash chip 166 into the Buffer 161 (S234).
  • the FMPK 160 stores the old data after compression (old cD1) in the Buffer 161 (S235).
  • the FMPK 160 puts padding for each compressed block, and aligns the data sizes of the new cD1 and the old cD1 (S236).
  • the FMPK 160 generates intermediate data (hereinafter, intermediate cD1) by performing an XOR operation on the new cD1 and the old cD1 having the same size (S237).
  • the FMPK 160 gives the size information after compression of each compressed block in the new cD1 to the intermediate cD1 (S238), and ends the XDWRITE process.
  • FIG. 24 is a flowchart of the XDREAD process according to the third embodiment.
  • symbol is attached
  • the XDREAD process is a process that is executed when the FMPK 160 receives an XDREAD command.
  • the FMPK 160 receives an XDREAD command
  • the FDK 160 executes a process on the assumption that the target of the command is not a redundant code.
  • the FMPK 160 determines which is the parity generation trigger (S241).
  • the FMPK 160 executes the process of step S63 and ends the XDREAD process.
  • the FMPK 160 transmits the intermediate data of the Buffer 161 and the size information added to the intermediate data to the MP 121 (S242).
  • FIG. 25 is a flowchart of the XPWRITE process according to the third embodiment.
  • the same parts as those in the XPWRITE process according to the first embodiment illustrated in FIG. 7 are denoted by the same reference numerals, and here, differences from the processes will be mainly described.
  • the XPWRITE process is a process executed when the FMPK 160 receives an XPWRITE command.
  • the FMPK 160 executes a process on the assumption that the target of the command is a redundant code.
  • step S73 the FMPK 160 determines which is the parity generation opportunity of the XPWRITE command (S251).
  • the FMPK 160 determines which is the parity generation trigger for the old parity (S259).
  • the parity generation trigger of the old parity is after compression (S259: after compression)
  • the consistency of the parity generation trigger is not taken, and the FMPK 160 responds to the MP 121 with an abnormal end ( S253), the process is terminated.
  • the FMPK 160 when it is determined that the parity generation trigger of the old parity is before compression (S259: before compression), the FMPK 160 generates a new P by performing an XOR operation between the intermediate data and the old parity (S260). ), A parity generation opportunity (before compression) is assigned to the new P (S261), the new P is stored in the flash chip 166 (S262), and the process is terminated.
  • step S251 If it is determined in step S251 that the parity generation opportunity is after compression (S251: after compression), the FMPK 160 determines which is the parity generation opportunity for the old parity (S252). As a result, when it is determined that the parity generation trigger of the old parity is before compression (S252: before compression), the consistency of the parity generation trigger is not taken, so the FMPK 160 responds to the MP 121 with an abnormal end ( S253), the process is terminated.
  • the FMPK 160 performs padding for each compressed block of intermediate data from the size information (S254).
  • the FMPK 160 generates a new P by performing an XOR operation on the padded intermediate data and the old P (S255).
  • the FMPK 160 updates the size information assigned to and stored in the old P to the size information corresponding to the new P based on the size information assigned to the intermediate data (S256).
  • the FMPK 160 gives a parity generation opportunity (after compression) to the new P (S257), stores it in the flash chip 166 (S258), and ends the process.
  • the parity generation trigger it is possible to switch between generating the parity of each data based on the data before compression and generating based on the data after compression.
  • the trigger it is possible to generate parity at an appropriate trigger.
  • FIG. 26 is a diagram illustrating an outline of a collection copy process of a stripe column having parity generated using pre-compression data according to the third embodiment. Since this collection copy process has the same part as the collection copy process of the second embodiment shown in FIG. 15, the description of the same part will be omitted and only the difference will be described.
  • the MP 121 acquires the parity generation trigger information of the redundant code of the stripe string to be processed from the FMPK 160 (FIGS. 26 (1) and (2)), and determines that the parity generation has been performed before compression in this stripe string. To do. Next, the MP 121 restores D1 as in FIG. 15 (FIG. 26 (3)) and stores it in the spare FMPK 160 (FIG. 26 (4)). At this time, parity generation trigger information (before compression) is added to the READ / WRITE command.
  • CMP parity generation trigger information
  • FIG. 27 is a diagram showing an outline of a collection copy process of a stripe column having parity generated using the compressed data according to the third embodiment. Since this collection copy process has the same part as the collection copy process shown in FIG. 26, the description of the same part will be omitted and only the difference will be described.
  • the MP 121 obtains a parity generation opportunity from the FMPK 161 and determines that parity generation has been performed after compression (FIGS. 27 (1) and (2)). Next, the MP 121 acquires the size information after compression of the data in the stripe from the FMPK 160 ((3) in FIG. 27). Next, the MP 121 issues a READ command for reading the data (D2 to Dn) and the redundancy code (P) from each FMPK 160, and acquires them (FIGS. 27 (4) to (8)). At this time, the MP 121 assigns compression necessity information (compression unnecessary) to the READ command. The FMPK 160 that has received the READ command (CMP) responds to the MP 121 without decompressing the compressed data stored in the flash chip 166 based on the compression necessity information.
  • CMP compression necessity information
  • the MP 121 adjusts the data size by padding each compressed block of the compressed data based on the size information (FIG. 27 (9)).
  • the MP 121 generates data in which padding is included in the data to be restored (cD1) after compression by performing an XOR operation on each padded data and P (FIG. 27 (10)).
  • MP 121 generates cD1 without padding based on the size information (FIG. 27 (11))
  • MP 121 issues a WRITE command to WRITE cD1 to spare FMPK 160 (FIG. 27).
  • the MP 121 assigns compression necessity information (compression unnecessary) to the WRITE command, and the FMPK 160 that has received this WRITE command compresses cD1 based on the compression necessity information.
  • FIG. 27 (13) Note that the process of adding / deleting padding is performed by MP121.
  • the FMPK 160 may receive size information from the FMPK 160, and the FMPK 160 may execute the processing based on the size information.
  • the CMPK 130 separately manages the data after compression and the data before compression. The compressed data is not visible from the host.
  • FIG. 28 is a flowchart of the collection copy process according to the third embodiment. Parts similar to those in the collection copy process according to the second embodiment illustrated in FIG. 16 are denoted by the same reference numerals, and here, differences from that process will be mainly described.
  • the MP 121 acquires a parity generation opportunity from the FMPK 160 in which the parity of the stripe column to be restored is stored (S281). Next, the MP 121 determines which of the parity generation triggers (S282).
  • the MP 121 executes the processing of steps S163 to S166, and advances the processing to step S167.
  • the MP 121 acquires size information after compression of data in the parity stripe from the FMPK 160 storing the parity. (S283).
  • the MP 121 issues a READ command for reading from the FMPK 160 the data (cD2 to cDn) and the redundant code (hereinafter referred to as P) in the stripe string necessary for restoration (S284).
  • the MP 121 assigns compression necessity information (compression unnecessary) to the READ command.
  • the FMPK 160 that has received the READ command reads the data in which the target data and the redundant code are compressed from the flash chip 166 as it is, and returns it. Therefore, the FMPK 160 can reduce the processing load without performing the process of expanding the data.
  • the MP 121 aligns the sizes of cD2 to cDn and P by inserting padding for each compressed block of data based on the size information (S285).
  • the MP 121 uses cD2 to cDn and P to restore data in which padding is included in data to be restored (hereinafter, cD1) (S286).
  • the MP 121 deletes the padding from the restored data based on the size information, and generates cD1 to be restored (S287).
  • the MP 121 secures and stores an area for cD1 in the BEPK 140 (S288), and issues a WRITE command for WRITE cD1 to the spare FMPK 160 (S289).
  • the MP 121 gives compression information (compression unnecessary) to the WRITE command.
  • the FMPK 160 that has received the WRITE command stores cD1 in the flash chip 166 without compression.
  • the MP 121 does not perform compression processing, and the processing load is reduced.
  • MP121 advances a process to step S167.
  • FIG. 29 is a block diagram of an example of a READ / WRITE command according to the third embodiment.
  • the command 171 of the READ / WRITE command includes a command type 171a, an LBA 171b, a transfer length 171c, and a compression implementation necessity 171d.
  • the command type 171a indicates the type of command. For example, READ and WRITE are set as the command type.
  • the LBA 171b is a logical block address of the logical VOL.
  • the transfer length 171c is the length of data transferred by a command.
  • the compression implementation necessity 171d is information indicating whether or not the compression / decompression processing is performed in the FMPK 160 for the READ / WRITE target data.
  • the FMPK 160 When the value of the compression execution necessity 171d is the execution necessity, the FMPK 160 performs the compression / decompression process inside and executes READ / WRITE. However, when the FMPK 160 determines from the parity determination information 124 that the READ / WRITE target is a redundant code, the compression / decompression process is not performed in the FMPK 160 even if the value of the compression execution necessity 171d is necessary. Execute READ / WRITE processing. If the value of the compression implementation necessity 171d is not necessary, the FMPK 160 performs the READ / WRITE process without performing the compression / decompression process therein.
  • FIG. 30 is a flowchart of the READ process according to the third embodiment.
  • the same parts as those in the READ process according to the second embodiment illustrated in FIG. 13 are denoted by the same reference numerals, and here, differences from the processes will be mainly described.
  • the FMPK 160 determines which of the compression implementation necessity 171d is (S301).
  • the FMPK 160 executes the processing of steps S142 to S145 as in FIG.
  • the FMPK 160 stores the compressed data of the READ target stored in the flash chip 166 in the Buffer 161 without decompressing ( S144). Next, the FMPK 160 transmits the READ target data to the BEPK 140 (S145), and ends the READ process.
  • FIG. 31 is a flowchart of the WRITE process according to the third embodiment.
  • the same parts as those in the WRITE process according to the second embodiment illustrated in FIG. 14 are denoted by the same reference numerals, and here, differences from the processes will be mainly described.
  • the FMPK 160 When the FMPK 160 receives the WRITE command (S151), the FMPK 160 receives the WRITE target to the Buffer 161 (S152), and determines which of the compression execution necessity 171d is (S311).
  • the FMPK 160 executes the processing of steps S153 to S155 as in FIG.
  • the FMPK 160 stores the WRITE target data stored in the Buffer 161 in the flash chip 166 without being compressed (S155).
  • the compression process is described as an example of the additional process executed by the storage device.
  • the additional process may be an encryption process.
  • the additional processing is encryption processing, unlike the compression processing, the data size after execution of the data processing does not change, so the above-mentioned size information retention and data size adjustment processing (padding processing) is unnecessary. It is. Further, whether or not to execute the process for determining whether or not to execute the additional process may be turned ON / OFF according to an instruction from the management computer 20.
  • a storage device for example, FMPK 160
  • additional processing functions such as a compression processing function and an encryption processing function
  • a higher-level device for example, the storage controller 11
  • the storage device can be configured not to perform additional processing only on data stored in a predetermined area, and the IO processing performance of the storage device can be improved.
  • the storage device addition processing may be not only compression processing and encryption processing but also snapshot acquisition processing, for example.
  • the information notified from the host device may be information indicating whether or not the IO target is parity as in the first to third embodiments.
  • the operation and operation of the application program that operates on the server. May be information indicating that it is not necessary to perform additional processing on data in a predetermined area, and may be information that can determine whether additional processing has been performed or not. .
  • FIG. 32 is a diagram illustrating an outline of the function execution determination information registration process according to the fourth embodiment.
  • this function implementation determination information registration process has the same part as the parity determination information registration process shown in FIG. 8, description is abbreviate
  • the function execution determination information 125 is registered in the FMPK 166 in place of the parity determination information 124 in the parity determination information registration process shown in FIG. 1)).
  • the function execution determination information 125 is an example of determination information, and is, for example, information (function execution necessity information) indicating whether or not to perform an additional process for each unit area of a fixed size of the logical VOL. Based on the function execution determination information 125, the FMPK 160 determines whether or not the function is necessary during the IO process, and determines whether or not to perform the additional process.
  • the function execution determination information 125 may hold, for example, function execution necessity information for each unit area of the entire logical VOL. For each unit area within a specific size, the function execution necessity information and the specific size You may make it have the repetition number of. Further, the function execution determination information 125 may be notified to the FMPK 160 by being embedded in the command or data corresponding to the command for each IO instead of being registered in the FMPK 160 in advance.
  • FIG. 33 is a diagram illustrating an overview of command processing according to the fourth embodiment.
  • the MP 121 issues a command to the FMPK 160 via the BEPK 140 (FIGS. 33 (1) and (2)).
  • the FMPK 160 receives the command, and based on the address information in the command and the function execution determination information 125, the FMPK 160 performs the drive function unit for data to be input / output by the command (D1 or D2 in FIG. It is determined whether or not the predetermined additional processing is to be performed by 167 (FIGS. 33 (3) and (4)).
  • the drive function unit 167 may be a dedicated circuit that performs predetermined addition processing, or may be configured by the package processor 163 of the FMPK 160.
  • the FMPK 160 determines that it is not necessary to perform the additional processing (case D1 in FIG. 33), the FMPK 160 stores D1 in the flash chip 166 without executing the additional processing by the drive function unit 167 (FIG. 33 ( 5)).
  • the drive function unit 167 executes the predetermined additional processing related to D2, and then executes the additional processing. Is stored in the flash chip 166 (FIG. 33 (6)).
  • FIG. 33 the outline of processing when data is written to the flash chip 166 has been described. However, when data is read from the flash chip 166, processing corresponding to the processing at the time of writing may be performed. Specifically, when the FMPK 160 determines that the execution of the additional process is unnecessary (in the case of reading D1), the FMPK 160 reads the data as it is without executing the additional process from the flash chip 160, and performs the additional process. Is determined to be necessary (in the case of reading D2), it may be read by executing an additional process by the drive function unit 167 on the data of the flash chip 160.
  • FIG. 34 is a flowchart of command processing according to the fourth embodiment.
  • the command process is a process executed by the FMPK 160 that has received a command issued from the storage controller 11.
  • the FMPK 160 When the FMPK 160 receives the command (S341), based on the address information of the target of the command and the function execution determination information 125, the FMPK 160 performs predetermined addition processing on the address data indicated by the address information. Whether or not (function implementation necessity) is determined (S342).
  • the FMPK 160 performs a predetermined additional process on the command target data by the drive function unit 167. (S343) Processing corresponding to the command (for example, data IO processing) is performed (S344), and the command processing is terminated.
  • the FMPK 160 does not perform the addition processing by the drive function unit 167, but performs processing corresponding to the command (for example, data I / O processing) is performed (S344).
  • the FMPK 160 performs only the process corresponding to the command without executing the additional process for data that does not need to be subjected to the additional process, so that the processing load on the FMPK 160 can be reduced. it can.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

 ストレージシステムは、データを格納する記憶媒体と、データに対してデータの状態の変更を伴う付加処理を実行するデバイスコントローラと、を有するストレージデバイスと、ストレージデバイスへのデータの入出力を制御するストレージコントローラとを備える。ストレージコントローラは、ストレージデバイスに対して、入出力対象のデータに関する入出力処理に伴って、デバイスコントローラが付加処理を実行するか否かの判断に利用可能な判断情報を送信する。デバイスコントローラは、ストレージコントローラから送信された判断情報に基づいて、入出力対象のデータに対する付加処理の実行を制御する。

Description

ストレージシステム及び記憶制御方法
 本発明は、格納対象のデータに対する所定の処理を実行可能なストレージデバイスを有するストレージシステムの記憶制御に関する。
 ストレージシステムでは、ストレージコントローラがデータの最終記憶装置であるストレージデバイスに対するIOの制御を行う。近年では、企業で扱うデータ量増大に伴い、データを格納するために必要なストレージデバイスの増加によりデータ格納のためのコストも増大している。このため、ストレージシステムにおけるデータ保持コストの低減が求められている。このニーズに答える技術の一つとして、ストレージデバイス(例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive))に格納されるデータを圧縮することでデータ格納量を削減する技術がある。データ量の増大により、データ圧縮技術は、バックアップ用途のボリュームだけではなく、通常の業務で使用されるボリューム(プライマリボリューム)にも適用することが求められている。
 圧縮技術としては、例えば、特許文献1には、ビットコストの高いフラッシュメモリを記憶媒体とするSSD等のフラッシュデバイスに格納するデータ容量を削減するために、フラッシュデバイスがデータ圧縮処理を実施する技術が開示されている。
米国特許出願公開第2011/320915号明細書 国際公開第2010/137178号パンフレット
 特許文献1の技術では、フラッシュデバイスが圧縮処理を実施しているため、ストレージコントローラが圧縮処理を実施する場合と比べてストレージコントローラの負荷が低減される。ただし、フラッシュデバイスがIO処理に加えて圧縮処理を実施するため、圧縮処理を実施しない時に比べてフラッシュデバイスの性能が低下する。フラッシュデバイスのIO処理はHDDと比べて高速であるため、圧縮/伸張処理による性能への影響が大きくなる。つまり、フラッシュデバイスで圧縮処理を実施した場合には、HDDで圧縮処理を実施した場合と比べて性能低下率が大きくなる。
 ここで、ストレージシステムでは、IO処理の高速化や耐障害性向上を目的として、RAID(Redundant Array of Independent Disks)グループを構成してパリティ(冗長コード)を生成する場合がある。RAIDグループにおけるパリティ生成方法としては、従来から知られているストレージシステムのコントローラがパリティを生成する方法と、特許文献2に開示されているストレージデバイスがパリティを生成する方法とがある。このようなシステムに圧縮技術を適用すると、ランダムライト時には、ホストライト1回に対して、旧データ及び旧パリティの伸長と、新データ及び新パリティの圧縮が必要となる。つまり、圧縮/伸張処理をそれぞれ2回ずつ行うこととなるので、性能低下率はさらに大きくなる。
 プライマリボリュームに圧縮技術を適用した場合、データ圧縮による性能低下は業務への影響が大きく、圧縮によってデータ格納量を削減しつつ、性能低下を抑制することが課題である。例えば、データベースへのアクセスを伴うことが多いOLTP(On-Line
Transaction Processing)では、ランダムライトが比較的多く、データ圧縮した場合の性能低下も大きくなる。
 ストレージシステムは、データを格納する記憶媒体と、データに対してデータの状態の変更を伴う付加処理を実行するデバイスコントローラと、を有するストレージデバイスと、ストレージデバイスへのデータの入出力を制御するストレージコントローラとを備える。ストレージコントローラは、ストレージデバイスに対して、入出力対象のデータに関する入出力処理に伴って、デバイスコントローラが付加処理を実行するか否かの判断に利用可能な判断情報を送信する。デバイスコントローラは、ストレージコントローラから送信された判断情報に基づいて、入出力対象のデータに対する付加処理の実行を制御する。
 フラッシュデバイスがストレージコントローラから送信される情報に基づいて圧縮処理の要否を判定する。これにより、データの格納量が削減されて低コスト化することができ、全データを圧縮する場合よりもライト性能を向上することができる。
図1は、実施例1に係る計算機システムのハードウェア構成図である。 図2は、実施例1に係るFMPKのハードウェア構成図である。 図3は、実施例1に係るランダムライト時のパリティ生成処理の概要を示す図である。 図4は、実施例1に係るランダムライト時のパリティ生成処理のフローチャートである。 図5は、実施例1に係るXDWRITE処理のフローチャートである。 図6は、実施例1に係るXDREAD処理のフローチャートである。 図7は、実施例1に係るXPWRITE処理のフローチャートである。 図8は、実施例2に係るパリティ判定情報登録処理の概要を示す図である。 図9は、実施例2に係るパリティ判定情報の一例の構成図である。 図10は、実施例2に係るRMWパリティ生成処理の概要を示す図である。 図11は、実施例2に係る全ストライプパリティ生成処理の概要を示す図である。 図12は、実施例2に係るパリティ生成処理のフローチャートである。 図13は、実施例2に係るREAD処理のフローチャートである。 図14は、実施例2に係るWRITE処理のフローチャートである。 図15は、実施例2に係るコレクションコピー処理の概要を示す図である。 図16は、実施例2に係るコレクションコピー処理のフローチャートである。 図17は、実施例3に係る圧縮後データを用いてパリティを生成する場合の、RMWパリティ生成処理の概要を示す図である。 図18は、実施例3に係る圧縮前データを用いてパリティを生成する場合の、RMWパリティ生成処理の概要を示す図である。 図19は、実施例3に係る全ストライプパリティ生成処理の概要を示す図である。 図20は、実施例3に係るXDREAD/XDWRITE/XPWRITEコマンドの一例の構成図である。 図21は、実施例3に係るパリティ生成処理のフローチャートである。 図22は、実施例3に係るRMWパリティ生成処理のフローチャートである。 図23は、実施例3に係るXDWRITE処理のフローチャートである。 図24は、実施例3に係るXDREAD処理のフローチャートである。 図25は、実施例3に係るXPWRITE処理のフローチャートである。 図26は、実施例3に係る圧縮前データを用いて生成されたパリティを持つストライプ列のコレクションコピー処理の概要を示す図である。 図27は、実施例3に係る圧縮後データを用いて生成されたパリティを持つストライプ列のコレクションコピー処理の概要を示す図である。 図28は、実施例3に係るコレクションコピー処理のフローチャートである。 図29は、実施例3に係るREAD/WRITEコマンドの一例の構成図である。 図30は、実施例3に係るREAD処理のフローチャートである。 図31は、実施例3に係るWRITE処理のフローチャートである。 図32は、実施例4に係る機能実施判定情報登録処理の概要を示す図である。 図33は、実施例4に係るコマンド処理の概要を示す図である。 図34は、実施例4に係るコマンド処理のフローチャートである。
 幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
 なお、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インターフェースデバイス(例えばポート)を用いながら行うため、処理の主語がプログラムとされても良い。プログラムを主語として説明された処理は、プロセッサ或いはそのプロセッサを有する計算機(例えば、管理計算機、ホスト計算機、ストレージシステム等)が行う処理としても良い。また、プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。プログラムは、プログラムソースから各コントローラにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
 実施例1に係るストレージシステムを含む計算機システムの概要を説明する。
 ストレージシステム10は、図1に示すように、例えば、1つの筐体で構成された装置としても良いし、外部ストレージ装置40と組み合わせて構成されても良い。ストレージシステム10は、例えば、FMPK(Flash Memory Package)160のようなストレージデバイスを複数備える。ストレージシステム10においては、複数のストレージデバイスを用いてRAID(Redundant Array of Independent Disks)グループが構成される。
 各ストレージデバイスの記憶領域は、ストライプと呼ばれるサブ記憶領域に分割されて管理される。つまり、各ストレージデバイスは複数のストライプを含む。RAIDグループの記憶領域は、複数のストライプ列で構成されている。各ストライプ列は、各ストレージデバイスに含まれるストライプをひとつずつ含む。つまり、ストライプ列は、RAIDグループを構成する複数のストレージデバイスに跨っている。
 RAIDには、いくつかのレベル(以下、(RAIDレベル)という)がある。
 例えば、RAID5では、ホスト計算機30から指定されたライト対象のデータは、複数のデータ要素に分割され、複数のデータ要素が、同一のストライプ列の複数のストライプに書き込まれる。また、RAID5では、ストレージデバイスに障害が発生したことによりそのストレージデバイスから読み出せなくなったデータ要素を復元するために、ストライプ列に含まれる複数のデータ要素から“パリティ”と呼ばれる冗長な情報(以下、「冗長コード」)が生成され、その冗長コードも、同一のストライプ列のストライプに書き込まれる。例えば、RAIDグループを構成するストレージデバイスの数が4である場合は、そのうちの3つのストレージデバイスに対応する3つのストライプに、ストライプ列を構成する3つのデータ要素が書き込まれ、残りの1つのストレージデバイスに対応するストライプに、冗長コードが書き込まれる。この場合、ストライプ列は、3つのデータ要素と、3つのデータ要素から生成されるパリティを含む。パリティが含まれるストライプ列に含まれるデータ要素のいずれかが更新された場合、そのパリティも更新される。パリティは、例えば、同じストライプ列に含まれる複数のデータ要素のXOR演算により生成される。以下、データ要素と冗長コードとを区別しない場合には、両者をそれぞれストライプデータ要素ということもある。
 また、RAID6では、RAIDグループを構成する複数のストレージデバイスのうちの2つのストレージデバイスに障害が発生した等の理由により、データ単位を構成する複数のデータ要素のうちの2つのデータ要素を読み出すことができない場合に、これら2つのデータ要素を復元することができるように、各データ単位に対して、2種類の冗長コード(Pパリティ、Qパリティという)が生成されて、それぞれの冗長コードが同一のストライプ列のストライプに書き込まれる。
 また、上記に説明した以外にもRAIDレベルは存在する(例えばRAID1~4)。また、データの冗長化技術として、3重ミラー(Triplication)、3種類のパリティを用いたトリプルパリティ技術等もある。また、冗長コードの生成技術についても、ガロア演算を用いたReed-solomon符号や、EVEN-ODD等さまざまな技術が存在する。本実施例では、RAIDレベルがRAID5である例を主に説明するが、これは本発明を限定するものではなく、他のRAIDレベルであっても良く、上記した他の技術を用いたRAIDに対しても適用することができる。
 ストライプ列のデータ要素を更新した際に、そのストライプ列についての冗長コードを計算して更新する。ここで、冗長コードの計算方法としては、その冗長コードを計算するために用いるデータによっていくつかの方法がある。第1の方法は、ストライプ列の全てのデータ要素を用いて計算する方法(以下、「全ストライプパリティ生成」という)である。第1の方法は、アクセスパターンがシーケンシャルライトの場合、例えばストライプ列に含まれるすべてのデータ要素が更新される場合に用いられる。第2の方法は、一部のデータ要素についての更新後のデータ(新データ)及び更新前のデータ(旧データ、つまり新データによって更新されるデータ)と、更新前のパリティ(旧パリティ)とを用いて計算する方法(以下、「RMW(Read Modify Write)パリティ生成」という)である。第2の方法は、アクセスパターンがランダムライトの場合、例えばストライプ列に含まれるデータ要素の一部が更新される場合に用いられる。ただし、全ストライプパリティ生成とRMWパリティ生成とは、ストレージシステムの負荷を考慮して使い分けられてもよい。
 以下、図1を参照して、RMWパリティ生成を説明する。RMWパリティ生成には、CM131にFMPK160から必要なデータを読み込んで、BEコントローラ142もしくはMP121が冗長コードを生成する方法(以下、従来RMW)や、FMPK160などのストレージデバイスが冗長コードを生成する方法(以下、オフロードRMW)がある。
 FMPK160が冗長コードを生成するオフロードRMWでは、ストレージコントローラ11は、従来のREAD/WRITEコマンドに加えて以下に説明するコマンドを利用する。1つは、ホスト計算機30が送信したデータ(以下、新データ)をFMPK160に転送してFMPKにパリティ生成を指示するために用いるXDWRITEコマンドである。XDWRITEコマンドを受領したFMPK160は、送信された新データと、新データと同一アドレスのFMPK160の記憶領域に格納されているデータ(旧データ)とを用いて中間データを生成する。別の1つは、FMPK160が生成した中間データを読み出すために用いるXDREADコマンドである。XDREADコマンドを受領したFMPK160は、XDWRITEコマンドに基づいて生成した中間データを、BEPK140のBuffer143に転送する。さらに別の1つは、中間データに基づいて新データに対応する冗長コード(新パリティ)を生成して、それまでの冗長コード(旧パリティ)の格納アドレスの記憶領域に対して書き込みを行うために用いるXPWRITEコマンドである。XPWRITEコマンドを受領したFMPK160は、送信された中間データとFMPK160に格納されている旧パリティとを用いて、新パリティを生成し、新パリティを対応するアドレスに格納する。実施例1では、これらのコマンドは、入出力対象がユーザデータであるか、冗長コードであるかを特定可能な情報を含んでおり、判断情報の一例である。
 次に、実施例1に係るストレージシステムを含む計算機システムを詳細に説明する。
 図1は、実施例1に係る計算機システムのハードウェア構成図である。
 計算機システムは、1以上のホスト計算機(以下、ホストという)30と、管理計算機20と、ストレージシステム10とを含む。ホスト計算機30と、ストレージシステム10とは、ネットワーク50を介して接続されている。ネットワーク50は、ローカルエリアネットワークであっても良く、ワイドエリアネットワークであっても良い。また、管理計算機20と、ストレージシステム10とは、内部ネットワーク150により接続されている。なお、ストレージシステム10に、ネットワーク50を介して1以上の外部ストレージ装置40を接続するようにしても良い。外部ストレージ装置40は、1つ以上のストレージデバイスを含む。ストレージデバイスは、不揮発性の記憶媒体、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリを含む。
 ホスト30は、例えば、アプリケーションを実行する計算機であり、ストレージシステム10からアプリケーションに利用するデータを読み出したり、ストレージシステム10にアプリケーションで作成したデータを書き込んだりする。
 管理計算機20は、計算機システムを管理する管理処理を実行するための管理者により使用される計算機であり、入力デバイスや表示デバイスを有する。管理計算機20は、入力デバイスに対する管理者の操作により、RAIDグループに対するRAIDレベルの設定を受けつけ、受け付けたRIADレベルでRAIDグループを構成するようにストレージシステム10に対して設定を行う。
 ストレージシステム10は、1以上のフロントエンドパッケージ(FEPK)100と、1以上のマイクロプロセッサパッケージ(MPPK)120と、1以上のキャッシュメモリパッケージ(CMPK)130と、1以上のバックエンドパッケージ(BEPK)140と、内部ネットワーク150と、複数のフラッシュパッケージ(FMPK)160とを有する。FEPK110、MPPK120、CMPK130、及びBEPK140は、内部ネットワーク150を介して接続されている。ここで、FEPK110、MPPK120、CMPK130、及びBEPK140により、ストレージコントローラ11が構成される。BEPK140は、複数系統のパスを介してFMPK160と接続されている。ここでは、BEPK140に接続するストレージデバイスは不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリ(PRAM(相変化メモリ)、ReRAM(抵抗変化メモリ)、MRAM(磁気抵抗メモリ)など)でも良い。
 FEPK100は、インターフェースデバイスの一例であり、1以上のポート(port)101と、FEコントローラ112と、バッファ113とを有する。ポート101は、ストレージシステム10を、ネットワーク50等を介して種々の装置と接続する。FEコントローラ112は、ホスト計算機30との間の通信を制御する。
 MPPK120は、制御デバイスの一例としてのマイクロプロセッサ(MP)121と、ローカルメモリ(LM)122とを有する。MP121と、LM122とは、内部バス123を介して接続されている。LM122は、各種プログラムや、各種情報を記憶する。MP121は、LM122に格納されたプログラムを実行して各種処理を実行する。MP121は、BEPK140を介して、各種コマンド(例えばSCSIにおけるREADコマンドやWriteコマンドなど)をFMPK160に送信する。また、MP121は、FEPK100を介して、各種コマンドを外部ストレージ装置40に送信する。また、上長コードの生成処理を実施する。MP121は、例えば、RAID5で構成されたRAIDグループのデータ単位に対しては、データ単位を構成する複数のデータ要素の排他的論理和(XOR)をとることによって冗長コード(パリティ)を生成する。また、MP121は、RAID6で構成されたRAIDグループのデータ単位に対しては、更に、データ単位を構成する複数のデータ要素に所定の係数を掛けた後、それぞれのデータの排他的論理和をとることによって、パリティを生成する。また、MP121は、データ単位についての1以上のストライプデータ要素(データ要素及びパリティのうち少なくとも1つ)に基づいて、データ単位中のいずれかのデータ要素を復元する復元処理を行う。パリティの生成は、MP121がプログラムを実行して行ってもよいし、パリティ生成回路を用いてもよい。
 CMPK130は、キャッシュメモリ(CM)131と、共有メモリ(SM)132とを有する。CM131は、ホスト30からFMPK160等に書き込むデータ(ライトデータ)や、FMPK160から読み出したデータ(リードデータ)を一時的に格納する。SM132は、MPPK120が各種処理を実行する際に、複数のMPPK120で共有する情報を格納する。
 BEPK140は、1以上のポート141と、BEコントローラ142と、Buffer143とを有する。ポート141は、ストレージシステム10と、FMPK160のようなストレージデバイスとを接続する。BEコントローラ142は、例えば、プロセッサであり、CMPK130とFMPK160と間のデータ転送を行う。また、BEPK140が、MP121に代わって冗長コード生成処理を実施してもよい。この場合、冗長コードを生成するための回路は、BEPK140内にあってもよいしBEPK140とは別にあっても良い。
 Buffer143は、FMPK160から送信されたデータや、FMPK160へ送信するデータを一時的に格納する。
 FMPK160は、データを格納する。FMPK160は、圧縮処理及び伸張処理を実行する圧縮及び伸張機能を有しており、BEPK140から書き込み要求があった場合には、書き込み対象のデータを、圧縮して、圧縮した状態で格納することができる。また、BEPK140から読み出し要求があった場合には、FMPK160に圧縮された状態で格納されているデータを伸張して、BEPK140に送信することができる。なお、FMPK160は、ストレージコントローラ11からデータを受信した場合に、圧縮してからフラッシュチップ166にデータを格納してもよいし、一旦フラッシュチップ166にデータを格納し、ストレージコントローラ11からのデータの書き込みとは非同期にフラッシュチップ166からデータを読み出して圧縮してもよい。
 ストレージコントローラ11は、ホスト計算機30に、論理ボリュームを提供する。論理ボリュームは、RAIDグループに含まれる複数のFMPK160の記憶領域に基づいて構成される。論理ボリュームには、その論理ボリュームの全論理アドレス範囲に記憶領域が割当てられている。
 また、ストレージコントローラ11は、ホスト計算機30に、シンプロビジョニングに従う仮想ボリュームを提供できる。仮想ボリュームは、作成された段階ではボリューム容量が定義され、仮想ボリュームのアドレス範囲は設定されるが、記憶領域は割当てられていない。ストレージコントローラ11は、ホスト計算機30からライト要求を受信すると、所定のサイズの記憶領域(以下、チャンクと呼ぶ)を仮想ボリュームのライト要求で指定されるアドレスを含む領域に割り当て、ライト要求に伴うデータを書き込む。チャンクは、RAIDグループに含まれる複数のFMPK160の記憶領域に基づいて構成される。また、ストレージコントローラ11は、複数のチャンクをプールを用いて管理する。プールには、複数のRAIDグループに基づくチャンクが含まれる。つまり、ストレージコントローラ11は、仮想ボリュームに対するライト要求を受信すると、プールからチャンクを選択し、仮想ボリュームに割当てる。すでに仮想ボリュームにチャンクが割当てられているアドレス範囲へのライト要求であれば、新たにチャンクを割当てる必要はない。以下では、論理ボリュームと仮想ボリュームをあわせてボリュームと呼ぶことがある。
 図2は、実施例1に係るFMPKのハードウェア構成図である。
 FMPK160は、パッケージコントローラ168と、1以上のフラッシュチップ166とを有する。パッケージコントローラ168は、Buffer161と、パッケージメモリ162と、デバイスコントローラの一例としてのパッケージプロセッサ163と、圧縮・伸張回路164と、バス転送装置165と、通信IF167と、パリティ生成回路169を有する。
 通信IF167は、BEPK140から送信されたデータを受信する。Buffer161は、BEPK140から送信されたデータや、BEPK140へ送信するデータを一時的に格納する。パッケージメモリ162は、各種プログラムや各種情報を記憶する。パッケージプロセッサ163は、パッケージメモリ162に格納されたプログラムを実行して各種処理を実行する。例えば、パッケージプロセッサ163は、圧縮・伸張回路164によりデータの圧縮・伸張を実行させる。また、パッケージプロセッサ163は、パリティ演算回路169にパリティの生成(XOR演算)を実行させる。また、パッケージプロセッサ163は、バス転送装置165によりフラッシュチップ166との間のデータ入出力を実行させる。フラッシュチップ166は、記憶媒体の一例であり、フラッシュメモリのチップである。FMPK160は、外部装置(ストレージコントローラ11)に対して論理アドレス空間を提供している。ストレージコントローラ11は、論理アドレス空間上の論理アドレスを指定してリード/ライトコマンド等を、FMPK160に送信する。
 ここで、フラッシュメモリは、不揮発性半導体記憶媒体である。フラッシュメモリチップ166は、物理的な記憶領域として、複数のブロックを有しており、各ブロックはデータ消去の単位である。また、各ブロックは、複数のページを有しており、各ページはデータのリード/ライトの単位である。フラッシュメモリは、ページに格納されたデータを更新する場合、上書きできないという特性を持つ。このため、データを更新する場合、パッケージプロセッサ163は、更新前のデータが格納されているページ(第一ページ)とは異なるページ(第二ページ)にデータを書きこむ。ここで、パッケージプロセッサ163は、第一ページにマッピングされていた論理アドレス範囲を第二ページにマッピングする。これにより、ストレージコントローラ11は、FMPK160が提供する論理アドレスにアクセスすれば、FMPK160内部での物理的なデータ格納位置を意識する必要なく、更新後のデータにアクセスできる。パッケージメモリ162には、この論理アドレスと物理的なページの位置(物理アドレス)の変換情報(論理-物理マッピング情報)を格納されている。
 以下では、パッケージプロセッサ163を主体としてFMPK160における処理を説明するが、パッケージコントローラ168がFMPK160内のデータの転送やデータの圧縮/伸長処理を実行するということもできる。
 図3は、実施例1に係るランダムライト時のパリティ生成処理の概要を示す図である。
 ホスト計算機30は、ストレージコントローラ11によって提供される論理ボリュームのボリューム番号及びボリューム上のアドレスを指定し、ライトデータを伴うライト要求を送信する。このライト要求はすでにボリュームに格納されたデータ(旧データ)を更新するものであるとする。MP121は、RAIDグループを構成する複数のFMPK160の中から、ライト要求によって指定されるボリューム番号及びボリューム上のアドレスに基づいて、そのデータを格納するFMPK160を特定し、FMPK160にデータを送信する。
 本実施例では、従来ストレージコントローラ11が実行していたパリティ生成処理をFMPK160が実行する。これにより、パリティ生成処理を制御していたMP163の負荷が低減され、ストレージシステム10全体として処理性能が向上する。さらに、以下に説明するようにFMPK160がデータ圧縮・伸長の要否を判定することで、圧縮・伸長による、FMPK160の性能低下を抑制する。以下に、FMPK160によるパリティ生成及びデータ圧縮・伸長を伴う処理を説明する。
 ストレージシステム10のMP121は、ホスト30から送信されたライトデータ(ユーザデータ:以下、新D1という)を、FEPK100を介してCMPK130のCM131に格納する(図3(1))。次に、MP121は、新D1をBEPK140のBuffer143に転送する(図3(2))。次いで、BEコントローラ142は、FMPK160に対してXDWRITEコマンドを発行し、新D1を送信する(図3(3))。XDRITEコマンドは、旧データに対応する論理アドレスを指定して送信される。
 XDWRITEコマンドを受領したFMPK160は、送信された新D1をBuffer161に格納する(図3(4))。パッケージプロセッサ163は、受信したコマンドがXDWRITEコマンドであるので、受信した新D1はユーザデータであると判定し、新D1を圧縮・伸張回路164により圧縮した後に、フラッシュチップ166に格納する(図3(5))。ここで、新D1を圧縮させたデータは、新cD1という。なお、新D1を圧縮してフラッシュチップ166に格納する処理は、XDWRITEコマンドの受信とは非同期に実施しても良い。
 また、パッケージプロセッサ163は、フラッシュチップ166に格納されている、新D1に対応する更新前のデータ(旧D1)を圧縮したデータ(以下、旧cD1)を、圧縮・伸張回路164により伸張して、旧D1を取得し、旧D1をBuffer161に格納する(図3(6))。次に、パッケージプロセッサ163は、新D1と旧D1とから、D1を含むストライプ列のパリティ(冗長コード)を生成するために利用する中間データ(以下、中間D1、中間パリティと呼んでもよい)を生成する(図3(7))。本実施例では、パッケージプロセッサ163は、新D1と、旧D1との排他的論理和をとって中間D1を生成する。
 次に、ストレージシステム10のMP121は、FMPK160に対してXDREADコマンドを発行することにより、FMPK160からBEPK140のBuffer143に中間D1を読み出す(図3(8))。具体的には、XDREADコマンドを受信したFMPK160は、中間D1をBuffer161から読み出して、BEPK140に送信し、BEコントローラ142は、中間D1を受信し、BEPK140のBuffer143に中間D1を書き込む。
 次に、ストレージシステム10のMP121は、中間D1を、D1を含むストライプ列のパリティが格納されているFMPK160を特定し、旧パリティに対応する論理アドレスを指定してXPWRITEコマンドを発行し、中間D1を送信する。XPWRITEコマンドを受領したFMPK160は、中間D1をBuffer161に格納する(図3(9))。パッケージプロセッサ163は、受信したコマンドがXPWRITEコマンドであるので、フラッシュチップ166に格納されている、旧D1を含むストライプ列の更新前のパリティ(以下、旧P)をBuffer161に読み出す(図3(10))。次に、パッケージプロセッサ163は、中間D1と旧Pとを利用して新D1に対応するパリティ(以下、新P)を生成する(図3(11))。本実施例では、パッケージプロセッサ163は、中間D1と、旧Pとの排他的論理和をとって新Pを生成する。
 次に、パッケージプロセッサ163は、受信したコマンドがXPWRITEコマンドであり、このコマンドに基づいて生成したデータはパリティであると判定して、生成したデータ、すなわち、新Pを圧縮せずに、フラッシュチップ166に格納する(図3(12))。
 このように、パリティについては、圧縮せずにフラッシュチップ166に格納するので、FMPK160における処理負荷を軽減することができる。つまり、旧Pの読み出し(10)での伸長処理が不要となり、新Pの書き込み処理(12)での圧縮処理が不要となる。ストライプ列に含まれるデータ要素のいずれかが更新されると、そのストライプ列のパリティは更新される。このため、ユーザデータと比べてパリティを読み出し/書き込みする頻度は高く、それに伴う圧縮/伸長処理を行わないことによる性能低下抑制効果は大きい。一方、ユーザデータについては、圧縮しているので、ストレージシステム10において使用する記憶容量を抑えることができる。また、中間パリティは、新パリティの生成に用いられるが、新パリティがフラッシュチップ166に格納されると不要になるデータである。バッファ上に中間パリティが格納され、新パリティが生成されれば、中間パリティはフラッシュチップ166に格納される必要はない。このため、中間パリティを圧縮する必要性は小さく、パッケージプロセッサ163は、中間パリティを圧縮しないことで、圧縮処理によるオーバーヘッドを軽減することができる。
 本実施例では、データを圧縮する場合のランダムライトにおけるパリティ生成処理に対して効果的である。例えば、ランダムライトが比較的多いOLTPでは、データ圧縮によるコスト削減効果と、圧縮による性能低下抑制を両立できる。
 図4は、実施例1に係るランダムライト時のパリティ生成処理のフローチャートである。
 ランダムライト時のパリティ生成処理は、MP121によってCM131に格納されたホスト30から転送されたライトデータをFMPK160のようなストレージデバイスに格納する際に、データの更新に応じて必要となるパリティの生成を行うために実行される。
 パリティ生成処理では、MP121は、CM131上からパリティの生成を実施していないライトデータ(新データ)を検出する(S41)。次に、MP121は、新データをFMPK160に転送するためにBEPK140のBuffer143に領域を確保し、そこに新データを格納する(S42)。次に、MP121は、新データに対応する更新前のデータ(旧データ)を格納しているFMPK160(データFMPK)に対してXDWRITEコマンドを実行する(S43)。これにより、XDWRITEコマンドを受領したデータFMPKは、XDWRITE処理(図5参照)を実行して、旧データと新データとを用いてXOR演算を行って、パリティを生成するための中間データを生成し、FMPK160のBuffer161に格納する。なお、XDWRITE処理の詳細については後述する。
 次に、MP121は、FMPK160から中間データを取得するために、Buffer143に領域を確保する(S44)。次に、MP121は、データFMPKに対してXDREADコマンドを実行する(S45)。これにより、XDREADコマンドを受領したデータFMPKは、XDREAD処理(図6参照)を実行して、中間データをBEPK140に送信する。これにより、BEPK140のBuffer143に中間データが格納されることとなる。なお、XDREAD処理の詳細については後述する。
 次に、MP121は、新データに対応するストライプ列のパリティを格納しているFMPK160(パリティFMPK)に対してXPWRITEコマンドを発行し、Buffer143に格納されている中間データを送信し(S46)、パリティ生成処理を終了する。なお、XPWRITEコマンドを受領したパリティFMPKでは、中間データに基づいてパリティを生成するXPWRITE処理(図7参照)が実行される。XPWRITE処理についての詳細は、後述する。
 図5は、実施例1に係るXDWRITE処理のフローチャートである。
 XDWRITE処理は、FMPK160がMP121からXDWRITEコマンドを受領した際に実行される。
 XDWRITE処理では、FMPK160がMP121からXDWRITEコマンドを受領する(S51)と、FMPK160のパッケージプロセッサ163は、MP121によって転送されたライトデータ(新データ)をBuffer161に格納する(S52)。次に、パッケージプロセッサ163はXDWRITEコマンドからコマンドの対象のデータ(新データ)は、ユーザデータであると判定して、フラッシュチップ166に格納されている、ライトデータに対応する古いデータ(旧データ)を圧縮させたデータを、圧縮・伸張回路164により伸張する(S53)。次に、パッケージプロセッサ163は伸張した旧データをBuffer161に格納する(S54)。次に、パッケージプロセッサ163は、新データと旧データとをXOR演算して中間データを生成する(S55)。次に、パッケージプロセッサ163は、XDWRITEコマンドからコマンドの対象のデータ(新データ)はユーザデータと判定し、圧縮・伸張回路164により、新データを圧縮する(S56)。次に、パッケージプロセッサ163は、圧縮された新データをフラッシュチップ166に格納する(S57)。これにより、ユーザデータについては、フラッシュチップ166に圧縮されて格納されることとなる。なお、データの圧縮・伸張処理は、専用の圧縮・伸張回路164を用いずに、パッケージプロセッサ163が行っても良い。また、XOR演算を、専用の回路を用いて実施するようにしても良い。
 図6は、実施例1に係るXDREAD処理のフローチャートである。
 XDREAD処理は、FMPK16が、MP121からXDREADコマンドを受領した際に実行される。
 FMPK160がXDREADコマンドを受領すると(S61)、FMPK160のパッケージプロセッサ163は、XDREADコマンドにより指定されたアドレスに対応するBuffer161の領域に中間データがあるか否かを判定する(S62)。この結果、中間データが存在する場合(S62:Yes)には、パッケージプロセッサ163は、Buffer161の中間データをMP121に応答し、XDREAD処理を終了する。一方、中間データが存在しない場合(S62:No)には、異常終了応答をMP121に応答し(S64)、XDREAD処理を終了する。
 図7は、実施例1に係るXPWRITE処理のフローチャートである。
 XPWRITE処理は、FMPK160が、MP121からXPWRITEコマンドを受領した際に実行される。
 FMPK160は、XPWRITEコマンドを受領すると(S71)、FMPK160のパッケージプロセッサ163は、MP121により転送された中間データをBuffer161に格納する(S72)。次に、受領したコマンドがXPWRITEコマンドであることから、入出力対象が冗長コードであり、伸張する必要がないので、パッケージプロセッサ163は、フラッシュチップ166から古い冗長コード(旧パリティ)を伸張することなく、Buffer161に格納する(S73)。次に、パッケージプロセッサ163は、中間データと旧パリティとをXOR演算することで新パリティを生成する(S74)。次に、受領したコマンドがXPWRITEコマンドであることから、入出力対象が冗長コードであり、圧縮する必要がないので、パッケージプロセッサ163は、生成した新パリティを圧縮せずに、フラッシュチップ166に格納する(S75)。
 本実施例によると、ストレージコントローラ11から発行されたコマンドの種別からストレージデバイス(本実施例ではFMPK160)が、入出力対象のデータが冗長コードであるか否かを把握でき、冗長コードである場合には、入出力対象のデータを非圧縮で記憶媒体に格納することができる。このため、ランダムライト時のストレージデバイスの処理負荷を軽減でき、ランダムライト性能を向上させることができる。また、冗長コードをストレージデバイスが作成するので、ストレージコントローラ11の処理負荷を低減することができる。
 なお、実施例1では、ストレージデバイスが実行する付加処理として、圧縮・伸張処理を例に挙げているが、付加処理はこれに限られず、入出力データの状態を変更する処理や、入出力対象のデータに所定のデータ(保証コード等)を付加する処理でもよい。例えば、付加処理は、入力対象のデータを暗号化する暗号化処理であってもよい。また、付加処理を実行するか否かを判定する処理を実行するか否かを、管理計算機20からの指示によりON/OFFするようにしてもよい。
 次に、実施例2に係る計算機システムについて説明する。なお、実施例2に係る計算機システムは、図1に示す実施例1に係る計算機システムと基本的には同様である。実施例2に係る計算機システムでは、冗長コードであるか否かを判定するための判定情報をストレージコントローラ11がストレージデバイス(例えば、FMPK16)に転送し、ストレージコントローラ11から転送された判定情報をもとにストレージデバイスは冗長コードであるか否かを判定する。
 図8は、実施例2に係るパリティ判定情報登録処理の概要を示す図である。
 パリティ判定情報登録処理は、例えば、ホスト30によりIO処理が実行される前に、ストレージシステム10で実行される。パリティ判定情報124(図9参照)は、例えば、予め作成されてLM122に格納される。
 ストレージコントローラ11のMPPK120のMP121は、LM122に格納されているパリティ判定情報124を各FMPK160に転送する。なお、各FMPK160に送信されるパリティ判定情報124は、そのFMPK160で管理している領域についての情報を含んでいれば良い。FMPK160は、転送されたパリティ判定情報124をパッケージメモリ162に格納する(図8(1))。パリティ判定情報124は、FMPK160に対してIOコマンドが発行された際に、IOコマンドの対象のデータが冗長コードであるか否かを判定するために利用される。
 図9は、実施例2に係るパリティ判定情報の一例の構成図である。
 パリティ判定情報124は、論理ボリューム(論理VOL)の各ストライプのアドレス毎に、このストライプのデータが冗長コードであるか否かを示す情報である。パリティ判定情報124は、アドレスフィールド124aと、属性フィールド124bとを含む。アドレスフィールド124aには、論理ボリュームの先頭から終端までの固定サイズ(ストライプ)毎の先頭アドレスが格納される。なお、アドレスフィールド124aに、ストライプの開始アドレスと終了アドレスとを格納しても良い。属性フィールド124bには、アドレスフィールド124aの先頭アドレスに対応するストライプに格納されているデータが冗長コードであるか否かを示す値が格納される。例えば、ストライプに格納されているデータがユーザデータである場合には、属性フィールド124bには、「データ」が格納され、ストライプに格納されているデータが冗長コードである場合には、属性フィールド124bには、「パリティ」が格納される。
 パリティ判定情報としては、論理VOL全体のストライプについてのエントリを持つのではなく、論理VOLの一部の領域の複数のストライプについてのエントリと、それらの繰り返し数を持つようにしても良い。
 また、ストレージコントローラ11からFMPK160にパリティ判定情報124を送信するようにしていたが、ストレージコントローラ11からRAID構成とRAID構成におけるドライブ位置とを通知し、FMPK160がRAID構成と、ドライブ位置とに基づいて、パリティ判定情報124を生成するようにしても良い。また、予めストレージコントローラ11からFMPK160にパリティ判定情報124を登録するのではなく、IOコマンドの発行時に、IOコマンドに対して、もしくはIOコマンドの対象とする転送データに対して、パリティ判定情報124(又は、そのうちのIOコマンドの対象に対応する領域の情報のみ)を埋め込んで、FMPK160に通知するようにしても良い。
 図10は、実施例2に係るRMWパリティ生成処理の概要を示す図である。
 ストレージシステム10のMP121は、ホスト30から受信したライトデータ(以下、新D1)を、FEPK100を介してCMPK130のCM131に格納する(図10(1))。MP121は、新D1と同一アドレスに格納されている古いデータ(以下、旧D1)をリードするREADコマンドをFMPK160に発行し、旧D1をリードする(図10(2)、(3)、(4))。具体的には、READコマンドを受領したFMPK160は、パッケージメモリ162に格納されたパリティ判定情報124に基づいて、旧D1が冗長コードであるか否かを判定する。ここでは、旧D1は冗長コードではないと判定されるため、FMPK160は、旧D1は圧縮されてフラッシュチップ166に格納されていると判定する。ここで、旧D1を圧縮したデータを旧cD1とする。FMPK160は、フラッシュチップ166に格納されている旧cD1を圧縮・伸張回路164により伸張して旧D1を取得し(図10(2))、旧D1をBuffer161に格納し(図10(3))、READコマンドで指定されたBEPK140のBuffer143に転送する(図10(4))。
 次に、MP121は、旧D1に対応する冗長コード(以下、旧P)をリードするREADコマンドを、旧Pを格納するFMPK160に発行し、旧Pをリードする(図10(5)、(6))。具体的には、READコマンドを受領したFMPK160は、パリティ判定情報124から旧Pが冗長コードであると判定し、旧Pは圧縮されずにフラッシュチップ166に格納されていると判定する。FMPK160は、フラッシュチップ166から旧Pを伸張することなくBuffer161に格納し(図10(5))、READコマンドで指定されたBEPK140のBuffer143に転送する(図10(6))。
 次に、MP121は、FMPK160によりBuffer143に格納されたデータ(旧D、旧P)をCMPK130に読み込み(図10(7))、新D1と、旧D1と、旧PとをXOR演算することで、新D1に対応する新しい冗長コード(新P)を生成し、CMPK130に格納する(図10(8))。
 また、MP121は、CMPK130の新PをBEPK140のBuffer143に転送し(図10(9))、FMPK160にWRITEコマンドを発行する(図10(10))。WRITEコマンドを受領したFMPK160は、新PをBuffer161に格納する。次いで、FMPK160は、パリティ判定情報124から新Pは冗長コードであると判定して、圧縮せずにフラッシュチップ166に格納すると判定する。FMPK160は、新PをBuffer161から取り出し、圧縮せずにフラッシュチップ166に格納する(図10(11))。
 この処理によると、冗長コードである旧Pを読み出す際に伸張せずに済み、ストレージデバイスの処理負荷を軽減できるとともに、新Pを書き込む際に、新Pを圧縮せずに済み、ストレージデバイスの処理負荷を軽減することができる。
 図11は、実施例2に係る全ストライプパリティ生成処理の概要を示す図である。
 全ストライプパリティ生成処理は、CMPK130にストライプ列の全てのデータが格納されている場合に実行される冗長コードを生成する処理である。
 ストレージシステム10のMP121は、ホスト30から受信したライトデータ(以下、新D1~新Dnという)を、FEPK100を介して、CMPK130のCM131に格納する(図11(1))。MP121は、同一のストライプ列を構成する全てのデータ(新D1~新Dn)を用いてXOR演算を実施することでライトデータに対応する冗長コード(新P)を生成し、CMPK130に格納する(図11(2))。
 MP121は、BEPK140を介してFMPK160に対して、新PをWRITEするWRITEコマンドを発行する(図11(3))。WRITEコマンドを受領したFMPK160は、Buffer161に新Pを格納する。FMPK160は、パリティ判定情報124から新Pが冗長コードであると判定し、フラッシュチップ166に新Pを圧縮せずに格納すると判定する。FMPK160は、新Pを圧縮せずにフラッシュチップ166に格納する(図11(4))。
 この処理によると、新Pを書き込む際に、新Pを圧縮せずに済み、ストレージデバイスの処理負荷を軽減することができる。
 図12は、実施例2に係るパリティ生成処理のフローチャートである。
 パリティ生成処理では、同一ストライプ列のデータが全て揃っているか否かに応じて、冗長コードの生成方法を変更する。同一ストライプ列のデータが全て揃っている場合は、図11に示す全ストライプライトパリティ生成処理を実施する。一方、同一ストライプ列のデータが揃っていない場合は、図10に示すRMWパリティ生成処理を実施する。
 パリティ生成処理では、まず、MP121がCMPK130の中からパリティ生成前のデータ(以下、新D)を検出する(S121)。次に、MP121は、新Dの属するストライプ列のデータが全てCMPK130内に格納されているかを判定する(S122)。
 この結果、CMPK130内に新Dの属するストライプ列のデータが全て揃っている場合(S122:Yes)には、MP121は、新Dに対応する冗長コード(新P)を格納する領域をCMPK130に確保する(S129)。次に、MP121はCMPK130にある新Dの属するストライプ列の全データをXOR演算することで新Pを生成し、CMPK130の確保している領域に格納する(S130)。次に、MP121は、BEPK140のBuffer143に新P用の領域を確保し、その領域に新Pを格納する(S131)。次に、MP121は、このストライプ列に対応する冗長コードを格納しているFMPK160に対して新PをWRITEするWRITEコマンドを発行する(S132)。これにより、FMPK160では、WRITE処理(図14参照)が実行され、新Pが格納されることとなる。
 一方、CMPK130内に新Dの属するストライプ列のデータが全て揃っていない場合(S122:No)には、MP121は、新Dの更新前のデータ(以下、旧D)を格納する領域をCMPK130及びBEPK140のBuffer131、143に確保する(S123)。次に、MP121は、旧Dが格納されているFMPK160に対して、旧DをREADするためのREADコマンドを発行する(S124)。これにより、FMPK160では、READ処理(図13参照)が実行され、CMPK130及びBEPK140のBuffer131、143に旧Dが格納されることとなる。
 次に、MP121は、旧Dに対応する冗長コード(以下、旧P)を格納する領域をCMPK130及びBEPK140のBuffer131、143に確保する(S125)。次に、MP121は、旧Pが格納されているFMPK160に対して、旧PをREADするためのREADコマンドを発行する(S126)。これにより、FMPK160では、READ処理(図13参照)が実行され、CMPK130及びBEPK140のBuffer131、143に旧Pが格納されることとなる。
 次に、MP121は、CMPK130に新Pを格納する領域を確保する(S127)。次に、MP121は、新Dと、旧Dと、旧PとをXOR演算することで新Pを生成し、確保している領域に格納する(S128)。次に、MP121は、BEPK140のBuffer143に新Pを格納する領域を確保する(S131)。次に、MP121はこのストライプ列に対応する冗長コードを格納しているFMPK160に対して新PをWRITEするWRITEコマンドを発行する(S132)。これにより、FMPK160では、WRITE処理(図14参照)が実行され、新Pが格納されることとなる。
 図13は、実施例2に係るREAD処理のフローチャートである。
 READ処理は、READコマンドを受領したFMPK160によって実行される処理である。
 FMPK160は、READコマンドを受領する(S141)と、パッケージメモリ162に格納しているパリティ判定情報124とREADコマンド中のREAD対象アドレスとを用いてREAD対象が冗長コード(パリティ)であるか否かを判定する(S142)。
 この結果、READ対象が冗長コードでないと判定した場合、すなわち、READ対象がデータ(ユーザデータ)である場合(S142:データ)は、FMPK160は、READ対象が冗長コードではないために、フラッシュパッケージ166には圧縮して格納されていると判定し、READ対象のデータを圧縮・伸張回路164を介して伸張する(S143)。次に、FMPK160は、伸張したREAD対象のデータをBuffer161に格納し(S144)、データをBEPK140に対して送信する(S145)。
 一方、READ対象が冗長コードであると判定した場合(S142:パリティ)には、FMPK160は、READ対象が冗長コードであるためフラッシュパッケージ166に圧縮せずに格納されていると判定し、READ対象の冗長コードをフラッシュチップ166から伸張せずにBuffer161に格納する(S144)。次に、FMPK160は、Buffer161のリード対象の冗長コードをBEPK140に対して送信する(S145)。
 このREAD処理によると、冗長コードを読み出す際に伸張せずに済み、ストレージデバイスの処理負荷を軽減できる。
 図14は、実施例2に係るWRITE処理のフローチャートである。
 WRITE処理は、WRITEコマンドを受領したFMPK160によって実行される処理である。
 まず、FMPK160は、WRITEコマンドを受領する(S151)と、WRITE対象のデータ(ユーザデータ又は冗長コード)をBuffer161に格納する(S152)。次に、FMPK160は、パッケージメモリ162に格納されているパリティ判定情報124と、WRITEコマンド中のWRITE対象のアドレスとを用いて、WRITE対象のデータが冗長コードであるか否かを判定する(S153)。
 この結果、WRITE対象が冗長コードでないと判定した場合、すなわち、WRITE対象がデータ(ユーザデータ)である場合(S153:データ)には、FMPK160は、WRITE対象は冗長コードではないためフラッシュパッケージ166に圧縮して格納さすると判定し、WRITE対象のデータを圧縮・伸張回路164を介して圧縮し(S154)、WRITE対象のデータをフラッシュチップ166へ格納する(S155)。
 一方、WRITE対象が冗長コードであると判定した場合(S153:パリティ)には、FMPK160は、WRITE対象は冗長コードであるためフラッシュパッケージ166に圧縮せずに格納すると判定し、冗長コードを圧縮せずに、フラッシュチップ166へ格納する(S155)。
 このWRITE処理によると、冗長コードを書き込む際に圧縮せずに済み、ストレージデバイスの処理負荷を軽減できる。
 図15は、実施例2に係るコレクションコピー処理の概要を示す図である。
 コレクションコピー処理は、RAIDグループを構成するストレージデバイスの一部が故障した際に、故障したストレージデバイスに格納されていたデータを復元するために実行する処理である。
 まず、MP121は、復元対象のデータ(以下、D1)を含むストライプ列のデータ(以下、D2~Dn)及び冗長コード(以下、P)をREADするためのREADコマンドを、それぞれのFMPK160に発行し、FMPK160からD2~Dn及びPを取得し、CMPK130に格納する(図15(1)乃至(5))。次に、MP121は、CMPK130に格納したデータ(D2~Dn)とPとをXOR演算することでD1を復元する(図15(6))。次に、MP121は、D1を格納させるスペア用のFMPK160に対して、D1をWRITEするためのWRITEコマンドを発行する(図15(7)、(8))。これにより、FMPK160では、WRITE処理が実行されて、D1が圧縮されてフラッシュチップ166に格納されることとなる(図15(9))。なお、コレクションコピー処理で発行されるREAD/WRITEコマンドを受領してFMPK160で実行されるREAD処理及びWRITE処理は、図13、図14に示した通りである。
 図16は、実施例2に係るコレクションコピー処理のフローチャートである。図16は、図15に示すコレクションコピー処理を実現するフローチャートである。
 まず、MP121は、スペア用のFMPK160に対してパリティ判定情報124を図8に示す方法で登録する(S161)。次に、MP121は、BEPK140のBuffer143と、CMPK130とに、ストライプ列のデータ及び冗長コードを格納する領域を確保する(S162)。次に、MP121は、故障の発生したFMPK160に格納されていたデータ(以下、D1)を除く、処理対象の或るストライプ列のデータ(以下、D2~Dn)及び冗長コード(以下、P)をREADするREADコマンドを各FMPK160に発行する(S163)。これにより、FMPK160では、READ処理(図13参照)が実行され、CMPK130及びBEPK140のBuffer131、143にD2~Dn及びPが格納されることとなる。
 次に、MP121は、D2~Dn及びPをXOR演算することで故障したFMPK160に格納されていたD1を復元する(S164)。次に、MP121は、BEPK140のBuffer143にD1を格納する領域を確保して格納する(S165)。次に、MP121は、スペア用のFMPK160に復元したD1をWRITEするためのWRITEコマンドを発行する(S166)。これにより、FMPK160では、WRITE処理(図14参照)が実行され、フラッシュチップ166にD1が格納されることとなる。
 次に、MP121は、故障したFMPK160の最後の領域のデータまで復元したか否かを判定する(S167)。この結果、最後の領域まで復元していない場合(S167:No)には、MP121は、処理対象を次の領域に変更し(S168)、処理対象の領域について、S162~S167の処理を実施する。一方、最後の領域まで復元している場合(S167:Yes)には、MP121は、コレクションコピー処理を終了する。
 本実施例では、ストレージデバイスが実行する付加処理としては、圧縮処理を例として説明していたが、付加処理としては、暗号化処理であっても良い。また、付加処理を実行するか否かを判定する処理を実行するか否かを、管理計算機20からの指示によりON/OFFするようにしてもよい。
 次に、実施例3に係る計算機システムについて説明する。なお、実施例3に係る計算機システムは、図1に示す実施例1に係る計算機システムと基本的には同様である。実施例3に係る計算機システムでは、冗長コードであるか否かを判定するための判定情報をストレージコントローラ11がストレージデバイス(例えば、FMPK16)に転送し、ストレージコントローラ11から転送された判定情報及びコマンドの種類をもとにストレージデバイスは冗長コードであるか否かを判定する。冗長コードの判定方法は、実施例1や実施例2で説明したいずれの方法でも良い。また、実施例3では、冗長コードの生成方法として、2つの方法がある。1つは、実施例1と同様に、圧縮前のデータに基づいて冗長コードを生成する方法であり、もう1つは、圧縮後のデータに基づいて冗長コードを生成する方法である。圧縮後のデータに対して冗長コードを生成するようにすると、RAIDグループを構成するストレージデバイスのいずれかに障害が発生した場合の復元処理(以下、リビルド)において、冗長コードだけでなく、データについても圧縮/伸張をすることなく、データ(正確には、フラッシュチップ166に格納させる圧縮されたデータ)の復元が可能となり、リビルド処理の高速化が可能となる。
 図17は、実施例3に係る圧縮後データを用いてパリティを生成する場合の、RMWパリティ生成処理の概要を示す図である。
 まず、MP121は、WRITEデータ(以下、新D1)に対応するストライプ列の冗長コードを格納しているFMPK160から、新D1に対応するストライプ列の古い冗長コード(旧P)が圧縮後のデータに対して作成されたものであるか否かを示すパリティ生成契機情報(生成契機情報)を取得する(図17(1)、(2))。MP121は、取得した情報に基づいて圧縮後のデータに対して作成された冗長コードであるか否かを判定する。図17の例では、旧Pは圧縮後のデータに対して作成された冗長コードであると判定される。MP121は、新D1を対象に、FMPK160に対してXDWRITEコマンドを発行する(図17(3))。このとき、MP121は、XDWRITEコマンドに対して圧縮後のデータに対して冗長コードを生成することを指示する情報を付与する(以降、圧縮後のデータに対して冗長コードを生成することを指示する情報が付与されたコマンドを、コマンド名の後ろに(RAW)を付与して記載する。)。XDWRITE(RAW)コマンドを受領したFMPK160は、新D1をBuffer161に格納する。
 次に、FMPK160は、新D1の更新前のデータ(以下、旧D1)の圧縮データ(以下、旧cD1)をフラッシュチップ166からBuffer161に格納する(図17(4))。次に、FMPK160は、圧縮・伸張回路164により新D1を圧縮して圧縮データ(新cD1)を生成し、新cD1をフラッシュチップ166に格納する(図17(5))。次に、FMPK160は、新cD1をBuffer161に格納する(図17(6))。次に、FMPK160は、新cD1と旧cD1とのサイズをあわせるためにパディング(図中pad)を入れる(図17(7))。パディングを入れたデータを生成する方法としては、予めパディング用の値(例えば、0等)を格納している所定の長さの領域に新cD1を上書きするようにして生成しても良いし、FMPK160が新cD1に対してパディング用の値を追加するように生成しても良いし、バス転送装置165などのハードウェアにより転送時に付与するようにしても良い。以降の実施例において、パディングを入れたデータを生成する処理は、いずれの方法をとっても良い。
 次に、FMPK160はパディングを入れてデータサイズをそろえた新cD1と旧cD1とのXOR演算を実施することで冗長コードを生成するための中間データ(中間cD1 )を生成する(図17(8))。次に、FMPK160は、中間cD1に対して新cD1のサイズ情報(SizecD1)を付与してBuffer161に格納する(図17(9))。サイズ情報は、データに埋め込んでも良いし、コマンドに埋め込んでも良い。また、サイズ情報は、圧縮ブロック単位毎に持つ。なお、サイズ情報を付与する代わりに、データ(新cD1)の各圧縮ブロック単位の終端に終端記号を埋め込むようにしても良い。
 次に、MP121は、FMPK160に対してXDREAD(RAW)コマンドを発行し、中間cD1をBEPK140のBuffer143に読み込む(図17(10))。次に、MP121は、D1に対応するストライプ列のパリティを格納しているFMPK160に対してXPWRITE(RAW)コマンドを発行する(図17(11))。XPWRITE(RAW)コマンドを受領したFMPK160は、XPWRITEコマンドによって転送された中間cD1、SizecD1、パリティ生成契機情報をBuffer161に格納する。
 次に、FMPK160は、旧D1に対応する冗長コード(旧P)及び冗長コードに付与されたパリティストライプ内の各データのサイズ情報(Size)をBuffer161に読み込む(図17(12))。次に、FMPK160は、中間cD1の圧縮ブロック毎にパディングを入れて旧Pとのサイズをそろえる(図17(13))。次に、FMPK160は、サイズをそろえた、中間cD1と旧PとをXOR演算することで、新D1に対応する冗長コード(以下、新P)を生成する(図17(14))。次に、FMPK160は、SizecD1に基づいて、Size内のD1に対応するサイズ情報を更新して新Pに付与し、パリティ生成契機情報として圧縮後にパリティが生成されたことを示す情報(post)を新Pに付与して、フラッシュチップ166に格納する(図17(15)、(16))。冗長コードに付与するSizeやパリティ生成契機情報は、データに埋め込んでも良いし、パッケージメモリ162などにアドレスに対応する情報として保持しても良いし、MPPK120のLM122にアドレスに対応する情報として保持しても良い。
 図18は、実施例3に係る圧縮前データを用いてパリティを生成する場合の、RMWパリティ生成処理の概要を示す図である。なお、RMWパリティ生成処理は、図3に示す実施例1のパリティ生成処理と同様な部分があるので、同様な部分については説明を省略し、差分のみを説明する。
 まず、MP121は、パリティの生成契機を判定するためにFMPK160から新D1に対応する冗長コード(旧P)のパリティ生成契機情報を取得する(図18(1)、(2))。MP121は、取得した情報に基づいて圧縮後のデータに対して作成された冗長コードであるか否かを判定する。図18の例では、旧Pは圧縮前のデータに対して作成された冗長コードであると判定される。次に、MP121は、図3の例と同様にFMPK160に対してXDWRITEコマンド、XDREADコマンドを発行して、中間D1を取得する(図18(3)~(8))。次に、MP121は、中間D1にパリティ生成契機情報(圧縮前)を付与してFMPK160に対してXPWRITEコマンドを発行する(図18(9))。XPWRITEコマンドを受領したFMPK160は、図3の例と同様に新Pを生成する(図18(10))。次に、FMPK160は、新Pにパリティ生成契機情報(圧縮前)を付与してフラッシュチップ166に格納する(図18(11)、(12))。
 図19は、実施例3に係る全ストライプパリティ生成処理の概要を示す図である。なお、実施例3に係る全ストライプパリティ生成処理は、図11に示す全ストライプパリティ生成処理と同様な部分があるので、同様な部分についての説明は省略し、差分のみを説明する。
 まず、MP121は、図11と同様に新Pを生成する(図19(1)、(2))。次に、MP121は、新D1~新DnをWRITEするWRITEコマンド(図19のWRITE(D))をFMPK160に発行することにより、FMPK160に対してWRITEする(図19(3))。次に、FMPK160は、新Pに対してパリティ生成契機情報(圧縮前:pre)を付与して、このデータをWRITEするWRITEコマンド(図19のWRITE(P))をFMPK160に発行する(図19(4))。WRITEコマンドを受領したFMPK160では、WRITE処理が実行され、フラッシュチップ166にパリティ生成契機情報が付与された新Pが格納されることとなる(図19(5))。
 図20は、実施例3に係るXDREAD/XDWRITE/XPWRITEコマンドの一例の構成図である。
 XDREAD/XDWRITE/XPWRITEコマンドのコマンド170は、コマンド種別170aと、LBA170bと、転送長170cと、パリティ生成契機170dと、圧縮ブロック数170eと、圧縮ブロックサイズ170fとを含む。コマンド種別170aは、コマンドの種別を示す。コマンド種別としては、例えば、XDREAD、XDWRITE、又はXPWRITEが設定される。LBA170bは、論理VOLの論理ブロックアドレスである。転送長170cは、コマンドにより転送するデータの長さである。パリティ生成契機170dは、圧縮後のデータに対してパリティを生成するか、圧縮前のデータに対してパリティを生成するかのいずれであるかを示すパリティ生成契機情報である。パリティ生成契機170dは、圧縮後のデータに対してパリティを生成する場合には、「圧縮後(post)」に設定され、圧縮前のデータに対してパリティを生成する場合には、「圧縮前(pre)」に設定される。圧縮ブロック数170eは、パリティ生成契機170dが「圧縮後」の時のみ有効なフィールドであり、転送するデータ中に含まれている圧縮ブロックの数を示す値である。圧縮ブロックサイズ170fは、パリティ生成契機170dが「圧縮後」の時のみ有効なフィールドであり、コマンド170は、圧縮ブロック数分だけ圧縮ブロックサイズ170fを持つ。各圧縮ブロックサイズ170は、各圧縮ブロックの圧縮後のサイズである。なお、パリティ生成契機170d、圧縮ブロック数170e、圧縮ブロックサイズ170fは、コマンドではなく、データに埋め込むようにしても良い。
 図21は、実施例3に係るパリティ生成処理のフローチャートである。なお、図12に示す実施例2に係るパリティ生成処理と同様な部分については、同一符号を付し、重複する説明を省略する。
 MP121は、パリティを生成する対象のデータの属するストライプ列のデータが全て揃っているか否かを判定する(S122)。この結果、ストライプ列のデータの全てが揃っていない場合(S122:No)には、RMWパリティ生成処理(図22参照)を実行し(S212)、処理を終了する。一方、ストライプ列のデータ全てが揃っている場合(S122:Yes)には、MP121は、図12と同様に新Pを生成し(S129~S131)、新Pにパリティ生成契機情報(圧縮前)を付与する(S211)。次に、MP121は、FMPK160に対してWRITEコマンドを発行し(S132)、処理を終了する。
 図22は、実施例3に係るRMWパリティ生成処理のフローチャートである。なお、図4に示すパリティ生成処理と同様な部分については、同一符号を付す。
 まず、MP121は、冗長コードを格納しているFMPK160からパリティ生成契機情報を取得して、パリティ生成契機がいずれであるかを判定する(S221)。
 この結果、パリティ生成契機が圧縮後の場合(S221:圧縮後)において、MP121は、FMPK160にXDWRITEコマンドを発行する(S43)。このとき、XDWRITEコマンドに、パリティ生成契機が圧縮後であることを示すパリティ生成契機情報を付与する。また、MP121は、FMPK160に、中間データをREADするためのXDREAD(RAW)コマンドを発行する(S45)。次に、MP121はREADした中間データにパリティ生成契機情報(圧縮後)を付与する(S227)。次に、MP121は、FMPK160に対してXPWRITE(RAW)コマンドを発行する(S47)。
 一方、パリティ生成契機が圧縮前の場合(S221:圧縮後)においては、MP121は、FMPK160にXDWRITEコマンドを発行する。このとき、コマンドには、パリティ生成契機が圧縮前である情報を付与する(S43)。また、MP121は、FMPK160から中間データをREADするためのXDREAD(CMP)コマンドを発行する(S45)。次に、MP121はREADした中間データにパリティ生成契機情報(圧縮前)を付与する(S222)。次に、MP121は、FMPK160に対してXPWRITE(CMP)コマンドを発行する(S47)。
 図23は、実施例3に係るXDWRITE処理のフローチャートである。なお、図5に示す実施例1に係るXDWRITE処理と同様な部分には同一符号を付し、その処理との差分を中心に説明する。
 XDWRITE処理は、FMPK160がXDWRITEコマンドを受領した場合に実行する処理であり、FMPK160は、XDWRITEコマンドを受領した場合には、そのコマンドの対象は、冗長コードではないとして処理を実行する。
 FMPK160は、XDWRITEコマンドを受領した後(S51、S52の後)に、XDWRITEコマンドの対象のデータに対するパリティ生成契機がいずれであるかを判定する(S231)。
 この結果、パリティ生成契機が圧縮前の場合(S231:圧縮前)には、FMPK160は、ステップS53~S57の処理を実行して、XDWRITE処理を終了する。
 一方、パリティ生成契機が圧縮後の場合(S231:圧縮後)には、FMPK160は圧縮・伸張回路164を介して新D1を圧縮した圧縮データ(以下、新cD1)を取得し(S232)、新cD1をフラッシュチップ166に格納する(S233)。次に、FMPK160は、新cD1をフラッシュチップ166からBuffer161に読みこむ(S234)。次に、FMPK160は、圧縮後の旧データ(旧cD1)をBuffer161に格納する(S235)。次に、FMPK160は、圧縮ブロック毎にパディングを入れて、新cD1と、旧cD1とのデータサイズをそろえる(S236)。次に、FMPK160は、サイズをそろえた新cD1及び旧cD1をXOR演算することで中間データ(以下、中間cD1)を生成する(S237)。次に、FMPK160は、新cD1内の各圧縮ブロックの圧縮後のサイズ情報を中間cD1に付与し(S238)、XDWRITE処理を終了する。
 図24は、実施例3に係るXDREAD処理のフローチャートである。なお、図6に示す実施例1に係るXDREAD処理と同様な部分には同一符号を付し、その処理との差分を中心に説明する。
 XDREAD処理は、FMPK160がXDREADコマンドを受領した場合に実行する処理であり、FMPK160は、XDREADコマンドを受領した場合には、そのコマンドの対象は、冗長コードではないとして処理を実行する。
 XDREAD対象の中間データがあった場合(S62:Yes)には、FMPK160は、パリティ生成契機がいずれであるかを判定する(S241)。
 この結果、パリティ生成契機が圧縮前の場合(S241:圧縮前)には、FMPK160は、ステップS63の処理を実行して、XDREAD処理を終了する。一方、パリティ生成契機が圧縮後の場合(S241:圧縮後)には、FMPK160は、Buffer161の中間データと、中間データに付与されたサイズ情報とを共に、MP121に送信する(S242)。
 図25は、実施例3に係るXPWRITE処理のフローチャートである。なお、図7に示す実施例1に係るXPWRITE処理と同様な部分には同一符号を付し、ここでは、その処理との差分を中心に説明する。
 XPWRITE処理は、FMPK160がXPWRITEコマンドを受領した場合に実行する処理であり、FMPK160は、XPWRITEコマンドを受領した場合には、そのコマンドの対象は、冗長コードであるとして処理を実行する。
 ステップS73の次に、FMPK160は、XPWRITEコマンドのパリティ生成契機がいずれであるかを判定する(S251)。
 この結果、パリティ生成契機が圧縮前であると判定した場合(S251:圧縮前)には、FMPK160は、旧パリティのパリティ生成契機がいずれであるかを判定する(S259)。この結果、旧パリティのパリティ生成契機が圧縮後であると判定した場合(S259:圧縮後)には、パリティ生成契機の整合性が取れていないので、FMPK160は、MP121に異常終了を応答し(S253)、処理を終了する。
 一方、旧パリティのパリティ生成契機が圧縮前であると判定した場合(S259:圧縮前)には、FMPK160は、中間データと、旧パリティとのXOR演算をすることにより新Pを生成し(S260)、新Pにパリティ生成契機(圧縮前)を付与し(S261)、新Pをフラッシュチップ166に格納し(S262)、処理を終了する。
 ステップS251で、パリティ生成契機が圧縮後であると判定した場合(S251:圧縮後)には、FMPK160は、旧パリティのパリティ生成契機がいずれであるかを判定する(S252)。この結果、旧パリティのパリティ生成契機が圧縮前であると判定した場合(S252:圧縮前)には、パリティ生成契機の整合性が取れていないので、FMPK160は、MP121に異常終了を応答し(S253)、処理を終了する。
 一方、旧パリティのパリティ生成契機が圧縮後であると判定した場合(S252:圧縮後)には、FMPK160は、サイズ情報から中間データの圧縮ブロック毎にパディングを実施する(S254)。次に、FMPK160は、パディングを実施した中間データと、旧PとをXOR演算することで新Pを生成する(S255)。次に、FMPK160は、中間データに付与されたサイズ情報に基づいて、旧Pに付与して格納していたサイズ情報を新Pに対応するサイズ情報に更新する(S256)。次に、FMPK160は、新Pにパリティ生成契機(圧縮後)を付与し(S257)、フラッシュチップ166に格納し(S258)、処理を終了する。
 この処理によると、パリティ生成契機に従って、各データのパリティを圧縮前のデータに基づいて生成することと、圧縮後のデータに基づいて生成することとを切り替えて実行することができるので、パリティ生成契機を各データの性質に応じて決定することにより、適切な契機におけるパリティを生成することができる。
 図26は、実施例3に係る圧縮前データを用いて生成されたパリティを持つストライプ列のコレクションコピー処理の概要を示す図である。なお、このコレクションコピー処理は、図15に示す実施例2のコレクションコピー処理と同様な部分があるので、同様な部分については説明を省略し、差分のみを説明する。
 MP121は、FMPK160から処理対象のストライプ列の冗長コードのパリティ生成契機情報を取得し(図26(1)、(2))、このストライプ列においては、圧縮前にパリティの生成を実施したと判定する。次に、MP121は、図15と同様にD1を復元し(図26(3))、スペアのFMPK160に格納する(図26(4))。このとき、READ/WRITEコマンドには、パリティ生成契機情報(圧縮前)を付与する。ここで、パリティ生成契機情報(圧縮前)が付与されたコマンドを、コマンド名の後ろに(CMP)を付与して記載する。
 図27は、実施例3に係る圧縮後データを用いて生成されたパリティを持つストライプ列のコレクションコピー処理の概要を示す図である。なお、このコレクションコピー処理は、図26に示すコレクションコピー処理と同様な部分があるので、同様な部分については説明を省略し、差分のみを説明する。
 MP121は、FMPK161からパリティ生成契機を取得して、圧縮後にパリティ生成を実施したと判定する(図27(1)、(2))。次に、MP121は、FMPK160からストライプ内のデータの圧縮後のサイズ情報を取得する(図27(3))。次に、MP121は、各FMPK160からデータ(D2~Dn)と冗長化コード(P)とをREADするREADコマンドを発行し、それらを取得する(図27(4)~(8))。このとき、MP121は、READコマンドに圧縮要否情報(圧縮不要)を付与する。READコマンド(CMP)を受領したFMPK160は、圧縮要否情報に基づいてフラッシュチップ166内に格納されている圧縮後のデータを伸張することなくMP121に応答する。
 次に、MP121はサイズ情報に基づいて圧縮後のデータの各圧縮ブロックにパディングを入れてデータサイズをそろえる(図27(9))。次に、MP121は、パディングを入れた各データと、PとをXOR演算することで圧縮後の復元対象のデータ(cD1)にパディングが入ったデータを生成する(図27(10)。次に、MP121は、サイズ情報に基づいて、パディングをなくして、cD1を生成する(図27(11))。次に、MP121は、スペアのFMPK160に対してcD1をWRITEするWRITEコマンドを発行する(図27(12))。このとき、MP121は、WRITEコマンドに圧縮要否情報(圧縮不要)を付与する。このWRITEコマンドを受領したFMPK160は、圧縮要否情報に基づいて、cD1を、圧縮をすることなくフラッシュチップ166に格納する(図27(13))。なお、パディングを追加する/削除する処理は、MP121からFMPK160がサイズ情報を受け取って、FMPK160がそのサイズ情報に基づいて実行するようにしても良い。なお、CMPK130においては、圧縮後のデータと、圧縮前のデータとを別管理をしており、ホストから圧縮後のデータが見えないようになっている。
 図28は、実施例3に係るコレクションコピー処理のフローチャートである。なお、図16に示す実施例2に係るコレクションコピー処理と同様な部分には同一符号を付し、ここでは、その処理との差分を中心に説明する。
 MP121は、復元対象のストライプ列のパリティが格納されているFMPK160からパリティ生成契機を取得する(S281)。次に、MP121は、パリティ生成契機がいずれであるかを判定する(S282)。
 この結果、パリティ生成契機が圧縮前である場合(S282:圧縮前)には、MP121は、ステップS163~S166の処理を実行し、処理をステップS167に進める。
 一方、パリティ生成契機が圧縮後である場合(S282:圧縮後)には、MP121は、パリティを格納しているFMPK160からパリティストライプ内のデータの圧縮後のサイズ情報を取得する。(S283)。次に、MP121は、復元に必要なストライプ列内のデータ(cD2~cDn)、及び冗長コード(以下、P)をFMPK160からREADするためのREADコマンドを発行する(S284)。このとき、MP121は、READコマンドに圧縮要否情報(圧縮不要)を付与する。これにより、READコマンドを受領したFMPK160は、対象のデータ及び冗長コードをフラッシュチップ166から圧縮されたデータをそのまま読み出し、返却することとなる。従って、FMPK160では、データを伸張する処理をすることがなく、処理負荷を軽減することができる。次に、MP121は、サイズ情報に基づいて、データの圧縮ブロック毎にパディングを入れることで、cD2~cDn及びPのサイズをそろえる(S285)。
 次に、MP121は、cD2~cDn、及びPを用いて、復元対象のデータ(以下、cD1)にパディングが入っているデータを復元する(S286)。次に、MP121は、サイズ情報に基づいて復元したデータからパディングを削除して、復元対象のcD1を生成する(S287)。次に、MP121は、BEPK140にcD1用の領域を確保して格納し(S288)、スペア用のFMPK160に対してcD1をWRITEするWRITEコマンドを発行する(S289)。このとき、MP121は、WRITEコマンドに圧縮情報(圧縮不要)を付与する。これにより、WRITEコマンドを受領したFMPK160は、cD1を圧縮することなくフラッシュチップ166に格納する。これにより、MP121は、圧縮処理を行うことがなく、処理負荷が軽減される。その後、MP121は、処理をステップS167に進める。
 このコレクションコピー処理では、復元対象のデータに対するパリティ生成契機が圧縮後である場合には、パリティだけでなく、データについてもFMPK160で圧縮/伸張をすることなく、復元対象のデータ(厳密には、その復元対象のデータの圧縮データ)をフラッシュチップ166に復元させることができ、FMPK160の処理負荷が軽減し、リビルド処理を高速化することができる。
 図29は、実施例3に係るREAD/WRITEコマンドの一例の構成図である。
 READ/WRITEコマンドのコマンド171は、コマンド種別171aと、LBA171bと、転送長171cと、圧縮実施要否171dとを含む。コマンド種別171aは、コマンドの種別を示す。コマンド種別としては、例えば、READ、WRITEが設定される。LBA171bは、論理VOLの論理ブロックアドレスである。転送長171cは、コマンドにより転送するデータの長さである。圧縮実施要否171dは、READ/WRITE対象のデータに対してFMPK160内で圧縮/伸張処理を実施するか否かを示す情報である。圧縮実施要否171dの値が、実施要の場合は、FMPK160は、その内部で圧縮/伸張処理を実施してREAD/WRITEを実施する。ただし、FMPK160がパリティ判定情報124からREAD/WRITE対象が冗長コードであると判定した場合は、圧縮実施要否171dの値が実施要であってもFMPK160内で圧縮/伸張処理を実施することなくREAD/WRITE処理を実施する。また、圧縮実施要否171dの値が実施不要の場合は、FMPK160は、その内部で圧縮/伸張処理を実施することなくREAD/WRITE処理を実施する。
 図30は、実施例3に係るREAD処理のフローチャートである。なお、図13に示す実施例2に係るREAD処理と同様な部分には同一符号を付し、ここでは、その処理との差分を中心に説明する。
 FMPK160は、READコマンドを受領する(S141)と、圧縮実施要否171dがいずれであるかを判定する(S301)。
 この結果、圧縮実施要否171dが実施要である場合(S301:実施要)には、FMPK160は、図13と同様に、ステップS142~S145の処理を実行する。
 一方、圧縮実施要否171dが実施不要である場合(S301:実施不要)には、FMPK160は、フラッシュチップ166に格納されているREAD対象の圧縮後のデータを伸張することなくBuffer161に格納する(S144)。次に、FMPK160は、READ対象のデータをBEPK140に送信し(S145)、READ処理を終了する。
 図31は、実施例3に係るWRITE処理のフローチャートである。なお、図14に示す実施例2に係るWRITE処理と同様な部分には同一符号を付し、ここでは、その処理との差分を中心に説明する。
 FMPK160は、WRITEコマンドを受領する(S151)と、WRITE対象をBuffer161に受領し(S152)し、圧縮実施要否171dがいずれであるかを判定する(S311)。
 この結果、圧縮実施要否171dが実施要である場合(S311:実施要)には、FMPK160は、図14と同様に、ステップS153~S155の処理を実行する。
 一方、圧縮実施要否171dが実施不要である場合(S311:実施不要)には、FMPK160は、Buffer161に格納されているWRITE対象のデータを圧縮することなくフラッシュチップ166に格納する(S155)。
 本実施例では、ストレージデバイスが実行する付加処理としては、圧縮処理を例として説明していたが、付加処理としては、暗号化処理であっても良い。付加処理を暗号化処理とする場合は、圧縮処理と異なり、データに対する処理実行後のデータサイズは変わらないため、上記したようなサイズ情報の保持、及びデータサイズをそろえる処理(パディング処理)は不要である。また、付加処理を実行するか否かを判定する処理を実行するか否かを、管理計算機20からの指示によりON/OFFするようにしてもよい。
 次に、実施例4に係る計算機システムについて説明する。なお、実施例4に係る計算機システムは、図1に示す実施例1に係る計算機システムと基本的には同様である。実施例4に係る計算機システムでは、圧縮処理の機能や暗号化処理の機能といった付加処理の機能を有するストレージデバイス(例えば、FMPK160)が上位装置(例えば、ストレージコントローラ11)から通知された情報に基づいて、付加処理の実施又は未実施を制御する。これにより、ストレージデバイスは、例えば、所定の領域に格納するデータのみに対して付加処理を未実施とするようにすることができ、ストレージデバイスのIO処理性能を向上させることができる。ここで、ストレージデバイスの付加処理としては、圧縮処理や暗号化処理だけでなく、例えば、スナップショットの取得処理等であっても良い。
 また、上位装置から通知される情報は、実施例1乃至3のように、IO対象がパリティであるか否かを示す情報であっても良く、例えば、サーバで動作するアプリケーションプログラムの動作や運用に基づいて生成される、所定の領域のデータに対する付加処理の実施が不要であることを示す情報であっても良く、要は、付加処理の実施/未実施を判定可能な情報であれば良い。
 図32は、実施例4に係る機能実施判定情報登録処理の概要を図である。なお、この機能実施判定情報登録処理は、図8に示すパリティ判定情報登録処理と同様な部分があるので、同様な部分については説明を省略し、差分のみを説明する。なお、図32に示す機能実施判定情報登録処理では、図8に示すパリティ判定情報登録処理のパリティ判定情報124に代えて機能実施判定情報125をFMPK166に登録するようになっている(図32(1))となっている。
 機能実施判定情報125は、判定情報の一例であり、例えば、論理VOLの固定サイズの単位領域毎における付加処理を実施するか否かを示す情報(機能実施要否情報)である。FMPK160は、機能実施判定情報125に基づいて、IO処理の際に機能実施要否を判定し、付加処理を実施するか否かを判定する。機能実施判定情報125は、例えば、論理VOLの全体の各単位領域についての機能実施要否情報を保持しても良く、特定サイズ内の各単位領域について機能実施要否情報と、その特定サイズについての繰り返し数とを持つようにしても良い。また、機能実施判定情報125は、予めFMPK160に登録するのではなく、IO毎にコマンド中もしくはコマンドに対応するデータ中に埋め込むようにして、FMPK160に通知するようにしても良い。
 図33は、実施例4に係るコマンド処理の概要を示す図である。
 MP121は、BEPK140を介してFMPK160に対してコマンドを発行する(図33(1)、(2))。これに対して、FMPK160は、コマンドを受領し、コマンド中のアドレス情報と、機能実施判定情報125とに基づいて、コマンドによる入出力対象のデータ(図33のD1又はD2)について、ドライブ機能部167による所定の付加処理の実施要否の判定を行う(図33(3)、(4))。ドライブ機能部167は、所定の付加処理を実施する専用の回路であっても良いし、FMPK160のパッケージプロセッサ163により構成されても良い。
 FMPK160は、付加処理の実施が不要であると判定した場合(図33中D1のケース)には、ドライブ機能部167による付加処理を実行することなくフラッシュチップ166にD1を格納する(図33(5))。
 一方、FMPK160は、付加処理の実施が必要であると判定した場合(図33中D2のケース)には、ドライブ機能部167によりD2に関する所定の付加処理を実行した後、付加処理を実行した後のデータをフラッシュチップ166に格納する(図33(6))。
 なお、図33では、フラッシュチップ166にデータを書き込む際の処理の概要について説明したが、フラッシュチップ166からデータを読み出す際には、書き込む際の処理に対応する処理を行えば良い。具体的には、FMPK160は、付加処理の実施が不要であると判定した場合(D1を読み出すケース)には、フラッシュチップ160から付加処理を実行しないでそのままデータを読み出すようにし、付加処理の実施が必要であると判定した場合(D2を読み出すケース)には、フラッシュチップ160のデータに対してドライブ機能部167による付加処理を実行して読み出すようにすれば良い。
 図34は、実施例4に係るコマンド処理のフローチャートである。
 コマンド処理は、ストレージコントローラ11から発行されたコマンドを受領したFMPK160が実行する処理である。
 FMPK160は、コマンドを受領する(S341)と、コマンドの対象のアドレス情報、及び機能実施判定情報125とに基づいて、そのアドレス情報が示すアドレスのデータに対して、所定の付加処理を実施するか否か(機能実施要否)を判定する(S342)。
 この結果、所定の付加処理を実施する必要があると判定した場合(S342:実施要)には、FMPK160は、コマンドの対象のデータに対してドライブ機能部167により、所定の付加処理を実施し(S343)、コマンドに対応する処理(例えば、データのIO処理)を実施し(S344)、コマンド処理を終了する。
 一方、所定の付加処理を実施する必要がないと判定した場合(S342:実施不要)には、FMPK160は、ドライブ機能部167による付加処理は行わずに、コマンドに対応する処理(例えば、データのIO処理)を実施する(S344)。
 この処理によると、FMPK160は、付加処理を実行する必要がないデータに対しては、付加処理を実行せずに、コマンドに対応する処理のみを実行するので、FMPK160における処理負荷を軽減することができる。
 以上、本発明の幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
 30…ホスト計算機 10…ストレージシステム 11…ストレージコントローラ 160…FMPK 166…フラッシュチップ。

Claims (15)

  1.  データを格納する記憶媒体と、前記データに対して前記データの状態の変更を伴う付加処理を実行するデバイスコントローラと、を有するストレージデバイスと、
     前記ストレージデバイスへのデータの入出力を制御するストレージコントローラと
    を備え、
     前記ストレージコントローラは、前記ストレージデバイスに対して、入出力対象のデータに関する入出力処理に伴って、前記デバイスコントローラが前記付加処理を実行するか否かの判断に利用可能な判断情報を送信し、
     前記デバイスコントローラは、前記判断情報に基づいて、前記入出力対象のデータに対する前記付加処理の実行を制御する
    ストレージシステム。
  2.  前記デバイスコントローラは、ホスト計算機が利用するユーザデータと、前記ユーザデータに基づいて算出される、前記ユーザデータを復元するための冗長コードとを格納し、
     前記判断情報は、入出力対象のデータが前記ユーザデータであるか、前記冗長コードであるかを特定可能な情報を含み、
     前記デバイスコントローラは、前記判断情報に基づいて、入出力対象のデータが前記ユーザデータであると特定した場合には、前記入出力対象のデータに対して前記付加処理を伴う入出力処理を実行し、前記入出力対象のデータが前記冗長コードであると特定した場合には、前記付加処理を伴わない入出力処理を実行する
    請求項1に記載のストレージシステム。
  3.  前記付加処理は、前記入出力対象のデータを圧縮又は伸張する処理である
    請求項1に記載のストレージシステム。
  4.  前記デバイスコントローラは、前記ストレージシステムに対する入力対象のユーザデータに対応する冗長コードを生成する
    請求項2に記載のストレージシステム。
  5.  前記付加処理は、前記入出力対象のデータを圧縮又は伸張する処理であり、
     前記ストレージコントローラ又は前記デバイスコントローラは、圧縮をする前の前記ユーザデータに対応する冗長コードを生成する
    請求項2に記載のストレージシステム。
  6.  前記付加処理は、前記入出力対象のデータを圧縮又は伸張する処理であり、
     前記ストレージコントローラ又は前記デバイスコントローラは、前記ユーザデータに対して圧縮を行った後の圧縮ユーザデータに対応する冗長コードを生成する
    請求項2に記載のストレージシステム。
  7.  前記ストレージコントローラ又は前記デバイスコントローラは、前記ユーザデータに対する冗長コードが、圧縮を行った後の圧縮ユーザデータに対応する冗長コードであるか、圧縮を行う前のユーザデータについての冗長コードであるかを示す生成契機情報を管理し、
     前記ストレージコントローラ又は前記デバイスコントローラは、前記生成契機情報に基づいて、前記ユーザデータに対応する冗長コードの生成を制御する
    請求項2に記載のストレージシステム。
  8.  前記ストレージコントローラが圧縮後の圧縮ユーザデータに対応する冗長コードを用いて、前記圧縮ユーザデータを復元する際に、
     前記デバイスコントローラは、
     前記圧縮ユーザデータの復元に利用する他の圧縮ユーザデータ又は冗長コードを伸張することなく前記ストレージコントローラに送信し、
     前記ストレージコントローラは、
     前記他の圧縮ユーザデータ及び前記冗長コードに基づいて、復元対象の前記圧縮ユーザデータを復元して前記ストレージデバイスに送信し、
     前記デバイスコントローラは、
     復元された前記圧縮ユーザデータを圧縮することなく格納する
    請求項6に記載のストレージシステム。
  9.  前記記憶媒体が、フラッシュメモリである、
    請求項1に記載のストレージシステム。
  10.  データを格納する記憶デバイスと、前記データに対して前記データの状態の変更を伴う付加処理を実行するデバイスコントローラと、を有するストレージデバイスと、
     前記ストレージデバイスへのデータの入出力を制御するストレージコントローラと
    を備えるストレージシステムの記憶制御方法であって、
     前記ストレージコントローラが、前記ストレージデバイスに対して、入出力対象のデータに関する入出力処理に伴って所定の付加処理を実行するか否かの判断に利用可能な判断情報を送信し、
     前記デバイスコントローラが、前記判断情報に基づいて、前記入出力対象のデータに対する前記入出力処理に伴う前記付加処理の実行を制御する
    記憶制御方法。
  11.  前記デバイスコントローラは、ホスト計算機が利用するユーザデータと、前記ユーザデータに基づいて算出される、前記ユーザデータを復元するための冗長コードとを格納し、
     前記判断情報は、入出力対象のデータが前記ユーザデータであるか、前記冗長コードであるかを特定可能な情報を含み、
     前記デバイスコントローラが、前記判断情報に基づいて、入出力対象のデータが前記ユーザデータであると特定した場合には、前記入出力対象のデータに対して前記付加処理を伴う入出力処理を実行し、前記入出力対象のデータが前記冗長コードであると特定した場合には、前記付加処理を伴わない入出力処理を実行する
    請求項10に記載の記憶制御方法。
  12.  前記付加処理は、前記入出力対象のデータを圧縮又は伸張する処理である
    請求項10に記載の記憶制御方法。
  13.  前記デバイスコントローラが、前記ストレージシステムに対する入力対象のユーザデータに対応する冗長コードを生成する
    請求項11に記載の記憶制御方法。
  14.  前記付加処理は、前記入出力対象のデータを圧縮又は伸張する処理であり、
     前記ストレージコントローラ又は前記デバイスコントローラが、圧縮をする前の前記ユーザデータに対応する冗長コードを生成する
    請求項11に記載の記憶制御方法。
  15.  前記付加処理は、前記入出力対象のデータを圧縮又は伸張する処理であり、
     前記ストレージコントローラ又は前記デバイスコントローラが、前記ユーザデータに対して圧縮を行った後の圧縮ユーザデータに対応する冗長コードを生成する
    請求項11に記載の記憶制御方法。
PCT/JP2013/061485 2013-04-18 2013-04-18 ストレージシステム及び記憶制御方法 WO2014170984A1 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US14/241,784 US9122399B2 (en) 2013-04-18 2013-04-18 Storage system and storage control method
PCT/JP2013/061485 WO2014170984A1 (ja) 2013-04-18 2013-04-18 ストレージシステム及び記憶制御方法
US14/828,912 US9465561B2 (en) 2013-04-18 2015-08-18 Storage system and storage control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/061485 WO2014170984A1 (ja) 2013-04-18 2013-04-18 ストレージシステム及び記憶制御方法

Related Child Applications (2)

Application Number Title Priority Date Filing Date
US14/241,784 A-371-Of-International US9122399B2 (en) 2013-04-18 2013-04-18 Storage system and storage control method
US14/828,912 Continuation US9465561B2 (en) 2013-04-18 2015-08-18 Storage system and storage control method

Publications (1)

Publication Number Publication Date
WO2014170984A1 true WO2014170984A1 (ja) 2014-10-23

Family

ID=51729924

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2013/061485 WO2014170984A1 (ja) 2013-04-18 2013-04-18 ストレージシステム及び記憶制御方法

Country Status (2)

Country Link
US (2) US9122399B2 (ja)
WO (1) WO2014170984A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109313593A (zh) * 2016-09-16 2019-02-05 株式会社日立制作所 存储系统

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016017002A1 (ja) * 2014-07-31 2016-02-04 株式会社日立製作所 ストレージシステム
US9678665B2 (en) * 2015-03-06 2017-06-13 Western Digital Technologies, Inc. Methods and systems for memory page allocation
KR101676792B1 (ko) * 2015-06-01 2016-11-16 삼성전자주식회사 데이터를 효율적으로 임베디드 압축 하기 위한 방법, 장치 및 컴퓨터 판독 가능한 기록 매체
US10168939B2 (en) * 2015-11-24 2019-01-01 International Business Machines Corporation Reading records from a tape medium
CN106919617B (zh) * 2015-12-25 2020-09-04 北京奇虎科技有限公司 一种压缩存储方法和装置
US10459638B2 (en) * 2016-02-22 2019-10-29 Hitachi Ltd. Computer system that generates group information and redundant code based on user data and changes the group information and redundant code based on transmission data, control method for computer system, and recording medium
US9936019B2 (en) 2016-03-16 2018-04-03 Google Llc Efficient live-migration of remotely accessed data
US10037245B2 (en) 2016-03-29 2018-07-31 International Business Machines Corporation Raid system performance enhancement using compressed data and byte addressable storage devices
US10437667B2 (en) * 2016-03-29 2019-10-08 International Business Machines Corporation Raid system performance enhancement using compressed data
KR20180040767A (ko) * 2016-10-12 2018-04-23 삼성전자주식회사 Raid 방식으로 데이터를 저장하는 스토리지 장치
CN108733309B (zh) * 2017-04-17 2021-06-11 伊姆西Ip控股有限责任公司 存储管理方法、设备和计算机可读介质
TWI656442B (zh) * 2017-11-30 2019-04-11 慧榮科技股份有限公司 用來於一記憶裝置中進行存取控制之方法以及記憶裝置及其控制器
US10592173B2 (en) 2018-01-10 2020-03-17 International Business Machines Corporation Increasing storage efficiency of a data protection technique

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008108039A (ja) * 2006-10-25 2008-05-08 Hitachi Ltd 暗号化機能を備えたストレージサブシステム
JP2009070361A (ja) * 2007-09-11 2009-04-02 Hitachi Ltd コンピュータストレージシステムにおいてデータ圧縮並びに整合性を管理する方法および装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6378038B1 (en) * 1999-03-31 2002-04-23 International Business Machines Corporation Method and system for caching data using raid level selection
US7133228B2 (en) * 2003-10-10 2006-11-07 Seagate Technology Llc Using data compression to achieve lower linear bit densities on a storage medium
JP4288486B2 (ja) * 2003-11-17 2009-07-01 日本電気株式会社 ディスクアレイ装置,raid用パリティデータ生成回路およびガロア体乗算回路
US7793167B2 (en) * 2007-08-23 2010-09-07 International Business Machines Corporation Detection and correction of dropped write errors in a data storage system
JP5404804B2 (ja) 2009-05-25 2014-02-05 株式会社日立製作所 ストレージサブシステム
US8533550B2 (en) 2010-06-29 2013-09-10 Intel Corporation Method and system to improve the performance and/or reliability of a solid-state drive

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008108039A (ja) * 2006-10-25 2008-05-08 Hitachi Ltd 暗号化機能を備えたストレージサブシステム
JP2009070361A (ja) * 2007-09-11 2009-04-02 Hitachi Ltd コンピュータストレージシステムにおいてデータ圧縮並びに整合性を管理する方法および装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109313593A (zh) * 2016-09-16 2019-02-05 株式会社日立制作所 存储系统
CN109313593B (zh) * 2016-09-16 2022-03-01 株式会社日立制作所 存储系统

Also Published As

Publication number Publication date
US9122399B2 (en) 2015-09-01
US20150355864A1 (en) 2015-12-10
US20140317340A1 (en) 2014-10-23
US9465561B2 (en) 2016-10-11

Similar Documents

Publication Publication Date Title
WO2014170984A1 (ja) ストレージシステム及び記憶制御方法
JP6328335B2 (ja) ストレージ装置及びその制御方法
JP6134857B2 (ja) 記憶デバイス、記憶デバイスを有する装置、及び記憶制御方法
US9910748B2 (en) Rebuilding process for storage array
JP5722500B2 (ja) リモートコピーシステム、及びリモートコピー制御方法
JP5937697B2 (ja) ストレージシステム
JP6007332B2 (ja) ストレージシステム及びデータライト方法
JP6429963B2 (ja) ストレージ装置及びストレージ装置の制御方法
JP2008204041A (ja) ストレージ装置及びデータ配置制御方法
JP5826949B2 (ja) ストレージ装置及びデータ管理方法
WO2015029230A1 (ja) 記憶装置及びデータ制御方法
JP6666540B2 (ja) ストレージ制御装置、及びプログラム
JP7472341B2 (ja) ストレージシステム及びストレージシステムの制御方法
JP2015114784A (ja) バックアップ制御装置及びバックアップ制御方法、ディスクアレイ装置、並びにコンピュータ・プログラム
US20130159656A1 (en) Controller, computer-readable recording medium, and apparatus
JP5829753B2 (ja) ストレージシステムおよび記憶制御方法
JP6163588B2 (ja) ストレージシステム
WO2015118680A1 (ja) ストレージ装置
WO2017212515A1 (ja) ストレージシステム、計算機、およびストレージ制御方法
US20160357479A1 (en) Storage control apparatus
WO2017061022A1 (ja) データを重複排除するシステム
US11221790B2 (en) Storage system
JP2019053485A (ja) ストレージ制御装置、ストレージ制御システム、ストレージ制御方法、及び、ストレージ制御プログラム

Legal Events

Date Code Title Description
WWE Wipo information: entry into national phase

Ref document number: 14241784

Country of ref document: US

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

Ref document number: 13882440

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

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP