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

ストレージシステム Download PDF

Info

Publication number
WO2015162758A1
WO2015162758A1 PCT/JP2014/061577 JP2014061577W WO2015162758A1 WO 2015162758 A1 WO2015162758 A1 WO 2015162758A1 JP 2014061577 W JP2014061577 W JP 2014061577W WO 2015162758 A1 WO2015162758 A1 WO 2015162758A1
Authority
WO
WIPO (PCT)
Prior art keywords
data
virtual
flash
real
package
Prior art date
Application number
PCT/JP2014/061577
Other languages
English (en)
French (fr)
Inventor
山本 彰
純司 小川
紀夫 下薗
義裕 吉井
和衛 弘中
篤志 河村
Original Assignee
株式会社日立製作所
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社日立製作所 filed Critical 株式会社日立製作所
Priority to PCT/JP2014/061577 priority Critical patent/WO2015162758A1/ja
Priority to US15/122,533 priority patent/US10089033B2/en
Publication of WO2015162758A1 publication Critical patent/WO2015162758A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0873Mapping of cache memory to specific storage devices or parts thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • G06F16/137Hash-based
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/26Using a specific storage system architecture
    • G06F2212/263Network storage, e.g. SAN or NAS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/46Caching storage objects of specific type in disk cache
    • G06F2212/466Metadata, control data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Definitions

  • the present invention relates to a deduplication technique in a storage system.
  • a logical address layer different from a physical address is provided as an address layer to be shown to a host device such as a host computer using the storage device. Accept access requests for specific addresses.
  • the physical address assigned to the logical address is changed as appropriate. In this method, even if the physical address changes, the logical address does not change, so the host device can access the data without having to be aware that the physical address of the write data has changed. You can also maintain usability.
  • a storage device using a flash memory as a storage medium is overwhelmingly faster than an HDD or the like, it has been rapidly spreading in recent years with a decrease in bit cost.
  • storage systems commonly used by companies and the like have been equipped with multiple storage devices such as HDDs so far, and the controller in the system makes data redundant and stored on multiple storage devices.
  • high performance has been realized by executing a plurality of storage devices in parallel. For this reason, even when a storage device using a flash memory as a storage medium is used in the storage system, a plurality of storage devices using the flash memory as a storage medium are mounted in the storage system, and the storage controller uses the flash memory as a storage medium.
  • a configuration for controlling a plurality of storage devices is adopted.
  • flash memory As a storage medium, some storage devices using a flash memory as a storage medium include a form factor and an interface compatible with the HDD, and this is called an SDD (Solid State Disk). However, there are some that are not compatible with HDD.
  • a storage device that uses a flash memory as a storage medium according to the present invention means both of them, and these are hereinafter collectively referred to as a flash package.
  • the storage controller checks whether there is data with the same content among a plurality of data stored in the storage device in the system. If there are a plurality of data with the same content, the storage controller leaves one data and the remaining data. This is a technique for reducing the amount of data to be stored in a storage device by not storing (deleting) the same data. Checking whether all the data has the same content, the amount of calculation becomes enormous.
  • the representative value of the data such as the hash value is obtained.
  • a method is used in which comparison processing is performed only between data that are calculated and whose representative values match.
  • the method for calculating the representative value is not limited to the method using the hash function, and any calculation method may be used as long as the values calculated from the same data are always the same.
  • a representative value such as a hash value used in the deduplication technique is referred to as a feature amount.
  • Patent Document 1 is cited as a document disclosing data deduplication technology.
  • the storage controller or the flash memory module calculates the hash value of the write target data, and the flash memory module is already stored in the flash memory module. If the hash value of the data matches the hash value of the write target data, the data stored in the flash memory module and the write target data are compared bit by bit, and if they match, the write target data is stored in the flash memory. It is disclosed to reduce the number of times data is rewritten in the flash memory by not writing to the physical block of the module.
  • the capacity virtualization technology is a technology that allows a host to show a capacity (virtual capacity) larger than the physical capacity of a storage device installed in the storage system, and is generally realized by a storage controller in the storage system. This is a characteristic that when the user actually uses the storage, the amount of data actually stored does not easily reach the capacity of the volume defined by the user (the storage device viewed from the user). Is used. In other words, when there is no capacity virtualization technology, a physical storage area equivalent to the size of the entire storage area of the defined volume was secured when the volume was defined. When data is actually stored in the storage system, a physical storage area is secured for the first time.
  • Japanese Patent Application Laid-Open No. 2004-228620 discloses a method using capacity virtualization technology for not only the storage controller but also the flash package in a storage system including a storage controller connected to a large number of flash packages.
  • the flash package has a function of compressing and storing data, and the virtual capacity (lower-level virtual capacity) that the flash package is showing to the storage controller is changed according to the change in the compression rate.
  • the flash package has shown the storage controller a capacity larger than the physical capacity of the actual flash memory.
  • the capacity virtualization technology executed by the storage controller is called an upper level capacity virtualization function, and the capacity virtualization technology executed in the flash package is called a lower level capacity virtualization function. Differentiating each virtualization technology.
  • the data length after compression differs every time the data is updated, so there are many cases where data cannot be stored in the previously stored area. Because of the characteristics of flash memory, it is necessary to write to a new area when storing updated data. Therefore, when the compression function is realized by a flash package, the characteristics of the flash memory are used well.
  • a configuration in which hundreds of flash packages having hundreds of chips are connected to the controller of the storage system is a typical configuration of a large-scale storage system using a flash memory as a storage medium.
  • the problem to be solved by the present invention is that, in a large-scale storage system including a large number of flash packages, data stored in the flash memory is reduced by using a deduplication technology with less influence on the performance of the entire storage system. It is to reduce the capacity and store more data than apparent.
  • the first problem relates to calculation of a data feature amount when performing deduplication with a flash package.
  • a flash package is highly demanded to reduce the price. Therefore, when a feature amount is calculated using the flash package, an increase in calculation overhead becomes a problem.
  • the storage controller calculates a feature value such as a hash value and uses it for deduplication processing performed in the flash package, a new function (interface) for sending the feature value to the flash package is added. This leads to higher costs for flash packages.
  • Patent Document 1 discloses a deduplication method when there are a plurality of data with the same content in a flash package.
  • the storage controller is predetermined for a deduplication method when there are a plurality of data with the same content in different flash packages.
  • the first feature of the present invention for solving the first problem is as follows.
  • an 8-byte guarantee code including data indicating a 2-byte feature value is added to 512-byte data, and a standardized SCSI write command using 520 bytes as one transfer unit is used.
  • the controller sends write data to the flash package, by adding 8 bytes of data including 2 bytes of data indicating the feature amount to the 512 bytes of data, and executing transfer with 520 bytes as one transfer unit,
  • the feature amount of the write data can be received.
  • this feature amount it is possible to narrow down data for which data values are actually compared. For this reason, it is not necessary to calculate the feature quantity of the flash package, and it is not necessary to provide a new interface between the flash package and the controller.
  • the storage controller calculates a hash value of the data, Based on this, the flash package of the data storage destination is determined. If the feature values such as hash values do not match, the data obviously does not match, that is, deduplication cannot be performed. Therefore, collecting data with the same hash values and feature values in one flash package makes it efficient for the entire system. Deduplication is possible.
  • the present invention in a large-capacity storage system in which a large number of flash packages each having a large number of flash memories are connected, deduplication processing with high efficiency and little performance degradation can be realized, and a capacity larger than the physical capacity is secured. It becomes possible to do.
  • the present invention since the same effect can be obtained when the present invention is applied not only to a flash package but also to a storage device such as an HDD, the present invention is also effective when applied to another storage device such as an HDD. It is.
  • FIG. 10 is a diagram showing a program for performing control on the flash package side in the second embodiment. It is a figure which shows the information which performs the high-level control stored in the shared memory of the storage system in a 2nd Example. It is a figure showing the concept of the 2nd Example. It is a figure which shows the format of the real page information in a 2nd Example. It is a format of the flash package information in the second embodiment. It is a figure showing the structure of the empty virtual segment management information queue in a 2nd Example. It is a figure showing the structure of the unusable virtual logical segment queue in a 2nd Example.
  • FIG. 1 shows a configuration of an information system according to an embodiment of the present invention.
  • the information system includes a storage system 100, a host 110, and a SAN (Storage Area Network) 120 that connects the two.
  • the host 110 is a system in which a user application operates, and reads / writes necessary data from / to the storage system 100 via the SAN 120.
  • the SAN 120 uses a protocol capable of transferring SCSI commands. For example, a protocol such as Fiber Channel can be used.
  • the present invention is also effective when the host 110 and the storage system 100 are directly connected.
  • a storage system 100 configured with a large number of flash memories as a storage medium realizes a technique for reducing the stored data capacity in the flash memory by deduplication processing.
  • the storage system 100 has a hierarchical capacity virtualization technology.
  • the control unit of the upper level capacity virtualization technology is a unit called a page.
  • the page in this embodiment is a page used in the capacity virtualization technology realized by the storage controller 200 shown in the conventional patent document 2 or the like.
  • the present invention is effective even if the upper level control unit in the hierarchical capacity virtualization technology is not a page.
  • the page size is larger than the block that is the erase unit in the flash memory.
  • the unit of read / write is called a page, so the page is smaller than the block.
  • the page is used as a word that means a page that is a storage area allocation unit in the capacity virtualization technology, and its size is larger than the block.
  • the read / write unit in the flash memory is called a segment in order to distinguish it from a page that is a control unit for higher-level capacity virtualization.
  • the control unit of the lower level capacity virtualization technology is described as a unit that is an integral multiple of the block that is the erase unit of the flash memory.
  • the present invention provides a capacity virtualization function that uses a flash memory as a storage medium, has a virtual capacity larger than the actual capacity, and uses a block as an erasure unit as an allocation unit. It is also effective to provide it to the host 120 without a function.
  • FIG. 2 shows the configuration of the storage system 100.
  • the storage system 100 includes one or more connection devices 250 that connect components such as one or more storage controllers 200, a cache memory 210, a shared memory 220, and a flash package 230.
  • all the storage media in the storage system are the flash package 230.
  • the present embodiment is effective even when other storage media such as HDDs are included.
  • the flash packages 230 in this embodiment have the same capacity.
  • the present invention is effective even if the flash package 230 has different capacities.
  • the storage controller 200 includes a processor 260 that processes read / write requests issued from the host 120, a memory 270 that stores programs and information, and an arithmetic circuit 290.
  • a feature of the present invention is that the flash package 230 executes the deduplication processing.
  • a feature value such as a hash value (a value derived by performing a predetermined operation on the data, the predetermined operation has the same contents)
  • An arithmetic method is used that ensures that the same value is always derived from the data.
  • the data length of the feature amount is, for example, that the feature amount is 2 bytes, while the feature amount is 2 bytes. Is sufficiently short compared to the length of the target data to be calculated.), And whether the data itself is the same as the other data with the same feature value, and if the data is the same, Reduce storage capacity by not storing.
  • the reason for using the feature value is to narrow down candidates for comparing data contents.
  • the feature amount is not calculated in the flash package 230.
  • the calculation of the feature amount needs to refer to the entire data and execute a complicated operation. For this reason, if the feature amount calculation is executed in the flash package 230, the performance may be deteriorated.
  • the storage controller 200 executes the calculation of the feature amount.
  • the feature amount calculated by the storage system 100 needs to be sent to the flash package 230.
  • the storage controller 200 and the flash package 230 need to be provided with a dedicated interface for transmitting and receiving the feature amount.
  • data is transferred in units of 512 bytes.
  • the 2-byte feature amount derived from the data contents and information such as an address for storing the data are also included.
  • a method of adding a guarantee code called DIF of 8 bytes in total and transferring it to 520 bytes is standardized.
  • the feature of the first embodiment is that the flash package 230 takes out 2 bytes of information indicating the feature amount from the received 520 bytes and uses it for deduplication.
  • the calculation of the 2-byte feature amount included in the DIF is often performed for the purpose of ensuring data integrity in the storage controller 200 that requires high reliability.
  • deduplication can be performed without new overhead. For this reason, it is assumed that the storage controller 200 and the flash package 230 according to the embodiment of the present invention support a data format and a command set according to the SCSI standard. For an I / O request transmitted / received between the storage controller 200 and the flash package 230, a command conforming to the SCSI standard is used.
  • the arithmetic circuit 290 is a circuit that calculates a 2-byte feature value. However, the present invention is effective even when the processor 260 executes the calculation of the 2-byte feature amount.
  • connection device 250 is a mechanism that connects each component in the storage system 100.
  • each flash package 230 is connected to one or more storage controllers 200 by a plurality of connection devices 250 for high reliability.
  • the present invention is effective even in a configuration in which each flash package 230 is connected to only one connection device 250.
  • the cache memory 210 and the shared memory 220 are usually composed of a volatile memory such as a DRAM, but are assumed to be nonvolatile by a battery or the like. However, the present invention is effective even if the cache memory 210 and the shared memory 220 are not nonvolatileized.
  • the cache memory 210 stores data frequently accessed from the storage controller 200 among the data stored in the flash package 230.
  • the storage controller 200 returns to the host 120 that the corresponding write request is completed when the data received to be written to the flash package 230 by the write request from the host 120 is written to the cache memory 210, so-called write back. Write in the method.
  • the present invention is also effective in a system in which a write request is completed when data to be written is stored in the flash package 230.
  • the shared memory 220 stores control information of the cache memory 210, important management information in the storage system 100, contact information between the storage controllers 200, synchronization information, and the like.
  • each flash package 230 is recognized by the storage controller 200 as a single storage device.
  • the storage controller 200 has a Redundant Arrays of Independent Devices / Devices (RAID) function that can recover data stored in a flash package 230 even if one flash package 230 fails to ensure availability. It shall be.
  • RAID Redundant Arrays of Independent Devices / Devices
  • a group consisting of a plurality of flash packages 230 (a so-called RAID group) is defined, and when one flash package 230 in the RAID group fails, it is stored in the remaining flash packages 230 in the RAID group.
  • the data contents stored in the failed flash package 230 can be recovered based on the stored information.
  • the group consisting of the plurality of flash packages 230 is referred to as a flash package group 280.
  • the present invention is effective even if the storage controller 200 does not have such a RAID function.
  • FIG. 3 shows the configuration of the flash package 230.
  • the flash package 230 includes a plurality of flash chips 300, a package processor 310, a package memory 320, a buffer 330, a package bus 340, a package bus transfer device 350, and a comparison circuit 370.
  • the comparison circuit 370 is used when the flash package 230 checks whether the newly written data value is equal to the previously stored data value. Since the comparison circuit 370 has a smaller operation scale than the calculation of the feature amount, the flash package 230 may be included. In this embodiment, this comparison is executed by the comparison circuit 370. However, even if the package processor 310 executes this comparison, this embodiment is effective.
  • this embodiment is effective even when the flash package 230 has a compression / decompression function and compresses data to be written to the flash chip 300.
  • the combination with the compression function further increases the capacity reduction effect.
  • there are two methods that is, a method in which the read data is expanded and then the comparison is performed, and a method in which the received data is compressed and then the comparison is performed. May be.
  • the flash package 230 has a capacity virtualization function in units of blocks, which is an erase unit of flash memory.
  • the present invention is effective even if the flash package 230 has a capacity virtualization function other than a block unit. For this reason, a storage space having a capacity larger than the total capacity of all the flash chips 300 provided in the flash package 230 as a virtual capacity is defined, and the storage space is provided to the storage controller 200.
  • a write request for the predetermined position is received, it is checked whether or not a block to which data is to be written is assigned to the predetermined position, and a block is assigned to the predetermined position for the first time when no block is assigned. As a result, the time at which blocks are actually allocated to the storage space can be delayed, and the capacity can be reduced.
  • the package processor 310 receives a read / write request from the storage controller 200 and executes a corresponding process.
  • the buffer 330 stores data read / written between the storage controller 200 and the flash chip 300.
  • the buffer 330 is assumed to be a volatile memory.
  • the flash package 230 writes the received write data to the flash chip 300.
  • the storage controller 200 is notified that the write process has been completed.
  • the present invention is effective even when the buffer 330 is made a nonvolatile memory and the write data specified by the write request received from the storage controller 200 is written to the buffer 330 to notify the completion of the write process. .
  • the package memory 320 stores a program executed by the package processor 310, management information of the flash chip 300, and the like. Since the management information is important information, it is desirable that the management information can be saved in a specific flash chip 300 when the storage system is scheduled to stop. In addition, it is desirable to have a battery in preparation for a sudden failure and to use it to save management information to a specific flash chip 300 even if a failure occurs.
  • the package bus 340 is a bus for transferring data between the buffer 330 and the flash chip 300, and one or more package buses 340 exist in the flash package 230. In order to improve the performance, a configuration in which a plurality of package buses 340 are provided in the flash package 230 is common, but the present invention is effective even with only one.
  • the package bus transfer device 350 exists for each package bus 340 and executes data transfer between the buffer 330 and the flash chip 300 in accordance with an instruction from the package processor 310.
  • the comparison circuit 370 is connected to the buffer 330 and compares the data received from the storage controller 200 with the data read from the package memory 320 in accordance with an instruction from the package processor 310.
  • FIG. 4 shows information used in each process described in this embodiment in the shared memory 220 of the storage system 100 according to the embodiment of the present invention.
  • the logical volume information 2000, the real page information 2100, and the free space are shown.
  • a real page management information pointer 2200, flash package group information 2300, flash package information 2500, virtual page capacity 2600, and unusable page management information pointer 2700 are included. These pieces of information are information necessary for realizing a higher level capacity virtualization technology.
  • the storage controller 200 supports a high-level capacity virtualization function.
  • the present invention is effective even if the storage controller 200 does not have a higher level capacity virtualization function.
  • a storage area allocation unit is called a page.
  • the storage controller 200 manages the storage space of the logical volume provided to the host device such as the host 110 by dividing it into an area of a predetermined size called a virtual page.
  • the storage area of the flash package group 280 is divided and managed in units of real pages.
  • the storage controller 200 can define one or more logical volumes and provide them to a host device such as the host 110. As described above, the storage controller 200 divides the storage space of each logical volume into a predetermined unit area called a plurality of virtual pages (FIG. 7: VP0, VP1, VP2), and divides the storage space of each logical volume. Are managed as a storage area composed of a plurality of virtual pages. Note that the size of the virtual page is stored in the virtual page capacity 2600 in the shared memory 220. Further, in the storage system 100 according to the embodiment of the present invention, the capacity of all virtual pages is the same, but the present invention is effective even in a configuration in which virtual pages of different sizes exist in the storage system 100. It is.
  • the storage controller 200 manages the storage space of each logical volume in units of virtual pages, but a host device such as the host 110 that accesses the logical volume need not be aware of the existence of virtual pages.
  • the host 110 accesses by specifying an address such as LBA (Logical Block Address), and the storage controller 200 uses the virtual page number (each virtual (Identification number given to the page) (the LBA can be converted by dividing by the virtual page size).
  • LBA Logical Block Address
  • the virtual page is a concept used only for managing the storage space of the logical volume within the storage controller 200.
  • an area of P (MB) from the head position of the logical volume is managed as a virtual page # 0 (# 0 indicates a virtual page number), and the next P ( MB) area is managed as virtual page # 1.
  • the P (MB) areas are managed as virtual pages # 2, # 3,.
  • FIG. 7 shows a state where the real page RP0 is allocated to the virtual page # 0 (VP0).
  • the real page is an area obtained by dividing the storage area provided to the storage controller 200 by each flash package 230 that constitutes the package group 280 (that is, the RAID group) as shown in FIG.
  • reference numerals 230-1, 230-2, 230-3, and 230-4 conceptually represent storage areas provided by the flash packages 230 to the storage controller 200, respectively.
  • the RAID type of the package group 280 illustrated in FIG. 7 has a RAID 4 3D + 1P configuration (a RAID group including three data drives and one parity drive).
  • RAID parity is stored in the storage area of each flash package 230 constituting the package group 280.
  • P0 An area described as P1,... Represents an area in which parity is stored (P0 stores parity generated from 0 (D), 1 (D), 2 (D), and P1 stores 3).
  • (D), 4 (D), and parity generated from 5 (D) are stored.
  • a real page is composed of a plurality of stripes (in RAID technology, one parity and a set of data necessary to generate the one parity. In the example of FIG. 7, for example, 0 (D), 1 (D), 2 (D) and (P0) are one stripe).
  • the mapping between each area in the virtual page and each area in the real page is not limited to the mapping method described here.
  • the total storage capacity of each logical volume can be defined to be larger than the capacity of the actual storage medium. For this reason, the number of virtual pages is generally larger than the number of real pages. Also in the storage apparatus according to the embodiment of the present invention, the number of virtual pages can be made larger than the number of real pages.
  • the real page allocated to each virtual page in the logical volume is not necessarily limited to the real page in the same package group 280.
  • the real page assigned to virtual page # 0 and the real page assigned to virtual page # 1 may be real pages in different package groups. However, there is a restriction that all the real pages that should be assigned to each virtual page of one logical volume must be assigned from the same package group with the same RAID type.
  • FIG. 5 shows the format of the logical volume information 2000.
  • the logical volume is a storage device from which the host 120 reads / writes data.
  • the logical volume information 2000 is information provided for each logical volume. That is, when N logical volumes are defined in the storage system 100, N logical volume information 2000 exists in the shared memory 220.
  • the logical volume information 2000 includes a logical volume ID 2001, a logical capacity 2002, a logical volume RAID type 2003, and a real page pointer 2004.
  • the host 120 issues an access command including information such as an ID for uniquely identifying a logical volume such as a LUN, a start address (LBA) of an access target area in the logical volume, and an access target data length.
  • the logical volume ID 2001 stores an ID such as LUN for uniquely identifying the logical volume.
  • the logical capacity 2002 is the capacity of this logical volume (the size of the accessible storage space recognized by the host 120).
  • the logical volume RAID type 2003 is information for specifying the RAID type (RAID 0, RAID 1, etc.) of the corresponding logical volume.
  • the real page pointer 2004 (2004-0 to 2004- (n ⁇ 1)) is a pointer to management information (real page information 2100 described later) of the real page allocated to the virtual page of the logical volume.
  • the number of real page pointers 2004 stored in one logical volume information 2000 is the number of virtual pages of the logical volume (the logical capacity 2002 divided by the virtual page capacity 2600. If there is a remainder, Equal to +1). If the number of virtual pages in the logical volume is n, there are n real page pointers 2004 (2004-0 to 2004- (n-1) real page pointers exist).
  • the page corresponding to the first real page pointer 2004 (2004-0 in the figure) is the real page assigned to the virtual page (virtual page # 0) corresponding to the first area of the logical volume.
  • the page pointer 2004 stores a pointer corresponding to a real page allocated to a virtual page corresponding to the next area.
  • the real page is allocated not when the logical volume is defined, but when a request to write data is actually received for the corresponding virtual page. It is an opportunity. Therefore, in the case of a virtual page that has not been written yet, the corresponding real page pointer 2004 is null.
  • FIG. 6 shows the format of the real page information 2100.
  • the real page information 2100 is real page management information, and one is defined for each real page.
  • the real page information 2100 includes a package group 2101, a real page address 2102, a free page pointer 2103, a page data storage amount 2104, a data storage amount after page deduplication 2105, a migration flag 2109, a migration destination real page information 2110, and a migration wait flag. 2111 is included.
  • the package group 2101 includes information (identifier) of the flash package group 280 to which the corresponding real page is assigned.
  • the real page address 2102 is information indicating to which position (address) in the flash package group 280 specified by the package group 2101 the real page is assigned. This means that an area corresponding to the actual page size from the address indicated by the actual page address 2102 is allocated to the actual page.
  • the empty page pointer 2103 stores a valid value when this real page is not assigned to a virtual page (hereinafter, such a real page is referred to as “empty page”). In this case, the value stored in the empty page pointer 2103 indicates the actual page information 2100 of the next empty page. When a virtual page is allocated, the value stored in the empty page pointer 2103 is a null value.
  • each flash package 230 has a capacity virtualization function, and apparently provides the storage controller 200 with a capacity larger than the actual physical capacity.
  • the capacity virtualization unit of the flash package 230 is a block that is an erase unit of the flash memory.
  • a block viewed from the storage controller 200 is called a virtual block
  • a block actually allocated by the flash package 230 is called a real block. Therefore, in the storage system 100 according to the embodiment of the present invention, a real page is composed of one or more virtual blocks.
  • the storage space constituted by each virtual block of the flash package 230 is larger than the storage space constituted by each real block (that is, the number of virtual blocks> the number of real blocks, It is in a relationship of).
  • FIG. 8 shows the relationship between the storage space V1 provided by the flash package 230 to the storage controller 200, virtual blocks, and real blocks.
  • the flash package 230 manages the storage space V1 provided to the storage controller 200 by dividing the storage space V1 by the size of m virtual blocks.
  • a set of m virtual blocks is referred to as a “virtual block group”. Note that the size of the virtual block is the same size as the block that is the erase unit of the flash memory. If the block size is B (KB), an area of m ⁇ B (KB) from the beginning of the storage space V1 is managed as a virtual block group # 0, and in the following order, each area of m ⁇ B (KB) is virtual. Managed as block groups # 1, # 2,.
  • one or more and (m + 1) or less real blocks can be assigned to each virtual block group.
  • a set of one or more real blocks assigned to one virtual block group is called a real block group.
  • the reason why the maximum number of real blocks allocated is m + 1 will be described below. Assume that the virtual block group data could hardly be deduplicated. In this case, the number of necessary real blocks is m, but the real block has almost no free space. At this time, it is assumed that the flash package 230 receives a request to rewrite some data in the block (normal write request) from the storage controller 200. Since the flash memory block cannot be rewritten, the flash package 230 must read all data in the block into the buffer 330, update only the rewritten portion, erase the block once, and then store the data in the entire block. Don't be.
  • the flash package 230 is shown to the storage controller 200 so as to have more virtual blocks than the actual number of blocks.
  • the storage controller 200 manages how many free real blocks each flash package 230 has, and rearranges real pages according to the number of free real blocks.
  • the flash package 230 is characterized in that a real block is allocated when a write request is received for a virtual block group to which a real block has not yet been allocated.
  • the page data storage amount 2104 and the page deduplication data storage amount 2105 exist in the same number as the number of flash packages 230 constituting the flash package group 280 to which the page is assigned. However, these pieces of information are not attribute information of the virtual block included in this real page, but attribute information regarding data of the virtual page corresponding to this real page. Therefore, the data of the real page assigned to the virtual page (assuming this real page is called real page A) is copied to the new real page, and the new real page (assuming this real page, In the real page management information 2100 of the real page A, the page data storage amount 2104 and the data storage amount 2105 after page deduplication are reflected in the real page information 2100 of the real page B. (Takeover) is necessary.
  • the page data storage amount 2104 is the amount of data stored for the actual page from a host device such as the host 110.
  • the data storage amount after page deduplication 2105 is the data amount after deduplication stored in the actual page.
  • the data storage amount 2105 after page deduplication can be said to be the data amount actually stored in the flash chip 300 of the flash package 230 among the data written to the actual page.
  • the above two values are calculated by the storage controller 200 based on the information received from the flash package 230.
  • the moving flag 2109, the movement destination real page information 2110, and the movement waiting flag 2111 are information used when moving the data of the real page to another real page.
  • the moving flag 2109 is a flag that is turned ON when the data of the real page is being moved to another real page.
  • the destination real page information 2110 is address information of a destination real page that is moving the data of this real page.
  • the movement waiting flag 2111 is a flag that is turned ON when it is determined to move the real block.
  • FIG. 9 shows the format of the flash package information 2500.
  • the flash package information 2500 includes a flash package ID 2501, a flash package virtual capacity 2502, and a virtual block capacity 2503.
  • the flash package information 2500 exists for each flash package 230.
  • the flash package ID 2501 is an identifier of the flash package 230.
  • the flash package virtual capacity 2502 is the virtual capacity of the flash package 230 (the size of the storage space provided to the storage controller 200).
  • the virtual block capacity 2503 is the size of the virtual block. Therefore, the value obtained by dividing the flash package virtual capacity 2502 by the virtual block capacity 2503 is the number of virtual blocks in the flash package 230.
  • the present invention is characterized in that the flash package virtual capacity 2502 is adjusted based on the deduplication rate of the flash package 230 or the like. As described above, in this embodiment, the flash package 230 determines this capacity, but the storage controller 200 may determine it.
  • the storage controller 200 receives the notification that the virtual capacity has changed from the flash package 230 and the virtual capacity after the change, the storage controller 200 sets the received value (virtual capacity after the change) in the flash package virtual capacity 2502.
  • FIG. 10 shows the format of the flash package group information 2300.
  • the flash package group information 2300 is information that exists for each flash package group 280.
  • the flash package group information 2300 includes a flash package group ID 2301, a package group RAID type 2302, a real page number 2303, a free real page number 2304, a flash package pointer 2305, and an unusable real page number 2306.
  • the flash package group ID 2301 is an identifier of the flash package group 280 (the same value as the package group 2101 is stored).
  • the package group RAID type 2302 is a RAID type of the flash package group 280.
  • the RAID type in this embodiment is as described when the logical volume RAID type 2003 is described.
  • the number of real pages 2303 indicates the number of free real pages 2304, and the number of unusable real pages 2306 indicates the total number of real pages, the total number of free real pages, and the number of unusable real pages of the flash package group 280, respectively.
  • the feature of the present invention is that the virtual capacity of the flash package 230 changes depending on the deduplication rate.
  • the virtual capacity of the flash package 230 belonging to a certain flash package group 280 changes, the number of real pages 2304 and the number of free real pages 2304 in the flash package group 280 also change. This will be described below.
  • the flash package 230 determines this capacity, but the storage controller 200 may determine this capacity.
  • the flash package pointer 2305 is a pointer to the flash package information 2500 of the flash package 230 that belongs to the flash package group 280.
  • the number of package pointers 2305 is the number of flash packages 230 belonging to the flash package group 280, which is a value determined by the package group RAID type 2302.
  • the empty real page management information pointer 2200 is information provided for each flash package group 280.
  • FIG. 11 shows a set of free real pages managed by the free real page management information pointer 2200. This structure is called a free real page management information queue 2201.
  • a free real page means a real page that is not assigned to a virtual page.
  • the real page information 2100 corresponding to the free real page is referred to as free real page information 2100.
  • the free real page management information pointer 2200 indicates the address of the first free real page information 2100.
  • a free page pointer 2103 in the first real page information 2100 points to the next free real page information 2100.
  • the free real page pointer 2103 of the last free real page information 2100 points to the free real page management information pointer 2200, but the free real page pointer 2103 of the last free real page information 2100 has a null value. It may be stored.
  • the storage controller 200 receives a write request for a virtual page to which a real page is not allocated (address on the logical volume within the range)
  • the storage controller 200 among the plurality of flash package groups 280 in the storage system 100 is a package group RAID type 2302.
  • One of the flash package groups 280 having the same number as the logical volume RAID type 2003 (for example, the flash package group 280 having the largest number of free real pages) is selected, and the free real page management information pointer of the selected flash package group 280 is selected.
  • An empty real page is searched by referring to 2200 and assigned to a virtual page.
  • the unusable page management information pointer 2700 is information provided for each flash package group 280.
  • FIG. 12 shows a set of unusable real pages managed by the unusable page management information pointer 2700.
  • This structure is called an unusable page management information queue 2701. Its structure is the same as the empty page management information queue 2201.
  • the virtual capacity of the flash package 230 decreases and the number of real pages 2303 decreases (assuming that the number of real pages 2303 has decreased by n)
  • real page information managed in the free page management information queue 2201 Of the 2100 n pieces of real page information 2100 are moved to the unusable page management information queue 2701.
  • the storage controller 200 has an upper level capacity virtualization function, and the flash package 230 has a lower level capacity virtualization function. For this reason, even if the virtual capacity of the flash package 230 is changed, the real page information 2100 can be dealt with only by the method described above.
  • the flash package 230 has management information in the package memory 320.
  • FIG. 13 shows information included in the package memory 320.
  • the package memory 320 includes package information 3000, chip information 3100, virtual block group information 3200, real block information 3300, free real block information pointer 3400, and a simple feature amount table 3500. These pieces of information are information necessary for realizing a lower level capacity virtualization technology and deduplication technology.
  • the flash package 230 implements a lower level capacity virtualization technology and deduplication technology.
  • lower-level capacity virtualization technology and deduplication technology may be realized by the storage controller 200.
  • FIG. 14 shows the format of the package information 3000.
  • the package information 3000 includes a package ID 3001, a virtual package capacity 3002, an actual package capacity 3003, a flash block capacity 3004, a flash segment capacity 3008, a package empty block number 3005, a package data storage amount 3006, a package deduplication data storage amount 3007, an internal It is composed of an information storage block number 3009 and an internal information storage address 3010.
  • Package ID 3001 is an identifier of the flash package 230.
  • the virtual package capacity 3002 is a virtual capacity (also referred to as a virtual capacity) of the flash package 230 viewed from the storage controller 200 (provided to the storage controller 200).
  • a feature of the present invention is that the virtual package capacity is adjusted by the flash package 230 according to a change in the deduplication rate. As already described, this adjustment may be performed by the storage controller 200.
  • the actual package capacity 3003 is a capacity for physically storing data received from the storage controller 200 in the flash package 230 (a capacity for storing data after deduplication is performed) and a reclamation. It is the sum of extra capacity.
  • the flash block capacity 3004 is the size of a block that is an erase unit of flash memory.
  • the flash segment capacity 3008 is the size of a segment that is a read / write unit of the flash memory.
  • the package empty block number 3005 is the number of empty blocks in the flash package 230.
  • Package data storage amount 3006 is a total value before deduplication of write data received from the storage controller 200 by a write request
  • package deduplication data storage amount 3007 is a data total value after deduplication.
  • the number of internal information storage blocks 3009 is the number of stored package information 3000, chip information 3100, virtual block group information 3200, real block information 3300, and free real block information pointer 3400 stored in the package memory 320 when the power is turned off or a failure occurs. This is the number of blocks of blocks reserved for this purpose (referred to as “internal information storage blocks”).
  • the internal information storage address 3010 is an address of an internal information storage block.
  • the package information 3000, the chip information 3100, the virtual block information 3200, the real block information 3300, and the free real block information pointer 3400 are important information, they are written in one or a plurality of internal information storage blocks by being written n times. Also good. Further, since the number of times of evacuation is not so large, the number of times of erasing the internal information storage block does not matter.
  • the total of the actual package capacity 3003 / flash block capacity 3004 and the number of internal information storage blocks 3009 is the total number of actual blocks that the flash package has.
  • FIG. 15 shows the format of the chip information 3100.
  • the chip information 3100 stores information about each flash chip 300 in the flash package 230, and one chip information 3100 exists for one flash chip 300.
  • the chip information 3100 includes a chip ID 3101, a real chip block number 3102, a free real block number 3103 in the chip, and a connection bus ID 3104.
  • Chip ID 3101 is an identifier of the flash chip 300.
  • the actual chip block number 3102 is the number of actual blocks that the flash chip 300 has.
  • the number of free real blocks in the chip 3103 indicates the number of free real blocks in the flash chip 300 (a free real block means a real block that has not yet been assigned to a virtual block).
  • the connection bus ID 3104 is an identifier of the package bus 340 to which the flash chip 300 is connected.
  • FIG. 16 shows the format of the virtual block group information 3200.
  • the virtual block group information 3200 is information existing corresponding to each virtual block group in the flash package 230. As shown in FIG. 13, the plurality of virtual block group information 3200 is stored adjacent to each other in the package memory 320, but each virtual block group information 3200 is arranged in the order of the virtual block addresses. And Hereinafter, description will be made with reference to FIG.
  • the first virtual block group information 3200 stored in the package memory 320 is the management information of the virtual block group # 0 in FIG. 8, and the second and third virtual block group information 3200 are respectively virtual blocks in the following order. This is management information for groups # 1 and # 2.
  • the virtual block group information 3200 includes a virtual block group identifier 3201, a real block information pointer 3202, a data storage amount 3203, a data storage amount after deduplication 3204, a virtual segment pointer 3205, a virtual segment feature amount 3206, a post deduplication pointer 3207, a previous It consists of a deduplication pointer 3208, a rear synonym pointer 3209, a front sinonium pointer 3210, a rear simple sinium pointer 3211, and a front simple sinonium pointer 3212.
  • the read / write unit of the flash memory is called a segment.
  • the read / write unit of the flash memory is usually called a page, but in this embodiment, the unit of capacity virtualization performed by the storage controller 210 is called a page, and in this embodiment, the read / write unit of the flash memory is called a segment.
  • the data to be written to the flash memory is stored with deduplication, but the deduplication unit is a segment.
  • the present invention is also effective when the deduplication unit is not a segment.
  • a segment of flash memory that stores deduplicated data is called a real segment.
  • a virtual segment before deduplication is called a virtual segment.
  • it is checked whether there is a virtual segment having the same value as the virtual segment, and if it exists, the content of the updated virtual segment is newly stored. Absent. Thereby, the capacity reduction effect can be exhibited.
  • the virtual block group identifier 3201 is an identifier (identification number) of the corresponding virtual block group.
  • each virtual block group has an identification number starting from 0 (“# 1 such as“ virtual block group # 1 ”in FIG. 8). ”Is an identification number).
  • the real block information pointer 3202 is a pointer to real block information 3300 (described later) of the real block assigned to the corresponding virtual block group. There are a maximum of (m + 1) real block information pointers 3202 when the number of virtual blocks constituting the virtual block group is m.
  • the real block information pointer 3202 has a null value when no real block is allocated.
  • a pointer to the real block information 3300 is stored in the first real block information pointer 3202 in which a null value is stored among the plurality of real block information pointers 3202. If the number of real blocks assigned to the virtual block group is k (k ⁇ (m + 1)), k real block information pointers 3202 from the beginning are valid (not null values).
  • the data storage amount 3203 represents the data amount before deduplication stored in the virtual block group. This maximum capacity is the capacity of the virtual block group.
  • the deduplication data storage amount 3204 is the data storage amount after deduplication. In the case of flash memory, when the contents of a virtual segment are rewritten, the rewritten data is stored in a different segment from the segment in which the data before rewriting was stored. It exists in several places.
  • the virtual block group data storage amount 3203 and the deduplication data storage amount 3204 are values obtained by calculating the storage amount of the latest virtual segment.
  • the virtual segment pointer 3205 and the virtual segment feature quantity 3206 are information representing a virtual segment, and there are a plurality (the same number as the number of virtual segments in the virtual block group) in the virtual block group information 3200.
  • the head virtual segment pointer 3205 stores a pointer to the real segment assigned to the virtual segment located at the head of the storage space of the virtual block group corresponding to the virtual block information 3200.
  • the second and subsequent virtual segment pointers 3205 also store pointers to the real segments allocated to the second and subsequent virtual segments on the storage space of the virtual block group corresponding to the virtual block information 3200.
  • the pointer to the real segment is a real block identifier 3301 (described later) of the real block information 3300 corresponding to the real block to which the real segment belongs, and an address in the real block (address assigned to the real segment). is there.
  • the expression format of the address attached to the real segment is not limited to a specific format, and any representation format can be used as long as the target real segment can be uniquely specified in the real block. be able to.
  • the first virtual segment feature value 3206 represents the feature value of the first virtual segment
  • the second and subsequent virtual segment feature values 3206 are respectively the second and subsequent virtual segments in order.
  • the flash package 230 stores the 2-byte feature quantity in the guarantee code attached to the data received by the SCSI command from the storage controller 200 in the virtual segment feature quantity 3206.
  • the segment length (excluding the size of the guarantee code) is 4 Kbytes or 8 Kbytes
  • the guarantee code is information added for every 512 bytes of data, so in total, the feature quantity of 16 bytes or 32 bytes is virtual.
  • the segment feature value 3206 is set. However, a part of 16 bytes or 32 bytes may be set.
  • the post-deduplication pointer 3207 and the pre-deduplication pointer 3208 are information for connecting a set of virtual segments having the same data value as the virtual segment with a bidirectional pointer.
  • the rear sinonium pointer 3209 and the front sinonium pointer 3210 are information for connecting a set of virtual segments having the same feature value as the virtual segment but having different data values with a bidirectional pointer.
  • the rear simple sinium pointer 3211 and the front simple sinonium pointer 3212 are information for converting a feature quantity into a simple feature quantity and easily finding a virtual segment having the same feature quantity. Specifically, it is information for connecting a set of virtual segments having the same simple feature quantity with a bidirectional pointer.
  • the number of nium pointers 3212 is equal to the number of virtual segments in the virtual block group.
  • the n-th rear deduplication pointer 3207, front deduplication pointer 3208, rear sinonium pointer 3209, front sinonium pointer 3210, rear simple sinium pointer 3211, and front simple sinonium pointer 3212 in the virtual block group information 3200 are Each is a pointer for the nth virtual segment in the storage space of the virtual block group corresponding to the virtual block information 3200.
  • a pointer for a certain virtual segment (a rear deduplication pointer 3207, a front deduplication pointer 3208, a rear sinonium pointer 3209, a front sinonium pointer 3210, a rear simple sinonium pointer 3211, or a front simple sinonium pointer 3212) These are called “pointers corresponding to virtual segments”.
  • the simple sinonium pointer 3212 is provided for each virtual segment, but may be configured to have one information for each of two or more virtual segments.
  • FIG. 17 shows the format of the real block information 3300.
  • the real block information 3300 is information existing corresponding to each real block.
  • the real block information 3300 includes a real block identifier (or also called a real block ID) 3301, a free real block pointer 3302, a real block free capacity 3304, a real segment bitmap 3305, and a reverse pointer 3306.
  • the real block identifier 3301 is an identifier of a corresponding real block.
  • the real block identifier is a set of information (such as an identification number) for identifying the flash chip 300 in which the real block exists and an address in the flash chip.
  • the free real block pointer 3302 stores information indicating the real block information 3300 of the next real block in the free state when the real block corresponding to the real block information 3300 is not assigned to the virtual block (is free). Has been.
  • the real block free capacity 3304 indicates the current free capacity of the corresponding real block.
  • the package processor 310 can receive a write request for the corresponding real block below the free capacity from the storage controller 200 and store write data in the free area. After the storage, the free capacity 3304 in the actual block is reduced by the stored data amount.
  • the real segment bitmap 3305 is information of a size of N bits when the number of real segments belonging to the real block is N. Each bit indicates whether each real segment belonging to the real block is in use (assigned to a virtual segment) or free (not assigned to a virtual segment). Each bit indicates that it is in use when it is on, and indicates that it is not in use when it is off.
  • the reverse pointer 3306 indicates a pointer to the virtual segment corresponding to the real segment (the address on the package memory 320 in which the virtual segment pointer 3205 is stored) when the real segment bitmap 3305 is on. When corresponding to a plurality of virtual segments, one of the virtual segments is indicated. In the real block information 3300, there are the same number of reverse pointers 3306 as the number of real segments in the real block.
  • the free real block information pointer 3400 exists for each flash chip 300.
  • FIG. 18 shows a set of free real blocks managed by the free real block information pointer 3400.
  • the free real block information pointer 3400 indicates the address of the real block information 3300 of the first free real block.
  • the free real block pointer 3302 in the real block information 3300 of the first free real block indicates the real block information 3300 of the next free real block.
  • the free real block pointer 2103 of the real block information 3300 of the last free real block indicates the free real block information pointer 3400, but may be a null value.
  • the package processor 310 When the package processor 310 receives a write request for a virtual block to which no real block is allocated, the package processor 310 refers to any of the flash chips 300, for example, the number of free real blocks (the number of free real blocks in the chip 3103). A free real block is searched from the free real block information pointer 3400 corresponding to the flash chip 300 having the largest number of data (which can be obtained in step 1) and assigned to the virtual block.
  • the flash package 230 manages a queue structure for managing a virtual segment group storing the data of the same content as a group. This is called a deduplication queue 1800.
  • the flash package 230 creates a bidirectional list using the post-deduplication pointer 3207 and the pre-deduplication pointer 3208 of the virtual block group information 3200.
  • FIG. 19 shows the first (0th) virtual block in a virtual block group whose virtual block group identifier (3201) is a (hereinafter, the virtual block group information 3200 of the virtual block group is referred to as virtual block group information 3200a).
  • the data content of the segment and the next (1) in the virtual block group whose virtual block group identifier (3201) is b (hereinafter, the virtual block group information 3200 of the virtual block group is referred to as virtual block group information 3200b)
  • the configuration example of the deduplication queue 1800 in the case where the data content of the (th) virtual segment is the same is shown.
  • the 0th deduplication pointer 3207 of the virtual block group information 3200a is configured to point to the first deduplication pointer 3207 of the virtual block group information 3200b (the 0th deduplication pointer 3207a of the virtual block group information 3200a).
  • the address on the package memory 320 in which the first deduplication pointer 3207 of the virtual block group information 3200b is stored is stored in the postdeduplication pointer 3207).
  • the first previous deduplication pointer 3208 of the virtual block group information 3200b is configured to point to the 0th rear deduplication pointer 3207 of the virtual block group information 3200a.
  • the first duplicate deduplication pointer 3207 of the virtual block group information 3200b corresponds to the other virtual segment, It is configured to point to the exclusion pointer 3207. Also, a null value is stored in the post-duplication elimination pointer 3207 at the end of the deduplication queue 1800, and a null value is stored in the leading deduplication pointer 3208 at the head of the deduplication queue 1800.
  • the relationship between the virtual segment constituting the deduplication queue 1800 and the real segment is related by the real block information 3300.
  • the real block identifier (real block ID) 3301 of the real block information 3300 stores information specifying one of a plurality of real blocks in the flash package 230.
  • the second of the map 3305 is turned on (1), and the second reverse pointer 3306 in the real block information 3300 points to the virtual segment pointer 3205 of the virtual segment located at the head of the deduplication queue 1800.
  • FIG. 19 shows a configuration example in which virtual segments with the same data contents belong to different virtual block groups.
  • virtual segments with the same data contents may belong to the same virtual block group.
  • the deduplication queue 1800 is still configurable. For example, if the data contents of the first (0th) virtual segment and the next (first) virtual segment in the virtual block group specified by the virtual block group information 3200a are the same, the 0th back duplication of the virtual block group information 3200a
  • the exclusion pointer 3207 points to the first back deduplication pointer 3207 of the virtual block group information 3200a, and the first front deduplication pointer 3208 of the virtual block group information 3200a is the 0th back deduplication of the virtual block group information 3200a. It is configured to point to a pointer 3208.
  • the same value is stored in the virtual segment pointer 3205 and the virtual segment feature quantity 3206 of each virtual segment connected to one deduplication queue 1800.
  • the virtual segment is deleted (separated) from the deduplication queue 1800.
  • the deduplication queue 1800 is not configured.
  • the flash package 230 further manages a queue structure for managing virtual segment groups having different data contents but having the same feature amount derived from the data as one group. Yes.
  • This is called a sinonium cue 1900.
  • FIG. 20 shows a set of virtual segments having the same feature amount but different data values.
  • the sinonium queue 1900 is configured in the same manner as the deduplication queue 1800.
  • a virtual segment having the same data content is formed by using the post-deduplication pointer 3207 and the previous deduplication pointer 3208 in order to form one deduplication queue composed of virtual segments having the same data content. They were connected to each other.
  • the post-sinium pointer 3209 and the front sinonium pointer 3210 are used to connect virtual segments having the same feature value and different data values.
  • the other points are the same as the deduplication queue 1800.
  • the sinonium queue 1900 When there is no other virtual segment having the same feature quantity as a certain virtual segment, the sinonium queue 1900 is not configured.
  • the virtual segment feature quantity 3206 of each virtual segment of the sinonium queue 1900 is the same, but the value of the virtual segment pointer 3205 is different.
  • the virtual segment located at the head of the deduplication queue A is sinonium. It is connected to the queue 1900.
  • the rear sinonium pointer 3209 indicates the address of the next virtual segment having the same feature value but different data values.
  • the last post-sinium pointer 3209 has a null value.
  • the previous sinonium pointer 3210 indicates the address of the previous virtual segment having the same feature value but different data values.
  • the leading previous sinonium pointer 3210 has a null value. If the newly written virtual segment has the same feature quantity and no set of virtual segments having the same data value is found, the virtual segment is added to the set (sinium queue) as the last virtual segment. When the feature amount of the virtual segment belonging to this set is changed, the virtual segment is deleted from this set.
  • the flash package 230 has a data segment and a feature amount that are different, but virtual segment groups having the same simple feature amount value derived from the feature amount are grouped into one group.
  • the queue structure for managing is managed. This is called a simple sinonium cue 3550.
  • FIG. 21 shows the structure of the simple feature quantity table 3500 and a set of virtual segments having the same simple feature quantity but different feature quantities. If there are many virtual segments with the same feature value but different data values, the number of different data is read and compared, so the feature value space (number) is increased, It is better to reduce the number (the number of virtual segments having the same feature value and different data values).
  • the simplest method for finding a virtual segment having the same feature amount is to have a feature amount table having the same size as the order of the feature amount space. However, if the feature amount space is increased, the feature amount table becomes too large to fit into the package memory 320.
  • a simple feature amount is derived by converting the virtual segment feature amount 3206 into a smaller value (simple feature amount) by a predetermined method, and a set of simple feature amounts is stored. It has a quantity table 3500.
  • the size of the simple feature table 3500 is a number (space) close to the order of the number of virtual segments of the flash package 230.
  • the simple feature value table 3500 includes a simple feature value pointer 3510 (hereinafter, may be abbreviated as “pointer 3510”).
  • the number of simple feature amount pointers 3510 is close to the order of the number of virtual segments of the flash package 230.
  • a simple feature value pointer 3510 at the top of the simple feature value table 3500 is a pointer that points to a virtual segment with a simple feature value of 0, and is a pointer that points to virtual segments with a simple feature value of 1, 2,. .
  • the simple feature amount pointer 3510 points to the rear simple sinium pointer 3211 corresponding to the first virtual segment. Null value if not present. Since the simple sinium queue 3550 includes a simple feature amount pointer 3510, if there is even one virtual segment having a simple feature amount equal to the simple feature amount 3505 corresponding to the simple feature amount pointer 3510, the simple sinonium queue 3550 is included. A queue 3550 will exist.
  • the rear simple sinium pointer 3211 indicates the address of the next virtual segment having the same simple feature value but different feature value values.
  • the virtual segment located at the head of the sinonium queue A is assumed.
  • the simple sinonium pointer 3207 after the last becomes a null value.
  • the pre-heavy simple sinonium pointer 3212 indicates the address of the previous virtual segment having the same simple feature quantity but different feature quantity.
  • the simple feature amount pointer 3212 after the head indicates the address where the simple feature amount pointer 3510 corresponding to the simple feature amount is stored. If the newly written virtual segment has the same simple feature amount and no set of virtual segments having the same feature amount is found, the newly added virtual segment is added to this set as the last virtual segment. When the simple feature amount of the virtual segment belonging to this set is changed, the virtual segment is deleted from this set.
  • FIG. 22 shows a program related to the present embodiment stored in the memory 270.
  • the programs according to the present embodiment are a read process execution unit 4000, a write request reception unit 4100, a write after process execution unit 4200, and a real page movement process execution unit 4500. These programs are programs for realizing high-level wear leveling technology and capacity virtualization technology.
  • xxx execution unit that is, a program
  • the description is that the program is executed by the processor 260. This represents that processing is performed.
  • the lower level wear leveling technology and the capacity virtualization technology are realized by the flash package 230.
  • the present invention is applied to the lower level wear leveling technology and the capacity virtualization technology.
  • the technology may be executed by the storage controller 200.
  • the lower level wear leveling technology and the capacity virtualization technology are executed by the storage controller 200. Accordingly, since both the upper level program and the lower level program are executed by the storage controller 200, the interface between the programs differs, but the contents executed by the upper level program are basically not significantly different. Therefore, in this embodiment, the read process execution unit 4000, the write request reception unit 4100, and the write after process execution are executed on the premise that the flash package 230 realizes the lower level wear leveling technology and the capacity virtualization technology.
  • the processing flow of the unit 4200 and the real page movement process execution unit 4500 will be described in detail.
  • the access target data range specified by the read request and write request from the host 12 coincides with the virtual segment boundary (in the present invention) which is a read / write unit of the flash memory. And Specifically, when the virtual segment size is 8 KB, a range that matches the 8 KB boundary in the logical volume address space is designated as the access target range.
  • the present invention is effective even when the access range specified by the read request and write request from the host 12 is only a part of the virtual segment, and when such an access request is received, the flash package 230 Reads the entire virtual segment including the access range, returns the specified partial area to the host 12 when a read request is received, and reads the virtual segment data read when a write request is received Only the specified partial area is updated, and the entire updated virtual segment is written into the flash package 230.
  • FIG. 23 is a processing flow of the read processing execution unit 4000.
  • the read process execution unit 4000 is executed when the storage controller 200 receives a read request from the host 120.
  • Step 5000 The processor 260 calculates the relative address in the virtual page to be accessed with the corresponding virtual page from the address to be read designated by the received read request.
  • Step 5001 It is checked whether the data to be read exists in the cache memory 210 (is hit). This is a known technique. If there is a hit, the process jumps to step 5008.
  • Step 5002 Here, it is necessary to load the data to be read into the cache memory 210.
  • the real page information 2100 corresponding to the real page assigned to the virtual page to be read is acquired from the real page pointer 2004 of the logical block management information 2000.
  • Step 5003 By referring to the package group 2101 and real page address 2102 of the acquired real page management information 2100, the identifier of the flash package group 280 to which the real page belongs and the start address in the flash package group 280 of the real page are obtained. obtain.
  • Step 5004 obtained by referring to the flash package group information 2300 based on the relative address in the virtual page obtained in step 5000 and the RAID type 2302 in the package group (the identifier of the flash package group 280 obtained in step 5003).
  • the relative address in the real page to be accessed by the request is calculated.
  • the flash package 230 to be accessed and the access target address in the flash package 230 are specified from the calculated relative address in the real page, the RAID type in package group 2302 and the flash package pointer 2305.
  • Step 5005 A read request is issued to the address specified in Step 5004 of the flash package 230 specified in Step 5004.
  • Step 5006 Wait for data to be sent from the flash package 230.
  • Step 5007 The data sent from the flash package 230 is stored in the cache memory 210.
  • Step 5008 The data on the cache memory 210 specified by the read request is sent to the host 120, and the processing is completed.
  • FIG. 24 is a processing flow of the write request receiving unit 4100.
  • the write request reception unit 4100 is executed when the storage controller 200 receives a write request from the host 120.
  • Step 6000 The processor 260 calculates a virtual page corresponding to the address and a relative address in the access-target virtual page from the address to be written by the received write request.
  • Step 6001 Since the information (LUN, etc.) of the access target logical volume is also specified in the write request, the processor 260 refers to the content of the write request to refer to the logical volume information 2000 of the logical volume to be accessed. Can be uniquely identified.
  • the processor 260 refers to the logical volume information 2000 specified based on the received write request, and refers to the real page pointer 2004 to determine whether a real page is allocated to the virtual page obtained in step 6000. Check by If so, jump to step 6003.
  • Step 6002 In this step, a real page is assigned to the corresponding virtual page.
  • the real page pointer 2004 indicates the first free page information 2100.
  • the real page is assigned to the virtual page.
  • the free real page management information pointer 2200 indicates the next real page information 2100 (real page information 2100 indicated by the free page pointer 2103 in the real page information 2100 of the real page assigned to the virtual page), and
  • the empty page pointer 2103 in the real page information 2100 of the real page assigned to the virtual page is set to null. Further, the number of empty pages 2304 of the flash package group management information corresponding to the real page is reduced.
  • This assignment process may be executed until data is stored in the flash package 230.
  • Step 6003 The write data specified by the write request from the host 120 is stored in the cache memory 210.
  • the flash package group 280 Since the flash package group 280 has a RAID configuration, it generates redundant data for the write data stored in the cache memory 210 and also stores the redundant data in the cache memory 210. However, this is a known method and will not be described in detail. In addition, since the actual page includes an area for storing redundant data, the storage address of the actual page of redundant data corresponding to the write data is also uniquely determined. Redundant data is also stored in the cache memory 210 once. In step 6003, when write data and redundant data are stored in the cache memory 210, the flash package ID of the flash package 230 and the address of the flash package 230 to be stored are determined (this employs RAID technology).
  • FIG. 25 is a processing flow of the write-after process execution unit 4200.
  • the write after process stores the write data stored in the cache memory in the flash package 230 that is the final storage medium of the storage system 100 (destage) by the process by the write request receiving unit 4100 described in FIG. It means the process to do.
  • the write after process execution unit 4200 is a process that the processor 260 appropriately executes independently of the process performed by the write request reception unit 4100.
  • the write after process execution unit 4200 executes a process of writing the write data and redundant data received from the host 120 into the flash package 230. However, the write after process execution unit 4200 processes both write data and redundant data as data to be written to the flash package 230 without distinguishing both.
  • Step 7000 The processor 260 searches the cache memory 210 to determine data to be written in the flash package 230. As a method for determining data to be written, a known method such as an LRU algorithm may be used. The processor 260 extracts information on the flash package 230 that is a data write target and information on a write destination address on the flash package 230 that are given to the found data in units of virtual segments.
  • Step 7001 A request is made to the arithmetic circuit 280 to create a feature quantity of a virtual segment to be written by 2 bytes every 512 bytes, and the completion is waited.
  • This feature amount calculation may be executed when a write request is received from the host 110.
  • the feature amount may be stored in the cache memory 210 by calculating when the write data is stored in the cache memory 210 in step 6003 of the write request receiving unit 4100.
  • Step 7002 A virtual segment write request to be written is issued to the appropriate flash package 230.
  • an 8-byte guarantee code including 2-byte data indicating the feature amount calculated in step 7001 is added to 512-byte data, and a SCSI write command using 520 bytes as one transfer unit is used. Send data.
  • the moving flag 2109 of the real block information 2500 corresponding to the real block to be written is checked, and if it is on, since this real page is being moved, the execution of this write request is stopped, Search for another write data.
  • Step 7003 Wait for completion of write request.
  • Step 7004 The processor 260 checks the end report regarding the write request from the flash package 230. These processes are features of the present invention.
  • the end report related to the write request received from the flash package 230 includes at least the data storage amount stored by the processing related to the write request, the data amount after deduplication, and the virtual capacity information of the flash package 230.
  • processing for the data storage amount and the data amount after deduplication included in the end report relating to the write request is performed. Specifically, the processor 260 adds the data storage amount to the page data storage amount 2104 and adds the post-duplication data storage amount to the page deduplication data storage amount 2105.
  • Step 7005 Here, it is checked whether there is any flash package 230 in which the virtual capacity of the flash package 230 has changed. If not, the process ends.
  • Step 7006 When there is a flash package 230 whose virtual capacity has changed, each received virtual capacity is set in the corresponding flash package virtual capacity 2502. Next, it is checked whether the minimum value of the flash package virtual capacity 2502 of each flash package 230 belonging to the corresponding flash package group 280 has changed due to this change. If there is a change, the actual page number 2303 and the free actual page number 2304 are updated according to this change value. Further, the real page management information is moved between the free page management information queue 2201 and the unusable page management information queue 2701 according to the number. As a result, when data that is frequently subjected to deduplication is stored, the number of real pages increases, and as a result, a large number of storage areas can be provided to the host device. Thereafter, the page movement process (FIG. 26) is called. Thereafter, the process is completed.
  • FIG. 26 is a processing flow of the real page movement processing execution unit 4500.
  • the real page movement process execution unit 4500 is called from the write after process execution unit 4200 (step 7006).
  • Step 11000 The processor 260 confirms whether or not the number of free real pages 2304 of each flash package group 280 is less than a certain value: ⁇ ( ⁇ is a predetermined value). If only the package group 280 does not satisfy the condition (the number of free real pages 2304 is not less than or equal to ⁇ ), the process ends.
  • Step 11001 Search the real page management information 2100 corresponding to the flash package group 280 to be processed, find a set of real page management information 2100 that has a large amount of data storage 2105 after page deduplication (larger than a predetermined threshold), These real pages are set as candidates for movement, and the respective movement waiting flags 2111 are turned on.
  • Step 11002 Here, the flash package group 280 to be the movement destination is selected. In this embodiment, one is selected. Of course, the present invention is also effective when a plurality of selections are made. For example, a flash package group with a relatively small number of free real pages 2304 is selected. Next, it is determined which real page in the selected destination flash package group 280 is the destination. When the flash package group 280 to which the real page of the transfer destination is assigned is determined, the real page information 2100 pointed to by the free real page management information pointer 2200 corresponding to the flash package group 280 is changed to the real page management information 2100 of the real page of the transfer source. The copy destination real page information 2110 is set.
  • the free real page management information pointer 2200 indicates the page management information 2100 in the next free state.
  • the above processing is executed for all real pages whose movement has been determined in step 11001.
  • the destination page for each source real page in the set of real pages as the source is determined.
  • Step 11003 Here, the real page management information 2100 to be the movement source is determined. Specifically, one real page management information 2100 in which the movement waiting flag 2111 is turned on is found. If there is no real page management information 2100 for which the movement waiting flag 2111 is turned on, the process is terminated and the process returns to the caller.
  • Step 11004 Here, it is calculated which virtual segment of the flash package 230 constituting the flash package group 280 to which the real page corresponding to the real page information 2100 selected in the step 11003 is assigned.
  • the flash package group information 2300 indicated by the package group 2101 of the real page information 2100 is the corresponding flash package group information 2300.
  • the flash package 230 corresponding to the flash package information 2500 indicated by the flash package pointer 2305 stored in the flash package group information 2300 becomes the flash package 230 to which the copy source real page is assigned.
  • a set of virtual segments to be moved in each flash package 230 from the real page address 2102 of the real page information 2100 and the virtual block capacity 2503 of the flash package information 2500 is related to all the flash packages 230.
  • Step 11005 For each flash package 230 that configures the flash package group 280 to which the real page that is the transfer source is allocated, the data of the virtual segment storing the data among the virtual segments obtained in Step 11004 , Request to move to the cache memory 210.
  • the flash package 230 that has received this request executes a virtual block migration process execution unit 12300 (FIG. 36), which will be described later.
  • Step 11006 Wait for completion reports from all flash packages 230 that issued the request. *
  • Step 11007 The completion report from the flash package 230 includes information on whether or not data is stored in each virtual segment.
  • the data in the virtual segment is sent.
  • the data in the virtual segment is sent as a set of 520 bytes, which is a combination of 512 bytes of data and an 8-byte guarantee code including a 2-byte feature amount.
  • the processor 260 stores the virtual segment data on the cache memory 210.
  • Step 11008 Here, the set of flash packages 230 constituting the flash package group 280 to which the transfer destination real page is assigned and which virtual segment of the flash package 230 the transfer destination real page is to be calculated are calculated. .
  • the real page information 2100 indicated by the movement destination real page information 2110 of the real page information 2100 that is the movement source becomes the real page information 2100 corresponding to the real page of the movement destination.
  • the processing for calculating from the real page information 2100 the set of flash packages 230 that make up the flash package group 280 and which virtual segment of each flash package 230 is the same as step 11004. Is omitted.
  • Step 11009 Here, the data in the migration source virtual segment stored in the cache memory 210 in Step 11007 is stored in each flash package 230 constituting the flash package group 280 to which the real page as the migration destination is allocated. Request. At this time, the information sent to each flash package 230 is sent together with information on whether or not data is stored in each segment and, if stored, the contents of the stored data. In this case, the virtual segment is sent as a set of 520 bytes that is a combination of 512 bytes of data and an 8-byte guarantee code including a 2-byte feature amount.
  • Step 11010 Wait for completion reports from all flash packages 230 that issued the request.
  • Step 11011 Allocate the virtual page that has been assigned the source real page to the destination real page until the source real page is assigned to the free real page. This can be achieved by connecting the real page of the movement source to the free real page management pointer 2200 and indicating the real page information of the movement destination so that the real page pointer 2004 which has been the real page information of the movement source so far.
  • the page data storage amount 2104 and the data storage amount 2105 after page deduplication are copied to the real block information 2100 at the movement destination.
  • the in-movement flag 2109, the movement destination actual page information 2110, and the movement waiting flag 2111 in the real page management information of both the movement source and the movement destination are cleared.
  • Step 11012 The flash package group information 2300 that is the transfer source and the flash package group information 2300 that is the transfer destination are updated.
  • the number of empty real pages 2304 of the flash package group information 2300 that is the transfer source is reduced by 1
  • the number of empty real pages 2304 of the flash package group information 2300 that is the transfer destination is increased by one.
  • the process jumps to step 11003 to search for a real page to be moved next.
  • FIG. 27 shows a program related to the present embodiment, which is stored in the package memory 320.
  • the program according to the present embodiment includes a data read process execution unit 12000, a data write process execution unit 12100, a real block replacement process execution unit 12200, a virtual block migration process execution unit 12300, a virtual block storage process execution unit 12400, and a virtual capacity determination process unit. 12500, a queue deletion processing unit 12600, and a queue registration processing unit 12700.
  • These programs are programs for realizing lower level wear leveling technology and capacity virtualization technology.
  • the flash package 230 realizes a lower level wear leveling technology and a capacity virtualization technology.
  • the data read processing execution unit 12000, the data write processing execution unit 12100, the real block replacement processing execution unit 12200, the virtual block migration processing execution unit 12300, the virtual block storage processing execution unit 12400, the virtual capacity determination processing unit 12500, and the queue deletion processing The processing flow of the unit 12600 and the queue registration processing unit 12700 will be described in detail.
  • the “xxx execution unit” that is, the program
  • the description is executed by the package processor 310. It expresses that processing is performed.
  • the operating entity of each step in the description of the processing flow is the package processor 310.
  • FIG. 28 shows a conceptual diagram of the relationship between the storage space V1 provided to the storage controller 200 by the flash package 230 and information necessary for access.
  • the flash package 230 manages the storage space V1 as a plurality of virtual block groups, and each virtual block group is composed of a plurality of virtual segments (there is also a management unit called a virtual block). However, the description of the virtual block is omitted in the figure).
  • the flash package 230 uses the virtual block group identifier (corresponding to the access target area) from the LBA included in the request. Number) and the relative address within the virtual block group (relative virtual segment number from the beginning of the virtual block group) are specified to specify the virtual segment to be accessed.
  • the virtual block group identifier can be calculated by dividing the LBA by the size of the virtual block group, that is, the virtual block size ⁇ the number of blocks in the virtual block group (m), and the remainder at the time of the division is virtual By dividing by the segment size, the relative virtual segment number within the virtual block group can be calculated.
  • the virtual block group information 3200 corresponding to the access target virtual block group can be specified.
  • the virtual segment pointer 3205 corresponding to the virtual segment to be accessed can be identified from the virtual segment pointer 3205 stored in the virtual block group information 3200.
  • the real segment to be accessed can be specified.
  • FIG. 29 is a processing flow of the data read processing execution unit 12000.
  • the data read process execution unit 12000 is a process flow executed when a read request is received from the storage controller 200.
  • FIG. 27 shown in the present embodiment, when the access range specified by the read request received from the storage controller 200 is one or a plurality of virtual segments stored in one virtual block group. Shows the processing.
  • the present invention is effective even when the access range specified by the read request extends over a plurality of virtual block groups.
  • Step 13000 The package processor 310 receives the virtual block group identifier corresponding to the read target address and the relative virtual in the virtual block group to be accessed in the manner described above from the address targeted by the received read request. Calculate the segment number. Then, virtual block group information 3200 corresponding to the access target virtual block group is specified.
  • Step 13001 In this step, real block information 3300 of the real block assigned to each virtual segment to be read is obtained from the real block information pointer 3202 of each virtual block group information 3200.
  • Step 13002 The flash chip 300 storing the real block corresponding to the real block information 3300 and the address in the flash chip 300 are specified from the real block identifier 3301 of each acquired real block information 3300.
  • the virtual segment pointer 3205 of the access target virtual segment is referred to, and the virtual segment to be accessed Calculate whether it is stored in the address.
  • Step 13003 The chip information 3100 corresponding to the flash chip 300 in which the read data is stored is accessed, the package bus 340 to which the flash chip 300 is connected is identified, and the corresponding package bus transfer device 350 is recognized. .
  • Step 13004 The package bus transfer device 350 recognized in Step 13003 is instructed from which address of which flash chip 300 to transfer data to the buffer 330.
  • Step 13005 After this, wait for the transfer to be completed.
  • Step 13006 The read data requested from the storage controller 200 stored in the buffer 330 is sent to the storage controller 200. Thereafter, the processing is completed.
  • FIGS. 30 and 31 are process flows of the data write process execution unit 12100.
  • FIG. The data write process execution unit 12100 is executed when the flash package 230 receives a write request from the storage controller 200.
  • the processing flow of FIGS. 30 and 31 shown in the present embodiment shows the processing flow of writing data to be stored in one virtual segment.
  • the present invention is also effective when data stored in a plurality of virtual segments is written by a write request.
  • the present invention is also effective when the access target range specified by the write request from the storage controller 200 is only a part of the virtual segment.
  • the flash package 230 reads the entire virtual segment, updates only the designated partial area, and writes the entire virtual segment.
  • Step 14000 The package processor 310 calculates the virtual block group number corresponding to the access target area and the relative virtual segment number in the virtual block group corresponding to the access target area from the address to be written by the received write request. This is the same processing as step 13001.
  • Step 14001 The write data designated by the write request and the guarantee code are received from the storage controller 200, and the write data is stored in the buffer 330. Further, 2-byte data indicating the feature amount is extracted and stored in an area of the buffer 330 different from the write data. In this case, since the data indicating the feature amount exists in units of 520 bytes, if the length of the virtual segment (excluding the guarantee code portion) is 8 Kbytes, the feature amount is 32 bytes in total, and if it is 4 Kbytes, the feature amount is 16 bytes in total. Will be stored. However, a part of the extracted feature quantities may be stored.
  • Step 14002 The first real block information pointer 3202 of the virtual block group information 3200 corresponding to the virtual segment to be written is acquired. Check if this value is null, that is, whether a real block is allocated. If assigned (step 14002: N), the process jumps to step 14005. If this value is null (step 14002: Y), no real block is allocated, and the process proceeds to step 14003.
  • Step 14003 This step is a step of assigning a free real block to the corresponding virtual block group.
  • the real block to be allocated is erased and no data is stored.
  • the free real block information pointer 3400 of the corresponding flash chip 300 is referenced so that the first real block information 3300 is indicated by the first real block pointer 3302 of the virtual block group information 3200. This assigns the first real block to the virtual block group.
  • the free block management information pointer 3400 indicates the next real block information 3300 (real block information 3300 indicated by the free real block pointer 3302 in the real block information 3300 of the real block allocated to the virtual block), and further
  • the empty real block pointer 3302 in the real block information 3300 of the real block assigned to the virtual block is set to null. Further, the number of free blocks 3103 in the chip information 3100 corresponding to the real block is reduced.
  • the value of the real block free capacity 3304 corresponding to the allocated real block is set to the capacity of the real block.
  • Step 14004 This step updates the information of the corresponding virtual block group. Further, the real block identifier 3301 and the head address in the real block of the real block assigned in step 14003 are set in the virtual segment pointer 3205 corresponding to the virtual segment specified in step 14000. Further, the capacity of the virtual segment to be written is set to the stored data amount 3203. The same value (capacity of the virtual segment to be written) is added to the package data storage amount 3006. Thereafter, the process jumps to step 14010.
  • Step 14005 Whether the received data can be written in the free area of the real block from the free space 3304 in the real block of the real block information 3300 corresponding to the real block to be written and the length of the write data stored in the buffer 330 Check. If it can be written (step 14005: N), the process jumps to step 14008.
  • Step 14006 This step is a step executed when the length of the write data is larger than the free area of the real block to be written (step 14005: Y). In this step, it is determined whether or not (m + 1) real blocks are allocated to the virtual block group. If (m + 1) real blocks are allocated, real blocks are not allocated. , Jump to step 14016.
  • Step 14007 This step is a step of allocating a real block in an empty state to the corresponding virtual block group.
  • the real block to be allocated is erased and no data is stored.
  • the number of empty real blocks 3103 in the chip information 3100 and the like it is determined which flash chip 300 real block is allocated.
  • the free real block information pointer 3400 of the corresponding flash chip 300 the first real block information 3300 is a null value among the plurality of real block pointers 3302 in the virtual block group information 3200, and The actual block pointer 3302 at the forefront is indicated. This assigns a new real block to the virtual block group.
  • the free real block information pointer 3400 indicates the next real block information 3300 (the real block information 3300 indicated by the free real block pointer 3302 in the real block information 3300 of the real block allocated to the virtual block), and
  • the empty real block pointer 3302 in the real block information 3300 of the real block assigned to the virtual block is set to null. Further, the number of free blocks 3103 in the chip information 3100 corresponding to the real block is reduced.
  • Step 14008 The virtual segment pointer 3205 is checked to recognize whether a real segment is assigned to the designated virtual segment. If not, jump to step 14010.
  • Step 14009 Here, since the data value of the virtual segment to be written changes, in order to execute processing for removing the virtual segment from the deduplication queue 1800, sinonium queue 1900, and simple sinonium queue 3550 , the queue deletion processing 12600 (also called dequeue processing) shown in FIGS. 32 and 33 is called.
  • Step 14010 According to the data content and feature amount of the virtual segment to be written (which is still stored in the buffer 330 at this time), the virtual segment is assigned to the deduplication queue 1800, sinonium queue 1900, simple syno
  • a queue registration process 12700 (also referred to as an enqueue process) shown in FIG. 34 is called.
  • Step 14011 It is checked whether deduplication has been completed. If deduplication has not been completed, the process jumps to step 14013.
  • Step 14012 A virtual capacity determination processing unit (FIG. 38; details will be described later) is called to update the virtual package capacity 3002 of the flash package 230. Then, the storage controller 200 indicates that deduplication has been performed, and the amount of data stored as a write target in the current write processing (when data for one virtual segment is written, it is equal to the size of the virtual segment), Data amount after deduplication of the data to be written in the write process (when data write processing for one virtual segment is performed and deduplication is possible, the data amount after deduplication is 0), virtual The package capacity 3002, the package data storage amount 3006, and the data storage amount 3007 after package deduplication are notified, and the processing is completed.
  • the storage controller 200 indicates that deduplication has been performed, and the amount of data stored as a write target in the current write processing (when data for one virtual segment is written, it is equal to the size of the virtual segment), Data amount after deduplication of the data to be written in the write process (when data write processing for one virtual segment is performed and deduplication
  • Step 14013 The last real block (the real block indicated by the last real block information pointer 3202 for which the real block information pointer 3202 is not a null value) in the real blocks assigned to the virtual block group is to be written. .
  • An address (chip ID 3101 and a relative address in the flash chip 300) to be written this time is determined from the actual block free space 3303 of the target real block. This address is set in the virtual segment pointer 3205 of the virtual segment. Further, the address of the virtual segment (the address on the package memory 320 in which the virtual segment pointer 3205 is stored) is set in the reverse pointer 3306 corresponding to the real segment to be written. In addition, the corresponding bit of the real segment bitmap 3305 is turned on.
  • Step 14014 A write request is set in the package bus transfer device 350 so that the write data received in the buffer 330 is written in the real block and the real segment to be written, and waits for completion.
  • an 8-byte guarantee code including a 2-byte feature amount is written for each data 512 bytes in the actual segment.
  • Step 14015 The free real block capacity 3303 corresponding to the real block is reduced.
  • the capacity of the virtual segment to be written is added to the data storage amount 3007 after package de-duplication.
  • the virtual capacity determination processing unit is called to update the virtual package capacity 3002 of the flash package 230.
  • the storage controller 200 indicates that deduplication could not be performed, and the amount of data stored as a write target in the current write process (when data for one virtual segment is written, it is equal to the size of the virtual segment) ,
  • the amount of data after deduplication of the data to be written in this write process (if the data for one virtual segment was written and deduplication could not be performed, the data amount after deduplication was stored
  • the virtual package capacity 3002, the package data storage amount 3006, and the data storage amount after package deduplication 3007 are notified, and the processing is completed.
  • Step 14016 The real block replacement processing unit 12200 shown in FIG. 35 is called, a new real block is allocated, and only valid real segments are stored. Thereafter, the process returns to step 14008.
  • 32 and 33 execute a process of deleting a virtual segment to be processed from the simple synonym queue 2100, the sinonium queue 1900, and the deduplication queue 1800.
  • Step 20000 First, it is checked whether the previous deduplication pointer 3208 corresponding to the virtual segment is null. If it is null (step 20000: Y), the process jumps to step 20003. If not null (step 20000: N), the process proceeds to step 20001.
  • Step 20001 A process for removing the virtual segment from the deduplication queue 1800 is executed. Thereafter, the rear deduplication pointer 3207 and the previous deduplication pointer 3208 of the virtual segment are made null. Thereafter, the process is terminated.
  • Step 20003 It is checked whether the post-deduplication pointer 3207 is null. If not null (step 20003: N), the process jumps to step 20005. If it is null, go to step 20004.
  • Step 20004 Information on the real segment corresponding to the virtual segment is updated. Specifically, the bit corresponding to the virtual segment is turned off for the real segment bitmap 3305 in the real block information 3300 which is management information of the real block storing the real segment corresponding to the virtual segment. . Note that the reverse pointer 3306 corresponding to the turned-off bit is set to null. The virtual segment pointer 3205 corresponding to the corresponding virtual segment is set to null.
  • FIG. 19 shows that the virtual segment is connected to the deduplication queue 1800.
  • the head (0th) virtual segment pointer 3205 in the virtual block group information 3200a is stored in the deduplication queue 1800, although it is different from the state of the virtual segment to be processed in step 20004.
  • the head (0th) virtual segment pointer 3205 in the virtual block group information 3200a is stored in the deduplication queue 1800, although it is different from the state of the virtual segment to be processed in step 20004.
  • it is not connected.
  • the head (0th) virtual segment pointer 3205 in the virtual block group information 3200a points to the second real segment in a certain real block.
  • the second bit of the real segment bitmap 3305 in the real block information 3300 corresponding to this real block is ON, and the second reverse pointer is changed to the zeroth virtual segment pointer 3205 (in the figure, “ Virtual segment pointer (number 0) ”. If the virtual segment pointer 3205 of the “virtual segment” is the first (0th) virtual segment pointer 3205 in the virtual block group information 3200a in FIG. 19 in step 20004, the first (0th) virtual segment pointer 3205 in FIG. Processing for turning off the bit of the real segment bitmap 3305 (the second bit of the real segment bitmap 3305 in FIG.
  • Step 20005 Corresponding to the real segment reverse pointer 3306 (reverse pointer in the real block management information 3300 corresponding to the real block to which the real segment belongs) corresponding to the virtual segment to be processed this time After that, a pointer to the virtual segment indicated by the deduplication pointer 3207 (the address on the package memory 320 in which the virtual segment pointer 3205 corresponding to the virtual segment is stored) is set.
  • step 20005 A specific example of the management information operation performed in step 20005 will be described with reference to FIG. It is assumed that the virtual segment pointer corresponding to the virtual segment to be processed in step 20005 is the first (0th) virtual segment pointer 3205 in the virtual block group information 3200a.
  • the second reverse pointer 3306 in the real block information 3300 in FIG. 19 in FIG. 19, the head (0th) virtual segment pointer 3205 in the virtual block group information 3200a is pointed to).
  • the virtual segment indicated by the post-deduplication pointer 3207 corresponding to the virtual segment to be processed in the example of FIG. 19, this is the first (first) virtual segment in the virtual block group information 3200b).
  • an address on the package memory 320 in which the virtual segment pointer (No. 1) 3205 in the virtual block group information 3200b is stored is set in the reverse pointer 3306.
  • Step 20006 It is checked whether or not the previous sinonium pointer 3208 is null. If it is null (step 20006: Y), the process jumps to step 20010.
  • Step 20007 If the previous sinonium pointer 3208 is not null in the determination of step 20006 (step 20006: N), step 20007 is executed. In step 20007, it is checked whether or not the sinium pointer 3209 after the virtual segment is null. If null, jump to step 20009.
  • Step 20008 If the post-cynonium pointer 3209 is not null in the determination of step 20007 (step 20007: N), step 20008 is executed.
  • step 20008 the virtual segment is removed from the deduplication queue 1800 and the sinonium queue 1900, and the virtual segment indicated by the post-deduplication pointer 3207 of the virtual segment is moved to the position of the sinonium queue 1900 to which the virtual segment was connected. Connecting. Further, the virtual segment's previous deduplication pointer 3208 indicated by the virtual segment's post-deduplication pointer 3207 is set to a null value. Thereafter, the post-deduplication pointer 3207 and the front exclusion pointer 3208 of the virtual segment are set to null values. After this, the rear sinonium pointer 3209 and the previous sinonium pointer 3210 of the virtual segment are made null. Thereafter, the processing is terminated.
  • Step 20009 A process of removing the virtual segment from the deduplication queue 1800 is executed. Thereafter, the rear deduplication pointer 3207 and the previous deduplication pointer 3208 of the virtual segment are made null. Thereafter, the processing is terminated.
  • step 20008 and step 20009 the virtual segment to be processed may not be connected to the deduplication queue. In that case, there is no need to perform the process of deleting the virtual segment from the deduplication queue.
  • Step 20010 It is confirmed whether both the post-deduplication pointer 3207 of the virtual segment and the post-sinonium pointer 3209 of the virtual segment are both null. If so, jump to step 20061.
  • Step 20011 It is checked whether the deduplication pointer 3207 after the virtual segment is null. If it is null, the process jumps to step 20015.
  • Step 20012 It is checked whether or not the sinium pointer 3209 after the virtual segment is null. If it is null, the process jumps to step 20014.
  • Step 20013 The virtual segment is removed from the deduplication queue 1800, the sinonium queue 1900, and the simple sinonium queue 3550, and the virtual segment indicated by the deduplication pointer 3207 after the virtual segment is the simple syno to which the virtual segment is connected. It connects to the position 2000 of the nium cue 3550 and the sinonium cue. Further, the virtual segment's previous deduplication pointer 3208 indicated by the virtual segment's post-deduplication pointer 3207 is set to a null value. Thereafter, the post-deduplication pointer 3207 and the front exclusion pointer 3208 of the virtual segment are set to null values. Thereafter, the rear sinonium pointer 3209 and front sinonium pointer 3210 of the virtual segment, and the rear simple sinonium pointer 3211 and front sinonium pointer 3212 are made null. Thereafter, the processing is terminated.
  • Step 20014 The virtual segment is removed from the deduplication queue 1800 and the simple sinonium queue 3550, and the virtual segment indicated by the post-deduplication pointer 3207 of the virtual segment is the position of the simple sinonium queue 3550 to which the virtual segment is connected. Connect to. Further, the virtual segment's previous deduplication pointer 3208 indicated by the virtual segment's post-deduplication pointer 3207 is set to a null value. Thereafter, the post-deduplication pointer 3207 and the front exclusion pointer 3208 of the virtual segment are set to null values. Thereafter, the rear simple sinium pointer 3211 and the previous simple sinonium pointer 3212 of the virtual segment are set to null. Thereafter, the processing is terminated.
  • Step 20015 The virtual segment is removed from the simple sinium queue 3550 and the sinonium queue 1900, and the virtual segment indicated by the sinonium pointer 3210 after the virtual segment is set to the position of the simple sinonium queue 3550 to which the virtual segment is connected. Connect to.
  • the front sinonium pointer 3210 of the virtual segment indicated by the sinonium pointer 3210 after the virtual segment is set to a null value.
  • the subsequent sinonium pointer 3209 and the previous sinonium pointer 3210 of the virtual segment are set to a null value.
  • the rear simple sinium pointer 3211 and the previous simple sinonium pointer 3212 of the virtual segment are set to null. Thereafter, the processing is terminated.
  • Step 20016 The virtual segment is deleted from the simple sinonium queue 3550. Thereafter, the simple sinium pointer 3211 and the previous simple sinium pointer 3212 of the virtual segment are made null. Thereafter, the processing is terminated.
  • FIG. 34 is a processing flow of the queue registration processing unit 12700 that registers (enqueues) the virtual segment in the simple sinium queue 3550, the sinonium queue 1900, and the deduplication queue 1800.
  • Step 21000 The received feature value is set in the virtual segment feature value 3206. Also, a simple feature value is calculated from the feature value. Various methods can be adopted as a simple feature amount calculation method. It is not always necessary to perform a complex operation such as a hash function. For example, when the size of the simple feature quantity is n bytes, a method of extracting n-byte data from a predetermined position (such as the top) of the feature quantity may be used.
  • Step 21001 Referring to the simple feature table 3500, it is checked whether the simple feature pointer 3510 corresponding to the simple feature of the data written this time is null. If not null (step 21001: N), jump to step 21003.
  • Step 21002 The value of the simple feature pointer 3510 is changed to point to the virtual segment pointer 3205 of the virtual segment (the address on the package memory 320 where the virtual segment pointer 3205 is stored is stored in the simple feature pointer 3510) To do). After that, it has information to notify the caller that deduplication could not be performed, and returns to the caller (data write process execution unit 12100 or the like program that called the queue deletion process).
  • Step 21003 It is checked whether or not the virtual segment feature value 3206 of the virtual segment indicated by the simple feature value pointer 3510 is equal to the virtual segment feature value 3206 of the virtual segment (the destination pointed directly by the simple feature value pointer 3510 is The package processor 310 of the flash package 230 grasps the storage position of the rear simple sinium pointer 3211 and the storage position of the virtual segment feature quantity 3206 and the like in the virtual block group information 3200. Therefore, if the storage position of the later simple sinium pointer 3211 is found by referring to the simple feature value pointer 3510, the storage position of the virtual segment feature value 3206 and other information is also found). If they are equal, jump to step 21006.
  • Step 21004 It is checked whether the simple sinium pointer 3211 after the virtual segment with reference to the feature quantity is null. If it is not null (step 21004: N), the virtual segment indicated by the subsequent simple sinonium pointer 3211 is set as the next comparison target, and the process jumps to step 21003.
  • Step 21005 If the determination result in Step 21004 is null (Step 21004: Y), it means that the tail of the simple sinonium queue 3550 has been reached. Information setting to be added to the end of 3550 is performed. After that, it has information to notify the caller that deduplication could not be performed, and returns to the caller.
  • Step 21006 The real segment pointed to by the virtual segment pointer 3205 corresponding to the virtual segment found in step 21003 is recognized, and it is recognized at which address of which flash chip 300 (the virtual segment pointer 3205 contains Since the real block information (real block information 3300) corresponding to the virtual segment and the relative address in the real block corresponding to the virtual segment are stored, the real segment can be substantially specified by the information. Further, it is possible to specify which address of which flash chip 300 is stored from the real block information 3300).
  • Step 21007 The transfer device 350 is requested to read data from the address of the flash chip 300 specified in Step 21006, and the transfer is waited for.
  • Step 21008 The comparison circuit 370 is requested to compare the read value with the value of the written data. Wait until the result is obtained.
  • Step 21009 If the comparison results in step 21008 are equal (step 21209: N), the process jumps to step 21012.
  • Step 21010 If the comparison results in step 21008 are not equal (step 21209: Y), step 21010 is executed. In step 21010, it is compared whether or not the post-cynonium pointer 3209 corresponding to the read virtual segment is null. If it is not null, the virtual segment indicated by the post-sinium pointer 3209 is set as the next comparison target, and the process jumps to step 21006.
  • Step 21011 If the determination in step 21010 is null, it means that the tail end of the sinonium queue 1900 has been reached, so that the virtual segment to be written this time is added to the tail end of the sinonium queue 1900. Set up. After that, it has information to notify the caller that deduplication could not be performed, and returns to the caller.
  • Step 21012 In this case, deduplication can be performed. It is checked whether the post-deduplication pointer 3207 of the virtual segment read out in step 21007 is null. If not, the virtual segment read out is traced by following the post-deduplication pointer 3207 of the virtual segment that has been read out. Finds the last virtual segment of the deduplication queue to which it belongs. The information stored in the virtual segment pointer 3205 of the last virtual segment in the deduplication queue is copied to the virtual segment pointer 3205 of the virtual segment to be written. Thus, for example, as shown in FIG. 28, the virtual segment to be written this time is the virtual segment # (s-1) of the virtual block group # 0, and the data content of the virtual segment is the same as the virtual segment # 1.
  • the virtual segment pointer 3205 of the virtual segment # (s-1) points to the same real segment as the virtual segment pointer 3205 of the virtual segment # 1, and thus the deduplication processing has been performed.
  • the virtual segment to be written is added to the end of the deduplication queue. After that, it has information to notify the caller that deduplication has been completed, and returns to the caller.
  • FIG. 35 shows a processing flow of the real block group replacement processing unit 12200.
  • the real block group replacement processing unit executes a process of replacing the real block group assigned to the virtual block group with another set of real blocks. This is executed when there is no more free space in m + 1 real blocks.
  • the reason for assigning another real block is to reduce the deviation of the erase count of the real block. This process is called a wear leveling process.
  • Step 22000 In this step, another real block group is assigned to the virtual block group.
  • the number of real blocks to be allocated is determined as follows. First, the real block information 3300 of the real block assigned to the virtual block group is specified. Then, the number of real segments bitmap 3305 in each real block information 3300 is summed to determine the number of real segments, and the number of real blocks to be allocated is calculated from the calculated number of real segments (for example, The number of real segments divided by the number of real segments that can be stored in one real block can be calculated). When the calculated value becomes 0, the number of real blocks to be assigned is 1.
  • Step 22001 In this step, the wear leveling processing unit is called by using the number of necessary real blocks as an input value to determine a real block. From the wear leveling processing unit, the address of the real block information 3300 of the real block storing the write data is received by the number equal to the input value. This real block is in an erased state and is in a state where data can be directly written. In this embodiment, since the wear leveling processing unit is premised on a technique used in a conventional flash memory storage, it will not be described in detail here.
  • Step 22002 Here, valid data is read from the set of real blocks that have been assigned to the virtual block group.
  • the real segment in which the real segment bitmap 3305 of each real block is turned on is read into the buffer. Therefore, an address list indicating whether to transfer to the buffer is generated from the set of these real segment addresses. However, if the set of real segment addresses is an empty set, the process ends and returns.
  • valid data that is, a real segment to be read is selected with reference to the real segment bitmap 3305, but as another method, the read target is referred to with reference to the reverse pointer 3306. Real segments may be selected.
  • Step 22003 The chip information 3100 of the flash chip 300 corresponding to the real block is accessed from the real block identifier 3301 of the real block information 3300 specified in step 2200, and the package bus 340 to which the flash chip 300 is connected is accessed. And the corresponding package bus transfer device 350 is recognized.
  • Step 22004 The package bus transfer device 350 recognized in Step 22003 is instructed to read data from which address of which flash chip 300 to the buffer 330 according to the instruction information generated in Step 22002.
  • an 8-byte guarantee code including a 2-byte feature amount for each data 512 bytes is also read into the buffer 330 in the actual segment.
  • Step 22005 After this, it waits for the reading to the buffer 330 to be completed.
  • Step 22006 The reverse pointer 3306 corresponding to the real segment for which the real segment bitmap 3305 is turned on is sequentially copied from the top to the reverse pointer 3306 of the set of real blocks allocated this time. Further, the real segment bitmap 3305 of the set of real blocks allocated this time is turned on by the number of real segments read from the head.
  • Step 22007 The reverse pointer 3306 at the head of the real block allocated this time is recognized.
  • Step 22008 The virtual segment indicated by the reverse pointer 3306 is recognized, and the address of the real segment (the real block identifier of the real block to which the real segment belongs and the relative address in the real block) is stored in the virtual segment pointer 3205 of the corresponding virtual segment. Set. When the virtual segment is connected to the deduplication queue 1800, the address of the real segment is also set in the virtual segment pointer 3205 of another virtual segment belonging to the deduplication queue 1800 to which the virtual segment is connected. To do.
  • Step 22009 It is recognized whether or not the last reverse pointer has been reached, and if it has not reached, the process jumps to 22008 with the next reverse pointer 3306 as the processing target.
  • Step 22010 Instruct to write data from the buffer 330 to a set of real segments with the real segment bitmap 3305 turned on.
  • an 8-byte guarantee code including a 2-byte feature amount is written for each data 512 bytes in the actual segment.
  • Step 22011 After that, it waits for the writing from the buffer 330 to be completed.
  • Step 22012 The real block information 3300 corresponding to the real block assigned to the virtual segment group is returned to the free block management information queue 1700. At this time, necessary information of the corresponding real block information 3300 is initialized.
  • Step 22013 Information on the set of real blocks assigned this time is set in the real block information pointer 3202 of the virtual block group information 3200 corresponding to the virtual block group. Thereafter, the process is terminated.
  • FIG. 36 is a processing flow of the virtual block movement processing execution unit 12300.
  • the virtual block migration process execution unit 12300 is a process that is executed when receiving an instruction from the storage controller 200 to transmit data stored in a specified set of virtual segments. In this process, instructions for all virtual segments included in the real page are received from the storage controller 200. That is, since a movement instruction is given in units of virtual segments, there is no transfer request for some segments of the virtual block group.
  • Step 16000 A set of virtual block groups instructed to be released is calculated.
  • Step 16001 Here, information to be sent to the storage controller 200 is edited. Specifically, for all specified virtual block groups, if the virtual segment pointer 3205 of the virtual segment group is null, information indicating that no data is stored is stored if it is not null. Is set as information to be sent to the storage controller 200. If stored, the feature amount set in the virtual segment feature amount 3206 is set as information to be sent to the storage controller 200. Further, the total value of the data amount stored at the address indicated by the virtual segment pointer 3205 that is not a null value is subtracted from the package data storage amount 3006.
  • the deduplication processing of the address indicated by the non-null virtual segment pointer 3205 (if there is the same address, this is made one) is calculated, and the total value of the virtual segment sizes is calculated, and this value is calculated.
  • the data storage amount after package deduplication 3007 is reduced.
  • Step 16002 A transfer list indicating a chip ID to be read and a relative address in the chip is created from real segments indicated by all virtual segment pointers 3205 that are not null values.
  • Step 16003 For virtual segments that are not null values, the virtual segments are removed from the simple sinium queue 3550, sinonium queue 1900, and deduplication queue 1800, so the queue deletion shown in FIGS. 32 and 33 is performed for each virtual segment.
  • the processing unit 12500 is called.
  • Step 16004 The chip information 3100 corresponding to the flash chip 300 in which the real segments indicated by all virtual segment pointers that are not null values are stored is identified, and the package bus 340 to which the flash chip 300 is connected is identified. The corresponding package bus transfer device 350 is recognized.
  • Step 16005 A request for transferring data from the flash chip 300 (identified in Step 16004) to be transferred to the buffer 330 is issued to the package bus transfer device 350 recognized in Step 16004.
  • This request includes a transfer list (generated in step 16002) for the flash chip 300 to be transferred.
  • an 8-byte guarantee code including a 2-byte feature amount for each data 512 bytes is also read into the buffer 330 in the actual segment.
  • Step 16006 Wait for transfer to complete.
  • Step 16007 In this step, the real block information 3300 corresponding to all the real blocks assigned to all the corresponding virtual block groups is returned to the free real block information queue 1700.
  • Step 16008 The data stored in the buffer 330 is sent to the storage controller 200. First, information indicating whether data is stored for each virtual segment or not is sent. If the data is stored, the data and an 8-byte guarantee code are sent.
  • FIG. 37 is a processing flow of the virtual block storage processing execution unit.
  • the virtual block storage processing execution unit 12400 receives a request from the storage controller 200 to allocate each real block to the specified set of virtual blocks and store the data sent from the storage controller 200, the virtual block storage processing execution unit 12400 executes Process. Since the data flow is the reverse of the virtual block movement process execution unit 12300 and there are many common points, the description will be made with reference to the steps of the process flow of FIG.
  • Step 17000 Similar to step 16000, the target virtual block group is recognized from the set of virtual segments instructed to be stored.
  • Step 17001 The flash package 230 receives the following information from the storage controller 200. For these pieces of information, a value indicating whether or not data is stored for each virtual segment in the set of designated virtual segments is received in the buffer. Further, when data is stored, the data is received by a write command using 520 bytes including the guarantee code 8 bytes as one transfer unit. Further, 2-byte data indicating the feature amount is extracted from the guarantee code and stored in the buffer. In this case, since the data indicating the feature amount exists in units of 520 bytes, if the length of the virtual segment (excluding the guarantee code part) is 8K bytes, the feature amount is 32 bytes in total, and if it is 4K bytes, the feature is 16 bytes in total. Will store the quantity. However, a part of the extracted feature quantities may be stored. Next, the designated virtual segment is classified for each virtual block group.
  • Step 17002 A virtual block group instructed to store data is searched. If not, jump to step 17015.
  • Step 17003 The first virtual segment of the virtual block group is set as a processing target. At this time, one real block is allocated to the virtual block group. Also, the real block capacity is set in the real block free capacity 3304.
  • Step 17004 It is checked whether the information received from the storage controller 200 of the virtual segment to be processed indicates that no data is stored. If yes, jump to Step 17006.
  • Step 17005 Here, the virtual segment pointer 3205 of the corresponding virtual segment is set to a null value. Thereafter, the next virtual segment is set as a processing target, and the process jumps to Step 17004.
  • Step 17006 The received feature quantity is set in the virtual segment feature quantity 3206 of the virtual segment. Further, the size of the virtual segment is added to the package data storage amount 3006. Further, in order to execute the process of registering the virtual segment in the simple sinonium queue 3550, the sinonium queue 1900, and the deduplication queue 1800 and the deduplication process, the queue registration process shown in FIG. 34 is called.
  • Step 17007 If the result of the queue registration process executed in step 17006 is received and a notification that deduplication has been completed is received, the process jumps to step 17013. If a notification indicating that deduplication could not be performed has been received, the process proceeds to step 17008.
  • Step 17008 Write the corresponding virtual segment data.
  • the address (chip ID 3101 and relative address in the flash chip 300) to be written this time is determined from the real block address of the corresponding real block and the free real block capacity. This address is set in the virtual segment pointer 3205 of the virtual segment. Further, the address of the virtual segment is set in the reverse pointer 3306 corresponding to the real segment to be written. Further, the actual segment bit 3305 corresponding to the actual segment to be written is turned on.
  • Step 17009 Write data received in the buffer 330 is set in a transfer request to the real block and real segment to be written, and waits for completion.
  • an 8-byte guarantee code including a 2-byte feature amount is written for each data 512 bytes in the actual segment.
  • Step 17010 The free capacity 3304 in the real block corresponding to the real block is reduced. Further, the size of the virtual segment is added to the data storage amount 3007 after package deduplication.
  • Step 17011 It is checked whether or not the free space 3304 in the real block of the corresponding real block is 0. If not 0, jump to Step 17013.
  • Step 17012 In this step, a new real block is assigned to the virtual block group. Then, the real block capacity value is stored in the real block free capacity 3304 of the real block information 3300 corresponding to the real block assigned to the virtual block group.
  • Step 17013 It is checked whether the processing has been completed up to the last virtual segment of the virtual block group. If so, return to Step 17002.
  • Step 17014 The next virtual segment is processed, and the processing returns to step 17004.
  • Step 17015 A completion report is sent to the storage controller 200, and the process is terminated.
  • FIG. 38 is a processing flow of the virtual capacity determination processing unit 12500.
  • the virtual capacity virtual package capacity 3002 of the package 300 needs to be adjusted by grasping the deduplication rate. If it is determined that adjustment is necessary, the capacity is determined and set to the virtual package capacity 3002. Furthermore, the fact that the capacity and the capacity have been changed is returned to the caller.
  • Step 18000 The ratio of package data storage amount 3006 / virtual package capacity 3002 is calculated, and this is set to ⁇ ( ⁇ is the data storage rate). If this value is equal to or less than ⁇ (sufficiently small), it is determined that so much data has not yet been stored, the adjustment is not performed, and the process returns to the caller.
  • Step 18001 Next, the value of the virtual package capacity 3002 / the actual package capacity 3003 is calculated, and this value is set to ⁇ (referred to as a virtual / real package capacity ratio). Further, the value of package data storage amount 3006 / package deduplication data storage amount 3007 is calculated, and this is set as ⁇ . In the present specification, this ⁇ is called a deduplication rate.
  • Step 18002 ⁇ and ⁇ are compared. If they are almost equal, the available virtual package capacity 3002 has been set, so no adjustment is made, and the process returns to the caller.
  • ⁇ > ( ⁇ + threshold 1) (when the virtual capacity is too large), or when ⁇ ⁇ ( ⁇ threshold 2) (when the virtual capacity is too small)
  • the process proceeds to step 18003 to adjust the virtual package capacity 3002. Do.
  • the threshold value 1 and the threshold value 2 may be the same value or different values.
  • Step 18003 Here, the virtual capacity is adjusted (changed).
  • the value of the virtual capacity after adjustment is, for example, actual package capacity * ⁇ . This is an ideal value if the deduplication rate ⁇ does not change in the future. However, instead of the method of immediately changing the value of the virtual capacity to this ideal value, (actual package capacity ⁇ package data storage amount after deduplication 3007) * ⁇ + package data storage amount after deduplication 3007 * ⁇ is calculated as the virtual capacity. You may take the method.
  • the determined virtual capacity value is set in the virtual package capacity 3002, and the caller is notified of the adjustment of the virtual capacity and the determined value to complete the process.
  • each flash package having a large number of flash memories has a deduplication function, and the storage controller performs feature quantity calculation in a large-capacity storage system in which a large number of flash packages are connected. Since the feature amount is transmitted to the flash package, the flash package does not need to calculate a feature amount that requires a complicated calculation, and enables deduplication processing with low overhead. In addition, since feature amounts are transmitted and received using a data format and commands standardized by the SCSI standard, it is not necessary to mount a new interface for transmitting and receiving feature amounts.
  • the flash package provides a storage space (virtual capacity) larger than the physical storage area to the storage controller using a lower level capacity virtualization technology, and when the storage area that can be used increases by deduplication processing, Since the increased virtual capacity is notified to the storage controller, the storage controller can effectively use the storage area saved by the deduplication processing.
  • the hardware configuration of the information system, storage system, and flash package in the second embodiment is the same as that of the first information system.
  • the storage system 200 in the second embodiment is different from the storage system 200 in the first embodiment in that the flash package 230 does not constitute the flash package group 280.
  • the flash package 230 has a deduplication function.
  • the storage controller 200 appropriately controls the data storage destination, thereby reducing the deduplication rate.
  • the storage controller 200 calculates a feature amount of data to be written, and determines a flash package 230 as a data storage destination based on the calculated feature amount. For example, if a plurality of data having the same feature amount of data to be written is stored in the same flash package 230, the deduplication rate can be improved.
  • the storage system 100 has a hierarchical capacity virtualization function.
  • the flash package 230 all the storage media in the storage system are the flash package 230, but the present embodiment is effective even if other storage media such as an HDD are included. Further, it is assumed that the flash packages 230 in this embodiment have the same capacity. Also in this embodiment, if the hash value or feature amount of newly written data is equal to the hash value or feature amount of the data that has been stored so far, the flash package 230 stores that data and the newly stored data. If the values are equal to the data to be received, if they are equal, the newly received data is not stored. As a result, a capacity reduction effect can be obtained. If they are not equal, the newly received data is written to another area. In the second embodiment, the hash value and feature amount used by the flash package 230 may be received from the storage controller 200 or may be calculated by the flash package 230.
  • the flash package 230 is recognized by the storage controller 200 as a single storage device. Therefore, it is assumed that the storage controller 200 has a RAID function capable of recovering data of the flash package 230 even if one flash package 230 fails for high reliability.
  • RAID segment groups n pieces of data in segment units and parity segment groups generated from the n pieces of data (hereinafter referred to as RAID segment groups) are stored in different flash packages 230. For each RAID segment group, the flash package 230 to be stored is determined in consideration of the segment feature amount. Therefore, in the storage system according to the second embodiment, the concept that a RAID group is configured by a plurality of flash packages 230, that is, the concept of the flash package group 280 that the storage system 100 according to the first embodiment has. (And management information).
  • FIG. 41 shows information related to the present embodiment in the shared memory 220 of the storage system 100 in the second embodiment, and includes logical volume information 2000, real page information 2100 ′, free real page management information pointer 2200, virtual The RAID segment group address table 2300, the flash package information 2500 ′, and the virtual page capacity 2600 are configured. These pieces of information are necessary for the storage controller 200 to improve the upper level capacity virtualization technology and the deduplication rate.
  • the storage controller 200 supports a high-level capacity virtualization function.
  • the present invention is effective even if the storage controller 200 does not have a higher level capacity virtualization function.
  • a storage area allocation unit is called a page.
  • the logical volume space is divided in units of virtual pages.
  • the normal capacity virtualization function when a virtual page is written, a real page on an actual storage medium is allocated.
  • the flash package 230 for storing the virtual segment is determined for each virtual segment according to the feature amount, the actual page is not an actual storage medium but a logical space. Therefore, this logical virtual segment is called a logical virtual segment.
  • the actual page includes redundant data generated by the RAID function. Since the amount of redundant data differs depending on the RAID type, the capacity of the real page is determined by the RAID type of the logical volume to which the real page is allocated (logical volume RAID type 2003 stored in the logical volume information). This is the same as in the first embodiment.
  • n data (virtual segments) and m parities (virtual segments) generated from the n data are stored on the real page. It was stored in one flash package group 280 consisting of (m + n) flash packages 230. Each of the n pieces of data and the m pieces of parity is stored in one of the (m + n) flash packages 230 constituting the flash package group 280 (so as not to overlap). Further, this storage destination is fixedly determined.
  • the features of the second embodiment are the same as in the first embodiment in that the flash package has the real page configuration and deduplication function, but the logical virtual segment including the parity includes its logical virtual segment.
  • a feature of the storage system 200 according to the second embodiment is that the storage controller 200 determines the flash package 230 to be stored and its virtual segment based on the hash value and feature amount obtained from the segment. Since segments that can be de-duplicated have the same hash value and feature amount, deduplication rates can be improved by storing virtual segments with the same hash value and feature amount in the same flash package 230.
  • each segment belonging to the same RAID segment group (in order to be able to recover data based on data stored in a non-failed flash package when a flash package fails) Store in separate flash packages.
  • the physical page is allocated a physical area on the flash package 230.
  • a real page is a logical area composed of a logical virtual segment that stores data and a logical virtual segment that stores redundant data.
  • the storage controller 200 determines which virtual segment in the flash package 230 is assigned to each logical virtual segment.
  • the format of the logical volume information 2000 of the second embodiment is the same as that of the first embodiment. Further, the point that redundant data such as parity is included in the real page is the same as in the first embodiment.
  • the number of sets of redundant data to be generated from the number of sets of data is determined by the logical volume RAID type 2003, as in the first embodiment.
  • n logical virtual segments storing data and m logical virtual segments storing redundant data generated therefrom are stored in the real page, and further, data is stored in the next real page.
  • N logical virtual segments storing m and m logical virtual segments storing redundant data generated therefrom are stored. Therefore, in the second embodiment, one real page corresponds to one RAID segment group.
  • FIG. 43 shows the format of the real page information 2100 '.
  • the real page information 2100 ' is management information of a corresponding real page that exists for each real page.
  • the real page information is composed of a plurality of logical virtual segment pointers 4000.
  • the number of logical virtual segment pointers 4000 is the number of logical virtual segments included in a real page (when n logical virtual segments and m logical virtual segments are stored in a real page, the logical virtual segment pointer 4000 Is (n + m)).
  • the logical virtual segment pointer 4000 stores information indicating which virtual segment of which flash package 230 is allocated. If not assigned, it has a null value.
  • each flash package 230 has a capacity virtualization function, and apparently provides the storage controller 200 with a capacity larger than the actual physical capacity.
  • FIG. 44 shows the format of the flash package information 2500 '.
  • the flash package information 2500 ′ includes a flash package ID 2501, a flash package virtual capacity 2502, a virtual block capacity 2503, a flash package maximum capacity 2511, virtual segment management information 2506, a head free virtual segment management information pointer 2504, and a tail free virtual segment management information pointer. 2512, a head unusable virtual segment management information pointer 2505 and a tail unusable virtual segment management information pointer 2510.
  • the flash package ID 2501 is an identifier of the flash package 230.
  • the flash package virtual capacity 2502 is a virtual capacity of the flash package 230.
  • the virtual block capacity 2503 is the capacity of the virtual block of the flash package 230.
  • the flash package maximum capacity 2511 is the maximum virtual capacity that the flash package 230 can take.
  • the virtual segment management information 2506 is prepared in the same number as the number of virtual segments when the virtual capacity of the flash package 230 reaches the maximum virtual capacity.
  • the configuration of the virtual segment management information 2506 indicates a previous virtual segment management information pointer 2508, a rear virtual segment management information pointer 2507, and a virtual segment address 2509.
  • the subsequent virtual segment management information pointer 2507 is a pointer for indicating the subsequent virtual segment management information 2506.
  • the previous virtual segment management information pointer 2508 is a pointer for indicating the previous virtual segment management information 2506.
  • the virtual segment address 2509 is an address where the virtual segment is located (an address on the storage space provided by the flash package to the storage controller 200), and this value and the flash package ID 2501 are the logical virtual segment pointer 4000 of the real page information 2100 ′.
  • the free virtual segment management information queue 42000 shown in FIG. 45 represents a set of free virtual segment queues managed by the head free virtual segment management information pointer 2504 and the tail free virtual segment management pointer 2512 in the flash package information 2500 ′. ing.
  • the first free virtual segment management information pointer 2504 indicates the address of the first free virtual segment management information 2506.
  • the rear virtual segment management information pointer 2507 in the first virtual segment management information 2506 points to the next free virtual segment management information 2506.
  • the tail empty virtual segment management information pointer 2512 indicates the address of the tail empty virtual segment management information 2506.
  • a previous virtual segment management information pointer 2508 included in the last free virtual segment management information 2506 indicates the previous free virtual segment management information 2506. In FIG.
  • a null value is stored in the virtual segment management information pointer 2504 after the last free virtual segment management information 2506.
  • a null value is also stored in the previous virtual segment management information pointer 2512 of the first free virtual segment management information 2506.
  • the virtual segment management information 2506 is returned to the end.
  • the virtual segment management information 2506 is taken out from the head. This is for facilitating the wear leveling of the actual block of the flash package 230.
  • the unusable virtual segment management information queue 4300 shown in FIG. 46 represents a set of unusable virtual segment information 2506 managed by the head unusable virtual segment management information pointer 2505 and the tail unusable virtual segment management information pointer 2510. Yes.
  • the structure is the same as that of the free virtual segment queue management information queue 42000.
  • the virtual segment management information 2506 managed by the free virtual segment management information queue 42000 is moved to the unusable virtual segment management information queue 2701 by the number.
  • the physical free capacity of the flash package 230 increases, and the virtual segment management information 2506 managed in the unusable virtual segment management information queue 4300 is transferred to the free virtual segment management information queue 42000 by that number. .
  • the storage controller 200 has an upper level capacity virtualization function, and the flash package 230 has a lower level capacity virtualization function. Therefore, even if the virtual capacity of the flash package 230 is changed, the virtual segment management information 2506 can be dealt with only by moving it in the manner already described.
  • the virtual segment management information 2506 when returning the virtual segment management information 2506 to the unusable virtual segment management information queue 4300, the virtual segment management information 2506 is returned to the end, and when the virtual segment management information 2506 is returned from the unusable virtual segment queue 4300, it is taken out from the head. This is for facilitating the wear leveling of the actual block of the flash package 230.
  • the structure of the empty page management information queue in the second embodiment is the same as that described in the first embodiment, illustration is omitted.
  • the unit of the queue is the flash package group 280 in the first embodiment, but the second embodiment is different in that it exists for each RAID type.
  • FIG. 39 shows a program related to the second embodiment stored in the memory 270 of the storage controller 200.
  • the programs relating to the present embodiment are a read process execution unit 4000, a write request reception unit 4100, and a write after process execution unit 4200. Since these programs are executed by the processor 260 as in the first embodiment, unless otherwise specified, the operating entity of each step described below is a processor.
  • the access range specified by the read / write request from the host 12 matches the virtual segment boundary will be described.
  • the access data size matches the size of one virtual segment.
  • the present invention is effective even when a plurality of virtual segments or only a part of the virtual segments are designated as the access range designated by the read request and write request from the host 12.
  • FIG. 47 is a processing flow of the read processing execution unit 4000 in the second embodiment.
  • the read process execution unit 4000 is executed when the storage controller 200 receives a read request from the host 120.
  • Step 44000 The processor 260 determines the virtual page to be read and the relative virtual segment position in the virtual page (the logical virtual segment to be read) from the address to be read specified in the received read request. Relative position in virtual page) is calculated.
  • Step 44001 It is checked whether or not the data to be read has hit the cache memory 210. This is a known technique. If there is a hit, the process jumps to step 44007.
  • Step 44002 Here, it is necessary to load the data to be read into the cache memory 210.
  • real page information 2100 ′ corresponding to the real page assigned to the virtual page to be read is acquired from the real page pointer 2004 in the logical volume information 2000.
  • Step 44003 The logical virtual segment pointer 4000 corresponding to the virtual segment to be accessed is specified from the acquired real page information 2100 'using the virtual segment position calculated in Step 44000. Thereby, it can be specified which address (virtual segment) of which flash package 230 should be read.
  • Step 44004 A read request for reading data stored at the specified address is issued to the flash package 230 acquired in Step 44003.
  • Step 44005 Wait for data to be sent from the flash package 230.
  • Step 44006 The data sent from the flash package 230 is stored in the cache memory 150.
  • Step 44007 The data on the cache memory 210 designated by the read request is sent to the host 120, and the processing is completed.
  • FIG. 48 is a processing flow of the write request accepting unit 4100 in the second embodiment.
  • the write request reception unit 4100 is executed when the storage controller 200 receives a write request from the host 120.
  • Step 45000 The processor 260 calculates the relative address in the virtual page to be accessed with the corresponding virtual page from the address to be written by the received write request.
  • Step 45001 Referring to the logical volume information 2000 corresponding to the logical volume specified in the write request, whether or not the real page is allocated to the virtual page obtained in Step 45000 is the real page pointer 2004 in the logical volume information 2000. Check by referring to. If it is assigned, jump to step 45003.
  • Step 45002 In this step, a real page is assigned to the corresponding virtual page.
  • the real page information 2100 ′ located at the head (the real page information 2100 ′ of the free real page) is used as the real page.
  • the pointer 2004 is pointed.
  • the real page is assigned to the virtual page.
  • the area of the flash package 230 is not actually allocated to the virtual page (the flash package in which the write data is to be stored). 230 and addresses on the flash package 230 are not determined).
  • the process of assigning a virtual page to a real page is performed when a write request is accepted. However, in the present invention, this assignment process may be executed until data is stored in the flash package 230. .
  • Step 45003 The write data specified by the write request from the host 120 is stored in the cache memory 210.
  • redundant data is generated for the write data stored in the cache memory 210, and is also stored in the cache memory 210, and the process is terminated. This is a known method and will not be described in detail.
  • redundant data and write data on the cache memory 210 include corresponding real page information (for example, a pointer to the real page information 2100 ′ and storage location information in the real page (which logical virtual segment in the real page). The location information)) indicating whether it should be stored in is attached.
  • Write data and redundant data are written to the flash package 160 by the write after process execution unit 5200. However, when viewed from the write after process execution unit 5200, both are data to be written to the flash package 230, and therefore it is not necessary to distinguish between them. . Similarly, the flash package 230 need not be distinguished from each other. Further, the generation of redundant data is not limited to the aspect implemented in step 45003.
  • FIG. 49 is a process flow of the write after process execution unit 4200 in the second embodiment.
  • the write after process execution unit 4200 is a process that the processor 260 appropriately executes.
  • the write after process execution unit 4200 executes a process of writing the write data received from the host 120 and the redundant data generated using the write data into the flash package 230.
  • the write after process execution unit 4200 processes both write data and redundant data as data to be written to the flash package 230 without distinguishing both.
  • Step 46000 The processor 260 searches the cache memory 210 to determine a logical virtual segment to be written to the flash package 230.
  • the processor 260 extracts the logical virtual segment unit to be written, which is given to the found data. However, at this time, it is determined whether the logical virtual segment in the RAID segment group to which the logical virtual segment to be written and the determined logical virtual segment belong is stored in the cache memory 210, and the RAID stored in the cache memory 210 All logical virtual segments in the segment group may also be the target of writing to the flash package 230.
  • Step 46001 Requests the arithmetic circuit 290 to create a feature value for each logical virtual segment to be written, and waits for completion.
  • Step 46002 The flash package 230 into which the logical virtual segment is to be written is determined according to the feature amount. As described above, for example, the determination method may be to select a flash package 230 in which data having the same feature amount is stored. At this time, if another logical virtual segment belonging to the same RAID segment group as the write target logical virtual segment is already stored in the selected flash package 230, another flash package is selected. Further, when a plurality of logical virtual segments in the RAID segment group are selected as write targets to the flash package 230 in step 46000, some of the plurality of logical virtual segments in the RAID segment group have the same feature amount. Even if it is, these logical virtual segments are determined to be stored in different flash packages 230.
  • the storage controller 200 when the storage controller 200 stores the logical virtual segments in the flash package 230, the stored logical virtual segment feature quantities are stored for each flash package 230.
  • the flash package 230 has means for calculating the feature value, the feature value of the logical virtual segment stored in the flash package 230 is stored in each flash package 230. You may make it receive.
  • the free virtual segment management information 2506 is extracted from the head of the free virtual segment management information queue corresponding to the flash package 230 determined to be written, and the virtual segment to which the data is to be written is determined from the virtual segment address 2509 of the virtual segment management information 2506. .
  • Step 46003 The virtual segment to be written and its hash value are designated to the selected flash package 230, and a write request is issued.
  • 8 bytes of data including 2 bytes of feature amount are added to 512 bytes of data, and data may be sent using a SCSI write command with 520 bytes as one transfer unit.
  • the flash package 230 may calculate a hash value and a feature amount.
  • Step 46004 Wait for a write request completion report from the flash package 230.
  • Step 46005 A virtual segment erasure request corresponding to the logical virtual segment is requested to erase the virtual segment to the flash package 230 including the virtual segment.
  • Step 46006 Wait for completion.
  • Step 46007 The virtual segment of the package that has been allocated to the logical virtual segment so far is connected to the end of the free virtual segment management information queue 42000 corresponding to the corresponding flash package 230. Also, the virtual segment address (flash package ID 2501 and virtual segment address 2509) of the package that has been written is set in the logical virtual segment pointer 4000 corresponding to the logical virtual segment of the corresponding real page information 2100 ′ ( For example, when the written data is data to be written in the k-th logical virtual segment of the real page (where 1 ⁇ k ⁇ (m + n)), the address of the virtual segment is represented by the real page information 2100. 'Is set to the kth logical virtual segment pointer 4000 within').
  • Step 46008 The processor 260 checks the end report regarding the write request from the flash package 230. First, when deduplication cannot be performed by the write request, the capacity of the virtual segment is added to the page data storage amount and the data amount after page deduplication. When deduplication cannot be performed, the capacity of the virtual segment is added to the page data storage amount.
  • Step 46209 Here, it is checked whether there is any flash package 230 in which the virtual capacity of the plus package 230 has changed. If not, the process ends.
  • Step 46010 When there is a change in the virtual capacity, the received virtual capacity is set in the corresponding flash package virtual capacity 2502. Next, due to this change, the virtual segment management information 2506 is moved between the free virtual segment management information queue 42000 and the unusable virtual segment management information queue 4300 according to the number. Thereafter, the process is completed.
  • FIG. 40 shows a program executed by the flash package 230 according to the second embodiment, stored in the package memory 320.
  • the program executed by the flash package 230 in the second embodiment includes a data read processing execution unit 12000, a data write processing execution unit 12100, a virtual block migration processing execution unit 12300, a queue deletion processing unit 12600, a queue registration processing unit 12700, a virtual This is a segment erasing unit 12800.
  • the data read processing execution unit 12000, virtual block migration processing execution unit 12300, queue deletion processing unit 12600, and queue registration processing unit 12700 are exactly the same as those in the first embodiment.
  • the virtual segment erasing unit 12800 is a program included only in the second embodiment.
  • the data write processing execution unit 12100 is the same as that in the first embodiment when the storage controller 200 calculates a hash value and a feature amount and transmits them to the flash package 230.
  • the flash package 230 calculates a hash value or feature amount
  • the hash value or feature amount is calculated with reference to the write data stored in the buffer 330, and the calculated value is set in the virtual segment feature amount 3206.
  • the only difference is the same as in the first embodiment. Therefore, the processing flow of the virtual segment erasing unit 12800 will be described below.
  • FIG. 50 illustrates a processing flow of the virtual segment erasing unit 12800.
  • the virtual segment deletion unit 12800 is a process for invalidating the virtual segment designated by the storage controller 200. This process is executed by the package processor 310 of the flash package 230.
  • Step 48000 The package processor 310 recognizes the virtual block group information 3200 and the corresponding virtual segment pointer 3205 of the virtual block group including the virtual segment designated by the storage controller 200.
  • the virtual block group information 3200 and the virtual segment pointer 3205 are specified from the contents of the access request (LBA or the like).
  • Step 48001 In order to remove the recognized virtual segment from the simple sinium queue 3550, the sinonium queue 1900, and the deduplication queue 1800, the queue deletion processing unit 12600 is called.
  • Step 48002 The corresponding virtual segment pointer 3205 is made null, a completion report is sent to the storage controller 200, and the process is terminated.
  • the storage system has a large-capacity storage in which each of a plurality of flash packages mounted with a large number of flash memories has a deduplication function, and a large number of these flash packages are connected.
  • the storage controller selects a flash package with a high possibility of deduplication processing of write data and writes the write data, so that the deduplication rate can be further improved.
  • Storage system 110 Host 120 Storage area network (SAN) 200
  • Storage controller 210 Cache memory 220 Shared memory 230 Flash package 250 Connection device 260 Processor 270 Memory 280 Hash operation circuit 280 Flash package group 300
  • Flash chip 310 Package processor 320 Package memory 330 Buffer 340 Package bus 350 Package transfer device 2000
  • Logical volume information 2100 Real page information 2300 Flash package group information 2500 Flash package information 3000 Package information 3100 Chip information 3200 Virtual block information 3300 Real block information 4000 Read processing execution unit 4100 Write processing reception unit 4200 Write after processing execution unit 4500 Real page movement processing execution unit 12000

Landscapes

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

Abstract

 本発明のストレージシステムは、重複排除機能を備えた複数のフラッシュパッケージを有する。ストレージコントローラが、ライトデータとライトデータの特徴量をフラッシュパッケージに送信すると、フラッシュパッケージは、ライトデータの特徴量と同一の特徴量を持つデータと、ライトデータの内容を比較する。比較の結果、一致するものがなかった場合には、ライトデータをフラッシュメモリに格納するが、一致するものがあった場合には、新たに格納したデータを格納しない。これにより、性能の劣化を防ぎつつ、より多くのデータをフラッシュメモリに格納する。

Description

ストレージシステム
 本発明は、ストレージシステムにおける重複排除技術に関する。
 フラッシュメモリはその特性上、データを書き換えようとした時、そのデータが元々格納されていた物理領域上に、その更新データを直接上書きすることは不可能である。このため、データを書きかえる場合、元々そのデータが格納されていた領域に書き込むのではなく、別の領域に書き込む。同一のデータが複数の領域に書き込まれ、ブロックが満杯になると、ブロック中の最新のデータだけを未使用ブロックに移動し、その後当該最新データの格納されていないブロックの消去処理を行うことで、空きブロックを作成するという処理が行われる。以下、この処理をリクラメーション処理と呼ぶ。このため、フラッシュメモリを搭載した記憶装置では、当該記憶装置を使用するホスト計算機などの上位装置に見せるアドレス層として、物理的なアドレスとは異なる論理的なアドレス層を設け、上位装置からは論理的なアドレスに対するアクセス要求を受け付けるようにする。そしてデータ格納時には論理的なアドレスに割り当てられる物理的なアドレスを適宜変更していく。この方法では、物理的なアドレスが変更になっても、論理的なアドレスは変わらないので、上位装置は、ライトデータの物理的なアドレスが変更されたことを意識する必要なくデータアクセスできるため、使い勝手の良さも維持できる。
 フラッシュメモリを記憶媒体とする記憶装置は、HDDなどに比べ、圧倒的に高速であるため、ビットコストの低下に伴い、近年急速に普及しつつある。また、企業などの一般的に利用されるストレージシステムでは、これまでHDDなどの記憶装置を複数搭載し、システム内のコントローラが、複数記憶装置上にデータを冗長化して格納することで高信頼化を実現し、また複数の記憶装置を並列に実行させることで高性能化を実現してきた。このため、フラッシュメモリを記憶媒体とする記憶装置がストレージシステムで用いられる場合も、ストレージシステム内にフラッシュメモリを記憶媒体とする記憶装置が複数搭載され、ストレージコントローラが当該フラッシュメモリを記憶媒体とする複数の記憶装置を制御する構成をとることが一般的である。また、フラッシュメモリを記憶媒体とする記憶装置には、HDDと互換性のあるフォームファクター、インターフェイスを備えるものがあり、これはSDD(Solid State Disk)と呼ばれる。ただしHDDと互換性をもたないものも存在する。本発明で対象とするフラッシュメモリを記憶媒体とする記憶装置は、この両方を意味するものであり、以下これらを総称してフラッシュパッケージと呼ぶ。
 ただしフラッシュメモリは、磁気ディスクなどに比べるとビットコストが高いため、格納データ容量を削減し、見かけ上の容量(ホスト計算機などの上位装置から格納可能なデータ量)を大きくしたいというニーズが高い。ストレージシステムの技術分野において、格納データ容量を削減する技術として、重複排除技術がある。本技術は、ストレージコントローラが、システム内の記憶装置に格納された複数のデータの中に同内容のデータがあるかチェックし、同内容のデータが複数ある場合、1つのデータを残し、残りの同一データは格納しない(削除する)ことにより、記憶装置に格納されるべきデータ量を削減するという技術である。すべてのデータについて、同内容のデータがあるかのチェックを行うと、計算量が莫大になるので、各データについてハッシュ関数を用いた演算等を行うことで、ハッシュ値等のデータの代表値を算出し、代表値の一致しているデータ間のみで比較処理を行う方法をとることが多い。また、この代表値の算出方法は、ハッシュ関数を用いる方法に限定されるものではなく、同一のデータから算出される値が必ず同一になる演算方法であれば何でもよい。以下では重複排除技術で用いられるハッシュ値等の代表値のことを、特徴量と呼ぶ。
 データ重複排除技術を開示する文献として、たとえば特許文献1が挙げられる。特許文献1では、複数のフラッシュメモリモジュール(フラッシュパッケージ)を搭載するストレージシステムにおいて、ストレージコントローラあるいはフラッシュメモリモジュールがライト対象データのハッシュ値を計算し、フラッシュメモリモジュールは、フラッシュメモリモジュールに格納済みのデータのハッシュ値がライト対象データのハッシュ値と一致する場合、さらに当該フラッシュメモリモジュールに格納済みのデータとライト対象データとを1ビットずつ比較し、一致する場合には、ライト対象データをフラッシュメモリモジュールの物理ブロックに書き込まないことにより、フラッシュメモリのデータ書き換え回数を削減することが開示されている。
 一方、近年、ストレージシステムでは、容量仮想化技術という技術が普及している。容量仮想化技術とは、ストレージシステムが搭載する記憶装置の物理的な容量より大きな容量(仮想的な容量)を、ホスト側に見せる技術で、一般にストレージシステム内のストレージコントローラで実現されている。これは、ユーザが実際にストレージを使用する場合、ユーザが定義したボリューム(ユーザからみた記憶装置)の容量に対し、実際に格納するデータの量は、この定義容量には、なかなか達しないという特性を利用したものである。すなわち、容量仮想化技術がない場合には、ボリューム定義時に、定義されたボリュームの全記憶領域のサイズに相当する物理記憶領域を確保していたのに対し、容量仮想化技術を適用した場合には、実際にストレージシステムにデータが格納されたとき、初めて物理記憶領域を確保することになる。これによって、必要な物理記憶領域を削減でき、かつ、ユーザはボリューム容量を厳密に定義する必要なく、単純に大きく余裕をもった値を定義すればよいため、使い勝手も向上できる。特許文献2には、多数のフラッシュパッケージに接続されたストレージコントローラを含むストレージシステムにおいて、ストレージコントローラだけでなく、フラッシュパッケージも、容量仮想化技術をもった方式が公開されている。また特許文献2には、フラッシュパッケージがデータを圧縮して格納する機能を有し、圧縮率の変化に応じてフラッシュパッケージがストレージコントローラに見せている仮想容量(下位レベルの仮想容量)を変化させる技術が開示されている。このため、フラッシュパッケージは、ストレージコントローラには実際のフラッシュメモリの物理容量より大きな容量を、ストレージコントローラに見せていた。特許文献2では、ストレージコントローラで実行される容量仮想化技術を上位レベルの容量仮想化機能と呼び、フラッシュパッケージ内で実行される容量仮想化技術を下位レベルの容量仮想化機能と呼ぶことで、それぞれの仮想化技術を区別している。
 圧縮を行うと、データの更新ごとに、圧縮後のデータ長が異なるため、それまで格納していた領域にデータを格納できないことが多々ある。フラッシュメモリはその特性上、更新されたデータを格納する際には新しい領域に書き込む必要があるので、圧縮機能をフラッシュパッケージで実現した場合、フラッシュメモリの特性をうまく利用していることになる。
米国特許出願公開第2009/0089483号明細書 米国特許出願公開第2012/0317333号明細書
 本発明の対象となるフラッシュメモリを記憶媒体とする大規模ストレージシステムにおいては、フラッシュメモリチップの数は、数万に及ぶ。このため、数百のチップを搭載したフラッシュパッケージを数百枚、ストレージシステムのコントローラに接続する構成が、フラッシュメモリを記憶媒体とする大規模ストレージシステムの典型的構成である。
 本発明において解決しようとする課題は、多数のフラッシュパッケージを含む大規模ストレージシステムにおいて、ストレージシステム全体で、性能に与える影響を少なくして、重複排除技術を利用して、フラッシュメモリへの格納データ容量を削減し、見掛け上より多く容量のデータを格納するようにすることである。第1の課題は、フラッシュパッケージで重複排除を行う際のデータ特徴量の計算に関する。一般的に、フラッシュパッケージは、価格の低減要求が高いため、フラッシュパッケージで特徴量を計算すると、その計算オーバヘッドの増大が課題となる。一方、ストレージコントローラで、ハッシュ値等の特徴量を計算し、それをフラッシュパッケージで実施される重複排除処理に利用させる場合、特徴量をフラッシュパッケージに送るための新たな機能(インターフェイス)を追加する必要があり、フラッシュパッケージの高コスト化につながる。
 第2の課題について説明する。フラッシュパッケージが重複排除機能をもった場合、フラッシュパッケージ間のデータの重複排除が課題になる。特許文献1では、フラッシュパッケージ内に同一内容のデータが複数ある場合の重複排除方法の開示はあるが、異なるフラッシュパッケージに同一内容のデータが複数存在する場合の重複排除方法について、ストレージコントローラが所定値以上のデータサイズの重複排除を実行するという以外、具体的な方法の開示がない。
 前記第1の課題を解決するための、本発明の第1の特徴は、以下の通りである。本発明では、512byteのデータに、2byteの特徴量を示すデータを含む8byteの保証コードを付加して、520byteを一つの転送単位とする標準化されたSCSIのライトコマンドを利用する。コントローラが、フラッシュパッケージにライトデータを送る際に、512byteのデータに、特徴量を示す2byteのデータを含む8byteのデータを付加して、520byteを一つの転送単位とした転送を実行することにより、フラッシュパッケージでは、ライトデータの特徴量を受け取ることができる。この特徴量を利用して、実際にデータの値の比較を行うデータを絞り込むことが可能になる。このため、フラッシュパッケージの特徴量の計算は必要なくなり、かつ、フラッシュパッケージとコントローラの間に、新しいインターフェイスを設ける必要がなくなる。
 第2の課題については、本発明では次のような方法で解決している。フラッシュパッケージが、実際に重複排除の処理を実行し、複数のフラッシュパッケージ間のデータ重複排除を効率よく行うために、本発明では、ストレージコントローラが、データのハッシュ値を計算し、このハッシュ値に基づいて、データ格納先のフラッシュパッケージを決定する。ハッシュ値等の特徴量が一致しない場合、明らかにデータも不一致である、つまり重複排除できないので、同じハッシュ値や特徴量をもつデータを一つのフラッシュパッケージに集めることにより、システム全体で効率のよい重複排除が可能になる。
 本発明によれば、それぞれが多数のフラッシュメモリを実装したフラッシュパッケージを多数接続した大容量のストレージシステムにおいて、高効率かつ性能劣化の少ない重複排除処理が実現でき、物理容量よりも大きな容量を確保することが可能となる。加えて、本発明は、フラッシュパッケージだけでなく、HDDのような記憶装置に適用しても同様の効果が得られるので、本発明は、HDDのような他の記憶装置に適用しても有効である。
本実施例における情報システムの構成を示す図である。 本実施例におけるストレージシステムの構成を示す図である。 本実施例におけるフラッシュパッケージの構成を示す図である。 本実施例におけるストレージシステムの共有メモリに格納された制御情報を示す図である。 本実施例における論理ボリューム情報の形式を示す図である。 本実施例における実ページ情報の形式を示す図である。 本実施例における論理ボリューム、仮想ページ、実ページ、パッケージグループ280の関係を表した図である。 本実施例におけるフラッシュパッケージがストレージコントローラに提供している記憶空間と、仮想ブロック、実ブロックの関係を表した図である。 本実施例におけるフラッシュパッケージ情報の形式を示す図である。 本実施例におけるフラッシュパッケージグループ情報の形式を示す図である。 本実施例における空きページ管理情報キューの構造を表した図である。 本実施例における使用不可管理情報キューの構造を表した図である。 本実施例におけるフラッシュパッケージのパッケージメモリ内に格納された制御情報を示す図である。 本実施例におけるパッケージ情報の形式を示す図である。 本実施例におけるチップ情報の形式を示す図である。 本実施例における仮想ブロックグループ情報の形式を示す図である。 本実施例における実ブロック情報の形式を示す図である。 本実施例における空き実ブロック情報ポインタによりポイントされる空き状態にある実ブロックの集合を表す図である。 本実施例における重複排除キューの形式を示す図である。 本実施例におけるシノニウムキューの形式を示す図である。 本実施例における簡易シノニウムキューの形式を示す図である。 本実施例におけるストレージコントローラのメモリ内の上位レベルの制御を行うプログラムを示す図である。 本実施例におけるリード処理実行部の処理フローを示す図である。 本実施例におけるライト要求受付部の処理フローを示す図である。 本実施例におけるライトアフタ処理実行部の処理フローを示す図である。 本実施例における実ページ移動処理実行部の処理フローを示す図である。 本実施例におけるフラッシュパッケージのパッケージメモリ内の下位レベルの制御を行うプログラムを示す図である。 本実施例におけるフラッシュパッケージがストレージコントローラに提供している記憶空間と、アクセスに必要な情報との関係の概念図である。 本実施例におけるデータリード処理実行部の処理フローを示す図である。 本実施例におけるデータライト処理実行部の一部の処理フローを示す図である。 本実施例におけるデータライト処理実行部の一部の処理フローを示す図である。 本実施例におけるキュー削除処理部の処理フローを示す図である。 本実施例におけるキュー削除処理部の処理フローを示す図である。 本実施例におけるキュー登録処理部の処理フローを示す図である。 本実施例における実ブロックグループ置き換え処理部の処理フローを示す図である。 本実施例における仮想ブロック移動処理実行部の処理フローを示す図である。 本実施例における仮想ブロック格納処理実行部の処理フローを示す図である。 本実施例における仮想容量判定処理部の処理フローを示す図である。 第2の実施例におけるストレージコントローラで制御を行うプログラムを示した図である。 第2の実施例において、フラッシュパッケージ側で制御を行うプログラムを示した図である。 第2の実施例におけるストレージシステムの共有メモリに格納された上位レベルの制御を行う情報を示す図である。 第2の実施例の概念を表した図である。 第2の実施例における実ページ情報の形式を示す図である。 第2の実施例におけるフラッシュパッケージ情報の形式を示すである。 第2の実施例における空き仮想セグメント管理情報キューの構成を表した図である。 第2の実施例における使用不可仮想論理セグメントキューの構成を表した図である。 第2の実施例におけるリード処理実行部の処理フローを示す図である。 第2の実施例におけるライト要求受付部の処理フローを示す図である。 第2の実施例におけるライトアフタ処理実行部の処理フローを示す図である。 第2の実施例における仮想セグメント削除部の処理フローを示す図である。
 図1は、本発明の実施例に係る情報システムの構成を示す。情報システムは、ストレージシステム100、ホスト110と両者を接続するSAN(Storage Area Network)120、から構成される。ホスト110は、ユーザアプリケーションが動作するシステムで、ストレージステム100との間で、SAN120経由で、必要なデータを読み書きする。SAN120はSCSIコマンドが転送可能なプロトコルを用いる。例えば、Fibre Channel等のプロトコルを用いることができる。また、本発明は、ホスト110とストレージシステム100を直接接続しても有効である。
 本実施例は、多数のフラッシュメモリを記憶媒体として構成するストレージシステム100において、重複排除処理によって、フラッシュメモリへの格納データ容量削減技術を実現するものである。第1の実施例においては、ストレージシステム100は、階層型の容量仮想化技術をもつ。上位レベルの容量仮想化技術の制御単位は、ページとよばれる単位である。本実施例におけるページは、従来の特許文献2などに示されるストレージコントローラ200で実現される容量仮想化技術で用いられるページである。なお、本発明は、階層型の容量仮想化技術における上位レベルの制御単位は、ページでなくとも有効である。
 本実施例では、ページのサイズは、フラッシュメモリにおける消去単位であるブロックよりも大きい。通常、フラッシュメモリにおいては、リード・ライトの単位をページと呼ぶので、ページはブロックよりも小さい。しかし、すでに述べたように、本実施例では、ページは、容量仮想化技術における記憶領域の割り当て単位であるページのことを意味する語として用いられており、そのサイズは、ブロックよりも大きい。なお、本実施例では、フラッシュメモリにおけるリード・ライトの単位を、上位レベルの容量仮想化の制御単位であるページと区別するため、セグメントと呼ぶ。また、下位レベルの容量仮想化技術の制御単位は、本実施例では、フラッシュメモリの消去単位であるブロックの整数倍の単位として、説明を行う。また、本発明は、記憶媒体をフラッシュメモリとし、実容量より大きい仮想容量を持ち、消去単位であるブロックを割り当て単位とした、容量仮想化機能を、単独に、従来の上位レベルの容量仮想化機能なしに、ホスト120に提供しても有効である。
 図2は、ストレージシステム100の構成を示している。ストレージシステム100は、一つ以上のストレージコントローラ200、キャッシュメモリ210、共有メモリ220、フラッシュパッケージ230、などの構成要素を接続する一つ以上の接続装置250、から構成される。また、図2では、ストレージシステム内の記憶媒体は、すべてフラッシュパッケージ230であるが、本実施例は、HDDのような他の記憶媒体を含んでいても有効である。また、本実施例におけるフラッシュパッケージ230の容量はすべて等しいものとする。ただし、本発明は、フラッシュパッケージ230の容量の中に異なっているものがあっても有効である。ストレージコントローラ200は、ホスト120から発行されたリード/ライト要求を処理するプロセッサ260、プログラムや情報を保管するメモリ270、演算回路290から構成される。
 本発明の特徴は、重複排除処理をフラッシュパッケージ230が実行することである。重複排除処理においては、新たにデータが書き込まれた場合、ハッシュ値のような特徴量(データに対して所定の演算を行うことで導出される値で、当該所定の演算には、同内容のデータからは必ず同じ値が導出されることが保証される演算方法が用いられる。特徴量のデータ長はたとえば、データの長さが512byteに対し、特徴量は、2byteというように、特徴量が算出される対象のデータの長さに比べて充分短い。)を計算して、その特徴量が同じになる他のデータとデータそのものが同じどうかを比較して、同じであれば、そのデータを格納しないようにして、格納容量を削減する。
 特徴量を用いる理由は、データの内容を比較する候補を絞り込むためである。第1の実施例に係るストレージシステム100では、特徴量の計算はフラッシュパッケージ230では行われない。特徴量の計算は、データ全体を参照し、複雑な演算を実行する必要がある。このため、フラッシュパッケージ230の中で特徴量の計算を実行すると、性能が劣化する可能性があるためである。第1の実施例に係るストレージシステム100では、ストレージコントローラ200が特徴量の計算を実行する。ただし、ストレージシステム100で計算した特徴量は、フラッシュパッケージ230に送られる必要がある。特徴量を、ストレージコントローラ200がフラッシュパッケージ230に送ろうとすると、ストレージコントローラ200とフラッシュパッケージ230に、その特徴量送受信のための専用のインターフェイスを設ける必要がある。SCSIの規格では、データを512byte単位に転送するが、このデータが正しいことを保証するために、データの内容から導出された2byteの特徴量と、データを格納するアドレスのような情報も含めた、合計で8byteのDIFと呼ばれる保証コードを加えて、520byteにして転送する方式が標準化されている。
 第1の実施例の特徴は、フラッシュパッケージ230は送られてきた520byteから特徴量を示す2byteの情報を取り出し、重複排除に利用する点である。また、DIFに含まれている2byteの特徴量の計算は、高信頼化が必要となるストレージコントローラ200では、データインテグリティ確保の目的などで実施されていることが多いので、こういったストレージコントローラ200では、新たなオーバヘッドなく、重複排除を実行できる。そのため、本発明の実施例に係るストレージコントローラ200とフラッシュパッケージ230は、SCSIの規格に従うデータフォーマットとコマンドセットをサポートするものとする。そしてストレージコントローラ200とフラッシュパッケージ230の間で送受信するI/O要求には、SCSIの規格に従うコマンドが用いられる。なお、この効果はフラッシュパッケージだけでなく、HDDのような記憶装置に適用しても同様の効果が得られるので、本発明は、HDDのような他の記憶装置に適用しても有効である。演算回路290は、2byteの特徴量の計算を行う回路である。ただし、本発明は、2byteの特徴量の計算をプロセッサ260が実行しても有効である。
 接続装置250は、ストレージシステム100内の各構成要素を接続する機構である。また、本発明の実施例に係るストレージシステム100では、高信頼化のために、各フラッシュパッケージ230は、複数の接続装置250で、1以上のストレージコントローラ200に接続されているものとする。ただし、各フラッシュパッケージ230が一つの接続装置250にしか接続されていない構成であっても、本発明は有効である。
 キャッシュメモリ210、共有メモリ220は、通常DRAMなどの揮発メモリで構成されるが、バッテリーなどにより不揮発化されているものとする。ただ、本発明は、キャッシュメモリ210、共有メモリ220が不揮発化されていなくても有効である。キャッシュメモリ210には、フラッシュパッケージ230に格納されたデータの中で、ストレージコントローラ200からよくアクセスされるデータが格納される。ストレージコントローラ200は、ホスト120からのライト要求によりフラッシュパッケージ230に書き込むよう受け取ったデータを、キャッシュメモリ210に書き込んだ時点で、該当するライト要求が完了した旨をホスト120に返却する、いわゆるライトバック方式での書き込みを行う。ただ、本発明は、書き込むデータをフラッシュパッケージ230に格納した段階でライト要求を完了させる方式でも有効である。共有メモリ220は、キャッシュメモリ210の制御情報、ストレージシステム100内の重要な管理情報、ストレージコントローラ200間の連絡情報、同期情報などが格納される。
 なお、本発明の実施例に係るストレージシステム100では、各フラッシュパッケージ230は、ストレージコントローラ200からは、それぞれ一台の記憶装置として認識されている。また、ストレージコントローラ200は、可用性確保のため、一台のフラッシュパッケージ230が故障しても、そのフラッシュパッケージ230に格納されたデータを回復できるRedundant Arrays of Independent Disks/Devices(RAID)機能を持っているものとする。RAID機能では、複数のフラッシュパッケージ230から成るグループ(いわゆるRAIDグループ)が定義され、RAIDグループ内の一台のフラッシュパッケージ230が故障した場合には、RAIDグループ内の残りのフラッシュパッケージ230に格納されている情報をもとに、故障したフラッシュパッケージ230に格納されていたデータ内容を復旧することができる。本実施例では、この複数のフラッシュパッケージ230から成るグループのことを、フラッシュパッケージグループ280と呼ぶ。ただ、そのようなRAID機能をストレージコントローラ200が持っていなくとも、本発明は有効である。
 図3は、フラッシュパッケージ230の構成を示している。フラッシュパッケージ230は、複数のフラッシュチップ300と、パッケージプロセッサ310、パッケージメモリ320、バッファ330、パッケージバス340、パッケージバス転送装置350、比較回路370から構成される。比較回路370は、フラッシュパッケージ230が、新たに書き込まれたデータの値がそれまで格納していたデータの値に等しいかどうかをチェックする際に使用される。比較回路370は、特徴量の計算などに比べると演算規模が小さいので、フラッシュパッケージ230がもっていてもよい。なお、本実施例では、この比較を比較回路370で実行するが、パッケージプロセッサ310が実行しても、本実施例は有効である。なお、フラッシュパッケージ230が圧縮・伸張機能を有し、フラッシュチップ300に書き込むデータを圧縮する場合でも、本実施例は有効である。圧縮機能との組み合わせにより、容量削減効果はさらに増大する。その場合、比較を行う際には、読み出したデータを伸張してから比較を行う方法と、受け取ったデータを圧縮してから比較を行う方法の2通りがあり得るが、どちらの方法を採用してもよい。
 本実施例に係るフラッシュパッケージ230は、フラッシュメモリの消去単位であるブロック単位の容量仮想化機能をもっているものとする。ただしフラッシュパッケージ230が、ブロック単位以外の容量仮想化機能をもっていても本発明は有効である。このため、フラッシュパッケージ230に備えられている全フラッシュチップ300の合計容量より大きな容量を仮想容量として持つ記憶空間を定義してストレージコントローラ200に当該記憶空間を提供し、ストレージコントローラ200から当該記憶空間上の所定位置に対するライト要求を受け付けたとき、当該所定位置にデータを書き込むべきブロックが割り当てられているかどうかをチェックして、ブロックが割り当てられていないとき初めて当該所定位置にブロックを割り当てる。これによって、実際にブロックを記憶空間に割り当てる時刻を遅らせることができ、容量削減の効果がある。
 パッケージプロセッサ310は、ストレージコントローラ200からのリード・ライト要求を受け付け、対応する処理を実行する。バッファ330は、ストレージコントローラ200とフラッシュチップ300との間でリード・ライトされるデータを格納する。本発明の実施例に係るフラッシュパッケージ230では、バッファ330は揮発メモリであるものとし、ストレージコントローラ200からライト要求を受け取った場合、フラッシュパッケージ230は、受け取った書き込みデータがフラッシュチップ300に書き込まれた段階で、ストレージコントローラ200に対してライト処理が完了した旨を報告する。ただし、バッファ330を不揮発メモリにし、ストレージコントローラ200から受け取ったライト要求で指定された書き込みデータをバッファ330に書き込んだ段階で、ライト処理の完了を通知するようにしても、本発明は有効である。
 パッケージメモリ320には、パッケージプロセッサ310が実行するプログラム、フラッシュチップ300の管理情報などが格納される。管理情報は重要な情報であるので、ストレージシステムの計画停止時等には、管理情報を特定のフラッシュチップ300に退避できることが望ましい。また、突発的な障害に備え、バッテリーをもち、これを利用して、障害などが発生しても、管理情報を特定のフラッシュチップ300に退避できることが望ましい。
 パッケージバス340は、バッファ330とフラッシュチップ300との間でデータ転送を行うバスで、フラッシュパッケージ230内に一本以上存在する。性能向上のために、フラッシュパッケージ230内に複数のパッケージバス340が備えられる構成が一般的だが、一本でも本発明は有効である。パッケージバス転送装置350は、パッケージバス340ごとに存在し、パッケージプロセッサ310の指示にしたがって、バッファ330とフラッシュチップ300との間で、データ転送を実行する。比較回路370は、バッファ330に接続されていて、パッケージプロセッサ310の指示に従い、ストレージコントローラ200から受け取ったデータと、パッケージメモリ320から読み出されたデータとの比較を行う。
 図4は、本発明の実施例に係るストレージシステム100の共有メモリ220内の、本実施例で説明される各処理で用いられる情報を示しており、論理ボリューム情報2000、実ページ情報2100、空き実ページ管理情報ポインタ2200、フラッシュパッケージグループ情報2300、フラッシュパッケージ情報2500、仮想ページ容量2600、そして使用不可ページ管理情報ポインタ2700が含まれている。これらの情報は、上位レベルの容量仮想化技術を実現するために必要な情報である。
 本実施例においては、ストレージコントローラ200は、上位レベルの容量仮想化機能をサポートしているものとする。ただし、本発明は、ストレージコントローラ200が、上位レベルの容量仮想化機能をもっていなくとも有効である。通常、上位レベルの容量仮想化機能において、記憶領域の割り当て単位は、ページと呼ばれる。なお、本実施例に係るストレージコントローラ200は、ホスト110等の上位装置に提供する論理ボリュームの記憶空間を、仮想ページという所定サイズの領域に分割して管理している。そしてフラッシュパッケージグループ280の記憶領域を、実ページという単位で分割し管理している。
 図7を用いて、論理ボリューム、仮想ページ、実ページ、パッケージグループ280の関係について説明する。ストレージコントローラ200は、1以上の論理ボリュームを定義して、ホスト110等の上位装置に提供することができる。そして先に述べたとおり、ストレージコントローラ200は、各論理ボリュームの記憶空間を、複数の仮想ページ(図7:VP0、VP1、VP2)という所定単位の領域に分割し、各論理ボリュームの記憶空間を、複数の仮想ページから構成される記憶領域として管理している。なお、仮想ページのサイズは、共有メモリ220内の仮想ページ容量2600に格納されている。また、本発明の実施例に係るストレージシステム100においては、すべての仮想ページの容量は同じとするが、ストレージシステム100内に異なるサイズの仮想ページが存在する構成であっても、本発明は有効である。
 ストレージコントローラ200は、各論理ボリュームの記憶空間を、仮想ページという単位で管理するが、論理ボリュームにアクセスするホスト110等の上位装置は、仮想ページという存在を意識する必要はない。ホスト110は論理ボリュームの記憶領域にアクセスする際には、LBA(Logical Block Address)などのアドレスを指定することでアクセスし、ストレージコントローラ200は、ホスト110が指定したLBAを仮想ページ番号(各仮想ページに付されている識別番号)に変換する(LBAを仮想ページサイズで除算すれば変換可能である)。仮想ページは、ストレージコントローラ200内部で論理ボリュームの記憶空間の管理のためにのみ用いられる概念である。仮に仮想ページのサイズがP(MB)とすると、論理ボリュームの先頭位置からP(MB)分の領域が仮想ページ#0(#0は仮想ページ番号を表す)として管理され、その次のP(MB)分の領域が仮想ページ#1として管理される。そしてそれ以降も同様に、P(MB)の領域がそれぞれ、仮想ページ#2、#3…として管理される。
 ストレージコントローラ200が論理ボリュームを定義した直後は、各仮想ページに対応する物理記憶領域は存在しない。ホスト110から仮想ページに対するライト要求を受け付けた時点ではじめて、当該仮想ページに対して物理記憶領域を割り当てる。この時割り当てられる物理記憶領域のことを実ページと呼ぶ。図7では、仮想ページ#0(VP0)に実ページRP0が割り当てられている状態を表している。
 実ページとは、パッケージグループ280(つまりRAIDグループ)を構成する各フラッシュパッケージ230がストレージコントローラ200に提供する記憶領域を、図7に示されているような要領で分割した領域である。図7において、230-1,230-2,230-3,230-4はそれぞれ、各フラッシュパッケージ230がストレージコントローラ200に提供する記憶領域を概念的に表したものである。また、図7で例示しているパッケージグループ280のRAIDタイプは、RAID4の3D+1P構成(データドライブ3台、パリティドライブ1台で構成されるRAIDグループ)である。
 パッケージグループ280を構成する各フラッシュパッケージ230の記憶領域には、ホスト110からのライトデータの他に、RAIDパリティが格納される。図中、実ページ(RP0)内の、0(D),1(D)、2(D)…と記載されている領域は、ホスト110からのライトデータが格納される領域を表し、P0,P1、…と記載されている領域はパリティが格納される領域を表す(P0には、0(D),1(D)、2(D)から生成されるパリティが格納され、P1には3(D),4(D)、5(D)から生成されるパリティが格納される)。実ページは、複数のストライプ(RAID技術において、1つのパリティと、当該1つのパリティを生成するために必要なデータの集合。図7の例では、たとえば0(D)、1(D)、2(D)、(P0)の組が、1ストライプである)から構成される。
 実ページが仮想ページに割り当てられる場合、0(D),1(D)等の、ホスト110からのライトデータが格納される領域のみが割り当てられる。また実ページ上のライトデータの格納される領域の合計サイズは、仮想ページのサイズと等しい関係にある。つまり、(実ページのサイズーパリティ格納領域のサイズ)=仮想ページサイズ、の関係にある。図7ではRAID4の構成例についてのみ示されているが、たとえばパッケージグループ280のRAIDタイプがRAID1の場合には、実ページサイズは、仮想ページサイズ(仮想ページ容量2600)の2倍になる。
 仮想ページ内の各領域と、実ページ内の各領域との関係(マッピング)は、図7に示されている通りである。つまり、実ページの先頭ストライプからパリティを除いた領域(0(D)、1(D)、2(D))が、仮想ページの先頭領域に対応付けられている。それ以降も同様に、実ページの2番目以降の各ストライプからパリティを除いた領域(3(D)、4(D)、5(D)…)が、順番に仮想ページの領域に対応付けられる。このように、仮想ページ内の各領域と実ページ内の各領域とのマッピングは規則的にマッピングされているため、論理ボリューム上のアクセス位置(LBA)に基づいて、仮想ページ番号及び仮想ページ内の相対アドレス(ページ先頭からのオフセットアドレス)が求まれば、当該アクセス位置が、どのフラッシュパッケージ230に対応付けられるものか、そして当該フラッシュパッケージ230内のどの位置に対応付けられるものか、一意に決定できる。ただし、仮想ページ内の各領域と実ページ内の各領域とのマッピングは、ここで説明したマッピング方法に限定されるものではない。
 また容量仮想化技術においては、各論理ボリュームを定義する時、実記憶媒体の容量よりも各論理ボリュームの合計記憶容量が大きくなるように定義することもできる。このため、仮想ページの数のほうが、実ページの数より大きいのが、一般的である。本発明の実施例に係るストレージ装置でも、仮想ページ数を実ページの数より多くすることができる。
 なお、論理ボリューム中の各仮想ページに割り当てられる実ページは、必ずしも同一パッケージグループ280内の実ページに限定されない。仮想ページ#0に割り当てられる実ページと、仮想ページ#1に割り当てられる実ページが、それぞれ異なるパッケージグループ内の実ページであってもよい。ただし、1つの論理ボリュームの各仮想ページに割り当てられるべき実ページは、全てRAIDタイプが同じパッケージグループから割り当てられなければならないという制約は存在する。
 図5は、論理ボリューム情報2000の形式を示したものである。論理ボリュームは、ホスト120がデータをリード・ライトする記憶装置である。論理ボリューム情報2000は、論理ボリュームごとに設けられている情報である。つまり、ストレージシステム100にN個の論理ボリュームが定義される場合、N個の論理ボリューム情報2000が共有メモリ220に存在する。論理ボリューム情報2000は、論理ボリュームID2001、論理容量2002、論理ボリュームRAIDタイプ2003、実ページポインタ2004より構成される。
 一般的に、ホスト120は、LUNなどの論理ボリュームを一意に識別するためのID、論理ボリューム内のアクセス対象領域の先頭アドレス(LBA)、アクセス対象データ長の情報を含んだアクセスコマンドを発行することにより、論理ボリュームへのアクセスを行う。論理ボリュームID2001には、LUNなどの、論理ボリュームを一意に識別するためのIDが格納されている。論理容量2002は、この論理ボリュームの容量(ホスト120から認識される、アクセス可能な記憶空間のサイズ)である。論理ボリュームRAIDタイプ2003は、該当する論理ボリュームのRAIDタイプ(RAID0、RAID1など)を特定する情報である。またRAID5のように、記憶デバイスN台分のデータ量に対し、記憶デバイス1台分の量の冗長データを格納する場合、Nの具体的数値もあわせて論理ボリュームRAIDタイプ2003に格納される。ただし、任意のRAIDタイプが指定できるわけでなく、少なくともストレージシステム100内の一つのフラッシュパッケージグループ280がサポートしているRAIDタイプである必要がある。
 実ページポインタ2004(2004-0~2004-(n-1))は、当該論理ボリュームの仮想ページに割り当てられた実ページの管理情報(後述する実ページ情報2100)へのポインタである。1つの論理ボリューム情報2000内に格納されている実ページポインタ2004の数は、当該論理ボリュームの仮想ページの数(論理容量2002を仮想ページ容量2600で割った数になるが、余りがでれば+1)と等しい。当該論理ボリュームの仮想ページの数がnであれば、実ページポインタ2004はn個存在する(2004-0~2004-(n-1)の実ページポインタが存在する)。最初の実ページポインタ2004(図中の2004-0)に対応するページが、論理ボリュームの先頭の領域に対応した仮想ページ(仮想ページ#0)に割り当てられた実ページで、以降、次の実ページポインタ2004には、次の領域に対応した仮想ページに割り当てられる実ページに対応するポインタが格納される。またストレージシステム100は容量仮想化機能をサポートしているので、実ページが割り当てられる契機は、論理ボリュームが定義された時ではなく、該当する仮想ページに対して実際にデータ書き込みの要求を受信した契機である。したがって、まだ書き込みが行われていない仮想ページの場合、対応する実ページポインタ2004はヌルになっている。
 図6は、実ページ情報2100の形式である。実ページ情報2100は実ページの管理情報であり、各実ページに対して1つ定義される。実ページ情報2100は、パッケージグループ2101、実ページアドレス2102、空きページポインタ2103、ページデータ格納量2104、ページ重複排除後データ格納量2105、移動中フラグ2109、移動先実ページ情報2110、移動待ちフラグ2111を含む。
 パッケージグループ2101には、該当する実ページが割り当てられているフラッシュパッケージグループ280の情報(識別子)が含まれている。実ページアドレス2102は、当該実ページが、パッケージグループ2101で特定されるフラッシュパッケージグループ280内の、どの位置(アドレス)に割り当てられているかを示す情報である。実ページアドレス2102が示すアドレスから、実ページサイズ分の領域が、当該実ページに割り当てられていることを意味する。空きページポインタ2103には、この実ページが仮想ページに割り当てられていない場合(以下、このような実ページのことを、「空きページ」と呼ぶ)に、有効な値が格納される。この場合、空きページポインタ2103に格納された値は、次の空きページの実ページ情報2100を指す。仮想ページが割り当てられている場合、空きページポインタ2103に格納される値はヌル値となる。
 本実施例においては、それぞれのフラッシュパッケージ230は、容量仮想化機能をもっており、ストレージコントローラ200には、見かけ上、実際の物理容量より大きな容量を提供している。フラッシュパッケージ230の容量仮想化の単位は、本実施例では、フラッシュメモリの消去単位であるブロックとする。以下、ストレージコントローラ200から見たブロックを仮想ブロックと呼び、フラッシュパッケージ230が、実際に割り当てているブロックを実ブロックと呼ぶ。したがって、本発明の実施例に係るストレージシステム100では、実ページは、1以上の仮想ブロックにより構成されることになる。また、本発明では、重複排除を行うので、フラッシュパッケージ230の各仮想ブロックにより構成される記憶空間のほうが、各実ブロックにより構成される記憶空間より大きい(つまり、仮想ブロック数>実ブロック数、の関係にある)ことになる。
 図8は、フラッシュパッケージ230がストレージコントローラ200に提供している記憶空間V1と、仮想ブロック、実ブロックの関係を示したものである。フラッシュパッケージ230は、ストレージコントローラ200に提供している記憶空間V1を、m個分の仮想ブロックのサイズ毎に分割して管理している。このm個分の仮想ブロックの集合を「仮想ブロックグループ」と呼ぶ。なお、仮想ブロックのサイズは、フラッシュメモリの消去単位であるブロックと同サイズである。仮にブロックサイズがB(KB)の時、記憶空間V1の先頭からm×B(KB)の領域が仮想ブロックグループ#0として管理され、以下順に、各m×B(KB)の領域が、仮想ブロックグループ#1、#2…として管理される。
 また、各仮想ブロックグループには、1個以上かつ(m+1)個以下の実ブロックを割り当てることができる。1つの仮想ブロックグループに割り当てられた1つ以上の実ブロックの集合を実ブロックグループと呼ぶ。
 本実施例で、実ブロックの最大割り当て数をm+1個にした理由を以下に説明する。仮に、仮想ブロックグループのデータがほとんど重複排除できなかったとする。この場合、必要な実ブロックの数はm個となるが、実ブロックに空き容量はほとんどないことになる。このとき、ブロック内の一部のデータを書き換える要求(普通のライト要求)を、ストレージコントローラ200からフラッシュパッケージ230が受け取ったとする。フラッシュメモリのブロックは書き換えができないので、フラッシュパッケージ230は、そのブロックの全データをバッファ330に読み出し、書き換え部分だけ更新して、当該ブロックを一度消去した後、ブロック全体にデータを格納しなければならない。フラッシュパッケージ230がライト要求を受け取るたびに、このような処理を実行すると、処理時間が過大になりすぎ、実用的とは言いがたい。これを解決するため、本実施例では、仮想ブロックグループに一つ余計に実ブロックを割り当て、空き領域を確保することにより、空き領域に追加書き込みを行うようにする。空き領域が小さくなって、書き換えデータに入らなくなった場合、消去処理を行う。これにより、消去処理をn回のライト要求に1回実行すればよいので、性能を向上させることができる。また、消去処理の回数の削減は、フラッシュメモリの長寿命化にもつながる。
 本実施例では、フラッシュパッケージ230は、実ブロック数より多くの仮想ブロックをもっているように、ストレージコントローラ200に見せていることになる。ただし本発明の実施例に係るストレージコントローラ200は、各フラッシュパッケージ230がいくつの空き実ブロックをもっているかを管理しており、空き実ブロック数に応じて実ページの再配置を行う。本実施例では、フラッシュパッケージ230が、まだ実ブロックを割り当てていない仮想ブロックグループに対して書き込み要求を受け付けたときに、実ブロックを割り当てることが特徴である。
 図6の説明に戻る。ページデータ格納量2104、ページ重複排除後データ格納量2105は、それぞれ、当該ページが割り当てられたフラッシュパッケージグループ280を構成するフラッシュパッケージ230の数と同数存在する。ただし、これらの情報は、この実ページに含まれる仮想ブロックの属性情報ではなく、この実ページに対応する仮想ページのデータに関する属性情報である。したがって、この仮想ページに割り当てられている実ページ(仮にこの実ページを、実ページAと呼ぶ)のデータが新しい実ページにコピーされ、この仮想ページに当該新しい実ページ(仮にこの実ページを、実ページBと呼ぶ)が割り当てられた場合、実ページAの実ページ管理情報中2100のページデータ格納量2104、ページ重複排除後データ格納量2105を、実ページBの実ページ情報2100に反映する(引き継ぐ)必要がある。ページデータ格納量2104は、ホスト110等の上位装置から当該実ページに対して格納されたデータ量である。ページ重複排除後データ格納量2105は、当該実ページに格納された重複排除後のデータ量である。重複排除処理が行われると、同一内容のデータは1つしか記憶媒体に格納されない。そのため、ページ重複排除後データ格納量2105は、当該実ページに対して書き込みが行われたデータのうち、実際にフラッシュパッケージ230のフラッシュチップ300に格納されたデータ量といえる。以上の二つの値は、フラッシュパッケージ230から受け取った情報に基づき、ストレージコントローラ200により計算される。
 移動中フラグ2109、移動先実ページ情報2110、移動待ちフラグ2111は、当該実ページのデータを別の実ページに移動するときに使用される情報である。移動中フラグ2109は、この実ページのデータを別実ページに移動中のときにONになるフラグである。移動先実ページ情報2110は、この実ページのデータを移動している移動先の実ページのアドレス情報である。移動待ちフラグ2111は、当該実ブロックを移動すると決定したときに、ONになるフラグである。
 図9は、フラッシュパッケージ情報2500の形式である。フラッシュパッケージ情報2500は、フラッシュパッケージID2501、フラッシュパッケージ仮想容量2502、仮想ブロック容量2503である。フラッシュパッケージ情報2500は、フラッシュパッケージ230ごとに存在する。
 フラッシュパッケージID2501は当該フラッシュパッケージ230の識別子である。フラッシュパッケージ仮想容量2502は、当該フラッシュパッケージ230の仮想的な容量(ストレージコントローラ200に対して提供する記憶空間のサイズ)である。仮想ブロック容量2503は、仮想ブロックのサイズである。したがって、フラッシュパッケージ仮想容量2502を仮想ブロック容量2503で割った値が、このフラッシュパッケージ230の仮想ブロック数となる。本発明では、このフラッシュパッケージ仮想容量2502を、フラッシュパッケージ230の重複排除率などに基づいて調整するのが特長である。すでに述べたが、本実施例では、フラッシュパッケージ230がこの容量を決定するが、ストレージコントローラ200が決定してもよい。ストレージコントローラ200は、フラッシュパッケージ230から仮想容量が変化した旨の通知及び変化後の仮想容量を受信すると、この受信した値(変化後の仮想容量)をフラッシュパッケージ仮想容量2502に設定する。
 図10は、フラッシュパッケージグループ情報2300の形式を示す。フラッシュパッケージグループ情報2300は、フラッシュパッケージグループ280ごとに存在する情報である。フラッシュパッケージグループ情報2300は、フラッシュパッケージグループID2301、パッケージグループRAIDタイプ2302、実ページ数2303、空き実ページ数2304、フラッシュパッケージポインタ2305、使用不可実ページ数2306、とから構成される。
 フラッシュパッケージグループID2301は、当該フラッシュパッケージグループ280の識別子である(パッケージグループ2101と同じ値が格納される)。パッケージグループRAIDタイプ2302は、当該フラッシュパッケージグループ280のRAIDタイプである。本実施例におけるRAIDタイプは、論理ボリュームRAIDタイプ2003を説明したときに述べたとおりである。実ページ数2303は、空き実ページ数2304、使用不可実ページ数2306はそれぞれ、当該フラッシュパッケージグループ280の、総実ページ数、総空き実ページ、使用不可実ページの総数を示す。
 すでに述べたように、本発明の特長は、重複排除率によって、フラッシュパッケージ230の仮想容量が変化する点である。あるフラッシュパッケージグループ280に属するフラッシュパッケージ230の仮想容量が変化したとき、フラッシュパッケージグループ280の実ページ数2304、空き実ページ数2304数も変化する。以下、これを説明する。
 まず、当該フラッシュパッケージ230の仮想容量が変化すると、当該フラッシュパッケージ230の属するフラッシュパッケージグループ280の実ページの数も変化することになる。これを具体的に示す。まず、RAIDの原理から、1つのフラッシュパッケージグループ280内の各フラッシュパッケージ230の使用可能な容量は等しいことが前提となる。このため、(フラッシュパッケージグループ280内の各フラッシュパッケージ230における、最小のフラッシュパッケージ仮想容量2502)*(フラッシュパッケージグループ280内のフラッシュパッケージ230の数)/(実ページサイズ)が、実ページ数2303になる。このため、当該フラッシュパッケージグループ280内のフラッシュパッケージ230の最小のフラッシュパッケージ仮想容量2502が変化した場合、実ページ数2303も変化する。同様に、空き実ページ数2304も変化する。
 詳細は後述するが、これは、使用不可になった実ページの数も変化したことになるので、使用不可実ページ数2306も変化することになる。例えば、実ページ数2303が、10増加した場合、空き実ページ数2304も10増加し、使用不可実ページ数2306は10減少する。なお、すでに述べたが、本実施例では、フラッシュパッケージ230がこの容量を決定するが、ストレージコントローラ200が決定してもよい。フラッシュパッケージポインタ2305は、当該フラッシュパッケージグループ280に属するフラッシュパッケージ230のフラッシュパッケージ情報2500へのポインタである。パッケージポインタ2305の数は、当該フラッシュパッケージグループ280に属するフラッシュパッケージ230の数であるが、これは、パッケージグループRAIDタイプ2302によって決まる値である。
 空き実ページ管理情報ポインタ2200は、フラッシュパッケージグループ280ごとに設けられる情報である。図11は、空き実ページ管理情報ポインタ2200によって管理される空き実ページの集合を表している。この構造を、空き実ページ管理情報キュー2201と呼ぶ。空き実ページとは、仮想ページに割り当てられていない実ページを意味する。また、空き実ページに対応した実ページ情報2100を空き実ページ情報2100と呼ぶ。空き実ページ管理情報ポインタ2200は、先頭の空き実ページ情報2100のアドレスをさす。次に、先頭の実ページ情報2100の中の空きページポインタ2103が次の空き実ページ情報2100を指す。
 図11では、最後の空き実ページ情報2100の空き実ページポインタ2103は、空き実ページ管理情報ポインタ2200を指しているが、最後の空き実ページ情報2100の空き実ページポインタ2103にはヌル値が格納されるようにしてもよい。ストレージコントローラ200は、実ページが割り当てられていない仮想ページ(の範囲内の論理ボリューム上アドレス)に対する書き込み要求を受け付けると、ストレージシステム100内の複数のフラッシュパッケージグループ280のうち、パッケージグループRAIDタイプ2302が論理ボリュームRAIDタイプ2003と同一であるフラッシュパッケージグループ280のいずれか(例えば、空き実ページ数の最も多いフラッシュパッケージグループ280)を選択し、選択されたフラッシュパッケージグループ280の空き実ページ管理情報ポインタ2200を参照することで空き実ページを探し、仮想ページに割り当てる。
 使用不可ページ管理情報ポインタ2700は、フラッシュパッケージグループ280ごとに設けられる情報である。図12は、使用不可ページ管理情報ポインタ2700によって管理される使用不可実ページの集合を表している。この構造を、使用不可ページ管理情報キュー2701と呼ぶ。その構造は、空きページ管理情報キュー2201と同じである。フラッシュパッケージ230の仮想容量が少なくなり、実ページ数2303の数が少なくなった場合(仮に実ページ数2303がn個減少したとする)、空きページ管理情報キュー2201で管理されている実ページ情報2100のうちn個の実ページ情報2100が、使用不可ページ管理情報キュー2701に移される。逆に、フラッシュパッケージ230の仮想容量が多くなり、実ページ数2303の数が多くなった場合(n個多くなったとする)、使用不可ページ管理情報キュー2701で管理されている実ページ情報2100のうちn個の実ページ情報2100が、空きページ管理情報キュー2201に移される。本発明では、ストレージコントローラ200が、上位レベルの容量仮想化機能、フラッシュパッケージ230が下位レベルの容量仮想化機能をもつ。このため、フラッシュパッケージ230の仮想容量を変化させても、実ページ情報2100をすでに説明したような方法で、移動させるだけで対応できる。実ページ情報2100を使用不可ページ管理情報キュー2701にもっていった場合、当該実ページ情報2100に対応する実ページを、仮想ページに割り当てられなくなるが、その実ページに対応する仮想ブロックにはアクセスが発生しないので、実ブロックを他の領域に割り当て、有効に使用できる。
 次に、フラッシュパッケージ230の中にもつ管理情報について説明する。フラッシュパッケージ230は、パッケージメモリ320内に管理情報をもつ。図13は、パッケージメモリ320に含まれる情報を示している。パッケージメモリ320に含まれるパッケージ情報3000、チップ情報3100、仮想ブロックグループ情報3200、実ブロック情報3300、空き実ブロック情報ポインタ3400、簡易特徴量テーブル3500である。これらの情報は、下位レベルの容量仮想化技術、重複排除技術を実現するために必要な情報である。本実施例では、フラッシュパッケージ230が、下位レベルの容量仮想化技術、重複排除技術を実現する。ただし、本発明は、下位レベルの容量仮想化技術、重複排除技術をストレージコントローラ200で実現してもよい。
 図14は、パッケージ情報3000の形式である。パッケージ情報3000は、パッケージID3001、仮想パッケージ容量3002、実パッケージ容量3003、フラッシュブロック容量3004、フラッシュセグメント容量3008、パッケージ空きブロック数3005、パッケージデータ格納量3006、パッケージ重複排除後データ格納量3007、内部情報格納ブロック数3009、内部情報格納アドレス3010から構成される。
 パッケージID3001は、当該フラッシュパッケージ230の識別子である。仮想パッケージ容量3002は、ストレージコントローラ200から見た(ストレージコントローラ200に提供されている)当該フラッシュパッケージ230の仮想的な容量(仮想容量とも呼ばれる)である。本発明の特長は、重複排除率の変化によって、この仮想パッケージ容量を、フラッシュパッケージ230が調整する点である。すでに述べたように、この調整は、ストレージコントローラ200が実施してもよい。実パッケージ容量3003は、当該フラッシュパッケージ230内の、ストレージコントローラ200から受け取るデータを、物理的に格納できる容量(重複排除が行われた後のデータを格納できる量)と、リクラメーションを行うための余分な容量の和である。
 フラッシュブロック容量3004は、フラッシュメモリの消去単位であるブロックのサイズである。フラッシュセグメント容量3008は、フラッシュメモリのリード/ライト単位であるセグメントのサイズである。パッケージ空きブロック数3005は、当該フラッシュパッケージ230内の空きブロックの数である。
 パッケージデータ格納量3006は、ストレージコントローラ200からライト要求によって受け取ったライトデータの重複排除前の合計値、パッケージ重複排除データ格納量3007は重複排除後のデータ合計値である。内部情報格納ブロック数3009は、パッケージメモリ320に格納されたパッケージ情報3000、チップ情報3100、仮想ブロックグループ情報3200、実ブロック情報3300、空き実ブロック情報ポインタ3400を、電源OFF時または障害発生時に退避させるために確保されているブロック(これを、「内部情報格納用ブロック」と呼ぶ)の、ブロック数である。内部情報格納アドレス3010は、内部情報格納用ブロックのアドレスである。パッケージ情報3000、チップ情報3100、仮想ブロック情報3200、実ブロック情報3300、空き実ブロック情報ポインタ3400は重要な情報なので、1または複数の内部情報格納用ブロックにn重書きして格納するようにしてもよい。また、退避される回数はそう多くないので、内部情報格納用ブロックの消去回数などは問題にならない。実パッケージ容量3003/フラッシュブロック容量3004と内部情報格納ブロック数3009の合計が、このフラッシュパッケージがもつ実ブロックの総数となる。
 図15は、チップ情報3100の形式である。チップ情報3100は、フラッシュパッケージ230内の各フラッシュチップ300についての情報を格納するもので、1つのフラッシュチップ300に対して1つ存在する。チップ情報3100は、チップID3101、実チップブロック数3102、チップ内空き実ブロック数3103、接続バスID3104から構成される。
 チップID3101は、当該フラッシュチップ300の識別子である。実チップブロック数3102は、当該フラッシュチップ300がもつ実ブロックの数である。チップ内空き実ブロック数3103は、当該フラッシュチップ300の中の空き実ブロック(空き実ブロックとは、まだ仮想ブロックに割り当てられていない実ブロックを意味する)の数を示している。接続バスID3104は、当該フラッシュチップ300が接続されているパッケージバス340の識別子である。
 図16は、仮想ブロックグループ情報3200の形式である。仮想ブロックグループ情報3200は、フラッシュパッケージ230内の各仮想ブロックグループに対応して存在する情報である。図13に示されているように、複数の仮想ブロックグループ情報3200は、パッケージメモリ320内にそれぞれ隣接して格納されているが、各仮想ブロックグループ情報3200は仮想ブロックのアドレス順に並んでいるものとする。以下、図8も併せて参照しながら説明する。パッケージメモリ320内に格納されている先頭の仮想ブロックグループ情報3200は、図8の仮想ブロックグループ#0の管理情報で、以下順に、2番目、3番目の仮想ブロックグループ情報3200がそれぞれ、仮想ブロックグループ#1、#2の管理情報である。
 仮想ブロックグループ情報3200は、仮想ブロックグループ識別子3201、実ブロック情報ポインタ3202、データ格納量3203、重複排除後データ格納量3204、仮想セグメントポインタ3205、仮想セグメント特徴量3206、後重複排除ポインタ3207、前重複排除ポインタ3208、後シノニウムポインタ(synonym pointer)3209、前シノニウムポインタ3210、後簡易シノニウムポインタ3211、前簡易シノニウムポインタ3212から構成される。
 本実施例では、フラッシュメモリの読み書き単位をセグメントと呼ぶ。フラッシュメモリの読み書き単位は、通常、ページと呼ばれるが、本実施例は、ストレージコントローラ210が行う容量仮想化の単位をページと呼ぶため、本実施例では、フラッシュメモリの読み書き単位をセグメントと呼ぶ。本実施例では、フラッシュメモリに書き込むデータを重複排除して格納するが、重複排除の単位をセグメントとする。ただし本発明は、重複排除の単位がセグメントでない場合も有効である。重複排除したデータを格納するフラッシュメモリのセグメントを実セグメントと呼ぶ。重複排除前の仮想的なセグメントを仮想セグメントと呼ぶ。本実施例では、更新された仮想セグメントごとに、当該仮想セグメントと同じ値をもつ仮想セグメントがないかをチェックして、存在する場合、更新された仮想セグメントの内容を新たに格納することは行わない。これによって、容量削減効果を発揮できる。
 仮想ブロックグループ識別子3201は、対応する仮想ブロックグループの識別子(識別番号)である。本発明の実施例に係るフラッシュパッケージ230では、図8に示されているように、各仮想ブロックグループには0から始まる識別番号(図8の、「仮想ブロックグループ#1」などの「#1」が識別番号である)が付されているものとする。
 実ブロック情報ポインタ3202は、対応する仮想ブロックグループに対して割り当てられた実ブロックの実ブロック情報3300(後述)へのポインタである。実ブロック情報ポインタ3202は、仮想ブロックグループを構成する仮想ブロック数がm個の場合、最大で(m+1)個存在する。実ブロック情報ポインタ3202は、実ブロックを割り当てていないときには、ヌル値となる。また実ブロックを割り当てるときには、複数の実ブロック情報ポインタ3202のうち、ヌル値が格納されている最初の実ブロック情報ポインタ3202に、実ブロック情報3300へのポインタを格納する。当該仮想ブロックグループに割り当てている実ブロックの数をk個(k≦(m+1))とすると、先頭からk個の実ブロック情報ポインタ3202が有効である(ヌル値でない)。
 データ格納量3203は、当該仮想ブロックグループに格納されている重複排除前のデータ量をあらわす。この最大容量は、仮想ブロックグループの容量となる。一方、重複排除データ格納量3204は、重複排除後のデータの格納量である。なお、フラッシュメモリの場合、仮想セグメントの内容が書き換えられると、書き換えられたデータは、書き換え前のデータが格納されていたセグメントとは別のセグメントに格納されるため、同一の仮想セグメントのデータが複数個所に存在する。仮想ブロックグループデータ格納量3203、重複排除データ格納量3204は、最新の仮想セグメントの格納量を計算した値である。
 仮想セグメントポインタ3205、仮想セグメント特徴量3206は、仮想セグメントを表現する情報であり、仮想ブロックグループ情報3200内に複数(仮想ブロックグループ内仮想セグメント数と同数)存在する。複数ある仮想セグメントポインタ3205のうち、先頭の仮想セグメントポインタ3205は、仮想ブロック情報3200に対応する仮想ブロックグループの記憶空間上の先頭に位置する仮想セグメントに割り当てられている実セグメントへのポインタが格納され、2番目以降の仮想セグメントポインタ3205にも同様に、仮想ブロック情報3200に対応する仮想ブロックグループの記憶空間上の2番目以降に位置する仮想セグメント割り当てられている実セグメントへのポインタが格納される。
 実セグメントへのポインタとは具体的には、当該実セグメントが属する実ブロックに対応する実ブロック情報3300の実ブロック識別子3301(後述)とその実ブロック内のアドレス(実セグメントに付されたアドレス)である。なお、実セグメントに付されたアドレスの表現形式は、特定の形式に限定されるものではなく、対象となる実セグメントを実ブロック内で一意に特定できるものであれば、任意の表現形式を用いることができる。
 同様に、複数ある仮想セグメント特徴量3206のうち、先頭の仮想セグメント特徴量3206は先頭の仮想セグメントの特徴量を表し、以下順に2番目以降の仮想セグメント特徴量3206はそれぞれ、2番目以降の仮想セグメントの特徴量を表す。本実施例では、フラッシュパッケージ230は、ストレージコントローラ200からSCSIコマンドで受け取ったデータに付されている保証コード中の2byteの特徴量を、仮想セグメント特徴量3206に格納する。ただし、セグメントの長さ(保証コードのサイズを除く)は、4Kbyteまたは8Kbyteあるのに対し、保証コードは、512byteのデータ毎に付加される情報なので、合計では、16byteあるいは32byteの特徴量が仮想セグメント特徴量3206に設定される。ただし、16byte、あるいは、32byteの一部を設定するようにしてもよい。
 後重複排除ポインタ3207、前重複排除ポインタ3208は、当該仮想セグメントとデータの値が同一である仮想セグメントの集合を、双方向ポインタで接続するための情報である。後シノニウムポインタ3209、前シノニウムポインタ3210は、当該仮想セグメントと特徴量は同一であるが、データの値は異なる仮想セグメントの集合を、双方向ポインタで接続するための情報である。後簡易シノニウムポインタ3211、前簡易シノニウムポインタ3212は、特徴量を簡易な特徴量に変換して、同一の特徴量をもつ仮想セグメントを簡単に見つけるための情報である。具体的には、簡易な特徴量が同一な仮想セグメントの集合を双方向ポインタで接続するための情報である。
 したがって、仮想セグメントポインタ3205、仮想セグメント特徴量3206と同様に、後重複排除ポインタ3207、前重複排除ポインタ3208、後シノニウムポインタ3209、前シノニウムポインタ3210、後簡易シノニウムポインタ3211、前簡易シノニウムポインタ3212の数は、仮想ブロックグループ内の仮想セグメントの数に等しい。そして、仮想ブロックグループ情報3200内のn番目の後重複排除ポインタ3207、前重複排除ポインタ3208、後シノニウムポインタ3209、前シノニウムポインタ3210、後簡易シノニウムポインタ3211、前簡易シノニウムポインタ3212はそれぞれ、仮想ブロック情報3200に対応する仮想ブロックグループの記憶空間上のn番目の仮想セグメントのためのポインタである。以下では、ある仮想セグメントのためのポインタ(後重複排除ポインタ3207、前重複排除ポインタ3208、後シノニウムポインタ3209、前シノニウムポインタ3210、後簡易シノニウムポインタ3211、または前簡易シノニウムポインタ3212)のことをそれぞれ、「仮想セグメントに対応するポインタ」と呼ぶ。
 なお、本実施例では、仮想セグメントポインタ3205、仮想セグメント特徴量3206、後重複排除ポインタ3207、前重複排除ポインタ3208、後シノニウムポインタ3209、前シノニウムポインタ3210、後簡易シノニウムポインタ3211、前簡易シノニウムポインタ3212は仮想セグメントごとに設けられることになっているが、2つ以上の仮想セグメントごとに1つの情報をもつように構成してもよい。
 図17は、実ブロック情報3300の形式である。実ブロック情報3300は、各実ブロックに対応して存在する情報である。実ブロック情報3300は、実ブロック識別子(または実ブロックIDとも呼ばれる)3301、空き実ブロックポインタ3302、実ブロック内空き容量3304、実セグメントビットマップ3305、逆ポインタ3306から構成される。
 実ブロック識別子3301は、対応する実ブロックの識別子である。実ブロックの識別子とは、この実ブロックが存在するフラッシュチップ300を識別する情報(識別番号など)と当該フラッシュチップ内アドレスの組である。空き実ブロックポインタ3302は、実ブロック情報3300に対応する実ブロックが仮想ブロックに割り当てられていない(空き状態にある)時、次の空き状態にある実ブロックの実ブロック情報3300を指す情報が格納されている。実ブロック内空き容量3304は、対応する実ブロックの現在の空き容量を示している。パッケージプロセッサ310は、対応する実ブロックに対し、この空き容量以下のライト要求を、ストレージコントローラ200から受け、この空いた領域に、書き込みデータを格納できる。格納した後、格納したデータ量だけ、実ブロック内空き容量3304を削減する。
 実セグメントビットマップ3305は、当該実ブロックに属する実セグメント数がN個の場合、Nビットのサイズの情報である。各ビットは当該実ブロックに属する各実セグメントが使用中(仮想セグメントに割り当てられている)か、空いている(仮想セグメントに割り当てられていない)かを示す。各ビットは、オンであれば使用中であることを表し、オフの場合には使用中でないことを表す。逆ポインタ3306は、実セグメントビットマップ3305が、オンの場合、この実セグメントに対応する仮想セグメントへのポインタ(仮想セグメントポインタ3205の格納されているパッケージメモリ320上アドレス)を示す。複数の仮想セグメントに対応する場合、どれか一つの仮想セグメントを示す。実ブロック情報3300内に、実ブロック内実セグメント数と同数の逆ポインタ3306が存在する。
 空き実ブロック情報ポインタ3400は、フラッシュチップ300ごとに存在する。図18は、空き実ブロック情報ポインタ3400によって管理される空き実ブロックの集合を表している。空き実ブロック情報ポインタ3400は、先頭の空き実ブロックの実ブロック情報3300のアドレスをさす。次に、先頭の空き実ブロックの実ブロック情報3300の中の空き実ブロックポインタ3302が次の空き実ブロックの実ブロック情報3300を示す。図18では、最後の空き実ブロックの実ブロック情報3300の空き実ブロックポインタ2103は、空き実ブロック情報ポインタ3400を示しているが、ヌル値でもよい。パッケージプロセッサ310は、実ブロックを割り当てていない仮想ブロックに対して書き込み要求を受け付けると、フラッシュチップ300の中のいずれか、例えば、空き実ブロックの数(チップ内空き実ブロック数3103を参照することで取得できる)の最も多いフラッシュチップ300に対応する空き実ブロック情報ポインタ3400から、空き実ブロックを探し、仮想ブロックに割り当てる。
 本発明の実施例に係るフラッシュパッケージ230は、同内容のデータを格納している仮想セグメント群を、1まとまりのグループとして管理するためのキュー構造を管理している。これを、重複排除キュー1800と呼ぶ。重複排除キュー1800を構成するために、フラッシュパッケージ230は、仮想ブロックグループ情報3200の後重複排除ポインタ3207と前重複排除ポインタ3208を用いて、双方向リストを作成する。
 図19は、仮想ブロックグループ識別子(3201)がaの仮想ブロックグループ(以下、当該仮想ブロックグループの仮想ブロックグループ情報3200を、仮想ブロックグループ情報3200aと呼ぶ)内の、先頭(0番目)の仮想セグメントのデータ内容と、仮想ブロックグループ識別子(3201)がbの仮想ブロックグループ(以下、当該仮想ブロックグループの仮想ブロックグループ情報3200を、仮想ブロックグループ情報3200bと呼ぶ)内の、先頭の次(1番目)の仮想セグメントのデータ内容とが同じであった場合の、重複排除キュー1800の構成例を示している。この場合、仮想ブロックグループ情報3200aの0番目の後重複排除ポインタ3207は、仮想ブロックグループ情報3200bの1番目の後重複排除ポインタ3207を指すように構成される(仮想ブロックグループ情報3200aの0番目の後重複排除ポインタ3207に、仮想ブロックグループ情報3200bの1番目の後重複排除ポインタ3207の格納されているパッケージメモリ320上アドレスが格納される)。そして仮想ブロックグループ情報3200bの1番目の前重複排除ポインタ3208は、仮想ブロックグループ情報3200aの0番目の後重複排除ポインタ3207を指すように構成される。そしてさらに別の仮想セグメントのデータ内容が、これらの仮想セグメントと同内容であった場合、仮想ブロックグループ情報3200bの1番目の後重複排除ポインタ3207が、当該別の仮想セグメントに対応する、後重複排除ポインタ3207を指すように構成される。また、重複排除キュー1800の終端の後重複排除ポインタ3207にはヌル値が格納され、重複排除キュー1800の先頭の前重複排除ポインタ3208にはヌル値が格納される。
 重複排除キュー1800を構成する仮想セグメントと、実セグメントの間の関係は、実ブロック情報3300によって関連付けられる。図19に示されているように、実ブロック情報3300の実ブロック識別子(実ブロックID)3301は、フラッシュパッケージ230内の複数の実ブロックのうち1つを指す特定する情報が格納されている。そしてたとえば、重複排除キュー1800を構成する各仮想セグメントは、実ブロック内の2番目の実セグメントに格納されているデータと同内容である場合、図19に示されているように、実セグメントビットマップ3305の2番目がオン(1)になり、実ブロック情報3300内の2番目の逆ポインタ3306は、重複排除キュー1800の先頭に位置する仮想セグメントの仮想セグメントポインタ3205を指す。つまり、実ブロック情報3300の実セグメントビットマップ3305、逆ポインタ3306、及び重複排除キュー1800により、フラッシュチップに格納されている実セグメントのデータ内容と、逆ポインタ3306が指す重複排除キュー1800に属する各仮想セグメントのデータ内容が同一であることが表現されている。
 なお、図19ではデータ内容が同じ仮想セグメントが、それぞれ異なる仮想ブロックグループに属している場合の構成例を示しているが、データ内容が同じ仮想セグメントが、同じ仮想ブロックグループに属している場合もあり得、その場合でも重複排除キュー1800は構成可能である。たとえば仮想ブロックグループ情報3200aで特定される仮想ブロックグループ内の先頭(0番目)仮想セグメントと次の(1番目)仮想セグメントのデータ内容が同一の場合、仮想ブロックグループ情報3200aの0番目の後重複排除ポインタ3207は、仮想ブロックグループ情報3200aの1番目の後重複排除ポインタ3207を指し、仮想ブロックグループ情報3200aの1番目の前重複排除ポインタ3208は、仮想ブロックグループ情報3200aの0番目の後重複排除ポインタ3208を指すように構成される。
 1つの重複排除キュー1800に接続されている各仮想セグメントの、仮想セグメントポインタ3205、仮想セグメント特徴量3206には同じ値が格納される。また、重複排除キュー1800に接続されているある仮想セグメントのデータ内容が変更された場合、当該仮想セグメントは重複排除キュー1800から削除される(切り離される)。また、ある仮想セグメントと同一のデータの格納された仮想セグメントが他にないときには、重複排除キュー1800は構成されないことになる。
 本発明の実施例に係るフラッシュパッケージ230はさらに、データ内容は異なるが、データから導出される特徴量が同一である仮想セグメント群を、1まとまりのグループとして管理するためのキュー構造を管理している。これをシノニウムキュー1900と呼ぶ。図20は、特徴量が同じで、データの値は異なる仮想セグメントの集合を示している。シノニウムキュー1900は、重複排除キュー1800と同様の要領で構成される。重複排除キュー1800では、データ内容が同一の仮想セグメント同士から成る、1つの重複排除キューを構成するために、後重複排除ポインタ3207と前重複排除ポインタ3208を用いて、データ内容が同一の仮想セグメント同士を接続していた。シノニウムキュー1900を構成する際には、特徴量が同じで、データの値は異なる仮想セグメント同士を接続するために、後シノニウムポインタ3209、前シノニウムポインタ3210を用いる。それ以外の点は重複排除キュー1800と同様である。
 ある仮想セグメントと同一の特徴量をもつ仮想セグメントが他にないときには、シノニウムキュー1900は構成されないことになる。シノニウムキュー1900のそれぞれの仮想セグメントの仮想セグメント特徴量3206は同じであるが、仮想セグメントポインタ3205の値は異なる。ただし、データの値が同じ仮想セグメントの集合が存在する場合には(仮にこの集合が、重複排除キューAを構成しているとする)、重複排除キューAの先頭に位置する仮想セグメントはシノニウムキュー1900に接続されている。後シノニウムポインタ3209は、特徴量が同じでデータの値が異なる次の仮想セグメントのアドレスを示す。最後の後シノニウムポインタ3209はヌル値になる。前シノニウムポインタ3210は、特徴量が同じで、データの値が異なる一つ前の仮想セグメントのアドレスを示す。先頭の前シノニウムポインタ3210はヌル値になる。新たに書き込まれた仮想セグメントの特徴量が同じで、同一のデータの値を持つ仮想セグメントの集合が見つからなかった場合、最後の仮想セグメントとして、この集合(シノニウムキュー)に追加される。この集合に属する仮想セグメントの特徴量が変更された場合、当該仮想セグメントはこの集合から削除される。
 さらに本発明の実施例に係るフラッシュパッケージ230は、データ内容及び特徴量は異なるが、特徴量から導出される値である簡易特徴量の値が同じである仮想セグメント群を、1まとまりのグループとして管理するためのキュー構造を管理している。これを簡易シノニウムキュー3550と呼ぶ。
 図21は、簡易特徴量テーブル3500の構造と、簡易特徴量が同じで、特徴量が異なる仮想セグメントの集合を示している。特徴量の値が同じでデータの値が異なる仮想セグメントが多数存在すると、異なるデータの数だけ、読み出し処理と比較処理が実行されるため、特徴量の値の空間(数)は大きくして、その数(特徴量の値が同じでデータの値が異なる仮想セグメントの数)を減らしたほうがよい。また、同一の特徴量をもつ仮想セグメントを見つける最も単純な方法は、特徴量の空間のオーダと同サイズの特徴量テーブルをもつことである。ただし、特徴量の空間を大きくすると、特徴量テーブルの大きさが大きくなりすぎて、パッケージメモリ320に入りきらなくなる。このため、本実施例では、仮想セグメント特徴量3206を所定の方法により小さい値(簡易特徴量)に変換することで、簡易特徴量を導出し、当該簡易特徴量の集合を格納した、簡易特徴量テーブル3500を持つ。
 この簡易特徴量テーブル3500の大きさは、フラッシュパッケージ230の仮想セグメントの数のオーダに近い数(空間)とする。簡易特徴量テーブル3500は、簡易特徴量ポインタ3510(以下、「ポインタ3510」と略記されることもある)から構成される。簡易特徴量ポインタ3510の数は、フラッシュパッケージ230の仮想セグメントの数のオーダに近い数となる。簡易特徴量テーブル3500内の先頭にある簡易特徴量ポインタ3510は、簡易特徴量が0の仮想セグメントを指すポインタで、以下順に、簡易特徴量が1、2、…の仮想セグメントを指すポインタである。
 簡易特徴量ポインタ3510は、当該フラッシュパッケージ230に、簡易特徴量3505と等しい簡易特徴量をもつ仮想セグメントが存在すれば、その先頭の仮想セグメントに対応する後簡易シノニウムポインタ3211を指す。存在しなければヌル値になる。簡易シノニウムキュー3550には、簡易特徴量ポインタ3510が含まれるので、簡易特徴量ポインタ3510に対応する簡易特徴量3505と等しい簡易特徴量をもつ仮想セグメントが一つでも存在すれば、簡易シノニウムキュー3550が存在することになる。後簡易シノニウムポインタ3211は、簡易特徴量が同じで、特徴量の値が異なる次の仮想セグメントのアドレスを示す。ただし、簡易特徴量も特徴量も同じ、仮想セグメントの集合が存在した場合(仮にこれらの集合がシノニウムキューAを構成しているとする)は、シノニウムキューAの先頭に位置する仮想セグメントは、簡易シノニウムキュー3500に接続される。最後の後簡易シノニウムポインタ3207はヌル値になる。前重簡易シノニウムポインタ3212は、簡易特徴量が同じで、特徴量が異なる一つ前の仮想セグメントのアドレスを示す。先頭の後簡易特徴量ポインタ3212はその簡易特徴量に対応する簡易特徴量ポインタ3510が格納されたアドレスを示す。新たに書き込まれた仮想セグメントの簡易特徴量が同じで、同一の特徴量を持つ仮想セグメントの集合が見つからなかった場合、最後の仮想セグメントとして、この集合に追加される。この集合に属する仮想セグメントの簡易特徴量が変更された場合、当該仮想セグメントはこの集合から削除される。
 次に、上記に説明した管理情報を用いて、ストレージコントローラ200、フラッシュパッケージ230が実行する動作の説明を行う。まず、ストレージコントローラ200の動作を説明する。以下で説明するストレージコントローラ200が行う処理は、ストレージコントローラ200内のプロセッサ260が、メモリ270内に格納されている各種プログラムを実行することにより実現される。
 図22は、メモリ270内に格納された、本実施例に関するプログラムが示されている。本実施例に関するプログラムは、リード処理実行部4000、ライト要求受付部4100、ライトアフタ処理実行部4200、実ページ移動処理実行部4500である。これらのプログラムは、上位レベルのウエアレベリング技術、容量仮想化技術を実現するプログラムである。なお、以下では、「xxx実行部」(つまりプログラム)が動作主体となって、処理を実行するように記載されている箇所も存在するが、その記載は、プログラムがプロセッサ260によって実行されることによって処理が行われることを表現しているものである。
 なお、すでに述べたが、本実施例は、下位レベルのウエアレベリング技術、容量仮想化技術を実現するのは、フラッシュパッケージ230であるが、本発明は、下位レベルのウエアレベリング技術、容量仮想化技術をストレージコントローラ200が実行してもよい。その場合、下位レベルのウエアレベリング技術、容量仮想化技術は、ストレージコントローラ200で実行される。したがって、上位レベルのプログラムと下位レベルのプログラム双方が、ストレージコントローラ200で実行されるので、プログラム間のインターフェイスが異なってくるが、上位レベルのプログラムが実行する内容は基本的に大きな相違はない。したがって、本実施例では、下位レベルのウエアレベリング技術、容量仮想化技術を実現するのは、フラッシュパッケージ230であることを前提に、リード処理実行部4000、ライト要求受付部4100、ライトアフタ処理実行部4200、実ページ移動処理実行部4500の処理フローを詳細に説明する。
 なお、本実施例では、ホスト12からのリード要求、ライト要求で指定される、アクセス対象データ範囲は、フラッシュメモリのリード・ライト単位である(本発明における)仮想セグメント境界に一致しているものとする。具体的には、仮想セグメントサイズが8KBの場合、論理ボリュームのアドレス空間上の8KB境界に一致した範囲が、アクセス対象範囲として指定されるものとする。もちろん、本発明は、ホスト12からのリード要求、ライト要求で指定されるアクセス範囲が、仮想セグメントの一部のみの場合にも有効でそのようなアクセス要求を受信した場合には、フラッシュパッケージ230は、アクセス範囲を含む仮想セグメント全体を読み出し、リード要求を受信した場合には指定された部分領域のみをホスト12に返却し、ライト要求を受信した場合には、読み出された仮想セグメントのデータのうち指定された部分領域のみ更新し、更新された仮想セグメント全体をフラッシュパッケージ230に書き込む。
 図23は、リード処理実行部4000の処理フローである。リード処理実行部4000は、ホスト120から、ストレージコントローラ200が、リード要求を受け付けたときに実行される。
 ステップ5000:プロセッサ260は、受け取ったリード要求で指定されたリード対象とするアドレスから、対応する仮想ページとアクセスする仮想ページ内の相対アドレスを計算する。
 ステップ5001:リード対象となったデータが、キャッシュメモリ210に存在するか(ヒットしているか)をチェックする。これは、公知の技術である。ヒットしている場合、ステップ5008へジャンプする。
 ステップ5002:ここでは、リード対象としているデータをキャッシュメモリ210にロードする必要がある。ます、当該ステップでは、リード対象となった仮想ページに割り当てられた実ページに対応する実ページ情報2100を、論理ブロック管理情報2000の実ページポインタ2004から獲得する。
 ステップ5003:獲得した実ページ管理情報2100のパッケージグループ2101、実ページアドレス2102を参照することにより、当該実ページが属するフラッシュパッケージグループ280の識別子と当該実ページのフラッシュパッケージグループ280内の先頭アドレスを得る。
 ステップ5004:ステップ5000で得た仮想ページ内の相対アドレスと、パッケージグループ内RAIDタイプ2302(ステップ5003で得たフラッシュパッケージグループ280の識別子をもとに、フラッシュパッケージグループ情報2300を参照することにより得られる)から、当該要求のアクセス対象となる実ページ内の相対アドレスを計算する。計算した実ページ内相対アドレス、パッケージグループ内RAIDタイプ2302とフラッシュパッケージポインタ2305とから、アクセス対象となるフラッシュパッケージ230及び当該フラッシュパッケージ230内のアクセス対象アドレスを特定する。
 ステップ5005:ステップ5004で特定したフラッシュパッケージ230の、ステップ5004で特定したアドレスにリード要求を発行する。
 ステップ5006:フラッシュパッケージ230からデータが送られてくるのを待つ。
 ステップ5007:フラッシュパッケージ230から送られてきたデータをキャシュメモリ210に格納する。
 ステップ5008:当該リード要求で指定されたキャッシュメモリ210上のデータをホスト120へ送り、処理を完了する。
 図24は、ライト要求受付部4100の処理フローである。ライト要求受付部4100は、ストレージコントローラ200が、ホスト120からライト要求を受け付けたときに実行される。
 ステップ6000:プロセッサ260は、受け取ったライト要求でライト対象とされるアドレスから、当該アドレスに対応する仮想ページと、アクセス対象仮想ページ内の相対アドレスを計算する。
 ステップ6001:ライト要求には、アクセス対象の論理ボリュームの情報(LUN等)も指定されているため、プロセッサ260はライト要求の内容を参照することで、アクセス対象となる論理ボリュームの論理ボリューム情報2000を一意に特定できる。ステップ6001ではプロセッサ260は、受け取ったライト要求に基づいて特定された論理ボリューム情報2000を参照し、ステップ6000で得た仮想ページに実ページが割り当てられているかを、実ページポインタ2004を参照することによりチェックする。割り当てられている場合、ステップ6003へジャンプする。
 ステップ6002:当該ステップでは、対応する仮想ページに実ページを割り当てる。論理ボリューム情報2000のRAIDタイプ2002、フラッシュパッケージグループ情報2300の、パッケージグループRAIDタイプ2303、空き実ページ数2304等を参照して、どのフラッシュパッケージグループ280の実ページを割り当てるかを決める。その後、対応するフラッシュパッケージグループ280の空き実ページ管理情報ポインタ2200を参照して、先頭の空きページ情報2100を、当該実ページポインタ2004が示すようにする。これで、仮想ページに実ページを割り当てたことになる。なお、空き実ページ管理情報ポインタ2200は、次の実ページ情報2100(仮想ページに割り当てた実ページの実ページ情報2100中の空きページポインタ2103が示す実ページ情報2100)を示すようにし、さらに、仮想ページに割り当てた実ページの実ページ情報2100の中の空きページポインタ2103をヌルにする。また、当該実ページに対応するフラッシュパッケージグループ管理情報の空きページ数2304の数を減らす。本実施例では、仮想ページを実ページに割り当てる処理をプロセッサ260がライト要求を受け付けたときに実施する処理例について説明したが、必ずしもこれに限定されない。この割り当て処理は、フラッシュパッケージ230へデータを格納するまでに実行されればよい。
 ステップ6003:ホスト120から当該ライト要求で指定されたライトデータを、キャッシュメモリ210に格納する。
 フラッシュパッケージグループ280は、RAID構成をとるので、キャッシュメモリ210上に格納したライトデータに対して、冗長データを生成し、冗長データもキャッシュメモリ210上に格納する。ただし、これは、公知の方法であるので、詳細に説明はしない。また、実ページの中には、冗長データを格納する領域も含まれているので、ライトデータに対応する冗長データの実ページ内の格納アドレスも一意に定まる。冗長データも、一度、キャッシュメモリ210に格納する。なお、ステップ6003で、キャッシュメモリ210にライトデータと冗長データを格納する際、それぞれが格納されるべきフラッシュパッケージ230のフラッシュパッケージID及びフラッシュパッケージ230のアドレスを決定し(これはRAID技術を採用した公知のストレージ装置で行われている処理と同様の処理を行えばよい)、キャッシュメモリ210上の冗長データとライトデータにはそれぞれ、どのフラッシュパッケージ230のどのアドレスに書き込むべきかを示す情報、及び対応する実ページの情報(実ページポインタ2004等)を付加して格納しておく。ライトデータ、冗長データは、ライトアフタ処理実行部5200によって、フラッシュパッケージ160に書き込まれるが、ライトアフタ処理実行部5200から見ると、いずれもフラッシュパッケージ230へ書き込むデータなので、両者を区別する必要はない。同様に、フラッシュパッケージ230も、両者を区別する必要はない。
 図25は、ライトアフタ処理実行部4200の処理フローである。ライトアフタ処理とは、図24にて説明したライト要求受付部4100による処理によって、キャッシュメモリ上に格納されたライトデータを、ストレージシステム100の最終記憶媒体であるフラッシュパッケージ230へ格納(デステージ)する処理のことを意味する。ライトアフタ処理実行部4200は、プロセッサ260が、ライト要求受付部4100による処理とは独立に、適宜実行する処理である。ライトアフタ処理実行部4200は、ホスト120から受け取ったライトデータ、冗長データをフラッシュパッケージ230に書き込む処理を実行する。ただし、ライトアフタ処理実行部4200は、ライトデータ、冗長データの両者を、フラッシュパッケージ230に書き込むべきデータとして、両者を区別せずに処理する。
 ステップ7000:プロセッサ260は、キャッシュメモリ210内をサーチして、フラッシュパッケージ230に書き込むべきデータを決める。書き込むべきデータの決定方法は、LRUアルゴリズムなどの公知の方法を使用すればよい。プロセッサ260は、見出したデータに付与されている、データ書き込み対象のフラッシュパッケージ230の情報、当該フラッシュパッケージ230上の書き込み先アドレスに関する情報を、仮想セグメント単位に取り出す。
 ステップ7001:書き込みを行う仮想セグメントの特徴量を、512byteごとに2byteずつ作成するよう、演算回路280に要求し、完了を待つ。この特徴量の計算は、ホスト110から、ライト要求を受け付けたときに、実行してもよい。具体的には、ライト要求受付部4100のステップ6003で、ライトデータをキャッシュメモリ210に格納する際に計算して、特徴量もキャッシュメモリ210に格納してもよい。
 ステップ7002:しかるべきフラッシュパッケージ230に、書き込むべき仮想セグメントのライト要求を発行する。第1の実施例では、512byteのデータに、ステップ7001で計算した特徴量を示す2byteのデータを含む8byteの保証コードを付加して、520byteを一つの転送単位とするSCSIのライトコマンドを用いてデータを送る。なお、このとき、書き込みを行う実ブロックに対応する実ブロック情報2500の移動中フラグ2109をチェックして、onの場合、この実ページは移動中であるため、このライト要求の実行を中止し、別の書き込みデータを探す。
 ステップ7003:ライト要求の完了をまつ。
 ステップ7004:プロセッサ260は、フラッシュパッケージ230から当該ライト要求に関する終了報告をチェックする。これらの処理が、本発明の特徴である。フラッシュパッケージ230から受信する、ライト要求に関する終了報告には少なくとも、本ライト要求に係る処理によって格納されたデータ格納量と重複排除後データ量とフラッシュパッケージ230の仮想容量の情報が含まれている。ステップ7004では、当該ライト要求に関する終了報告に含まれる、データ格納量、重複排除後データ量についての処理が行われる。具体的にはプロセッサ260は、ページデータ格納量2104にデータ格納量を、ページ重複排除後データ格納量2105に重複排除後データ格納量を加算する。
 ステップ7005:ここでは、フラッシュパッケージ230の仮想容量に変化があったフラッシュパッケージ230がまったくないかをチェックする。ない場合、処理を終了する。
 ステップ7006:仮想容量に変化があったフラッシュパッケージ230が存在した場合、受け取ったそれぞれの仮想容量を、該当するフラッシュパッケージ仮想容量2502に設定する。次に、この変更により、該当するフラッシュパッケージグループ280に属する各フラッシュパッケージ230のフラッシュパッケージ仮想容量2502の最小値が変化したかをチェックする。変化した場合、この変化値にあわせて、実ページ数2303、空き実ページ数2304を更新する。また、その数にあわせて、空きページ管理情報キュー2201と使用不可ページ管理情報キュー2701の間で、実ページ管理情報を移動する。これにより、重複排除が多く行われるデータが格納された場合には実ページが増え、結果的に上位装置に多くの記憶領域を提供できる。その後、ページ移動処理(図26)をコールする。その後、処理を完了する。
 図26は、実ページ移動処理実行部4500の処理フローである。実ページ移動処理実行部4500は、ライトアフタ処理実行部4200(ステップ7006)からコールされる。
 ステップ11000:プロセッサ260は、各フラッシュパッケージグループ280の空き実ページ数2304が、ある値:α以下になっていないかを確認する(αはあらかじめ定められた値である)。条件が成立しない(空き実ページ数2304がα以下でない)パッケージグループ280しか存在しない場合、処理を終了する。
 ステップ11001:処理対象のフラッシュパッケージグループ280に対応した実ページ管理情報2100をサーチし、ページ重複排除後データ格納量2105が多い(所定の閾値よりも大きい)実ページ管理情報2100の集合を見つけ、これらの実ページを移動の対象候補とし、それぞれの移動待ちフラグ2111をオンにする。
 ステップ11002:ここでは、移動先となるフラッシュパッケージグループ280を選択する。本実施例では、一つ選択するものとするが、もちろん、本発明は、複数選択する場合も有効である。例えば、空き実ページ数2304が比較的少ないフラッシュパッケージグループを選択する。次に、選択した移動先のフラッシュパッケージグループ280の中のどの実ページを移動先とするかを決定する。移動先の実ページを割り当てるフラッシュパッケージグループ280を決めると、このフラッシュパッケージグループ280に対応する空き実ページ管理情報ポインタ2200がさす実ページ情報2100を、移動元の実ページの実ページ管理情報2100のコピー先実ページ情報2110に設定する。空き実ページ管理情報ポインタ2200は次の空いた状態にあるページ管理情報2100を示すようにする。以上の処理をステップ11001で移動を決定したすべての実ページに対して実行する。以上で、移動元となる実ページの集合のそれぞれの移動元実ページに対する移動先ページが決まったことになる。
 ステップ11003:ここでは、移動元となる実ページ管理情報2100を決定する。具体的には、移動待ちフラグ2111がオンになっている実ページ管理情報2100を1つ見つける。移動待ちフラグ2111がオンになっている実ページ管理情報2100が1つもない場合、処理を終了し、呼び出し元に戻る。
 ステップ11004:ここでは、ステップ11003で選択された実ページ情報2100に対応する実ページが割り当てられているフラッシュパッケージグループ280を構成するフラッシュパッケージ230のどの仮想セグメントの集合になるかを算出する。実ページ情報2100のパッケージグループ2101が示すフラッシュパッケージグループ情報2300が該当するフラッシュパッケージグループ情報2300である。このフラッシュパッケージグループ情報2300に格納されたフラッシュパッケージポインタ2305が示すフラッシュパッケージ情報2500に対応するフラッシュパッケージ230がコピー元の実ページが割り当てられているフラッシュパッケージ230となる。次に、実ページ情報2100の、実ページアドレス2102と、フラッシュパッケージ情報2500の仮想ブロック容量2503から、それぞれのフラッシュパッケージ230の中の移動対象となる仮想セグメントの集合を、すべてのフラッシュパッケージ230に関して求める。
 ステップ11005:移動元となる実ページが割り当てられているフラッシュパッケージグループ280を構成する各フラッシュパッケージ230に対して、ステップ11004で求められた仮想セグメントの中で、データを格納した仮想セグメントのデータを、キャッシュメモリ210に移動するよう要求する。この要求を受信したフラッシュパッケージ230は、後述する仮想ブロック移動処理実行部12300(図36)を実行する。
 ステップ11006:要求を発行したすべてのフラッシュパッケージ230からの完了報告をまつ。 
 ステップ11007:フラッシュパッケージ230からの完了報告には、各仮想セグメントにデータが格納されていたか、いないかの情報が含まれている。また仮想セグメントにデータが格納されていた場合、仮想セグメント内のデータが送られてくる。この場合、仮想セグメント内データは、512byteのデータと2バイトの特徴量を含む8byteの保証コードを合わせた520byteの集合として、送られてくる。プロセッサ260は、仮想セグメント内データをキャッシュメモリ210上に格納する。
 ステップ11008:ここでは、移動先実ページが割り当てられているフラッシュパッケージグループ280を構成するフラッシュパッケージ230の集合と、移動先実ページが当該フラッシュパッケージ230のどの仮想セグメントの集合になるかを算出する。この場合、移動元になる実ページ情報2100の移動先実ページ情報2110が示す実ページ情報2100が、移動先の実ページに対応する実ページ情報2100となる。実ページ情報2100から、フラッシュパッケージグループ280を構成するフラッシュパッケージ230の集合と、それぞれのフラッシュパッケージ230のどの仮想セグメントの集合になるかを算出する処理は、ステップ11004と同様の処理であるので説明を省略する。
 ステップ11009:ここでは、ステップ11007でキャッシュメモリ210に格納された移動元仮想セグメント内データを、移動先となる実ページが割り当てられているフラッシュパッケージグループ280を構成する各フラッシュパッケージ230に格納するよう要求する。このとき、各フラッシュパッケージ230に送られる情報は、各セグメントにデータが格納されているか否かの情報、そして格納されている場合には、格納されているデータ内容を併せて送る。この場合、仮想セグメントは、512byteのデータと2バイトの特徴量を含む8byteの保証コードを合わせた520byteの集合として、送る。
 ステップ11010:要求を発行したすべてのフラッシュパッケージ230からの完了報告をまつ。
 ステップ11011:移動元実ページを空き実ページに、移動先実ページにこれまで移動元実ページを割り当てていた仮想ページを割り当てる。これは、移動元の実ページに空き実ページ管理ポインタ2200につなぎ、これまで移動元の実ページ情報を示していた実ページポインタ2004を移動先の実ページ情報を示すようにすればよい。また、移動元の実ページ情報のうち、ページデータ格納量2104、ページ重複排除後データ格納量2105は、移動先の実ブロック情報2100にコピーする。コピーの後、移動元と移動先双方の実ページ管理情報の2100の移動中フラグ2109、移動先実ページ情報2110、移動待ちフラグ2111は、クリアする。
 ステップ11012:移動元となったフラッシュパッケージグループ情報2300と移動先となったフラッシュパッケージグループ情報2300の更新を行う。ここでは、移動元となったフラッシュパッケージグループ情報2300の空き実ページ数2304を1削減し、移動先のフラッシュパッケージグループ情報2300の空き実ページ数2304を、1増やす。この後、次に移動対象とする実ページを探すために、ステップ11003にジャンプする。
 次に、フラッシュパッケージ230が実行する動作の説明を行う。以下で説明する各種処理は、パッケージプロセッサ310がパッケージメモリ320内に格納されているプログラムを実行することにより実現される。図27は、パッケージメモリ320内に格納された、本実施例に関するプログラムが示されている。本実施例に関するプログラムは、データリード処理実行部12000、データライト処理実行部12100、実ブロック置き換え処理実行部12200、仮想ブロック移動処理実行部12300、仮想ブロック格納処理実行部12400、仮想容量判定処理部12500、キュー削除処理部12600、キュー登録処理部12700である。これらのプログラムは、下位レベルのウエアレベリング技術、容量仮想化技術を実現するためのプログラムである。本実施例では、フラッシュパッケージ230が、下位レベルのウエアレベリング技術、容量仮想化技術を実現する。以下、データリード処理実行部12000、データライト処理実行部12100、実ブロック置き換え処理実行部12200、仮想ブロック移動処理実行部12300、仮想ブロック格納処理実行部12400、仮想容量判定処理部12500、キュー削除処理部12600、キュー登録処理部12700の処理フローを詳細に説明する。なお、以下では、「xxx実行部」(つまりプログラム)が動作主体となって、処理を実行するように記載されている箇所も存在するが、その記載は、プログラムがパッケージプロセッサ310によって実行されることによって処理が行われることを表現しているものである。また、特に断りのない限り、処理フローの説明中の各ステップの動作主体はパッケージプロセッサ310である。
 各種プログラムの処理の説明の前に、フラッシュパッケージ230がストレージコントローラ200からアクセス要求(リード要求またはライト要求)を受信した時に行われる処理の概要を説明する。図28に、フラッシュパッケージ230がストレージコントローラ200に提供している記憶空間V1と、アクセスに必要な情報との関係の概念図を示している。先に述べたとおり、フラッシュパッケージ230は記憶空間V1を複数の仮想ブロックグループから成るものとして管理しており、各仮想ブロックグループは複数の仮想セグメントから構成されている(仮想ブロックという管理単位もあるが、図では仮想ブロックの記載は省略している)。ストレージコントローラ200からのアクセス要求には、アクセス対象領域の先頭アドレス(LBA)が含まれているので、フラッシュパッケージ230は要求に含まれているLBAから、アクセス対象領域に対応する仮想ブロックグループ識別子(番号)と、仮想ブロックグループ内相対アドレス(仮想ブロックグループの先頭からの、相対仮想セグメント番号)を特定することによって、アクセス対象の仮想セグメントを特定する。
 具体的には、LBAを仮想ブロックグループのサイズ、つまり仮想ブロックサイズ×仮想ブロックグループ内ブロック数(m個)で除算すれば、仮想ブロックグループ識別子を算出でき、さらにその除算の際の剰余を仮想セグメントサイズで除算することで、仮想ブロックグループ内相対仮想セグメント番号を算出できる。
 仮想ブロックグループ識別子が算出されることにより、アクセス対象仮想ブロックグループに対応する仮想ブロックグループ情報3200を特定することができる。そして仮想セグメント番号が判明すると、仮想ブロックグループ情報3200内に格納されている仮想セグメントポインタ3205のうち、アクセス対象となる仮想セグメントに対応した仮想セグメントポインタ3205を特定できる。図28に示されているように、仮想セグメントポインタ3205には、仮想セグメントに対応する実セグメントのアドレス情報が格納されているため、アクセス対象の実セグメントを特定することができる。
 図29は、データリード処理実行部12000の処理フローである。データリード処理実行部12000は、ストレージコントローラ200から、リード要求を受け取ったときに、実行される処理フローである。なお、本実施例で示す図27の処理フローでは、ストレージコントローラ200から受信するリード要求で指定されているアクセス範囲が、一つの仮想ブロックグループ内に格納された1または複数の仮想セグメントである場合の処理を示している。ただし、本発明は、リード要求で指定されているアクセス範囲が、複数の仮想ブロックグループに跨っている場合でも有効である。
 ステップ13000:パッケージプロセッサ310は、受け取ったリード要求がリード対象とするアドレスから、上で説明した要領で、リード対象アドレスに対応する仮想ブロックグループ識別子と、アクセス対象となる仮想ブロックグループ内の相対仮想セグメント番号を計算する。そしてアクセス対象仮想ブロックグループに対応する仮想ブロックグループ情報3200を特定する。
 ステップ13001:当該ステップでは、リード対象となったそれぞれの仮想セグメントに割り当てられている実ブロックの実ブロック情報3300を、それぞれの仮想ブロックグループ情報3200の実ブロック情報ポインタ3202から獲得する。
 ステップ13002:獲得したそれぞれの実ブロック情報3300の実ブロック識別子3301から、実ブロック情報3300に対応する実ブロックが格納されているフラッシュチップ300及び当該フラッシュチップ300内アドレスを特定する。次に、ステップ13000で特定された仮想ブロックグループ情報3200及び相対仮想セグメント番号を用いて、アクセス対象仮想セグメントの仮想セグメントポインタ3205を参照し、アクセス対象の仮想セグメントが、当該フラッシュチップ300のどの当該アドレスに格納されているかを算出する。
 ステップ13003:リードデータが格納されているフラッシュチップ300に対応したチップ情報3100にアクセスして、当該フラッシュチップ300が接続されているパッケージバス340を識別し、対応するパッケージバス転送装置350を認識する。
 ステップ13004:ステップ13003で認識したパッケージバス転送装置350に、どのフラッシュチップ300のどのアドレスから、バッファ330に、データを転送するかを指示する。
 ステップ13005:この後、転送が完了するのを待つ。
 ステップ13006:バッファ330に格納した、ストレージコントローラ200から要求されたリードデータを、ストレージコントローラ200に送る。この後、処理を完了する。
 図30、図31は、データライト処理実行部12100の処理フローである。データライト処理実行部12100は、ストレージコントローラ200から、フラッシュパッケージ230が、ライト要求を受け付けたときに実行される。なお、本実施例で示す図30、図31の処理フローでは、一つの仮想セグメントに格納するデータをライトする処理フローを示している。ただし、本発明は、ライト要求で、複数の仮想セグメントに格納されたデータを書き込むようにした場合も有効である。また本実施例では、ストレージコントローラ200からのライト要求で指定されるアクセス対象範囲は、フラッシュパッケージ230がストレージコントローラに提供する記憶空間上の、仮想セグメント境界に一致しているものとする。ただし本発明は、ストレージコントローラ200からのライト要求で指定されるアクセス対象範囲が、仮想セグメントの一部のみであった場合にも有効である。なお、仮想セグメントの一部の領域が指定された場合、フラッシュパッケージ230が、仮想セグメント全体を読み出し、指定された部分領域のみ更新し、仮想セグメント全体を書き込む。
 ステップ14000:パッケージプロセッサ310は、受け取ったライト要求がライト対象とするアドレスから、アクセス対象領域に対応する仮想ブロックグループ番号と、アクセス対象領域に対応する仮想ブロックグループ内相対仮想セグメント番号を計算する。これはステップ13001と同様の処理である。
 ステップ14001:ストレージコントローラ200から当該ライト要求で指定されたライトデータと保証コードを受領し、ライトデータをバッファ330に格納する。また、特徴量を示す2byteのデータを取り出し、バッファ330の、ライトデータとは別の領域に格納しておく。この場合、特徴量を示すデータは、520byte単位に存在するので、仮想セグメントの長さ(保証コード部分を除く)が、8Kbyteだとすると、合計で32byteの特徴量、4Kbyteだとすると、合計で16byteの特徴量を格納することになる。ただし、取り出したすべての特徴量ではなく、一部を格納してもよい。
 ステップ14002:ライト対象となった仮想セグメントに対応する仮想ブロックグループ情報3200の最初の実ブロック情報ポインタ3202を獲得する。この値がヌルかどうか、すなわち、実ブロックが割り当てられているかを、チェックする。割り当てられていれば(ステップ14002:N)、ステップ14005へジャンプする。この値がヌルの場合(ステップ14002:Y)、実ブロックが割り当てられていないので、ステップ14003に進む。
 ステップ14003:このステップは、対応する仮想ブロックグループに対して、空き状態にある実ブロックを割り当てるステップである。なお、ここでは、割り当てる実ブロックは消去されていてデータは格納されていないものとする。各チップ情報3100のチップ内空き実ブロック数3103等を参照して、どのフラッシュチップ300の実ブロックを割り当てるかを決める(たとえば空き実ブロック数3101が最も大きなフラッシュチップ300から実ブロックを割り当てる等)。その後、対応するフラッシュチップ300の空き実ブロック情報ポインタ3400を参照して、先頭の実ブロック情報3300を、当該仮想ブロックグループ情報3200の最初の実ブロックポインタ3302が示すようにする。これで、仮想ブロックグループに最初の実ブロックを割り当てたことになる。なお、空きブロック管理情報ポインタ3400は、次の実ブロック情報3300(仮想ブロックに割り当てた実ブロックの実ブロック情報3300の中の空き実ブロックポインタ3302が示す実ブロック情報3300)を示すようにし、さらに、仮想ブロックに割り当てた実ブロックの実ブロック情報3300の中の空き実ブロックポインタ3302をヌルにする。また、当該実ブロックに対応するチップ情報3100のチップ内空きブロック数3103の数を減らす。割り当てた実ブロックに対応する実ブロック内空き容量3304の値を、実ブロックの容量にする。
 ステップ14004:このステップは、対応する仮想ブロックグループの情報を更新する。さらに、ステップ14000で特定した仮想セグメントに対応する仮想セグメントポインタ3205に、ステップ14003で割り当てられた実ブロックの、実ブロック識別子3301と実ブロック内先頭アドレスをセットする。さらに、ライト対象となる仮想セグメントの容量を、格納データ量3203にセットする。また、同じ値(ライト対象となる仮想セグメントの容量)を、パッケージデータ格納量3006に加算する。この後、ステップ14010へジャンプする。
 ステップ14005:ライト対象となる実ブロックに対応する実ブロック情報3300の実ブロック内空き容量3304とバッファ330に格納したライトデータの長さとから、受け取ったデータを、当該実ブロックの空き領域に書き込めるかをチェックする。書き込める場合(ステップ14005:N)、ステップ14008へジャンプする。
 ステップ14006:当該ステップは、書き込み対象とした実ブロックの空き領域より、ライトデータの長さが、大きい場合(ステップ14005:Yの場合)に実行されるステップである。本ステップでは、該仮想ブロックグループに、(m+1)個の実ブロックを割り当てているか否か判定し、(m+1)個の実ブロックが割り当てられている場合には、実ブロックの割り当ては行わずに、ステップ14016にジャンプする。
 ステップ14007:このステップは、対応する仮想ブロックグループに空き状態にある実ブロックを割り当てるステップである。なお、ここでは、割り当てる実ブロックは消去されていてデータは格納されていないものとする。各チップ情報3100のチップ内空き実ブロック数3103等を参照して、どのフラッシュチップ300の実ブロックを割り当てるかを決める。その後、対応するフラッシュチップ300の空き実ブロック情報ポインタ3400を参照して、先頭の実ブロック情報3300を、当該仮想ブロックグループ情報3200内の複数の実ブロックポインタ3302のうち、値がヌルであり且つ一番前にある実ブロックポインタ3302が示すようにする。これで、仮想ブロックグループに新たな実ブロックを割り当てたことになる。なお、空き実ブロック情報ポインタ3400は、次の実ブロック情報3300(仮想ブロックに割り当てた実ブロックの実ブロック情報3300の中の空き実ブロックポインタ3302が示す実ブロック情報3300)を示すようにし、さらに、仮想ブロックに割り当てた実ブロックの実ブロック情報3300の中の空き実ブロックポインタ3302をヌルにする。また、当該実ブロックに対応するチップ情報3100のチップ内空きブロック数3103の数を減らす。
 ステップ14008:指定された仮想セグメントに対し、実セグメントが割り当てられているかを、仮想セグメントポインタ3205をチェックして認識する。割り当てられていない場合、ステップ14010へジャンプする。
 ステップ14009:ここでは、ライト対象となった仮想セグメントのデータの値が変化するので、当該仮想セグメントを、重複排除キュー1800,シノニウムキュー1900、簡易シノニウムキュー3550からはずす処理を実行するために、図32、図33に示すキュー削除処理12600(デキュー処理とも呼ばれる)をコールする。
 ステップ14010:ライト対象となった仮想セグメントのデータの内容や特徴量(この時点ではまだバッファ330に格納されている)にしたがって、当該仮想セグメントを、重複排除キュー1800,シノニウムキュー1900、簡易シノニウムキュー3550に登録する処理、および、重複排除処理を実行するために、図34に示すキュー登録処理12700(エンキュー処理とも呼ばれる)をコールする。
 ステップ14011:重複排除ができたかをチェックする。重複排除ができていない場合、ステップ14013にジャンプする。
 ステップ14012: 仮想容量判定処理部(図38。詳細は後述する)をコールして、フラッシュパッケージ230の仮想パッケージ容量3002を更新する。そしてストレージコントローラ200に、重複排除できた旨、及び今回のライト処理でライト対象となったデータ格納量(1仮想セグメント分のデータがライトされた場合は、仮想セグメントのサイズと等しい)、今回のライト処理でライト対象となったデータの重複排除後データ量(1仮想セグメント分のデータのライト処理が行われ、かつ重複排除できた場合には、重複排除後データ量は0である)、仮想パッケージ容量3002、パッケージデータ格納量3006、パッケージ重複排除後データ格納量3007を通知して、処理を完了する。
 ステップ14013:当該仮想ブロックグループに割り当てた実ブロックの中の最終の実ブロック(実ブロック情報ポインタ3202がヌル値でない最後の実ブロック情報ポインタ3202が示す実ブロック)を、ライトデータの書き込み対象とする。対象実ブロックの実ブロック空き容量3303から、今回書き込みを行うアドレス(チップID3101とフラッシュチップ300内の相対アドレス)を決定する。このアドレスを、当該仮想セグメントの仮想セグメントポインタ3205に設定する。また、書き込みを行う実セグメントに対応する逆ポインタ3306に当該仮想セグメントのアドレス(仮想セグメントポインタ3205の格納されているパッケージメモリ320上アドレス)を設定する。また、実セグメントビットマップ3305の該当ビットをオンにする。
 ステップ14014:バッファ330内に受け取ったライトデータを、書き込みを行う実ブロックと実セグメントに書き込むよう、パッケージバス転送装置350に書き込み要求を設定して、完了するのを待つ。なお、本実施例では、実セグメントにも、データ512byteごとに2byteの特徴量を含む8byteの保証コードを書き込むものとする。
 ステップ14015:当該実ブロックに対応する空き実ブロック容量3303を削減する。また、ライト対象となる仮想セグメントの容量を、パッケージ重複排除後データ格納量3007に加算する。続いて仮想容量判定処理部をコールして、フラッシュパッケージ230の仮想パッケージ容量3002を更新する。この後ストレージコントローラ200に、重複排除ができなかった旨、及び今回のライト処理でライト対象となったデータ格納量(1仮想セグメント分のデータがライトされた場合は、仮想セグメントのサイズと等しい)、今回のライト処理でライト対象となったデータの重複排除後データ量(1仮想セグメント分のデータのライト処理が行われ、かつ重複排除できなかった場合には、重複排除後データ量はデータ格納量と等しい)仮想パッケージ容量3002、パッケージデータ格納量3006、パッケージ重複排除後データ格納量3007を通知して、処理を完了する。
 ステップ14016:図35に示す実ブロック置き換え処理部12200をコールして、新しい実ブロックを割り当て、有効な実セグメントだけを、格納する。この後、ステップ14008に戻る。
 図32、図33に示すキュー削除処理12600は、処理対象とする仮想セグメントを簡易シノウニムキュー2100、シノニウムキュー1900、重複排除キュー1800から削除する処理を実行する。
 ステップ20000:まず、当該仮想セグメントに対応する前重複排除ポインタ3208がヌルかチェックする。ヌルである場合(ステップ20000:Y)、ステップ20003へジャンプする。ヌルでない場合(ステップ20000:N)にはステップ20001に進む。
 ステップ20001:当該仮想セグメントを、重複排除キュー1800からはずす処理を実行する。この後、当該仮想セグメントの後重複排除ポインタ3207と前重複排除ポインタ3208をヌルにする。このあと、処理を終了する。
 ステップ20003:後重複排除ポインタ3207がヌルかをチェックする。ヌルでない場合(ステップ20003:N)、ステップ20005へジャンプする。ヌルである場合には、ステップ20004に進む。
 ステップ20004:当該仮想セグメントに対応する実セグメントの情報を更新する。具体的には、当該仮想セグメントに対応する実セグメントを格納している実ブロックの管理情報である実ブロック情報3300内の、実セグメントビットマップ3305について、当該仮想セグメントに対応するビットをオフにする。なお、当該オフにしたビットに対応する逆ポインタ3306をヌルにする。対応する当該仮想セグメントに対応する仮想セグメントポインタ3205をヌルにする。
 図19を用いて、ステップ20004で行われる管理情報(実ブロック情報3300、仮想セグメントポインタ3205)の操作の具体例を説明する(なお、図19は仮想セグメントが重複排除キュー1800に接続されている場合の例示であるため、ステップ20004で処理対象となる仮想セグメントの状態とは異なるが、以下では、仮想ブロックグループ情報3200a内の先頭(0番目)の仮想セグメントポインタ3205が、重複排除キュー1800に接続されていないと見做して説明する)。
 図19では、仮想ブロックグループ情報3200a内の先頭(0番目)の仮想セグメントポインタ3205は、ある実ブロック内の2番目の実セグメントを指している。そしてこの実ブロックに対応する実ブロック情報3300内の、実セグメントビットマップ3305の2番目のビットがONになっており、2番目の逆ポインタが、0番目の仮想セグメントポインタ3205(図中では「仮想セグメントポインタ(0番)」と表記)を指している。ステップ20004において、「当該仮想セグメント」の仮想セグメントポインタ3205が、図19における仮想ブロックグループ情報3200a内の先頭(0番目)の仮想セグメントポインタ3205である場合、ステップ20004では、先頭(0番目)の仮想セグメントポインタ3205が指している実セグメントに対応する実セグメントビットマップ3305のビット(図19における、実セグメントビットマップ3305の2番目のビット)をOFFにする処理が行われる。また実セグメントビットマップ3305の2番目のビットに対応する逆ポインタ(図19における、実ブロック情報3300内の2番目の逆ポインタ3306)をヌルにする処理が行われる。さらに先頭(0番目)の仮想セグメントポインタ3205をヌルにする処理が行われる。
 これらの処理が終わった後、ステップ20006へジャンプする。
 ステップ20005:今回処理対象の仮想セグメントに対応する、実セグメントの逆ポインタ3306(実セグメントが属する実ブロックに対応する、実ブロック管理情報3300にある逆ポインタ)に、今回処理対象の仮想セグメントに対応する後重複排除ポインタ3207が示す仮想セグメントへのポインタ(仮想セグメントに対応する仮想セグメントポインタ3205が格納されているパッケージメモリ320上アドレス)を設定する。
 図19を用いて、ステップ20005で行われる管理情報の操作の具体例を説明する。ステップ20005での処理対象の仮想セグメントに対応する仮想セグメントポインタが、仮想ブロックグループ情報3200a内の先頭(0番目)の仮想セグメントポインタ3205であったとする。その場合、ステップ20005では、図19における実ブロック情報3300内の2番目の逆ポインタ3306(図19では、仮想ブロックグループ情報3200a内の先頭(0番目)の仮想セグメントポインタ3205を指している状態にある)が、処理対象の仮想セグメントに対応する後重複排除ポインタ3207が示す仮想セグメント(図19の例では、仮想ブロックグループ情報3200b内の先頭の次(1番目)の仮想セグメントである)を指すように変更される。具体的には、逆ポインタ3306に、仮想ブロックグループ情報3200b内の仮想セグメントポインタ(1番)3205が格納されている、パッケージメモリ320上アドレスが設定される。
 ステップ20006:当該、前シノニウムポインタ3208がヌルか否かをチェックする。ヌルの場合(ステップ20006:Y)、ステップ20010へジャンプする。
 ステップ20007:ステップ20006の判定で、前シノニウムポインタ3208がヌルでない場合(ステップ20006:N)、ステップ20007を実行する。ステップ20007では、当該仮想セグメントの後シノニウムポインタ3209がヌルか否かをチェックする。ヌルであれば、ステップ20009へジャンプする。
 ステップ20008:ステップ20007の判定で、後シノニウムポインタ3209がヌルでない場合(ステップ20007:N)、ステップ20008を実行する。ステップ20008では、当該仮想セグメントを重複排除キュー1800とシノニウムキュー1900からはずし、当該仮想セグメントの後重複排除ポインタ3207が指し示す仮想セグメントを、当該仮想セグメントが接続されていたシノニウムキュー1900の位置に接続する。また、当該仮想セグメントの後重複排除ポインタ3207が示す仮想セグメントの前重複排除ポインタ3208をヌル値にする。この後、当該仮想セグメントの後重複排除ポインタ3207、前排除ポインタ3208をヌル値にする。この後、当該仮想セグメントの後シノニウムポインタ3209と前シノニウムポインタ3210をヌルにする。この後処理を終了する。
 ステップ20009:当該仮想セグメントを重複排除キュー1800からはずす処理を実行する。この後、当該仮想セグメントの後重複排除ポインタ3207と前重複排除ポインタ3208をヌルにする。この後処理を終了する。
 なお、ステップ20008、ステップ20009において、処理対象の仮想セグメントが重複排除キューに接続されていない場合もある。その場合には、仮想セグメントを重複排除キューから削除する処理は行う必要はない。
 ステップ20010:当該仮想セグメントの後重複排除ポインタ3207、当該仮想セグメントの後シノニウムポインタ3209の双方ともヌルかを確認する。そうであれば、ステップ20016へジャンプする。
 ステップ20011:当該仮想セグメントの後重複排除ポインタ3207がヌルかをチェックする。ヌルであれば、ステップ20015へジャンプする。
 ステップ20012:当該当該仮想セグメントの後シノニウムポインタ3209がヌルかをチェックする。ヌルであれば、ステップ20014へジャンプする。
 ステップ20013:当該仮想セグメントを重複排除キュー1800とシノニウムキュー1900と簡易シノニウムキュー3550からはずし、当該仮想セグメントの後重複排除ポインタ3207が示す仮想セグメントを、当該仮想セグメントが接続されていた簡易シノニウムキュー3550、シノニウムキューの位置2000に接続する。また、当該仮想セグメントの後重複排除ポインタ3207が示す仮想セグメントの前重複排除ポインタ3208をヌル値にする。この後、当該仮想セグメントの後重複排除ポインタ3207、前排除ポインタ3208をヌル値にする。この後、当該仮想セグメントの後シノニウムポインタ3209と前シノニウムポインタ3210、後簡易シノニウムポインタ3211と前簡易シノニウムポインタ3212をヌルにする。この後処理を終了する。
 ステップ20014:当該仮想セグメントを重複排除キュー1800と簡易シノニウムキュー3550からはずし、当該仮想セグメントの後重複排除ポインタ3207が示す仮想セグメントを、当該仮想セグメントが接続されていた簡易シノニウムキュー3550の位置に接続する。また、当該仮想セグメントの後重複排除ポインタ3207が示す仮想セグメントの前重複排除ポインタ3208をヌル値にする。この後、当該仮想セグメントの後重複排除ポインタ3207、前排除ポインタ3208をヌル値にする。この後、この後、当該仮想セグメントの後簡易シノニウムポインタ3211と前簡易シノニウムポインタ3212をヌルにする。この後処理を終了する。
 ステップ20015:当該仮想セグメントを簡易シノニウムキュー3550とシノニウムキュー1900からはずし、当該仮想セグメントの後シノニウムポインタ3210が示す仮想セグメントを、当該仮想セグメントが接続されていた簡易シノニウムキュー3550の位置に接続する。当該仮想セグメントの後シノニウムポインタ3210が示す仮想セグメントの前シノニウムポインタ3210をヌル値にする。この後、当該仮想セグメントの後シノニウムポインタ3209、前シノニウムポインタ3210をヌル値にする。この後、この後、当該仮想セグメントの後簡易シノニウムポインタ3211と前簡易シノニウムポインタ3212をヌルにする。この後処理を終了する。
 ステップ20016:当該仮想セグメントを簡易シノニウムキュー3550から削除する。この後、当該仮想セグメントの後簡易シノニウムポインタ3211と前簡易シノニウムポインタ3212をヌルにする。この後処理を終了する。
 図34は、当該仮想セグメントを、簡易シノニウムキュー3550,シノニウムキュー1900、重複排除キュー1800に登録(エンキュー)するキュー登録処理部12700の処理フローである。
 ステップ21000:受け取った特徴量を、仮想セグメント特徴量3206に設定する。また、特徴量から簡易特徴量を計算する。簡易特徴量の計算方法には、様々な方法を採用できる。必ずしもハッシュ関数のような複雑な演算を行う必要はなく、たとえば簡易特徴量のサイズがnバイトの場合、特徴量の所定位置(先頭等)からnバイトのデータを抽出するという方法でもよい。
 ステップ21001:簡易特徴量テーブル3500を参照し、今回書き込まれたデータの簡易特徴量に対応する簡易特徴量ポインタ3510がヌルかをチェックする。ヌルでなければ(ステップ21001:N)、ステップ21003へジャンプする。
 ステップ21002:簡易特徴量ポインタ3510の値を、当該仮想セグメントの仮想セグメントポインタ3205を指すように変更する(仮想セグメントポインタ3205の格納されているパッケージメモリ320上のアドレスを簡易特徴量ポインタ3510に格納する)。この後、重複排除ができなかった旨を、コール元に通知する情報をもち、コール元(データライト処理実行部12100等、キュー削除処理をコールしたプログラム)に戻る。
 ステップ21003:簡易特徴量ポインタ3510が示す仮想セグメントの仮想セグメント特徴量3206が、当該仮想セグメントの仮想セグメント特徴量3206と等しいかをチェックする(なお、簡易特徴量ポインタ3510が直接指し示している先は、後簡易シノニウムポインタ3211であるが、フラッシュパッケージ230のパッケージプロセッサ310は、仮想ブロックグループ情報3200内における後簡易シノニウムポインタ3211の格納位置、及び仮想セグメント特徴量3206等の格納位置を把握しているので、簡易特徴量ポインタ3510を参照することによって後簡易シノニウムポインタ3211の格納位置が判明すれば、仮想セグメント特徴量3206やその他の情報の格納位置も判明する)。等しければ、ステップ21006へジャンプする。
 ステップ21004:特徴量を参照した仮想セグメントの後簡易シノニウムポインタ3211がヌルかをチェックする。ヌルでなければ(ステップ21004:N)、後簡易シノニウムポインタ3211が示す仮想セグメントを次の比較対象とするようにして、ステップ21003へジャンプする。
 ステップ21005:ステップ21004の判定結果がヌルの場合(ステップ21004:Y)、簡易シノニウムキュー3550の最後尾に達したことになるので、今回、ライト対象となった仮想セグメントを、簡易シノニウムキュー3550の最後尾に加えるような情報設定を行う。この後、重複排除ができなかった旨を、コール元に通知する情報をもち、コール元に戻る。
 ステップ21006:ステップ21003でみつけた仮想セグメントに対応する仮想セグメントポインタ3205が指す実セグメントを認識し、それが、どのフラッシュチップ300のどのアドレスに格納されているかを認識する(仮想セグメントポインタ3205には、当該仮想セグメントに対応する実ブロックの情報(実ブロック情報3300)と、当該仮想セグメントに対応する実ブロック内相対アドレスが格納されているため、これらの情報により実質的に実セグメントを特定できる。さらに、実ブロック情報3300からどのフラッシュチップ300のどのアドレスに格納されているかも特定可能である)。
 ステップ21007:ステップ21006で特定されたフラッシュチップ300のアドレスからデータを読み出すように、転送装置350に要求し、転送されてくるのを待つ。
 ステップ21008:読み出した値とライトされたデータの値を比較するよう比較回路370に要求する。結果が出るまでまつ。
 ステップ21009:ステップ21008での比較結果が等しい場合(ステップ21009:N)、ステップ21012にジャンプする。
 ステップ21010:ステップ21008での比較結果が等しくない場合(ステップ21009:Y)、ステップ21010を実行する。ステップ21010では、読み出した仮想セグメントに対応する後シノニウムポインタ3209がヌルかを比較する。ヌルでなければ、後シノニウムポインタ3209が示す仮想セグメントを次の比較対象にするようにして、ステップ21006へジャンプする。
 ステップ21011:ステップ21010の判定がヌルの場合、シノニウムキュー1900の最後尾に達したことになるので、今回、ライト対象となった仮想セグメントを、シノニウムキュー1900の最後尾に加えるような情報設定を行う。この後、重複排除ができなかった旨を、コール元に通知する情報をもち、コール元に戻る。
 ステップ21012:この場合、重複排除できることになる。ステップ21007で読み出しを行った仮想セグメントの後重複排除ポインタ3207がヌルかをチェックし、ヌルでなければ、読み出しを行った仮想セグメントの後重複排除ポインタ3207を辿ることにより、読み出しを行った仮想セグメントが属している重複排除キューの最後尾の仮想セグメントを見つける。ライト対象となった仮想セグメントの仮想セグメントポインタ3205に、重複排除キューの最後尾の仮想セグメントの仮想セグメントポインタ3205に格納されている情報をコピーする。これにより、たとえば図28に示されているように、今回ライト対象の仮想セグメントが仮想ブロックグループ#0の仮想セグメント#(s-1)で、当該仮想セグメントのデータ内容が仮想セグメント#1と同内容であった場合、仮想セグメント#(s-1)の仮想セグメントポインタ3205が、仮想セグメント#1の仮想セグメントポインタ3205と同一実セグメントを指すことになるため、重複排除処理がなされたことになる。また、ライト対象となった仮想セグメントを重複排除キューの最後尾に加える。この後、重複排除ができた旨を、コール元に通知する情報をもち、コール元に戻る。
 図35は、実ブロックグループ置き換え処理部12200の処理フローを示している。実ブロックグループ置き換え処理部は、当該仮想ブロックグループに割り当てた実ブロックグループを、別の実ブロックの集合に置き換える処理を実行する。これは、m+1個の実ブロックの空き領域がなくなったときに実行される。別の実ブロックを割り当てる理由は、実ブロックの消去回数の偏りを少なくするためである。この処理は、ウエアレベリング処理と呼ばれる。
 ステップ22000:本ステップでは、当該仮想ブロックグループに、別の実ブロックグループを割り当てる。割り当てる実ブロックの数は、以下のように決定する。まず、当該仮想ブロックグループに割り当てられている実ブロックの実ブロック情報3300を特定する。そしてそれぞれの実ブロック情報3300の実セグメントビットマップ3305がオンになっている数を合計して実セグメント数を割り出し、割り出された実セグメント数から割り当てるべき実ブロックの数を算出する(たとえば、実セグメント数÷1実ブロック内に格納可能な実セグメント数、を計算すればよい)。算出された値が0になった場合、割り当てる実ブロックの数は1とする。
 ステップ22001:当該ステップでは、必要な実ブロックの数を入力値として、ウエアレベリング処理部をコールして、実ブロックを決定する。ウエアレベリング処理部からは、ライトデータを格納する実ブロックの実ブロック情報3300のアドレスを、入力値に等しい数だけ、受け取る。この実ブロックは、消去された状態にあり、直接データを書き込めるような状態であるとする。また、本実施例では、ウエアレベリング処理部は、従来からあるフラッシュメモリストレージで用いられている技術を前提とするので、ここでは、特に詳細に説明しない。
 ステップ22002:ここでは、当該仮想ブロックグループにこれまで割り当てられていた実ブロックの集合から有効なデータを読み出す。それぞれの実ブロックの実セグメントビットマップ3305がオンになっている実セグメントをバッファに読み出す。このため、これらの実セグメントアドレスの集合から、バッファに転送するかを示すアドレスリストを生成する。ただし、実セグメントアドレスの集合が空集合の場合、処理を終了して戻る。なお、上で説明した例では、実セグメントビットマップ3305を参照して、有効なデータ、つまり読み出し対象の実セグメントを選択しているが、その他の方法として、逆ポインタ3306を参照して読み出し対象の実セグメントを選択してもよい。
 ステップ22003:ステップ2200で特定された実ブロック情報3300の実ブロック識別子3301から、当該実ブロックに対応するフラッシュチップ300のチップ情報3100をアクセスして、当該フラッシュチップ300が接続されているパッケージバス340を識別し、対応するパッケージバス転送装置350を認識する。
 ステップ22004:ステップ22003で認識したパッケージバス転送装置350に、ステップ22002で生成した指示情報にしたがって、どのフラッシュチップ300のどのアドレスから、バッファ330に、データを読み込むよう指示する。なお、本実施例では、実セグメントにも、データ512byteごとに2byteの特徴量を含む8byteの保証コードもバッファ330に読み込む。
 ステップ22005:この後、バッファ330への読み込みが完了するのを待つ。
 ステップ22006:実セグメントビットマップ3305がオンになっている実セグメントに対応する逆ポインタ3306を、今回割り当てた実ブロックの集合の逆ポインタ3306に対して、先頭から順にコピーしていく。さらに、今回割り当てた実ブロックの集合の実セグメントビットマップ3305を先頭から読み出した実セグメントの数だけオンにする。
ステップ22007:今回割り当てた実ブロックの先頭の逆ポインタ3306を認識する。
 ステップ22008:逆ポインタ3306が示す仮想セグメントを認識し、対応する仮想セグメントの仮想セグメントポインタ3205に、当該実セグメントのアドレス(当該実セグメントの属する実ブロックの実ブロック識別子及び当該実ブロック内相対アドレス)を設定する。なお、当該仮想セグメントが重複排除キュー1800に接続されている場合、当該仮想セグメントが接続されている重複排除キュー1800に属する他の仮想セグメントの仮想セグメントポインタ3205にも、当該実セグメントのアドレスを設定する。
 ステップ22009:最後の逆ポインタに到達したかを認識し、到達していなければ、次の逆ポインタ3306を処理対象として22008へジャンプする。
 ステップ22010:実セグメントビットマップ3305をオンにした実セグメントの集合に、バッファ330からデータを書き込むよう指示する。なお、本実施例では、実セグメントにも、データ512byteごとに2byteの特徴量を含む8byteの保証コードを書き込むものとする。
 ステップ22011:この後、バッファ330からの書き込みが完了するのを待つ。
 ステップ22012:当該仮想セグメントグループに割り当てていた実ブロックに対応する実ブロック情報3300を、空きブロック管理情報キュー1700にもどす。なお、この際に、対応する実ブロック情報3300の必要な情報の初期化を行う。
 ステップ22013:当該仮想ブロックグループに対応する仮想ブロックグループ情報3200の実ブロック情報ポインタ3202に、今回割り当てた実ブロックの集合の情報を設定する。この後、処理を終了する。
 図36は、仮想ブロック移動処理実行部12300の処理フローである。仮想ブロック移動処理実行部12300は、ストレージコントローラ200から、指定された仮想セグメントの集合に格納されているデータを送信する旨の指示を受けたときに、実行する処理である。なお、この処理では、ストレージコントローラ200から、実ページに含まれる全仮想セグメントについての指示を受け付ける。つまり仮想セグメント単位で移動指示がなされるので、仮想ブロックグループの一部のセグメントの転送要求はない。
 ステップ16000:解放を指示された仮想ブロックグループの集合を算出する。
 ステップ16001:ここではストレージコントローラ200に送る情報の編集を行う。具体的には、指定されたすべての仮想ブロックグループについて、仮想セグメントグループの仮想セグメントポインタ3205がヌルであれば、データが格納されていない旨を示す情報を、ヌルでなければ格納されている旨を示す情報を、ストレージコントローラ200に送る情報として設定する。また、格納されている場合、仮想セグメント特徴量3206に設定されている特徴量を、ストレージコントローラ200に送る情報として設定する。また、ヌル値でない仮想セグメントポインタ3205が示すアドレスに格納されたデータ量の合計値をパッケージデータ格納量3006から減算する。さらに、ヌル値でない仮想セグメントポインタ3205が示すアドレスの重複排除処理(同じアドレスがあればこれを一つにする。)を行った後の仮想セグメントのサイズの合計値を算出して、この値をパッケージ重複排除後データ格納量3007から削減する。
 ステップ16002:ヌル値でないすべての仮想セグメントポインタ3205が示す実セグメントから、読み出しを行うチップIDとチップ内の相対アドレスを示す転送リストを作成する。
 ステップ16003:ヌル値でない仮想セグメントに関しては、この仮想セグメントを、簡易シノニウムキュー3550,シノニウムキュー1900、重複排除キュー1800からはずすため、仮想セグメントごとに、図32、図33に示したキュー削除処理部12500をコールする。
 ステップ16004:ヌル値でないすべての仮想セグメントポインタが示す実セグメントが格納されているフラッシュチップ300に対応したチップ情報3100をアクセスして、当該フラッシュチップ300が接続されているパッケージバス340を識別し、対応するパッケージバス転送装置350を認識する。
 ステップ16005:ステップ16004で認識したパッケージバス転送装置350に、データ転送対象のフラッシュチップ300(ステップ16004で特定されている)からバッファ330へデータを転送させる旨の要求を発行する。この要求には、データ転送対象のフラッシュチップ300に対する転送リスト(ステップ16002で生成)が含まれている。なお、本実施例では、実セグメントにも、データ512byteごとに2byteの特徴量を含む8byteの保証コードもバッファ330に読み込むものとする。
 ステップ16006:転送が完了するのを待つ。
 ステップ16007:本ステップでは、該当するすべての仮想ブロックグループに割り当てたすべての実ブロックに対応する実ブロック情報3300を空き実ブロック情報キュー1700に戻す。
 ステップ16008:ストレージコントローラ200へ、バッファ330に格納したデータを送る。まず、最初に、仮想セグメントごとにデータが格納されていたか、データが格納されていないかを示す情報を送る。また、データが格納されていた場合、データと8byteの保証コードを送る。
 図37は、仮想ブロック格納処理実行部の処理フローである。仮想ブロック格納処理実行部12400は、指定された仮想ブロックの集合に実ブロックをそれぞれ割り当てて、ストレージコントローラ200から送られてきたデータを格納せよという要求を、ストレージコントローラ200から受けたときに、実行される処理である。仮想ブロック移動処理実行部12300とは、データの流れが逆で、共通点が多いので、図36の処理フローの各ステップを引用しながら説明を行う。
 ステップ17000:ステップ16000と同様、格納を指示された仮想セグメントの集合から、対象となる仮想ブロックグループを認識する。
 ステップ17001:フラッシュパッケージ230は、ストレージコントローラ200から以下の情報を受け取る。これらの情報は、指定された仮想セグメントの集合の内、仮想セグメントごとにデータが格納されている、いない、を示す値を、バッファに受け取る。さらに、データが格納されている場合、保証コード8byteを含む520byteを一つの転送単位とするライトコマンドで、データ受け取る。さらに、保証コードの中から、特徴量を示す2byteのデータを取り出しバッファに格納する。この場合、特徴量を示すデータは、520byte単位に存在するので、仮想セグメントの長さ(保証コード部分を除く)が、8K byteだとすると、合計で32byteの特徴量、4Kbyteだとすると、合計で16byteの特徴量を格納することになる。ただし、取り出したすべての特徴量ではなく、一部を格納してもよい。次に、指定された仮想セグメントを、仮想ブロックグループごとに分類する。
 ステップ17002:データを格納するよう指示されている仮想ブロックグループを探す。もうなければ、ステップ17015へジャンプする。
 ステップ17003:仮想ブロックグループの最初の仮想セグメントを処理対象とする。また、この際、当該仮想ブロックグループに、実ブロックを一つ割り当てる。また、実ブロック内空き容量3304に、実ブロックの容量を設定する。
 ステップ17004:処理対象とする仮想セグメントのストレージコントローラ200から受け取った情報がデータを格納していない旨を示すかをチェックする。している場合、ステップ17006へジャンプする。
 ステップ17005:ここでは、対応する仮想セグメントの仮想セグメントポインタ3205をヌル値にする。この後、次の仮想セグメントを処理対象とし、ステップ17004へジャンプする。
 ステップ17006:当該仮想セグメントの仮想セグメント特徴量3206に、受け取った特徴量を設定する。またパッケージデータ格納量3006に、当該仮想セグメントのサイズを加算する。さらに当該仮想セグメントを、簡易シノニウムキュー3550、シノニウムキュー1900、重複排除キュー1800に登録する処理、重複排除処理を実行するため、図34に示すキュー登録処理をコールする。
 ステップ17007:ステップ17006で実行したキュー登録処理の結果を受信し、重複排除ができた旨の通知を受信した場合には、ステップ17013へジャンプする。重複排除ができなかった旨の通知を受信した場合は、ステップ17008に進む。
 ステップ17008:対応する仮想セグメントのデータを書き込む。対応する実ブロックの実ブロックアドレスと、空き実ブロック容量から、今回書き込みを行うアドレス(チップID3101とフラッュチップ300内の相対アドレス)を決定する。このアドレスを、当該仮想セグメントの仮想セグメントポインタ3205に設定する。また、書き込みを行う実セグメントに対応する逆ポインタ3306に当該仮想セグメントのアドレスを設定する。また、書き込みを行う実セグメントに対応する実セグメントビット3305をオンにする。
 ステップ17009:バッファ330内に受け取ったライトデータを、書き込みを行う実ブロックと実セグメントに、転送装置に書き込み要求を設定して、完了するのを待つ。なお、本実施例では、実セグメントにも、データ512byteごとに2byteの特徴量を含む8byteの保証コードを書き込むものとする。
 ステップ17010:当該実ブロックに対応する実ブロック内空き容量3304を削減する。さらに、パッケージ重複排除後データ格納量3007に、当該仮想セグメントのサイズを加算する。
 ステップ17011:対応する実ブロックの実ブロック内空き容量3304が0になっているかをチェックする。0になっていない場合、ステップ17013へジャンプする。
 ステップ17012:本ステップでは、新たな実ブロックを当該仮想ブロックグループに割り当てる。そして、仮想ブロックグループに割り当てられた実ブロックに対応する実ブロック情報3300の実ブロック内空き容量3304に、実ブロックの容量の値を格納する。
 ステップ17013:当該仮想ブロックグループの最後の仮想セグメントまで、処理を完了したかをチェックする。そうであれば、ステップ17002へ戻る。
 ステップ17014:次の仮想セグメントを処理対象として、ステップ17004に戻る。
 ステップ17015:ストレージコントローラ200に完了報告を行い、処理を終了する。
 図38は、仮想容量判定処理部12500の処理フローである。この処理では、重複排除率を把握して、当該パッケージ300の仮想容量(仮想パッケージ容量3002)を調整する必要があるかを判断する。調整する必要があると判断した場合、その容量を決定し、仮想パッケージ容量3002に設定する。さらに、この容量と容量を変更した旨を、を呼び出し元に返却する。
 ステップ18000:パッケージデータ格納量3006/仮想パッケージ容量3002の比を計算して、これをαとする(αはデータ格納率である)。この値が、β(十分小さい)以下の場合、まだ、それ程のデータが格納されていないと判断し、調整を行わないことにして、呼び出し元に戻る。
 ステップ18001:次に、仮想パッケージ容量3002/実パッケージ容量3003の値を計算して、この値をγ(仮想/実パッケージ容量比と呼ぶ)とする。また、パッケージデータ格納量3006/パッケージ重複排除後データ格納量3007の値を計算し、これをδとする。本明細書ではこのδのことを、重複排除率と呼んでいる。
 ステップ18002:γとδの比較を行う。ほぼ等しければ、利用的な仮想パッケージ容量3002が設定されているので、調整を行わないことにして、呼び出し元に戻る。γ>(δ+閾値1)の場合(仮想容量が大き過ぎる場合)、あるいはγ<(δ-閾値2)の場合(仮想容量が小さすぎる場合)、ステップ18003に進み、仮想パッケージ容量3002の調整を行う。なお、閾値1と閾値2は同じ値でも異なった値でも良い。
 ステップ18003:ここでは仮想容量を調整(変更)する。調整後の仮想容量の値は、例えば、実パッケージ容量*δである。これは、重複排除率δが今後も変化しなければ理想値となる。ただし、即座に仮想容量の値をこの理想値に変更する方法に代えて、(実パッケージ容量―重複排除後パッケージデータ格納量3007)*γ+重複排除後パッケージデータ格納量3007*δ、を仮想容量とする方法を採っても良い。決定した仮想容量の値を、仮想パッケージ容量3002に設定し、さらに、呼び出し元に、仮想容量の調整を行うことと、この決定した値を通知し、処理を完了させる。
 第1の実施例によれば、それぞれが多数のフラッシュメモリを実装したフラッシュパッケージが重複排除機能をもち、このフラッシュパッケージを多数接続した大容量のストレージシステムにおいて、特徴量の計算をストレージコントローラが実施して、特徴量をフラッシュパッケージに送信するため、フラッシュパッケージでは、複雑な演算を要する特徴量の計算をする必要がなく、低オーバヘッドでの重複排除処理が可能となる。また、SCSI規格で標準化されたデータフォーマットとコマンドを用いて特徴量の送受信を行うため、特徴量の送受信のために新たなインターフェイスを実装する必要がない。さらに、フラッシュパッケージは下位レベルの容量仮想化技術を用いて、ストレージコントローラに物理記憶領域よりも大きな記憶空間(仮想容量)を提供しており、重複排除処理によって使用可能な記憶領域が増加すると、増加した仮想容量をストレージコントローラに通知するようにしているため、ストレージコントローラは重複排除処理によって節約できた記憶領域を有効に活用することができる。
 続いて第2の実施例の説明を行う。第2の実施例における情報システム、ストレージシステム、フラッシュパッケージのハードウェア構成は、第1の情報システムと同じである。ただし第2の実施例におけるストレージシステム200は、フラッシュパッケージ230がフラッシュパッケージグループ280を構成しない点で、第1の実施例におけるストレージシステム200と相違する。
 第2の実施例におけるストレージシステム200でも、フラッシュパッケージ230が重複排除機能をもつが、第2の実施例では、ストレージコントローラ200が、データの格納先を適切に制御することにより、重複排除率を向上させる。具体的には、ストレージコントローラ200は書き込むデータの特徴量を計算し、計算された特徴量に基づいて、データ格納先のフラッシュパッケージ230を決定する。例えば、書き込むデータの特徴量などが同じである複数のデータを、同一のフラッシュパッケージ230に格納すれば、重複排除率を向上できる。
 第2の実施例においても、ストレージシステム100は、階層型の容量仮想化機能をもつ。
 また、本実施例においてもストレージシステム内の記憶媒体は、すべてフラッシュパッケージ230であるが、本実施例は、HDDのような他の記憶媒体を含んでいても有効である。また、本実施例におけるフラッシュパッケージ230の容量はすべて等しいものとする。本実施例でも、フラッシュパッケージ230が、新たに書き込まれたデータのハッシュ値や特徴量が、それまで格納していたデータのハッシュ値や特徴量に等しいものがあった場合、そのデータと新しく格納するデータとの値を比較して、等しい場合、新たに受け取ったデータを格納しない。これによって、容量削減効果を得ることができる。等しくない場合、新たに受け取ったデータを別の領域に書き込む。第2の実施例では、フラッシュパッケージ230が使用するハッシュの値や特徴量は、ストレージコントローラ200から受け取ってもよいし、フラッシュパッケージ230が計算してもよい。
 なお、本実施例では、フラッシュパッケージ230は、ストレージコントローラ200からは、一台の記憶装置として認識されているものとする。したがって、ストレージコントローラ200が、高信頼化のために、一台のフラッシュパッケージ230が故障しても、そのフラッシュパッケージ230のデータを回復できるRAID機能をもっているものとする。ただし、第2の実施例では、セグメント単位のn個のデータと当該n個のデータから生成されるパリティのセグメントグループ(以下、RAIDセグメントグループと呼ぶ)は、異なったフラッシュパッケージ230に格納するが、RAIDセグメントグループごとに、セグメントの特徴量を考慮して、格納すべきフラッシュパッケージ230を決定する。したがって、第2の実施例に係るストレージシステムでは、複数のフラッシュパッケージ230によってRAIDグループが構成されるという概念、つまり第1の実施例に係るストレージシステム100が持っていた、フラッシュパッケージグループ280という概念(及び管理情報)はない。
 図41は、第2の実施例におけるストレージシステム100の共有メモリ220の中の本実施例に関する情報を示しており、論理ボリューム情報2000、実ページ情報2100’、空き実ページ管理情報ポインタ2200、仮想RAIDセグメントグループアドレステーブル2300、フラッシュパッケージ情報2500’、仮想ページ容量2600に、によって構成される。これらの情報は、ストレージコントローラ200で、上位の容量仮想化技術と重複排除率を向上させるために必要な情報である。
 本実施例においては、ストレージコントローラ200は、上位レベルの容量仮想化機能をサポートしているものとする。ただし、本発明は、ストレージコントローラ200が、上位レベルの容量仮想化機能をもっていなくとも有効である。通常、上位レベルの容量仮想化機能において、記憶領域の割り当て単位は、ページと呼ばれる。なお、本実施例では、論理ボリュームの空間は、仮想ページという単位で、分割されているものとする。通常の容量仮想化機能では、仮想ページに書き込みがあったとき、実際の記憶媒体上の実ページが割り当てられた。しかし、本実施例では、仮想セグメント単位に、特徴量によって、その仮想セグメントを格納するフラッシュパーケージ230を決めるので、実ページも実際の記憶媒体ではなく論理的な空間になる。したがって、この論理的な仮想セグメントを論理仮想セグメントとよぶ。本実施例でも、実ページは、RAID機能により生成される冗長データを含む。そして冗長データの量は、RAIDタイプによって異なるので、実ページの容量は、その実ページが割り当てられた論理ボリュームのRAIDタイプ(論理ボリューム情報に格納されている論理ボリュームRAIDタイプ2003)により定まる点は、第1の実施例と同様である。
 第2の実施例の基本的な考え方を図42に示す。第1の実施例では、実ページ上には、n個のデータ(仮想セグメント)と当該n個のデータから生成されたm個のパリティ(仮想セグメント)とがk組格納され、実ページは、(m+n)個のフラッシュパッケージ230から成る一つのフラッシュパッケージグループ280に格納された。そしてn個のデータとm個のパリティのそれぞれは、フラッシュパッケージグループ280を構成する(m+n)個のフラッシュパッケージ230のうち、いずれか1つのフラッシュパッケージ230に(重複しないように)格納された。またこの格納先は固定的に決定されているものであった。
 第2の実施例の特徴は、実ページの構成、重複排除機能は、フラッシュパッケージがもつという点は第1の実施例と同様であるが、パリティを含む論理仮想セグメントも含めて、その論理仮想セグメントから得られたハッシュ値や特徴量によって、格納するフラッシュパッケージ230とその仮想セグメントを、ストレージコントローラ200が決める点が、第2の実施例に係るストレージシステム200の特徴である。重複排除可能なセグメントは、ハッシュ値や特徴量も等しくなるため、ハッシュ値や特徴量が同じになる仮想セグメントは、同一のフラッシュパッケージ230に格納したほうが重複排除率を向上できる。ただし、同一のRAIDセグメントグループに属する各セグメントは、信頼性の観点から(フラッシュパッケージの故障時に、故障していないフラッシュパッケージに格納されたデータをもとにデータ回復できるようにするために)、別々のフラッシュパッケージに格納する。第1の実施例では、実ページは、フラッシュパッケージ230上に物理的な領域が割り当てられた。しかし、第2の実施例では、実ページは、データを格納した論理仮想セグメントと冗長データを格納した論理仮想セグメントから構成される論理的な領域である。物理的な領域に関しては、それぞれの論理仮想セグメントに対して、フラッシュパッケージ230内のどの仮想セグメントを割り当てるかを、ストレージコントローラ200が、決定する。
 第2の実施例の論理ボリューム情報2000の形式は、第1の実施例と同様である。また、実ページにパリティなどの冗長データを含む点も第1の実施例と同様である。また、何組のデータから何組の冗長データを生成するかは、論理ボリュームRAIDタイプ2003によって決まるのも、第1の実施例と同様である。ここでは、実ページには、データを格納したn個の論理仮想セグメントと、これらから生成される冗長データを格納したm個の論理仮想セグメントを格納し、さらに、次の実ページには、データを格納したn個の論理仮想セグメントとこれらから生成した冗長データを格納したm個の論理仮想セグメントを格納していくものとする。したがって、第2の実施例では、1つの実ページは、1つのRAIDセグメントグループに相当する。
 図43は、実ページ情報2100’の形式である。実ページ情報2100’は、実ページごとに存在する該当する実ページの管理情報である。実ページ情報は、複数の論理仮想セグメントポインタ4000から構成される。論理仮想セグメントポインタ4000の数は、実ページに含まれる論理仮想セグメントの数である(実ページに、n個の論理仮想セグメントとm個の論理仮想セグメントが格納される場合、論理仮想セグメントポインタ4000の数は(n+m)個である)。実ページにフラッシュパッケージ230内の仮想セグメントが割り当てられている場合、論理仮想セグメントポインタ4000には、どのフラッシュパッケージ230のどの仮想セグメントが割り当てられているかを示す情報が格納されている。割り当てられていなければ、ヌル値になっている。
 本実施例においては、それぞれのフラッシュパッケージ230は、容量仮想化機能をもっており、ストレージコントローラ200には、見かけ上、実際の物理容量より大きな容量を提供している。
 図44は、フラッシュパッケージ情報2500’の形式である。フラッシュパッケージ情報2500’は、フラッシュパッケージID2501、フラッシュパッケージ仮想容量2502、仮想ブロック容量2503、フラッシュパッケージ最大容量2511、仮想セグメント管理情報2506、先頭空き仮想セグメント管理情報ポインタ2504、末尾空き仮想セグメント管理情報ポインタ2512、先頭使用不可仮想セグメント管理情報ポインタ2505、末尾使用不可仮想セグメント管理情報ポインタ2510から構成される。
 フラッシュパッケージID2501は当該フラッシュパッケージ230の識別子である。フラッシュパッケージ仮想容量2502は、当該フラッシュパッケージ230の仮想的な容量である。仮想ブロック容量2503は、当該フラッシュパッケージ230の仮想ブロックの容量である。フラッシュパッケージ最大容量2511は、当該フラッシュパッケージ230が取り得る最大の仮想容量である。仮想セグメント管理情報2506は、当該フラッシュパッケージ230の仮想容量が、最大仮想容量となったときの仮想セグメントの数と同数用意される。仮想セグメント管理情報2506の構成は、前仮想セグメント管理情報ポインタ2508と後仮想セグメント管理情報ポインタ2507と仮想セグメントアドレス2509を示す。後仮想セグメント管理情報ポインタ2507は、後の仮想セグメント管理情報2506を示すためのポインタである。前仮想セグメント管理情報ポインタ2508は、前の仮想セグメント管理情報2506を示すためのポインタである。仮想セグメントアドレス2509は、当該仮想セグメントの位置するアドレス(フラッシュパッケージがストレージコントローラ200に提供する記憶空間上のアドレス)で、この値とフラッシュパッケージID2501が、実ページ情報2100’の論理仮想セグメントポインタ4000に設定される。
 図45に示した空き仮想セグメント管理情報キュー42000は、フラッシュパッケージ情報2500’内の、先頭空き仮想セグメント管理情報ポインタ2504、末尾空き仮想セグメント管理ポインタ2512によって管理される空き仮想セグメントキューの集合を表している。先頭空き仮想セグメント管理情報ポインタ2504は、先頭の空き状態の仮想セグメント管理情報2506のアドレスをさす。次に、先頭の仮想セグメント管理情報2506の中の後仮想セグメント管理情報ポインタ2507が次の空き状態の仮想セグメント管理情報2506を指す。また、末尾空き仮想セグメント管理情報ポインタ2512は、末尾の空き状態の仮想セグメント管理情報2506のアドレスをさす。末尾の空き状態の仮想セグメント管理情報2506に含まれる前仮想セグメント管理情報ポインタ2508は、一つ前の空き状態の仮想セグメント管理情報2506を指す。図45では、最後の空き仮想セグメント管理情報2506の後仮想セグメント管理情報ポインタ2504には、ヌル値が格納されている。最初の空き仮想セグメント管理情報2506の前仮想セグメント管理情報ポインタ2512も、ヌル値が格納されている。ここでは、空き仮想セグメント管理情報キュー42000に、仮想セグメント管理情報2506を戻すときには、最後尾に戻し、空き仮想セグメント管理情報キュー42000から仮想セグメント管理情報2506をとリ出すときには、先頭から取り出す。これは、フラッシュパッケージ230の実ブロックのウエアレベリングを実現しやすくするためである。
 図46に示した使用不可仮想セグメント管理情報キュー4300は、先頭使用不可仮想セグメント管理情報ポインタ2505と末尾使用不可仮想セグメント管理情報ポインタ2510とによって管理される使用不可仮想セグメント情報2506の集合を表している。その構造は、空き仮想セグメントキュー管理情報キュー42000と同じである。フラッシュパッケージ230の物理的な空き容量が少なくなった場合、その数だけ、空き仮想セグメント管理情報キュー42000で管理されている仮想セグメント管理情報2506が、使用不可仮想セグメント管理情報キュー2701に移される。逆に、フラッシュパッケージ230の物理的な空き容量が多くなり、その数だけ、使用不可仮想セグメント管理情報キュー4300で管理されている仮想セグメント管理情報2506が、空き仮想セグメント管理情報キュー42000に移される。本発明では、ストレージコントローラ200が、上位レベルの容量仮想化機能、フラッシュパッケージ230が下位レベルの容量仮想化機能をもつ。このため、フラッシュパッケージ230の仮想容量を変化させても、仮想セグメント管理情報2506をすでに説明したような方法で、移動させるだけで対応できる。ここでは、使用不可仮想セグメント管理情報キュー4300に、仮想セグメント管理情報2506を戻すときには、最後尾に戻し、使用不可仮想セグメントキュー4300から仮想セグメント管理情報2506をとリ出すときには、先頭から取り出す。これは、フラッシュパッケージ230の実ブロックのウエアレベリングを実現しやすくするためである。
 第2の実施例における空きページ管理情報キューの構造は、第1の実施例で説明したものと同様であるため、図示は省略する。ただし、キューの単位が、第1の実施例では、フラッシュパッケージグループ280だったのに対し、第2の実施例では、RAIDタイプごとに存在する点が異なる。
 また、第2の実施例に係るフラッシュパッケージ230がもつ情報は、第1の実施例と同様であるため、説明を省略する。
 次に、上記に説明した管理情報を用いて、ストレージコントローラ200、フラッシュパッケージ230が実行する動作の説明を行う。図39は、ストレージコントローラ200のメモリ270内に格納された、第2の実施例に関するプログラムが示されている。本実施例に関するプログラムは、リード処理実行部4000、ライト要求受付部4100、ライトアフタ処理実行部4200である。これらのプログラムは第1の実施例と同様、プロセッサ260によって実行されるものであるから、特に断りのない限り、以下で説明する各ステップの動作主体はプロセッサである。なお、第1の実施例と同じく、第2の実施例においても、ホスト12からのリード、ライト要求で指定されるアクセス範囲が仮想セグメント境界に一致している場合について説明する。またアクセスデータサイズが、1仮想セグメントのサイズと一致しているものとする。ただし、ホスト12からのリード要求、ライト要求で指定されるアクセス範囲として、複数の仮想セグメント、あるいは、仮想セグメントの一部のみが指定された場合でも、本発明は有効である。
 図47は、第2の実施例におけるリード処理実行部4000の処理フローである。リード処理実行部4000は、ホスト120から、ストレージコントローラ200が、リード要求を受け付けたときに実行される。
 ステップ44000:プロセッサ260は、受け取ったリード要求で指定されたリード対象とするアドレスから、リード対象となる仮想ページ及び当該仮想ページ内の相対的な仮想セグメント位置(リード対象となる論理仮想セグメントの、仮想ページ内相対位置)を計算する。
 ステップ44001:リード対象となったデータが、キャッシュメモリ210にヒットしているかをチェックする。これは、公知の技術である。ヒットしている場合、ステップ44007へジャンプする。
 ステップ44002:ここでは、リード対象としているデータをキャッシュメモリ210にロードする必要がある。ます、当該ステップでは、リード対象となった仮想ページに割り当てた実ページに対応する実ページ情報2100’を、論理ボリューム情報2000内の実ページポインタ2004から獲得する。
 ステップ44003:獲得した実ページ情報2100’の中から、ステップ44000で計算した仮想セグメント位置を用いてアクセス対象となる仮想セグメントに対応する論理仮想セグメントポインタ4000を特定する。これにより、どのフラッシュパッケージ230のどのアドレス(仮想セグメント)を読み出したらよいか、特定できる。
 ステップ44004:ステップ44003で獲得したフラッシュパッケージ230に対し、特定したアドレスに格納されているデータを読み出すリード要求を発行する。
 ステップ44005:フラッシュパッケージ230からデータが送られてくるのを待つ。
 ステップ44006:フラッシュパッケージ230から送られてきたデータをキャシュメモリ150に格納する。
 ステップ44007:当該リード要求で指定されたキャッシュメモリ210上のデータをホスト120へ送り、処理を完了する。
 図48は、第2の実施例におけるライト要求受付部4100の処理フローである。ライト要求受付部4100は、ストレージコントローラ200が、ホスト120からライト要求を受け付けたときに実行される。
 ステップ45000:プロセッサ260は、受け取ったライト要求がライト対象とするアドレスから、対応する仮想ページとアクセスする仮想ページ内の相対アドレスを計算する。
 ステップ45001:ライト要求で指定されている論理ボリュームに対応する論理ボリューム情報2000を参照し、ステップ45000で得た仮想ページに実ページが割り当てられているかを、論理ボリューム情報2000内の実ページポインタ2004を参照することによってチェックする。割り当てられている場合、ステップ45003へジャンプする。
 ステップ45002:当該ステップでは、対応する仮想ページに実ページを割り当てる。論理ボリューム情報2000のRAIDタイプ2002に対応した空き実ページ管理情報ポインタ2200を参照して、先頭に位置する実ページ情報2100’(空き状態の実ページの実ページ情報2100’)を、当該実ページポインタ2004が指し示すようにする。これで、仮想ページに実ページを割り当てたことになる。ただし、第2の実施例では、実ページも論理的な空間であるので、この時点では、実際に、フラッシュパッケージ230の領域が仮想ページに割り当てられるわけではない(ライトデータを格納すべきフラッシュパッケージ230及びフラッシュパッケージ230上アドレスが決定されるわけではない)。また、仮想ページを実ページに割り当てる処理を、本実施例ではライト要求を受け付けたときに実施したが、本発明では、この割り当て処理は、フラッシュパッケージ230へデータを格納するまでに実行すればよい。
 ステップ45003:ホスト120から当該ライト要求で指定されたライトデータを、キャッシュメモリ210に格納する。
 実ページは、RAID構成をとるので、キャッシュメモリ210上に格納したライトデータに対して、冗長データを生成し、やはりキャッシュメモリ210上に格納して処理を終了する。これは、公知の方法であるので、詳細に説明はしない。なお、キャッシュメモリ210上の冗長データとライトデータには、対応する実ページの情報(たとえば実ページ情報2100’へのポインタ、及び実ページ内の格納位置の情報(実ページ内のどの論理仮想セグメントに格納されるべきかを表す位置情報))をつけておく。ライトデータ、冗長データは、ライトアフタ処理実行部5200によって、フラッシュパッケージ160に書き込まれるが、ライトアフタ処理実行部5200から見ると、いずれもフラッシュパッケージ230へ書き込むデータなので、両者を区別する必要はない。同様に、フラッシュパッケージ230も、両者を区別する必要はない。また、冗長データの生成は、ステップ45003で実施する態様には限定されない。
 図49は、第2の実施例におけるライトアフタ処理実行部4200の処理フローである。ライトアフタ処理実行部4200は、プロセッサ260が、適宜実行する処理である。ライトアフタ処理実行部4200は、ホスト120から受け取ったライトデータ、及びライトデータを用いて生成された冗長データをフラッシュパッケージ230に書き込む処理を実行する。ただし、ライトアフタ処理実行部4200は、ライトデータ、冗長データの両者を、フラッシュパッケージ230に書き込むべきデータとして、両者を区別せずに処理する。
 ステップ46000:プロセッサ260は、キャッシュメモリ210をサーチして、フラッシュパッケージ230に書き込むべき論理仮想セグメントを決める。プロセッサ260は、見出したデータに付与されている、書き込むべき論理仮想セグメント単位に取り出す。ただしこの時、書き込むべき論理仮想セグメントと決定された論理仮想セグメントの属するRAIDセグメントグループ内の論理仮想セグメントがキャッシュメモリ210に格納されているか判定し、キャッシュメモリ210上に格納されている、当該RAIDセグメントグループ内の全論理仮想セグメントも、フラッシュパッケージ230への書き込み対象としてもよい。
 ステップ46001:書き込みを行う論理仮想セグメントごとに、特徴量を作成するよう、演算回路290に要求し、完了を待つ。
 ステップ46002:この特徴量にしたがって、当該論理仮想セグメントを書き込むべきフラッシュパッケージ230を決定する。決定の方法は先に述べたとおり、一例として、同じ特徴量を持つデータの格納されているフラッシュパッケージ230を選択するとよい。またその際、書き込み対象の論理仮想セグメントと同じRAIDセグメントグループに属する別の論理仮想セグメントがすでに、選択されたフラッシュパッケージ230に格納されている場合には、別のフラッシュパッケージを選択する。さらに、ステップ46000で、RAIDセグメントグループ内の複数の論理仮想セグメントをフラッシュパッケージ230への書き込み対象として選択した場合、RAIDセグメントグループ内の複数の論理仮想セグメントのいくつかが、同一の特徴量を持っていたとしても、これらの論理仮想セグメントは、それぞれ異なるフラッシュパッケージ230に格納するよう決定する。なお、各フラッシュパッケージ230に格納されている論理仮想セグメントの特徴量について、ストレージコントローラ200が論理仮想セグメントをフラッシュパッケージ230に格納する際に、格納した論理仮想セグメントの特徴量をフラッシュパッケージ230毎に記憶しておくようにしてもよいし、あるいはフラッシュパッケージ230が特徴量を計算する手段を備えている場合には、各フラッシュパッケージ230から、フラッシュパッケージ230に格納されている論理仮想セグメントの特徴量を受け取るようにしてもよい。
 書き込むと決めたフラッシュパッケージ230に対応する空き仮想セグメント管理情報キューの先頭から空き仮想セグメント管理情報2506を取り出し、その仮想セグメント管理情報2506の仮想セグメントアドレス2509から、そのデータを書き込むべき仮想セグメントを決める。
 ステップ46003:選択したフラッシュパッケージ230に、書き込むべき仮想セグメントとそのハッシュ値を指定して、ライト要求を発行する。第2の実施例では、512byteのデータに、2byteの特徴量を含む8byteのデータを付加して、520byteを一つの転送単位とするSCSIのライトコマンドを用いてデータを送ってもよいし、おくらなくともよい。第2の実施例では、フラッシュパッケージ230が、ハッシュ値や特徴量を計算してもよい。
 ステップ46004:フラッシュパッケージ230からライト要求の完了報告を待つ。
 ステップ46005:それまで当該論理仮想セグメントに対応する仮想セグメントの消去要求を、その仮想セグメントを含むフラッシュパッケージ230に、その仮想セグメントを消去するよう要求する。
 ステップ46006:完了を待つ。
 ステップ46007:これまで当該論理仮想セグメントに割り当てられていたパッケージの仮想セグメントを、対応するフラッシュパッケージ230に対応する空き仮想セグメント管理情報キュー42000の末尾につなげる。また、今、書き込みを完了したパッケージの仮想セグメントのアドレス(フラッシュパッケージID2501と仮想セグメントアドレス2509)を、対応する実ページ情報2100’の論理仮想セグメントに対応する、論理仮想セグメントポインタ4000に設定する(たとえば書き込みを行ったデータが、実ページのk番目(なお、1≦k≦(m+n)とする)の論理仮想セグメントに書き込まれるべきデータであった場合、仮想セグメントのアドレスを、実ページ情報2100’内のk番目の論理仮想セグメントポインタ4000に設定する)。
 ステップ46008:プロセッサ260は、フラッシュパッケージ230から当該ライト要求に関する終了報告をチェックする。まず、当該ライト要求で、重複排除ができなかった場合、ページデータ格納量、ページ重複排除後データ量に仮想セグメントの容量を加える。重複排除ができなかった場合、ページデータ格納量、に仮想セグメントの容量を加える。
 ステップ46009:ここでは、プラッシュパッケージ230の仮想容量に変化があったフラッシュパッケージ230がまったくないかをチェックする。ない場合、処理を終了する。
 ステップ46010:仮想容量に変化があった場合、受け取ったそれぞれの仮想容量を、該当するフラッシュパッケージ仮想容量2502に設定する。次に、この変更により、その数にあわせて、空き仮想セグメント管理情報キュー42000と使用不可仮想セグメント管理情報キュー4300の間で、仮想セグメント管理情報2506を移動する。その後、処理を完了する。
 図40は、パッケージメモリ320内に格納された、第2の実施例に係るフラッシュパッケージ230が実行するプログラムが示されている。第2の実施例におけるフラッシュパッケージ230が実行するプログラムは、データリード処理実行部12000、データライト処理実行部12100、仮想ブロック移動処理実行部12300、キュー削除処理部12600、キュー登録処理部12700、仮想セグメント消去部12800である。データリード処理実行部12000、仮想ブロック移動処理実行部12300、キュー削除処理部12600、キュー登録処理部12700は、第1の実施例とまったく同様である。仮想セグメント消去部12800は、第2の実施例のみに含まれるプログラムである。データライト処理実行部12100は、ストレージコントローラ200が、ハッシュ値や特徴量を計算して、フラッシュパッケージ230に送信する場合は、第1の実施例と同様である。フラッシュパッケージ230が、ハッシュ値や特徴量を計算する場合、バッファ330に格納した書き込みデータを参照して、ハッシュ値や特徴量を計算し、計算した値を仮想セグメント特徴量3206に設定するという点のみが異なり、それ以外は、第1の実施例と同様である。このため、以下、仮想セグメント消去部12800の処理フローを説明する。
 図50は、仮想セグメント消去部12800の処理フローを説明する。仮想セグメント消去部12800は、ストレージコントローラ200から指定された仮想セグメントを無効にする処理である。この処理はフラッシュパッケージ230のパッケージプロセッサ310が実行する。
 ステップ48000:パッケージプロセッサ310は、ストレージコントローラ200から指定された仮想セグメントを含む仮想ブロックグループの、仮想ブロックグループ情報3200と、対応する仮想セグメントポインタ3205を認識する。実施例1において、フラッシュパッケージ230がストレージコントローラ200からアクセス要求(リード要求またはライト要求)を受信した時、アクセス要求の内容(LBA等)から、仮想ブロックグループ情報3200、仮想セグメントポインタ3205を特定する処理を説明しているが、ステップ48000でもこれと同様の処理が行われる。
 ステップ48001:認識した仮想セグメントを、簡易シノニウムキュー3550、シノニウムキュー1900、重複排除キュー1800からはずすために、キュー削除処理部12600をコールする。
 ステップ48002:対応する仮想セグメントポインタ3205をヌルにして、ストレージコントローラ200に完了報告を行い、処理を終了する。
 以上のように、本発明の第2の実施例に係るストレージシステムは、多数のフラッシュメモリを実装した複数のフラッシュパッケージの各々が重複排除機能をもち、このフラッシュパッケージを多数接続した大容量のストレージシステムにおいて、ストレージコントローラは、ライトデータが重複排除処理される可能性の高いフラッシュパッケージを選択してライトデータを書き込むため、より重複排除率を向上させることが可能になる。
100 ストレージシステム
110 ホスト
120 ストレージエリアネットワーク(SAN)
200 ストレージコントローラ
210 キャッシュメモリ
220 共有メモリ
230 フラッシュパッケージ
250 接続装置
260 プロセッサ
270 メモリ
280 ハッシュ演算回路
280 フラッシュパッケージグループ
300 フラッシュチップ
310 パッケージプロセッサ
320 パッケージメモリ
330 バッファ
340 パッケージバス
350 パッケージ転送装置
2000 論理ボリューム情報
2100 実ページ情報
2300 フラッシュパッケージグループ情報
2500 フラッシュパッケージ情報
3000 パッケージ情報
3100 チップ情報
3200 仮想ブロック情報
3300 実ブロック情報
4000 リード処理実行部
4100 ライト処理受付部
4200 ライトアフタ処理実行部
4500 実ページ移動処理実行部
12000 データリード処理実行部
12100 データライト処理実行部
12200 実ブロック解放処理実行部
12300 仮想ブロック移動処理実行部
12400 仮想ブロック格納処理実行部
12500 仮想容量判定処理部
12600 キュー削除処理部
12700 キュー登録処理部
12800 仮想セグメント消去部

Claims (14)

  1.  データの消去単位であるブロック群が形成された複数のフラッシュチップを収納する複数のフラッシュパッケージと、ホストと前記フラッシュパッケージとの間で、リード・ライト処理を実行するストレージコントローラを有するストレージシステムであって、
     前記ストレージコントローラは、前記フラッシュパッケージに格納するライトデータを、前記フラッシュパッケージに送る際に、前記ライトデータに前記ライトデータの特徴量を含む保証コードを付加したデータを生成し、前記フラッシュパッケージに、前記保証コードの付加されたデータの書き込みを指示するSCSIコマンドを発行することによって送信するよう構成されており、
     前記フラッシュパッケージは、前記ストレージコントローラから、前記保証コードの付加されたデータを受信すると、
     前記保証コードに含まれる特徴量と同じ値を持つ重複排除候補データを探索し、
     前記重複排除候補が見つかった場合、前記ライトデータと前記重複排除候補データの内容を比較し、
     前記重複排除候補の中から、前記内容が同じデータが見つかった場合、前記ライトデータを前記フラッシュチップに格納せず、前記ライトデータが前記見つかったデータと同内容であることを示す情報を、前記フラッシュパッケージの管理情報に記憶する、
     ことを特徴とするストレージシステム。
  2.  前記フラッシュパッケージは、
     前記重複排除候補の中に、前記ライトデータと同じ内容のデータが見つからなかった場合、前記ライトデータを前記フラッシュチップに格納することを特徴とする、請求項1に記載のストレージシステム。
  3.  前記フラッシュパッケージは、
     前記保証コードに含まれる特徴量から第2の特徴量を算出し、
     前記第2の特徴量と同じ値を持つ第2の重複排除候補データを探索し、
     前記第2の重複排除候補データが見つからなかった場合、前記保証コードに含まれる特徴量と同じ値を持つ重複排除候補データの探索を行わないことを特徴とする、
     請求項1に記載のストレージシステム。
  4.  前記フラッシュパッケージは、前記ストレージコントローラから受信した、前記保証コードの付加されたデータの書き込みを指示するSCSIコマンドに応答して、
     前記ライトデータと同じ内容のデータの有無を示す情報を送る手段を有することを特徴とする、請求項1に記載のストレージシステム。
  5.  前記フラッシュパッケージは前記ストレージコントローラに対し、前記フラッシュパッケージ上の複数のフラッシュチップの合計記憶容量よりも大きなサイズの記憶空間を提供し、
     前記ストレージコントローラは前記ホストに対し、前記複数のフラッシュパッケージの提供する記憶空間よりも大きなサイズの第2記憶空間を提供し、前記第2記憶空間は、所定サイズの領域であるページ単位に管理されており、
     前記ストレージコントローラは、前記ホストから前記ページに対するライト要求を受け付けた時点で、
     前記ページに、前記前記複数のフラッシュパッケージが提供する前記記憶空間上の領域から構成される実ページを対応付けることを特徴とする、
     請求項1に記載のストレージシステム。
  6.  前記フラッシュパッケージの管理情報は、前記記憶空間上の読み書き単位であるセグメントごとに、前記セグメントに割り当てられている前記フラッシュチップ上の実セグメントとのマッピング情報を含んでおり、
     前記ストレージコントローラから、前記セグメントに対する前記保証コードの付加されたデータの書き込み指示を受け付けると、
     前記データと同内容のデータが前記実セグメントに格納されている場合、前記書き込み指示で指定されたデータを前記フラッシュチップに書き込まず、前記セグメントが、前記同内容のデータが格納されている前記実セグメントに対応付けられるようにマッピング情報を更新することで、データ重複排除を行うことを特徴とする、
     請求項5に記載のストレージシステム。
  7.  前記フラッシュパッケージは、前記フラッシュチップの消去単位であるブロックの消去処理を行う前に、
     前記ブロック内に格納されたデータの中で、ストレージコントローラに対して提供している記憶空間上で有効なデータを、前記管理情報に基づき選択し、
     前記複数のフラッシュチップの中に含まれている、未使用のブロックを探索し、
     前記選択したデータを、前記探索されたブロックに書き込むことを特徴とする、
     請求項6に記載のストレージシステム。
  8.  前記フラッシュパッケージは、前記管理情報に基づいて、前記ストレージコントローラに対して提供している前記記憶空間のサイズを変更し、
     前記ストレージコントローラに、変更された記憶空間のサイズを通知することを特徴とする、
     請求項5に記載のストレージシステム。
  9.  前記フラッシュパッケージは、前記ストレージコントローラから前記記憶空間に対して書き込まれた重複排除前のデータサイズの合計値と、重複排除後のデータサイズの合計値を、管理情報に格納しており、
     前記重複排除前のデータ量の合計値と前記データ重複排除後のデータ量の合計値の比が、前記記憶空間のサイズと前記複数のフラッシュチップの合計記憶容量の比に対して、所定値以上大きい場合、前記記憶空間のサイズを変更することを特徴とする
     請求項8に記載のストレージシステム。
  10.  前記ストレージコントローラは、
     前記ページに格納されたデータのうち、前記フラッシュチップに格納されたデータ量を認識するための情報に基づいて、前記フラッシュパッケージ間で前記前記ページに対して書き込まれたデータを移動することを決定し、
     前記フラッシュパッケージ間で前記前記ページに格納されたデータを移動することを特徴とする、
     請求項5に記載のストレージシステム。
  11.  データの消去単位であるブロック群が形成された複数のフラッシュチップを収納する複数のフラッシュパッケージと、ホストと前記フラッシュパッケージとの間で、リード・ライト処理を実行するストレージコントローラを有するストレージシステムであって、
     前記ストレージコントローラは、前記フラッシュパッケージに格納するライトデータの特徴量を算出し、前記算出された特徴量に基づき、前記ライトデータを格納するフラッシュパッケージを選択し、
     前記フラッシュパッケージは、
     前記ライトデータと同じ内容をもつ他のデータを探し、前記同じ内容をもつ他のデータが見つかった場合、前記ライトデータを前記フラッシュチップに格納せず、前記ライトデータが他のデータと同内容であることを示す情報を、前記フラッシュパッケージの管理情報に記憶する、
     ことを特徴とするストレージシステム。
  12.  前記ストレージシステムは、
     前記ホストからのライト要求に応じて受け取ったn個のデータから、該n個のデータを復元するためのm個の冗長データを生成し、
     前記n個のデータと前記m個の冗長データの、それぞれの特徴量を計算し、
     前記n個のデータと前記m個の冗長データを異なるフラッシュパッケージに格納するという制約を守り、前記特徴量に基づいて、前記n個のデータと前記m個の冗長データを格納するフラッシュパッケージを選択する、
     ことを特徴とする、請求項11に記載のストレージシステム。
  13.  前記フラッシュパッケージは前記ストレージコントローラに対し、前記フラッシュパッケージ上の複数のフラッシュチップの合計記憶容量よりも大きなサイズの記憶空間を提供し、
     前記ストレージコントローラは前記ホストに対し、前記複数のフラッシュパッケージの提供する記憶空間よりも大きなサイズの第2記憶空間を提供し、
     前記ストレージコントローラは、前記ホストから前記第2記憶空間上の領域に対するライト要求を受け付けた時点で、前記領域に、前記フラッシュパッケージが前記ストレージコントローラに提供する記憶空間上の領域を割り当てることを特徴とする、
     請求項11に記載のストレージシステム。
  14.  前記ストレージシステムは、
     前記ホストからのライト要求に応じて受け取ったn個のデータから、該n個のデータを復元するためのm個の冗長データを生成し、
     前記n個のデータと前記m個の冗長データの、それぞれの特徴量を計算し、
     前記n個のデータと前記m個の冗長データを異なるフラッシュパッケージに格納するという制約を守り、前記それぞれの特徴量に基づいて、前記n個のデータと前記m個の冗長データを格納するフラッシュパッケージを選択する、
     ことを特徴とする、請求項13に記載のストレージシステム。

     
PCT/JP2014/061577 2014-04-24 2014-04-24 ストレージシステム WO2015162758A1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
PCT/JP2014/061577 WO2015162758A1 (ja) 2014-04-24 2014-04-24 ストレージシステム
US15/122,533 US10089033B2 (en) 2014-04-24 2014-04-24 Storage system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2014/061577 WO2015162758A1 (ja) 2014-04-24 2014-04-24 ストレージシステム

Publications (1)

Publication Number Publication Date
WO2015162758A1 true WO2015162758A1 (ja) 2015-10-29

Family

ID=54331945

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2014/061577 WO2015162758A1 (ja) 2014-04-24 2014-04-24 ストレージシステム

Country Status (2)

Country Link
US (1) US10089033B2 (ja)
WO (1) WO2015162758A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10768857B2 (en) 2016-12-29 2020-09-08 Huawei Technologies Co., Ltd. Storage system having a controller that selects a die of a solid state disk to store data

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10445229B1 (en) 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US9542118B1 (en) 2014-09-09 2017-01-10 Radian Memory Systems, Inc. Expositive flash memory control
US9753955B2 (en) 2014-09-16 2017-09-05 Commvault Systems, Inc. Fast deduplication data verification
US9639274B2 (en) 2015-04-14 2017-05-02 Commvault Systems, Inc. Efficient deduplication database validation
US9971528B2 (en) * 2016-03-01 2018-05-15 International Business Machines Corporation Cold storage aware object replication
JP7011156B2 (ja) * 2017-11-20 2022-01-26 富士通株式会社 ストレージ制御装置およびプログラム
FR3074317B1 (fr) * 2017-11-27 2019-11-22 Idemia Identity & Security France Procede d'acces a une zone memoire non volatile de type flash d'un element securise, tel qu'une carte a puce
US11349915B2 (en) * 2018-02-02 2022-05-31 EMC IP Holding Company LLC Distributed replication and deduplication of an object from a source site to a destination site
US11392551B2 (en) * 2019-02-04 2022-07-19 EMC IP Holding Company LLC Storage system utilizing content-based and address-based mappings for deduplicatable and non-deduplicatable types of data
JP2020144601A (ja) * 2019-03-06 2020-09-10 株式会社日立製作所 ストレージ装置及びストレージ装置のデータ消去方法
US11294871B2 (en) 2019-07-19 2022-04-05 Commvault Systems, Inc. Deduplication system without reference counting
KR20220125836A (ko) * 2021-03-03 2022-09-15 삼성전자주식회사 스토리지 장치, 스토리지 장치의 동작 방법, 그리고 스토리지 장치를 포함하는 전자 장치

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006079380A (ja) * 2004-09-10 2006-03-23 Hitachi Ltd ディスクアレイ装置
JP2009048497A (ja) * 2007-08-21 2009-03-05 Hitachi Ltd 論理ボリュームのペアを利用したデータ保存の方式を変更する機能を備えたストレージシステム
JP2009080696A (ja) * 2007-09-26 2009-04-16 Hitachi Ltd ストレージサブシステム及びその制御方法
JP2009087021A (ja) * 2007-09-28 2009-04-23 Hitachi Ltd ストレージ装置及びデータ重複排除方法
JP2010170475A (ja) * 2009-01-26 2010-08-05 Nec Corp ストレージシステム、ストレージシステムにおけるデータ書込方法及びデータ書込プログラム
JP2011076294A (ja) * 2009-09-30 2011-04-14 Hitachi Ltd 階層ストレージ管理システムにおける重複ファイルの転送方法及びシステム
JP2012238125A (ja) * 2011-05-10 2012-12-06 Internatl Business Mach Corp <Ibm> データの保存を制御する装置及び方法
US20120317333A1 (en) * 2011-06-07 2012-12-13 Hitachi Ltd. Storage system comprising flash memory, and storage control method

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8027194B2 (en) * 1988-06-13 2011-09-27 Samsung Electronics Co., Ltd. Memory system and method of accessing a semiconductor memory device
JP2007316725A (ja) * 2006-05-23 2007-12-06 Hitachi Ltd 記憶領域管理方法及び管理計算機
WO2008130983A1 (en) * 2007-04-16 2008-10-30 Attune Systems, Inc. File aggregation in a switched file system

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006079380A (ja) * 2004-09-10 2006-03-23 Hitachi Ltd ディスクアレイ装置
JP2009048497A (ja) * 2007-08-21 2009-03-05 Hitachi Ltd 論理ボリュームのペアを利用したデータ保存の方式を変更する機能を備えたストレージシステム
JP2009080696A (ja) * 2007-09-26 2009-04-16 Hitachi Ltd ストレージサブシステム及びその制御方法
JP2009087021A (ja) * 2007-09-28 2009-04-23 Hitachi Ltd ストレージ装置及びデータ重複排除方法
JP2010170475A (ja) * 2009-01-26 2010-08-05 Nec Corp ストレージシステム、ストレージシステムにおけるデータ書込方法及びデータ書込プログラム
JP2011076294A (ja) * 2009-09-30 2011-04-14 Hitachi Ltd 階層ストレージ管理システムにおける重複ファイルの転送方法及びシステム
JP2012238125A (ja) * 2011-05-10 2012-12-06 Internatl Business Mach Corp <Ibm> データの保存を制御する装置及び方法
US20120317333A1 (en) * 2011-06-07 2012-12-13 Hitachi Ltd. Storage system comprising flash memory, and storage control method

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10768857B2 (en) 2016-12-29 2020-09-08 Huawei Technologies Co., Ltd. Storage system having a controller that selects a die of a solid state disk to store data

Also Published As

Publication number Publication date
US20170075620A1 (en) 2017-03-16
US10089033B2 (en) 2018-10-02

Similar Documents

Publication Publication Date Title
WO2015162758A1 (ja) ストレージシステム
US10073640B1 (en) Large scale implementation of a plurality of open channel solid state drives
US20180173632A1 (en) Storage device and method for controlling storage device
JP5792313B2 (ja) ストレージシステム
US10542089B2 (en) Large scale implementation of a plurality of open channel solid state drives
JP6677740B2 (ja) ストレージシステム
US8832371B2 (en) Storage system with multiple flash memory packages and data control method therefor
JP5816303B2 (ja) フラッシュメモリを含むストレージシステム、及び記憶制御方法
US9116622B2 (en) Storage system having nonvolatile semiconductor storage device with nonvolatile semiconductor memory
US9792073B2 (en) Method of LUN management in a solid state disk array
US20150254186A1 (en) Information processing device having a plurality of types of memory caches with different characteristics
JP2020035300A (ja) 情報処理装置および制御方法
WO2015076354A1 (ja) ストレージ装置と方法並びにプログラム
US8954658B1 (en) Method of LUN management in a solid state disk array
JP6685334B2 (ja) ストレージ装置
WO2016056104A1 (ja) ストレージ装置、及び、記憶制御方法
JP6817340B2 (ja) 計算機
WO2018061161A1 (ja) ストレージ装置およびその制御方法
JP5768118B2 (ja) 複数のフラッシュパッケージを有するストレージシステム
JP6138318B2 (ja) 複数のフラッシュパッケージを有するストレージシステム
JP5945040B2 (ja) 複数のフラッシュパッケージを有するストレージシステム
JP2022116209A (ja) 仮想ストレージシステム
WO2018051446A1 (ja) オプショナルなデータ処理機能を有するストレージシステムを含んだ計算機システム、および、記憶制御方法

Legal Events

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

Ref document number: 14890185

Country of ref document: EP

Kind code of ref document: A1

WWE Wipo information: entry into national phase

Ref document number: 15122533

Country of ref document: US

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 14890185

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP