US12235811B2 - Data deduplication in a disaggregated storage system - Google Patents
Data deduplication in a disaggregated storage system Download PDFInfo
- Publication number
- US12235811B2 US12235811B2 US17/351,733 US202117351733A US12235811B2 US 12235811 B2 US12235811 B2 US 12235811B2 US 202117351733 A US202117351733 A US 202117351733A US 12235811 B2 US12235811 B2 US 12235811B2
- Authority
- US
- United States
- Prior art keywords
- data block
- storage control
- control node
- storage
- original data
- Prior art date
- Legal status (The legal status 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 status listed.)
- Active, expires
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1748—De-duplication implemented within the file system, e.g. based on file segments
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Definitions
- This disclosure relates generally to data storage management techniques and, more particularly, to data deduplication techniques in a storage system.
- Data deduplication is a common method that is implemented to reduce the amount of data in a storage system.
- data deduplication involves discovering and removing duplicate data, wherein a deduplication operation takes place when the same block of data or file is written to multiple locations of the storage system. Such locations may be cross-volume and/or cross-node depending on the implementation.
- the process of removing duplicate data generally includes replacing the duplicate data with a reference (e.g., pointer) to a single instance of the data, thereby reducing the amount of stored data.
- a reference e.g., pointer
- There are various types of data deduplication techniques which identify and eliminate redundant data using different algorithms, all of which require some level of overhead to discover and remove the duplicate data, which can impact storage system performance. In this regard, data deduplication should be implemented in a way that minimizes such overhead to thereby minimize the impact on storage system performance.
- an exemplary embodiment includes a data deduplication process that is performed in a data storage system.
- the data storage system comprises storage nodes, and storage control nodes comprising at least a first storage control node and a second storage control node.
- Each of the storage control nodes can access data directly from each of the storage nodes.
- the first storage control node sends a first message to the second storage control node, wherein the first message comprises a request to initiate a deduplication process with respect to a given data block obtained by the first storage control node and an original data block owned by the second storage control node.
- the second storage control node increments a reference counter associated with the original data block, and sends a second message to the first storage control node, wherein the second message comprises metadata which comprises information to enable the first storage control node to read the original data block from a given storage node.
- the first storage control node reads the original data block from the given storage node based on the metadata of the second message.
- the first storage control node performs a data compare process to determine whether the given data block matches the original data block, and creates a reference to the original data block, in response to determining that the given data block matches the original data block.
- inventions of the disclosure include, without limitation, systems and articles of manufacture comprising processor-readable storage media, which are configured to implement data deduplication in a storage system.
- FIG. 1 schematically illustrates a network computing system comprising a storage system which implements a data deduplication system, according to an exemplary embodiment of the disclosure.
- FIG. 2 schematically illustrates a storage control node which implements a data deduplication system, according to an exemplary embodiment of the disclosure.
- FIG. 3 schematically illustrates a method for performing data deduplication, according to an exemplary embodiment of the disclosure.
- FIG. 4 illustrates a flow diagram of a method for performing data deduplication, according to an exemplary embodiment of the disclosure.
- FIG. 5 schematically illustrates a framework of a server for hosting a storage control node, according to an exemplary embodiment of the disclosure.
- network computing environment such as distributed storage environments, which implement data processing systems and associated computers, servers, storage devices and other processing devices. It is to be appreciated, however, that these and other embodiments are not restricted to the particular illustrative system and device configurations shown. Accordingly, the term “network computing environment” as used herein is intended to be broadly construed, so as to encompass, for example, processing systems comprising cloud computing and storage systems, as well as other types of processing systems comprising various combinations of physical and virtual processing resources.
- a network computing environment may therefore comprise, for example, at least one data center or other cloud-based systems that include one or more cloud systems that host multiple tenants which share cloud resources.
- cloud computing environment Numerous different types of enterprise computing and storage systems are also encompassed by the term “network computing environment” as that term is broadly used herein.
- FIG. 1 schematically illustrates a network computing system comprising a storage system which implements a data deduplication system, according to an exemplary embodiment of the disclosure.
- FIG. 1 schematically illustrates a network computing system 100 which comprises one or more host systems 110 - 1 , 110 - 2 , . . . 110 -H (collectively, host systems 110 ), a communications network 120 , and a data storage system 130 .
- the data storage system 130 comprises a plurality of storage control nodes 140 - 1 , 140 - 2 , . . . , 140 -C (collectively, storage control nodes 140 ), and a plurality of storage nodes 150 - 1 , 150 - 2 , . . .
- the storage control node 140 - 1 comprises a storage data server 142 , and a data deduplication control system 144 .
- the other storage control nodes 140 - 2 . . . 140 -C have the same or similar configuration as the storage control node 140 - 1 shown in FIG. 1 .
- Each storage node 150 - 1 , 150 - 2 , . . . , 150 -S comprises a storage device array 152 , wherein each storage device array 152 comprises an array of storage devices (homogenous array or heterogenous array of storage devices).
- the network computing system 100 further comprises one or more management nodes 160 .
- the management nodes 160 implement application programming interfaces (APIs) to enable manual, automated, and/or semi-automated configuration, management, provisioning, and monitoring of the data storage system 130 and the associated storage control nodes 140 and storage nodes 150 .
- the management nodes 160 comprise stand-alone dedicated management server nodes, which may comprise physical and/or virtual server nodes.
- the host systems 110 comprise physical server nodes and/or virtual server nodes which host and execute applications that are configured to process data and execute tasks/workloads and perform computational work, either individually, or in a distributed manner, to thereby provide compute services to one or more users (the term “user” herein is intended to be broadly construed so as to encompass numerous arrangements of human, hardware, software or firmware entities, as well as combinations of such entities).
- the host systems 110 comprise application servers, database servers, etc.
- the host systems 110 can include virtual nodes such as virtual machines and container systems.
- the host systems 110 comprise a cluster of computing nodes of an enterprise computing system, a cloud-based computing system, or other types of computing systems or information processing systems comprising multiple computing nodes associated with respective users.
- the host systems 110 issue data access requests to the data storage system 130 , wherein the data access requests include (i) write requests to store data in one or more of the storage nodes 150 and (ii) read requests to access data that is stored in one or more of the storage nodes 150 .
- the storage control nodes 140 are configured to receive and process the data access requests and to store/read data to/from the target storage nodes 150 .
- the communications network 120 is configured to enable communication between the host systems 110 and the data storage system 130 , and between the management nodes 160 , and the host systems 110 and the data storage system 130 , as well as to enable peer-to-peer communication between the storage control nodes 140 of the data storage system 130 .
- the communications network 120 is generically depicted in FIG.
- the communications network 120 may comprise any known communication network such as, a global computer network (e.g., the Internet), a wide area network (WAN), a local area network (LAN), an intranet, a satellite network, a telephone or cable network, a cellular network, a wireless network such as Wi-Fi or WiMAX, a storage fabric (e.g., Internet Protocol (IP)-based or Fibre Channel storage fabric), or various portions or combinations of these and other types of networks.
- network as used herein is therefore intended to be broadly construed so as to encompass a wide variety of different network arrangements, including combinations of multiple networks possibly of different types, which enable communication using, e.g., Transfer Control Protocol/Internet Protocol (TCP/IP) or other communication protocols such as Fibre Channel (FC), FC over Ethernet (FCoE), Internet Small Computer System Interface (iSCSI), Peripheral Component Interconnect express (PCIe), InfiniBand, Gigabit Ethernet, etc., to implement I/O channels and support storage network connectivity.
- TCP/IP Transfer Control Protocol/Internet Protocol
- FC Fibre Channel
- FCoE FC over Ethernet
- iSCSI Internet Small Computer System Interface
- PCIe Peripheral Component Interconnect express
- I/O Gigabit Ethernet
- the data storage system 130 may comprise any type of data storage system, or a combination of data storage systems, including, but not limited to, a storage area network (SAN) system, dynamic scale-out data storage systems, or other types of distributed data storage systems comprising software-defined storage, clustered or distributed virtual and/or physical infrastructure.
- SAN storage area network
- data storage system as used herein should be broadly construed and not viewed as being limited to storage systems of any particular type or types.
- the storage control nodes 140 and the storage nodes 150 can be physical nodes, virtual nodes, and a combination of physical and virtual nodes.
- each storage control node 140 comprises a server node that is implemented on, e.g., a physical server machine or storage appliance comprising hardware processors, system memory, and other hardware resources that execute software and firmware to implement the various storage control functions and data management functions as discussed herein.
- the storage device arrays 152 of the storage nodes 150 comprise one or more of various types of storage devices such as hard-disk drives (HDDs), solid-state drives (SSDs), Flash memory cards, or other types of non-volatile memory (NVM) devices including, but not limited to, non-volatile random-access memory (NVRAM), phase-change RAM (PC-RAM), magnetic RAM (MRAM), etc.
- one or more of the storage device arrays 152 comprise flash memory devices such as NAND flash memory, NOR flash memory, etc.
- the NAND flash memory can include single-level cell (SLC) devices, multi-level cell (MLC) devices, triple-level cell (TLC) devices, or quad-level cell (QLC) devices. These and various combinations of multiple different types of storage devices may be implemented in each storage node 150 .
- the term “storage device” as used herein should be broadly construed to encompass all types of persistent storage media including hybrid drives.
- the data storage system 130 comprises a disaggregated data storage system in which data processing is separate from data storage.
- the storage control nodes 140 comprise storage controller nodes which are configured to handle the processing of data associated with data access requests (i.e., input/output (I/O) read and write requests), and the storage nodes 150 are configured to handle writing/reading data to/from the respective storage device arrays 152 .
- the storage control nodes 140 and the storage nodes 150 can be physical nodes, virtual nodes, and a combination of physical and virtual nodes.
- the disaggregated data storage system 130 is configured to allow each storage control node 140 - 1 , 140 - 2 , . . .
- the disaggregated storage system architecture essentially separates the storage control compute layers (e.g., storage control nodes 140 ) from the data storage layers (e.g., data storage nodes 150 ) which are managed within the same fabric.
- the disaggregated data storage system 130 comprises a scale-out storage system in which the arrays of storage devices 152 can be configured to include logical pools of storage which can be accessed by the storage control nodes 140 .
- the data storage system 130 can be configured using known techniques to implement a disaggregated data storage system.
- the storage nodes 150 - 1 , 150 - 2 , . . . , 150 -S can be external direct-attached storage (DAS) devices, wherein each storage node 150 - 1 , 150 - 2 , . . . , 150 -S is connected to each storage control node 140 - 1 , 140 - 2 , . . . , 140 -C using any suitable interface protocol such as Small Computer Systems Interface (SCSI), Fibre Channel (FC), etc.
- SCSI Small Computer Systems Interface
- FC Fibre Channel
- the storage control nodes 140 - 1 , 140 - 2 , . . . , 140 -C can be network-connected to each of the storage control nodes 140 - 1 , 140 - 2 , . . . , 140 -C (via a high-performance network fabric) using any suitable network configuration and network interface protocol such as Ethernet, FC, Internet Small Computer Systems Interface (iSCSI), InfiniBand, etc.
- the storage control nodes 140 and storage nodes 150 are interconnected in a full-mesh network, wherein back-end interconnectivity between the storage control nodes 140 and the storage nodes 150 is achieved using, e.g., a redundant high-speed storage fabric, wherein the storage control nodes 140 can utilize remote procedure calls (RPC) for control messages and remote direct memory access (RDMA) for moving data blocks.
- RPC remote procedure calls
- RDMA remote direct memory access
- the storage data servers 142 of the storage control nodes 140 are configured to consolidate the capacity of the storage device arrays 152 (e.g., HDDs, SSDs, PCIe or NVMe flash cards, etc.) of the storage nodes 150 into storage pools from which logical volumes are allocated, wherein the logical volumes (e.g., a block unit of storage management) are identified by, e.g., logical unit numbers (LUNs).
- the storage device arrays 152 e.g., HDDs, SSDs, PCIe or NVMe flash cards, etc.
- LUNs logical unit numbers
- the storage data servers 142 of the storage control nodes 140 are configured to create and manage storage pools (e.g., virtual pools of block storage) by aggregating storage capacity of the storage device arrays 152 of the storage nodes 150 and dividing a given storage pool into one or more volumes, wherein the volumes are exposed to the host systems 110 as block devices.
- a virtual block device can correspond to a volume of a storage pool.
- Each virtual block device comprises any number of actual physical storage devices, wherein each block device is preferably homogenous in terms of the type of storage devices that make up the block device (e.g., a block device can include only HDD devices or SSD devices, etc.).
- each host system 110 comprises a storage data client (SDC) which executes on the host system and which consumes the block storage exposed by the storage data servers 142 .
- SDC storage data client
- an SDC comprises a lightweight block device driver that is deployed on a given host system 110 to expose shared block volumes to the given host system 110 .
- the SDC exposes the storage volumes as block devices to each application (e.g., virtual machine, container, etc.) that execute on the same server (e.g., host system 110 ) on which the SDC is installed.
- the SDC of a given host system 110 exposes block devices representing the virtual storage volumes that are currently mapped to the given host system 110 .
- the SDC for a given host system 110 serves as a block driver for the host system 110 , wherein the SDC intercepts I/O requests, and utilizes the intercepted I/O request to access the block storage that is managed by the storage data servers 142 .
- the SDC provides the operating system or hypervisor (which runs the SDC) access to the logical block devices (e.g., volumes).
- Each SDC has knowledge of which storage data servers 142 hold (e.g., own) its block data, so multipathing can be accomplished natively through the SDCs.
- the management nodes 160 in FIG. 1 implement a management layer which manages and configures the network computing environment 100 .
- the management nodes 160 comprise a tightly-coupled cluster of manager nodes that are configured to supervise the operations of the storage cluster and manage storage cluster configurations.
- management nodes 160 include metadata manager (MDM) modules that operate outside of the data path and provide the relevant information to the SDCs and the storage data servers 142 to allow such components to control data path operations.
- the MDM modules are configured to manage the mapping of SDCs to the storage data servers 142 of the storage control nodes 140 .
- the MDM modules manage various types of metadata that are required to perform various management operations in the storage environment such as, e.g., managing configuration changes, managing the SDCs and storage data servers 142 , maintaining and updating device mappings, maintaining management metadata for controlling data protection operations such as snapshots, replication, RAID configurations, etc., managing system capacity including device allocations and/or release of capacity, performing operation for recovery from errors and failures, and system rebuild tasks including rebalancing, etc.
- the data deduplication control systems 144 of the storage control nodes 140 are configured to perform data deduplication operations to reduce duplicate/redundant data that is stored in the storage nodes 150 of the data storage system 130 .
- the data deduplication control systems 144 implement a data deduplication scheme that is configured to provide efficient deduplication validation and creation in, e.g., a disaggregated storage system in which deduplication is performed cross-node (e.g., two different storage control nodes) and implements a byte-by-byte data compare process for block-level deduplication.
- Exemplary deduplication schemes according to embodiments of the disclosure will now be discussed in further detail in conjunction with FIGS. 2 , 3 and 4 .
- FIG. 2 schematically illustrates a storage control node 200 which implements a data deduplication system, according to an exemplary embodiment of the disclosure.
- FIG. 2 schematically illustrates an exemplary architecture of the storage control nodes 140 of the data storage system 130 of FIG. 1 .
- the storage control node 200 comprises a storage control system which implements a storage data server 210 , a data management services module 220 , and a data deduplication control system 230 .
- the storage data server 210 comprises a storage virtualization management module 212 .
- the data deduplication control system 230 comprises various modules including, but not limited to, a hash compute control module 232 , a data compare control module 234 , a reference generation and management module 236 , and a reference counter control module 238 , the functions of which will be explained in further detail below.
- the storage data server 210 implements functions as discussed above such as processing I/O write and read requests received from host systems to write/read data to/from target storage nodes 150 .
- the storage virtualization management module 212 implements any suitable logical volume management (LVM) system which is configured to create and manage local storage volumes by aggregating the capacity of the storage nodes 150 into one or more virtual storage pools that are thin-provisioned for maximum capacity, and logically dividing each storage pool into one or more storage volumes that are exposed as block devices (e.g., LUNs) to the applications or host systems 110 ( FIG. 1 ) which consume the data.
- LVM logical volume management
- the data management services module 220 implements one or more types of data management services including, but not limited to, inline data compression/decompression, thin provisioning, and data protection functions such as data replication, data backup, data snapshot, and data protection and resiliency schemes based on data striping and/or parity (e.g., erasure coding, RAID, etc.), and other types of data management functions, depending on the system configuration.
- data management services including, but not limited to, inline data compression/decompression, thin provisioning, and data protection functions such as data replication, data backup, data snapshot, and data protection and resiliency schemes based on data striping and/or parity (e.g., erasure coding, RAID, etc.), and other types of data management functions, depending on the system configuration.
- the data deduplication control system 230 is configured to control deduplication operations that are performed by the storage control node 200 .
- the data deduplication control system 230 implements a block-level deduplication (or sub-file deduplication) scheme which is configured to compare data blocks (alternatively, data items, data chunks, or shards) to identify and eliminate duplicate data blocks.
- the block-level deduplication process eliminates duplicate/redundant data blocks that are the same, even when the files which contain the duplicate data blocks are not entirely identical.
- a block-level deduplication scheme is implemented by dividing data (e.g., file) into fixed sized data blocks (e.g., 4 KB, 8 KB, etc.) and creating a unique digital signature (e.g., hash value) for each unique data block. For example, assuming that data is divided into 8 KB chunks, a 16 KB file will be divided into two 8 KB data blocks, and an associated unique hash value will be generated for each of the two 8 KB data blocks.
- data e.g., file
- fixed sized data blocks e.g., 4 KB, 8 KB, etc.
- a unique digital signature e.g., hash value
- a unique hash value for each unique data block in the data storage system is stored in a global hash database to enable the data deduplication control system 230 to compare hash values that are computed for new incoming data blocks with the unique hash values stored in the global hash database to determine whether a given new data block is unique, or a duplicate or possible duplicate of an existing data block. More specifically, in some embodiments, an entire computed hash value for each unique data block (e.g., long, strong hash value) is stored in the global hash database.
- the data deduplication control system 230 can deem the new data block to be a duplicate (or most likely a duplicate) of an existing data block in the data storage system.
- a portion of the computed hash value (e.g., partial hash value) for each unique data block is stored in the global hash database.
- the partial hash values are sufficient to enable the data deduplication control system 230 to compare a computed hash value of a new data block with the partial hash values in the global hash database to determine whether or not the computed hash value matches a given partial hash value.
- the data deduplication control system 230 can deem the new data block to be a potential duplicate of an existing data block in the data storage system, and will utilize the matching partial hash value to determine a location of the existing data block associated with the partial hash value.
- the data deduplication control system 230 of the storage control node e.g., a referrer node
- the data deduplication control system 230 of the storage control node will commence a data deduplication control process to verify whether the new data block is in fact a duplicate of the existing data block associated with the matching hash value or partial hash value.
- the duplicate data block is replaced with a reference (e.g., pointer) that points to the existing data block.
- the data deduplication control process does not assume that two data blocks with matching hash values (e.g., full or partial hash values) are identical, but rather, two data blocks with matching hash values are deemed to be potential duplicates, and a “referrer-owner” negotiation process is performed to verify whether the two data blocks with the same hash value are identical or similar. More specifically, in some embodiments, a deduplication control scheme implements a “referrer-owner” negotiation process to perform data deduplication operations.
- two data blocks with matching hash values e.g., full or partial hash values
- owner or “owner node” as used herein denotes a compute entity (e.g., storage control node) which “owns” a given data item (e.g., a compute entity to which a first copy of the data item was originally written).
- recipient or “referrer node” as used herein denotes a compute entity (e.g., storage control node) which is writing (or which has written) a new data block that may or may not be the same or similar to an existing original data block that is owned by the “owner”.
- a “referrer-owner” negotiation process comprises (i) a read validation process and (ii) a deduplication validation process.
- the read validation process is performed to determine whether an existing data block, which is read from storage to compare with the new data block, actually corresponds to the unique data block associated with the matching hash value.
- the deduplication validation process is performed to compare the existing data block (which is read from storage) with the new data block to determine whether or not the new data block is the same or similar to the exiting data block read from storage.
- the referrer node and the owner node are two separate storage control nodes that reside on different physical machines, and are network connected.
- the “referrer-owner” negotiation process is configured to minimize (i) the amount of data transfers that are performed by, and (ii) the number of messages that are exchanged, the owner and referrer nodes during a data deduplication operation.
- the storage control node 200 of FIG. 2 can be an owner node or a referrer node.
- the various modules of the data deduplication control system 230 implement functions to enable the storage control node 200 to perform deduplication operations as an owner node or a referrer node.
- the hash compute control module 232 is configured to implement various methods to support data deduplication operations including, but not limited to, methods for computing hash values for data blocks, and methods for querying a global hash database to compare computed hash values with stored hash values.
- the hash compute control module 232 implements any suitable hashing algorithm, such as Secure Hash Algorithm (e.g., SHA- 1 , SHA- 2 , SHA- 256 ), which is configured to creates a cryptographic alpha-numeric value (referred to as a hash value) for a given data block.
- the hash compute control module 232 implements methods to compare a computed hash value of a given data block to stored hash values in the global hash database to determine whether the computed hash value of the given data block is unique or exists in the database. If the computed hash value is unique, the data block can be written to storage and the computed hash value is added to the global hash database. If the computed hash value already exists, a referrer-owner negotiation process is performed to verify whether the given data block is a duplicate block. Ultimately, if the given data block is deemed to be a duplicate, the hash value is discarded.
- Secure Hash Algorithm e.g.
- the data compare control module 234 implements methods that are configured to enable a storage control node (operating as, e.g., a referrer node) to identify duplicate/redundant data blocks. More specifically, in embodiments where the data deduplication control system 230 implements block-level deduplication, the data compare control module 234 is configured to perform a byte-by-byte comparison between two data blocks to determine whether or not the two data blocks are duplicate data blocks.
- the reference generation and management module 236 implements methods that are configured to enable a storage control node (operating as, e.g., a referrer node) to generate and manage references to data blocks that are owned by other storage control nodes. For example, for a block-level deduplication scheme, when a match occurs between a given data block and an existing (stored) data block, the given data block is deemed to be a duplicate data bock (or redundant data block), and the duplicate data block is replaced with a reference that points to the stored data block.
- the reference counter control module 238 implements methods that are configured to maintain a reference count for each data block owned by the storage control node 200 (operating as, e.g., an owner node).
- the reference count for a given data block denotes a number of referrer nodes that hold a reference (e.g., pointer) to the given data block owned by the owner node.
- the reference count for a given data block allows the owner node to decide when it is safe to delete the given data block when the reference count is zero (0). Otherwise, if the reference count for a given data block is greater than zero, the owner node will not delete/release the data block, as the reference count greater than zero indicates that at least one other storage control node (referrer node) requires access to the data block.
- FIG. 3 schematically illustrates a method for performing data deduplication, according to an exemplary embodiment of the disclosure. More specifically, FIG. 3 schematically illustrates a “referrer-owner” negotiation process 300 which is performed between a first storage control node 302 (operating as a referrer node), and a second storage control node 304 (operating as an owner node). For illustrative purposes, the exemplary process 300 of FIG.
- the data storage system comprises a disaggregated architecture which allows the first and second storage control nodes 302 and 304 to read data from any storage node in the data storage system, irrespective of whether the storage node is local or remote to the storage control node.
- the data deduplication process involves the first storage control node 302 accessing a global hash database 306 and a storage node 308 , and exchanging messages (e.g., Dedup_Request, Metadata) between the first and second storage control nodes 302 and 304 during the “referrer-owner” negotiation process 300 .
- the process 300 assumes that the first storage control node 302 has received a given data block, computed a hash value for the given data block, searched the global database 306 for a matching hash value, and has determined that the computed hash value for the given data block matches a stored hash value (for an existing data block) in the global database 306 .
- the first storage control node 302 (operating as a referrer node with respect to the given data block) initiates the “referrer-owner” negotiation process 300 by sending the Dedup_Request message to the second storage control node 304 (operating as an owner node with respect to the existing data block).
- the second storage control node 304 increments a reference counter for the given data block, and returns a Metadata message to the first storage control node 302 , wherein the Metadata message comprises metadata which is needed to read the given data block from a storage node.
- the first storage control node 302 uses the received metadata to read the existing data block from the target storage node (e.g., storage node 308 ).
- the first storage control node 302 performs a validation process by comparing the read data block with the given data block (e.g., byte-by-byte compare) to determine whether or not the given data block is a duplicate of the existing data block. If the validation process is successful (i.e., the data compare process determines that the given data block is a duplicate of the existing data block), the first storage control node 302 will create a reference to the existing data block, rather than store the given data block.
- a validation process by comparing the read data block with the given data block (e.g., byte-by-byte compare) to determine whether or not the given data block is a duplicate of the existing data block. If the validation process is successful (i.e., the data compare process determines that the given data block is a duplicate of the existing data block), the first storage control node 302 will create a reference to the existing data block, rather than store the given data block.
- the exemplary process flow of FIG. 3 assumes that the “referrer-owner” negotiation process 300 results in a successful validation process (e.g., data compare process). Since the deduplication process begins with a hash database lookup operation which provides an indication that the given data block is a duplicate of an existing data block, and provides the location of the existing data block, there is a likelihood that the validation process (e.g., data compare process) will be successful.
- the “referrer-owner” negotiation process 300 involves a minimal amount of messaging over a network communication link between the first and second storage control nodes 302 and 304 .
- a successful validation process involves only one request/response message exchange (e.g., Dedup_Request/Metadata messages) between the first and second storage control nodes 302 and 304 .
- “referrer-owner” negotiation process 300 can be implemented by performing no more than a single data transfer over a network as needed for the first storage control node 302 to read the target data block from the storage node 308 (assuming the storage node 308 is a remote node, and not local to the first storage control node 302 ).
- the exemplary deduplication negotiation process of FIG. 3 provides an efficient deduplication solution which minimizes the amount of data transfers and metadata messages that are exchanged for a successful validation process.
- FIG. 4 illustrates a flow diagram of a method for performing data deduplication, according to an exemplary embodiment of the disclosure.
- the deduplication process of FIG. 4 will be discussed in the context of the referrer and owner nodes 302 and 304 as shown in FIG. 3 , wherein it is assumed that the referrer and owner nodes 302 and 304 implement the exemplary data deduplication control system 230 of FIG. 2 .
- a deduplication process can be implemented “in-line” as data is received by a storage control node, or “post-process” after the storage control node has written the data to a storage node.
- post-process deduplication With post-process deduplication, newly received data is first stored in a storage device of a storage node, and a deduplication process is implemented at a later time to analyze and deduplicate the stored data.
- a deduplication process is implemented at a later time to analyze and deduplicate the stored data.
- hash computations are performed in-line as data is received. If the storage control node identifies that a given data block has already been stored, only a reference to the existing data block will be stored, rather than the received data block itself
- FIG. 4 will be described in the context of an in-line deduplication process wherein it is assumed that the first storage control node 302 (referrer node) receives a data file as part of an I/O write request.
- the data deduplication control system 230 of the referrer node will divide the data file into a plurality of data blocks having a predetermined block size (e.g., 8 KB).
- a predetermined block size e.g. 8 KB
- a 128 KB file can be divided into sixteen (16) data blocks, wherein each data block has a block size of 8 KB.
- the referrer node For a given new data block, the referrer node will compute a hash value (via the hash compute control module 232 ), and perform a database lookup operation to determine whether a matching hash value exists in the global hash database 306 (block 400 ).
- the database lookup operation is performed to compare the computed hash value of the given data block to the hash values of existing data blocks which are stored in the global hash database.
- the database lookup operation allows the referrer node to determine if the given data block is unique or a possible duplicate.
- the global hash database may be configured to store partial hash values for existing data blocks, wherein the partial hash value for an existing data block is sufficient to provide an indication of a location of the existing data block, but not sufficient to enable a hash comparison to definitively determine that two data blocks are identical.
- the global hash database may have some stale data in instances where “transactional updates” are not made to the global hash database when existing data blocks of the data storage system are deleted or modified.
- existing data blocks may have been recently deleted by respective owner nodes, without updating the global hash database to remove the hash values associated with the deleted data blocks.
- existing data blocks may have been recently modified by respective owner nodes, without updating the global hash database to update the hash values associated with the modified data blocks.
- a database lookup operation is performed before the global hash database is updated, the database will have stale data due to the existence of hash values associated with deleted or old data blocks.
- the referrer node can proceed to store the given data block in a target storage node (where the referrer node essentially becomes an owner node of the given data block), and update the global hash database to include the computed hash value (or a partial hash value) of the given data block (block 402 ).
- the result of the database lookup operation indicates that a matching hash value exists (affirmative result in block 401 )
- the referrer node sends a deduplication request (e.g., Dedup_Request message, FIG. 3 ) to the owner node to initiate a “referrer-owner” negotiation process (block 403 ).
- the deduplication request will include metadata which identifies the location of the data block associated with the matching hash value.
- the owner node In response to receiving the deduplication request, the owner node will utilize the metadata to confirm that the data block exists (block 404 ). For example, there may be a circumstance in which the owner node deleted the data block prior to receiving the deduplication request. If the owner node determines that the data block does not exist (negative determination in block 405 ), the owner node will notify the referrer node that the data block does not exist (block 406 ), in which case the referrer node can proceed to store the given data block in a target storage node, and then update the global hash database to include the computed hash value (or a partial hash value) of the given data block (block 402 ).
- the owner node determines that the data block does exist (affirmative determination in block 405 )
- the owner node will proceed to update (e.g., increment) the reference counter associated with the existing data block owed by the owner node (block 407 ), and the owner node sends a response message to the referrer node which includes a confirmation/approval to proceed with deduplication validation and creation, along with metadata (e.g., pointer) that enables the referrer node to access the existing data block from a target storage node (block 408 ).
- metadata e.g., pointer
- a read validation process is performed by comparing the received metadata with metadata contained in a header of the read data block to ensure that the content of the read data block corresponds to the content of the data block that was pointed to by the owner node.
- a read validation process comprises the referrer node comparing a metadata identifier (ID) of the received metadata with an embedded metadata ID of the read data block to determine whether the metadata IDs match.
- ID metadata identifier
- the data read by the referrer node can be deemed opportunistic such that if the stored data block contains metadata that can be used to validate that the content of the data block is the content that the referrer node expects to read, the referrer node can perform the read without read locking.
- the referrer node will perform a deduplication validation process by comparing the existing data block (read from storage) with the given data block (e.g., byte-by-byte compare) to determine whether or not the given data block is a duplicate of the existing data block (block 411 ). On the other hand, if the read validation process is not successful where the content of the read data block is deemed to be invalid (negative determination in block 410 ), in some embodiments, the referrer node will send the owner node a request for the data block (block 412 ).
- the owner node will read the target data block from storage, and send the read data block to the referrer node (block 413 ), in which case the referrer node performs a deduplication validation process (block 411 ) using the data block received from owner node.
- the read validation process is not successful where the content of the read data block is deemed to be invalid (negative determination in block 410 )
- the deduplication operation for the given data block can be skipped, whereby the referrer node stores the given data block in a target storage node.
- the deduplication validation operation is successful, i.e., the data compare process determines that the given data block is a duplicate of the existing data block read from memory (affirmative determination in block 414 ), the referrer node will create reference to the existing data block, and discard/delete the given data block (block 415 ). In this instance, the deduplication operation for the given data block is deemed complete, without the need for the referrer node to send a notification message to the owner node to notify the owner node of the successful deduplication operation.
- the owner node Since the owner node has already incremented the reference counter for the given data block prior to the deduplication validation operation, in the absence of receiving a deduplication validation failure notification, the owner node can assume that the deduplication operation was successful, and maintain the reference counter at the incremented count value.
- the deduplication validation operation is not successful, i.e., the data compare process determines that the given data block is not a duplicate of the existing data block read from memory (negative determination in block 414 ), the referrer node will store the given data block in a target storage node (and assume ownership of the given data block), and the referrer node will send a deduplication validation failure notification to the owner node (block 416 ). In response to such failure notification, the owner node will decrement the reference counter for the existing data block read from storage (block 417 ). The process flow of FIG. 4 is performed for each data block of the given data file.
- FIGS. 3 and 4 illustrate an efficient solution for implementing a data deduplication process which minimizes the amount of data transfers and metadata messages that are exchanged over a network communication link between the referrer node and owner node for a successful data deduplication processing path (e.g., process path 403 ⁇ 404 ⁇ 405 ⁇ 407 ⁇ 408 ⁇ 409 ⁇ 410 ⁇ 411 ⁇ 414 ⁇ 415 , FIG. 4 ).
- a successful data deduplication processing path e.g., process path 403 ⁇ 404 ⁇ 405 ⁇ 407 ⁇ 408 ⁇ 409 ⁇ 410 ⁇ 411 ⁇ 414 ⁇ 415 , FIG. 4 ).
- a successful validation process involves one request/response message exchange (e.g., blocks 402 and 408 ) between the referrer and owner nodes, and one data transfer (e.g., block 409 ) for the referrer node to read an existing data block from storage.
- request/response message exchange e.g., blocks 402 and 408
- data transfer e.g., block 409
- the exemplary deduplication techniques as discussed herein provide improvements and advantages over conventional schemes.
- the implementation of a disaggregated storage system architecture allows any storage control node to read data from any storage node.
- the implementation of the disaggregated architecture enables the referrer node to directly read the original data from any storage node using metadata received from the owner node.
- the data transfer process can require the exchange of additional metadata messages.
- the exemplary embodiments as described herein enable cross-node deduplication a disaggregated storage system in which only a single network hop is needed for the referrer node to read data directly from a storage node.
- the exemplary deduplication techniques as discussed herein eliminate the need for an owner node to place a “read lock” on the original data block that is to be read by the referrer node, which avoids the performance costs associated with implementing the “read lock” process.
- the read operation by the referrer node is opportunistic, wherein the referrer node utilizes the metadata received from the owner node to perform a read validation process (e.g., blocks 409 and 410 , FIG. 4 ) to validate that the original data block read from storage is actually the data block the referrer node expects to read (e.g., the data block has not been moved or updated, etc.). Only in the exceptional and unlikely case that the read verification fails, the referrer node can request the owner node to actually read and send the original data block to the referrer node.
- a read validation process e.g., blocks 409 and 410 , FIG. 4
- the exemplary deduplication techniques as discussed herein provide for relaxed reference counting, wherein the owner node increments the reference counter for the original data block (e.g., block 407 , FIG. 4 ) before the referrer node performs deduplication validation to validate a match between the original data block and the new data block (e.g., blocks 411 and 414 , FIG. 4 ). This is possible because the deduplication process begins with an indication from the lookup hash database that there is a likely match in this location.
- the reference counter for a given data block may be higher than it should be.
- the deduplication validation fails and the owner node does not receive the failure notification from the referrer node (e.g., block 416 , FIG. 4 ) due to some system error.
- the owner node will assume the deduplication validation was successful (in the absence of receiving the failure notification) and thus does not decrement the reference counter.
- a similarity-based deduplication process creates a reference to existing original data which is deemed to be similar but not identical to the new data, and also stores the changes between the original and the new data. The changes are stored on the referrer's side and therefore performing the data compare validation process at the referrer's side, as in deduplication schemes discussed above, is imperative.
- FIG. 5 schematically illustrates a framework of a server node 500 for hosting a storage control node, according to an exemplary embodiment of the disclosure.
- the server node 500 comprises processors 502 , storage interface circuitry 504 , network interface circuitry 506 , virtualization resources 508 , system memory 510 , and storage resources 516 .
- the system memory 510 comprises volatile memory 512 and non-volatile memory 514 .
- the processors 502 comprise one or more types of hardware processors that are configured to process program instructions and data to execute a native operating system (OS) and applications that run on the server node 500 .
- OS native operating system
- the processors 502 may comprise one or more CPUs, microprocessors, microcontrollers, application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), and other types of processors, as well as portions or combinations of such processors.
- ASICs application specific integrated circuits
- FPGAs field programmable gate arrays
- processors as well as portions or combinations of such processors.
- the term “processor” as used herein is intended to be broadly construed so as to include any type of processor that performs processing functions based on software, hardware, firmware, etc.
- a “processor” is broadly construed so as to encompass all types of hardware processors including, for example, (i) general purpose processors which comprise “performance cores” (e.g., low latency cores), and (ii) workload-optimized processors, which comprise any possible combination of multiple “throughput cores” and/or multiple hardware-based accelerators.
- workload-optimized processors include, for example, graphics processing units (GPUs), digital signal processors (DSPs), system-on-chip (SoC), tensor processing units (TPUs), image processing units (IPUs), deep learning accelerators (DLAs), artificial intelligence (AI) accelerators, and other types of specialized processors or coprocessors that are configured to execute one or more fixed functions.
- the storage interface circuitry 504 enables the processors 502 to interface and communicate with the system memory 510 , the storage resources 516 , and other local storage and off-infrastructure storage media, using one or more standard communication and/or storage control protocols to read data from or write data to volatile and non-volatile memory/storage devices. Such protocols include, but are not limited to, NVMe, PCIe, PATA, SATA, SAS, Fibre Channel, etc.
- the network interface circuitry 506 enables the server node 500 to interface and communicate with a network and other system components.
- the network interface circuitry 506 comprises network controllers such as network cards and resources (e.g., network interface controllers (NICs) (e.g., SmartNlCs, RDMA-enabled NICs), Host Bus Adapter (HBA) cards, Host Channel Adapter (HCA) cards, I/O adaptors, converged Ethernet adaptors, etc.) to support communication protocols and interfaces including, but not limited to, PCIe, DMA and RDMA data transfer protocols, etc.
- NICs network interface controllers
- HBA Host Bus Adapter
- HCA Host Channel Adapter
- I/O adaptors converged Ethernet adaptors, etc.
- the virtualization resources 508 can be instantiated to execute one or more services or functions which are hosted by the server node 500 .
- the virtualization resources 508 can be configured to implement the various modules and functionalities of a host connectivity management system as discussed herein.
- the virtualization resources 508 comprise virtual machines that are implemented using a hypervisor platform which executes on the server node 500 , wherein one or more virtual machines can be instantiated to execute functions of the server node 500 .
- virtual machines are logical processing elements that may be instantiated on one or more physical processing elements (e.g., servers, computers, or other processing devices).
- a “virtual machine” generally refers to a software implementation of a machine (i.e., a computer) that executes programs in a manner similar to that of a physical machine.
- a machine i.e., a computer
- different virtual machines can run different operating systems and multiple applications on the same physical computer.
- a hypervisor is an example of what is more generally referred to as “virtualization infrastructure.”
- the hypervisor runs on physical infrastructure, e.g., CPUs and/or storage devices, of the server node 500 , and emulates the CPUs, memory, hard disk, network and other hardware resources of the host system, enabling multiple virtual machines to share the resources.
- the hypervisor can emulate multiple virtual hardware platforms that are isolated from each other, allowing virtual machines to run, e.g., Linux and Windows Server operating systems on the same underlying physical host.
- the underlying physical infrastructure may comprise one or more commercially available distributed processing platforms which are suitable for the target application.
- the virtualization resources 508 comprise containers such as Docker containers or other types of Linux containers (LXCs).
- LXCs Linux containers
- each application container comprises a separate application and associated dependencies and other components to provide a complete filesystem, but shares the kernel functions of a host operating system with the other application containers.
- Each application container executes as an isolated process in user space of a host operating system.
- a container system utilizes an underlying operating system that provides the basic services to all containerized applications using virtual-memory support for isolation.
- One or more containers can be instantiated to execute one or more applications or functions of the server node 500 as well execute one or more of the various modules and functionalities of a storage control node and a data deduplication control system as discussed herein.
- containers may be used in combination with other virtualization infrastructure such as virtual machines implemented using a hypervisor, wherein Docker containers or other types of LXCs are configured to run on virtual machines in a multi-tenant environment.
- the constituent components and modules of the storage control nodes and data deduplication control systems (as shown in FIGS. 1 and 2 ) and the deduplication processes discussed herein (e.g., FIGS. 3 and 4 ) are implemented using program code that is loaded into the system memory 510 (e.g., volatile memory 512 ), and executed by the processors 502 to perform respective functions as described herein.
- the system memory 510 , the storage resources 516 , and other memory or storage resources as described herein, which have program code and data tangibly embodied thereon are examples of what is more generally referred to herein as “processor-readable storage media” that store executable program code of one or more software programs.
- Articles of manufacture comprising such processor-readable storage media are considered embodiments of the disclosure.
- An article of manufacture may comprise, for example, a storage device such as a storage disk, a storage array or an integrated circuit containing memory.
- the term “article of manufacture” as used herein should be understood to exclude transitory, propagating signals.
- the system memory 510 comprises various types of memory such as volatile RAM, NVRAM, or other types of memory, in any combination.
- the volatile memory 512 may be a dynamic random-access memory (DRAM) (e.g., DRAM DIMM (Dual In-line Memory Module), or other forms of volatile RAM.
- DRAM dynamic random-access memory
- the non-volatile memory 514 may comprise one or more of NAND Flash storage devices, SSD devices, or other types of next generation non-volatile memory (NGNVM) devices.
- the system memory 510 can be implemented using a hierarchical memory tier structure wherein the volatile system memory 512 is configured as the highest-level memory tier, and the non-volatile system memory 514 (and other additional non-volatile memory devices which comprise storage-class memory) is configured as a lower level memory tier which is utilized as a high-speed load/store non-volatile memory device on a processor memory bus (i.e., data is accessed with loads and stores, instead of with I/O reads and writes).
- a processor memory bus i.e., data is accessed with loads and stores, instead of with I/O reads and writes.
- memory or “system memory” as used herein refers to volatile and/or non-volatile memory which is utilized to store application program instructions that are read and processed by the processors 502 to execute a native operating system and one or more applications or processes hosted by the server node 500 , and to temporarily store data that is utilized and/or generated by the native OS and application programs and processes running on the server node 500 .
- the storage resources 516 can include one or more HDDs, SSD storage devices, etc.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
Claims (20)
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US17/351,733 US12235811B2 (en) | 2021-06-18 | 2021-06-18 | Data deduplication in a disaggregated storage system |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US17/351,733 US12235811B2 (en) | 2021-06-18 | 2021-06-18 | Data deduplication in a disaggregated storage system |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| US20220405254A1 US20220405254A1 (en) | 2022-12-22 |
| US12235811B2 true US12235811B2 (en) | 2025-02-25 |
Family
ID=84489153
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| US17/351,733 Active 2042-08-07 US12235811B2 (en) | 2021-06-18 | 2021-06-18 | Data deduplication in a disaggregated storage system |
Country Status (1)
| Country | Link |
|---|---|
| US (1) | US12235811B2 (en) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20260024123A1 (en) * | 2024-07-19 | 2026-01-22 | Truist Bank | Data aggregation and compression systems facilitating data base querying and file management |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US12099719B2 (en) | 2022-12-29 | 2024-09-24 | Dell Products L.P. | Cluster management in large-scale storage systems |
| US12164384B2 (en) | 2023-01-03 | 2024-12-10 | Dell Products L.P. | Managing data on shutdown of storage system |
| US12299303B2 (en) | 2023-04-24 | 2025-05-13 | Dell Products L.P. | Dynamic reserve capacity in storage systems |
| US12099443B1 (en) | 2023-07-13 | 2024-09-24 | Dell Products L.P. | Multi-modal write cache for data storage system |
| US12339805B2 (en) | 2023-07-31 | 2025-06-24 | Dell Products L.P. | Facilitating access to fragmented snapshot data |
| US12367216B2 (en) | 2023-11-09 | 2025-07-22 | Dell Products L.P. | Distribution of copies of metadata associated with processing groups among storage nodes of a data storage system |
Citations (36)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5381539A (en) | 1992-06-04 | 1995-01-10 | Emc Corporation | System and method for dynamically controlling cache management |
| US5551003A (en) | 1992-12-11 | 1996-08-27 | International Business Machines Corporation | System for managing log structured array (LSA) of DASDS by managing segment space availability and reclaiming regions of segments using garbage collection procedure |
| US5764880A (en) | 1996-09-10 | 1998-06-09 | International Business Machines Corporation | Method and system for rebuilding log-structured arrays |
| US6052799A (en) | 1998-05-15 | 2000-04-18 | International Business Machines Corporation | System and method for recovering a directory for a log structured array |
| US20020032835A1 (en) | 1998-06-05 | 2002-03-14 | International Business Machines Corporation | System and method for organizing data stored in a log structured array |
| US6941420B2 (en) | 2001-02-23 | 2005-09-06 | International Business Machines Corporation | Log-structure array |
| US20080021853A1 (en) | 2006-07-20 | 2008-01-24 | International Business Machines Corporation | Using multiple data structures to manage data in cache |
| US20090204761A1 (en) | 2008-02-12 | 2009-08-13 | Sun Microsystems, Inc. | Pseudo-lru cache line replacement for a high-speed cache |
| US20090276593A1 (en) | 2008-05-05 | 2009-11-05 | Panasas, Inc. | Data storage systems, methods and networks having a snapshot efficient block map |
| US20110029497A1 (en) * | 2009-07-29 | 2011-02-03 | International Business Machines Corporation | Apparatus, System, and Method for Enhanced Block-Level Deduplication |
| US20130054906A1 (en) * | 2011-08-30 | 2013-02-28 | International Business Machines Corporation | Managing dereferenced chunks in a deduplication system |
| US8560503B1 (en) * | 2006-01-26 | 2013-10-15 | Netapp, Inc. | Content addressable storage system |
| US20130305002A1 (en) | 2012-05-13 | 2013-11-14 | Xtremio Ltd. | Snapshot mechanism |
| US20140089275A1 (en) * | 2012-09-24 | 2014-03-27 | International Business Machines Corporation | Efficient file reclamation in deduplicating virtual media |
| US20140244935A1 (en) | 2012-11-29 | 2014-08-28 | Infinidat Ltd. | Storage system capable of managing a plurality of snapshot families and method of snapshot family based read |
| US8843676B2 (en) | 2012-06-27 | 2014-09-23 | International Business Machines Corporation | Optimizing an operating system I/O operation that pertains to a specific program and file |
| US20140304464A1 (en) * | 2013-04-03 | 2014-10-09 | Lsi Corporation | Methods and systems for performing deduplication in a data storage system |
| US9141554B1 (en) * | 2013-01-18 | 2015-09-22 | Cisco Technology, Inc. | Methods and apparatus for data processing using data compression, linked lists and de-duplication techniques |
| US9152335B2 (en) * | 2014-01-08 | 2015-10-06 | Netapp, Inc. | Global in-line extent-based deduplication |
| US20160103764A1 (en) | 2014-10-09 | 2016-04-14 | Netapp, Inc. | Methods and systems for cache management in storage systems |
| US9372751B2 (en) | 2012-09-06 | 2016-06-21 | International Business Machines Corporation | Free space collection in log structured storage systems |
| US9514014B2 (en) | 2011-08-17 | 2016-12-06 | EMC IP Holding Company, LLC | Methods and systems of managing a distributed replica based storage |
| US9892045B1 (en) | 2015-01-30 | 2018-02-13 | EMC IP Holding Company LLC | Methods to select segments of an evicted cache unit for reinsertion into the cache |
| US20180060367A1 (en) * | 2016-08-29 | 2018-03-01 | International Business Machines Corporation | Workload optimized data deduplication using ghost fingerprints |
| US20180113640A1 (en) | 2016-10-20 | 2018-04-26 | Pure Storage, Inc. | Performance tuning in a storage system that includes one or more storage devices |
| US10078598B1 (en) | 2014-06-12 | 2018-09-18 | EMC IP Holding Company LLC | Maintaining a separate LRU linked list for each thread for multi-threaded access |
| US20180267893A1 (en) | 2017-03-14 | 2018-09-20 | International Business Machines Corporation | Techniques for supporting in-place updates with a log-structured array controller |
| US20180292995A1 (en) * | 2017-04-05 | 2018-10-11 | Kaminario Technologies Ltd. | Deduplication In A Distributed Storage System |
| US20180349053A1 (en) * | 2017-06-02 | 2018-12-06 | Western Digital Technologies, Inc. | Data Deduplication in a Storage System |
| US10331561B1 (en) | 2016-06-29 | 2019-06-25 | Emc Corporation | Systems and methods for rebuilding a cache index |
| US20190227845A1 (en) | 2018-01-25 | 2019-07-25 | Vmware Inc. | Methods and apparatus to improve resource allocation for virtualized server systems |
| US10445180B2 (en) | 2007-12-19 | 2019-10-15 | International Business Machines Corporation | Apparatus and method for managing data storage |
| WO2020204880A1 (en) | 2019-03-29 | 2020-10-08 | EMC IP Holding Company LLC | Snapshot-enabled storage system implementing algorithm for efficient reclamation of snapshot storage space |
| WO2020204882A1 (en) | 2019-03-29 | 2020-10-08 | EMC IP Holding Company LLC | Snapshot-enabled storage system implementing algorithm for efficient reading of data from stored snapshots |
| US20220237205A1 (en) * | 2021-01-26 | 2022-07-28 | EMC IP Holding Company LLC | Method and system for replication |
| US11537573B2 (en) * | 2015-09-25 | 2022-12-27 | Netapp, Inc. | Elastic, ephemeral in-line deduplication service |
-
2021
- 2021-06-18 US US17/351,733 patent/US12235811B2/en active Active
Patent Citations (38)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5381539A (en) | 1992-06-04 | 1995-01-10 | Emc Corporation | System and method for dynamically controlling cache management |
| US5551003A (en) | 1992-12-11 | 1996-08-27 | International Business Machines Corporation | System for managing log structured array (LSA) of DASDS by managing segment space availability and reclaiming regions of segments using garbage collection procedure |
| US5764880A (en) | 1996-09-10 | 1998-06-09 | International Business Machines Corporation | Method and system for rebuilding log-structured arrays |
| US6052799A (en) | 1998-05-15 | 2000-04-18 | International Business Machines Corporation | System and method for recovering a directory for a log structured array |
| US20020032835A1 (en) | 1998-06-05 | 2002-03-14 | International Business Machines Corporation | System and method for organizing data stored in a log structured array |
| US6941420B2 (en) | 2001-02-23 | 2005-09-06 | International Business Machines Corporation | Log-structure array |
| US8560503B1 (en) * | 2006-01-26 | 2013-10-15 | Netapp, Inc. | Content addressable storage system |
| US20080021853A1 (en) | 2006-07-20 | 2008-01-24 | International Business Machines Corporation | Using multiple data structures to manage data in cache |
| US10445180B2 (en) | 2007-12-19 | 2019-10-15 | International Business Machines Corporation | Apparatus and method for managing data storage |
| US20090204761A1 (en) | 2008-02-12 | 2009-08-13 | Sun Microsystems, Inc. | Pseudo-lru cache line replacement for a high-speed cache |
| US20090276593A1 (en) | 2008-05-05 | 2009-11-05 | Panasas, Inc. | Data storage systems, methods and networks having a snapshot efficient block map |
| US20110029497A1 (en) * | 2009-07-29 | 2011-02-03 | International Business Machines Corporation | Apparatus, System, and Method for Enhanced Block-Level Deduplication |
| US9514014B2 (en) | 2011-08-17 | 2016-12-06 | EMC IP Holding Company, LLC | Methods and systems of managing a distributed replica based storage |
| US20130054906A1 (en) * | 2011-08-30 | 2013-02-28 | International Business Machines Corporation | Managing dereferenced chunks in a deduplication system |
| US20130305002A1 (en) | 2012-05-13 | 2013-11-14 | Xtremio Ltd. | Snapshot mechanism |
| US8843676B2 (en) | 2012-06-27 | 2014-09-23 | International Business Machines Corporation | Optimizing an operating system I/O operation that pertains to a specific program and file |
| US9372751B2 (en) | 2012-09-06 | 2016-06-21 | International Business Machines Corporation | Free space collection in log structured storage systems |
| US20140089275A1 (en) * | 2012-09-24 | 2014-03-27 | International Business Machines Corporation | Efficient file reclamation in deduplicating virtual media |
| US20140244935A1 (en) | 2012-11-29 | 2014-08-28 | Infinidat Ltd. | Storage system capable of managing a plurality of snapshot families and method of snapshot family based read |
| US9141554B1 (en) * | 2013-01-18 | 2015-09-22 | Cisco Technology, Inc. | Methods and apparatus for data processing using data compression, linked lists and de-duplication techniques |
| US20140304464A1 (en) * | 2013-04-03 | 2014-10-09 | Lsi Corporation | Methods and systems for performing deduplication in a data storage system |
| US9152335B2 (en) * | 2014-01-08 | 2015-10-06 | Netapp, Inc. | Global in-line extent-based deduplication |
| US10078598B1 (en) | 2014-06-12 | 2018-09-18 | EMC IP Holding Company LLC | Maintaining a separate LRU linked list for each thread for multi-threaded access |
| US20160103764A1 (en) | 2014-10-09 | 2016-04-14 | Netapp, Inc. | Methods and systems for cache management in storage systems |
| US9892045B1 (en) | 2015-01-30 | 2018-02-13 | EMC IP Holding Company LLC | Methods to select segments of an evicted cache unit for reinsertion into the cache |
| US11537573B2 (en) * | 2015-09-25 | 2022-12-27 | Netapp, Inc. | Elastic, ephemeral in-line deduplication service |
| US10331561B1 (en) | 2016-06-29 | 2019-06-25 | Emc Corporation | Systems and methods for rebuilding a cache index |
| US20180060367A1 (en) * | 2016-08-29 | 2018-03-01 | International Business Machines Corporation | Workload optimized data deduplication using ghost fingerprints |
| US20180113640A1 (en) | 2016-10-20 | 2018-04-26 | Pure Storage, Inc. | Performance tuning in a storage system that includes one or more storage devices |
| US20180300075A1 (en) | 2016-10-20 | 2018-10-18 | Pure Storage, Inc. | Tuning A Storage System In Dependence Upon Workload Access Patterns |
| US20180267893A1 (en) | 2017-03-14 | 2018-09-20 | International Business Machines Corporation | Techniques for supporting in-place updates with a log-structured array controller |
| US20180292995A1 (en) * | 2017-04-05 | 2018-10-11 | Kaminario Technologies Ltd. | Deduplication In A Distributed Storage System |
| US20180349053A1 (en) * | 2017-06-02 | 2018-12-06 | Western Digital Technologies, Inc. | Data Deduplication in a Storage System |
| US10809928B2 (en) * | 2017-06-02 | 2020-10-20 | Western Digital Technologies, Inc. | Efficient data deduplication leveraging sequential chunks or auxiliary databases |
| US20190227845A1 (en) | 2018-01-25 | 2019-07-25 | Vmware Inc. | Methods and apparatus to improve resource allocation for virtualized server systems |
| WO2020204880A1 (en) | 2019-03-29 | 2020-10-08 | EMC IP Holding Company LLC | Snapshot-enabled storage system implementing algorithm for efficient reclamation of snapshot storage space |
| WO2020204882A1 (en) | 2019-03-29 | 2020-10-08 | EMC IP Holding Company LLC | Snapshot-enabled storage system implementing algorithm for efficient reading of data from stored snapshots |
| US20220237205A1 (en) * | 2021-01-26 | 2022-07-28 | EMC IP Holding Company LLC | Method and system for replication |
Non-Patent Citations (42)
| Title |
|---|
| Dell EMC, "Dell EMC VxFlex Family Overview," Technical White Paper, May 2019, 44 pages. |
| Dell EMC, "Dell EMC VxRack FLEX," Dell EMC Product Overview, 2018, 5 pages. |
| Dell EMC, "EMC ScaleIO Basic Architecture Documentation," Technical White Paper, Mar. 2017, 22 pages. |
| Dell EMC, "Getting To Know Dell EMC PowerFlex," Version 3.5.x, Rev. 02, Jan. 2021, 66 pages. |
| Dell Technologies, "Dell EMC PowerFlex: Introduction to Replication," Technical White Paper, Jun. 2020, 34 pages. |
| Dell Technologies, "Dell EMC PowerFlex: Networking Best Practices and Design Considerations," Best Practices, Jun. 2020, 64 pages. |
| Dell Technologies, "Dell EMC PowerFlex: Protected Maintenance Mode," Technical White Paper, Jul. 2020, 20 pages. |
| Dell Technologies, "Dell EMC PowerFlex: Secure Snapshots," Technical White Paper, Jul. 2020, 17 pages. |
| EMC2, "EMC ScaleIO Design Considerations and Best Practices," Technical White Paper, Jun. 2016, 30 pages. |
| G. Soundararajan et al., "Dynamic Resource Allocation for Database Servers Running on Virtual Storage," FAST 2009: Proceedings of the 7th conference on File and storage technologies, Feb. 2009, pp. 71-84. |
| I. Koltsidas et al., "SoftwAre Log-Structured Array (SALSA)—A Unified Stack for SSDs and SMR Disks," IBM Research Report, Dec. 2, 2015, 13 pages. |
| J. Nakano et al., "ReVivel/O: Efficient Handling of I/O in Highly-Available Rollback-Recovery Servers," HPCA, 10.1109/2006.1598129, pp. 200-211. |
| S. M. Rumble et al., "Log-Structured Memory for DRAM-Based Storage," Proceedings of the 12th USENIX Conference on File and Storage Technologies, Santa Clara, CA, Feb. 17-20, 2014, 17 pages. |
| U.S. Appl. No. 16/807,709 filed in the name of Avi Puder et al. on Mar. 3, 2020, and entitled "Management of Shared Resources in a Software-Defined Storage Environment." |
| U.S. Appl. No. 16/822,818 filed in the name of Itay Keller et al. on Mar. 18, 2020, and entitled "Storage System Implementing Snapshot Longevity Ranking for Efficient Management of Snapshots." |
| U.S. Appl. No. 16/822,848 filed in the name of Itay Keller et al. on Mar. 18, 2020, and entitled "Assignment of Longevity Ranking Values of Storage Volume Snapshots Based on Snapshot Policies." |
| U.S. Appl. No. 16/823,813 filed in the name of Itay Keller et al. on Mar. 19, 2020, and entitled "Managing Incompressible Data in a Compression-Enabled Log-Structured Array Storage System." |
| U.S. Appl. No. 16/830,469 filed in the name of Roi Tagar et al. on Mar. 26, 2020, and entitled "Storage Block Balancing Using Volume Part Migration." |
| U.S. Appl. No. 16/830,473 filed in the name of Yugal Peleg Lieblich et al. on Mar. 26, 2020, and entitled "Replicated State Cluster with Standby Node State Assessment During Leadership Transition." |
| U.S. Appl. No. 16/830,946 filed in the name of Gil Ben Zeev et al. on Mar. 26, 2020, and entitled "Storage Volume Migration Scheduling Based on Storage Volume Priorities and Specified Constraints." |
| U.S. Appl. No. 16/832,763 filed in the name of Michal Yarimi et al. on Mar. 27, 2020, and entitled "Managing Storage Device Errors During Processing of Inflight Input/Output Requests." |
| U.S. Appl. No. 16/834,363 filed in the name of Itay Keller et al. on Mar. 30, 2020, and entitled "Managing Least Recently Used Cache Using Reduced Memory Footprint Sequence Container." |
| U.S. Appl. No. 16/836,824 filed in the name of Itay Keller et al. on Mar. 31, 2020, and entitled "Management of Volume Snapshots in a Data Storage System." |
| U.S. Appl. No. 16/888,742 filed in the name of Rivka Matosevich et al. on May 31, 2020, and entitled "Balancing Resiliency and Performance by Selective Use of Degraded Writes and Spare Capacity in Storage Systems." |
| U.S. Appl. No. 16/918,654 filed in the name of Rivka Matosevich et al. on Jul. 1, 2020, and entitled "Sharing Memory Resources Between Asynchronous Replication Workloads." |
| U.S. Appl. No. 16/983,423 filed in the name of Dan Aharoni et al. on Aug. 3, 2020, and entitled "Deferred Reclamation of Invalidated Entries that are Associated with a Transaction Log in a Log-Structured Array." |
| U.S. Appl. No. 17/024,912 filed in the name of Anurag Sharma et al. on Sep. 18, 2020, and entitled "Automatic Discovery and Configuration of Server Nodes." |
| U.S. Appl. No. 17/065,754 filed in the name of Dan Aharoni et al. on Oct. 8, 2020, and entitled "Direct Response to IO Request in Storage System with Remote Replication." |
| U.S. Appl. No. 17/070,073 filed in the name of Dan Aharoni et al. on Oct. 14, 2020, and entitled "Direct Response to IO Request in Storage System Having an Intermediary Target Apparatus." |
| U.S. Appl. No. 17/070,288 filed in the name of Anurag Sharma et al. on Oct. 14, 2020, and entitled "Pipeline-Based System for Configuration Checking and Reporting Associated with an Information Processing System." |
| U.S. Appl. No. 17/071,407 filed in the name of John Moran et al. on Oct. 15, 2020, and entitled "Dynamic Remediation Actions in Response to Configuration Checks in an Information Processing System." |
| U.S. Appl. No. 17/077,105 filed in the name of Yosef Shatsky et al. on Oct. 22, 2020, and entitled "Volume Tiering in Storage Systems." |
| U.S. Appl. No. 17/106,988 filed in the name of Rivka Matosevich et al. on Nov. 30, 2020, and entitled "Managing Host Connectivity to a Data Storage System." |
| U.S. Appl. No. 17/123,525 filed in the name of Itay Keller et al. on Dec. 16, 2020, and entitled "Deferred Reclamation of Invalidated Entries Associated with Replication in a Log-Structured Array." |
| U.S. Appl. No. 17/145,646 filed in the name of Yosef Shatsky et al. on Jan. 11, 2021, and entitled "Redistribution of Processing Groups between Server Nodes Based on Hardware Resource Utilization." |
| U.S. Appl. No. 17/232,203 filed in the name of Roman Spiegelman on Apr. 16, 2021, and entitled "Object Synchronization of Server Nodes in a Network Computing Environment." |
| U.S. Appl. No. 17/236,256 filed in the name of Doron Tal et al. on Apr. 21, 2021, and entitled "Recovery from Partial Device Error in Data Storage System." |
| U.S. Appl. No. 17/306,601 filed in the name of Rivka Matosevich et al. on May 3, 2021, and entitled "Managing Replication Journal in a Distributed Replication System." |
| U.S. Appl. No. 17/308,166 filed in the name of Adi Bar Shalom et al. on May 5, 2021, and entitled "Journal Barrier Consistency Determination." |
| Wikipedia, "Paxos (Computer Science)," https://en.wikipedia.org/wiki/Paxos_(computer_science), Dec. 6, 2019, 21 pages. |
| Wikipedia, "Raft (Computer Science)," https://en.wikipedia.org/wiki/Raft_(computer_science), Feb. 10, 2020, 4 pages. |
| Wikipedia, "State Machine Replication," https://en.wikipedia.org/wiki/State_machine_replication, Dec. 14, 2019, 9 pages. |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20260024123A1 (en) * | 2024-07-19 | 2026-01-22 | Truist Bank | Data aggregation and compression systems facilitating data base querying and file management |
Also Published As
| Publication number | Publication date |
|---|---|
| US20220405254A1 (en) | 2022-12-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US12235811B2 (en) | Data deduplication in a disaggregated storage system | |
| US11210219B1 (en) | Synchronously replicating a dataset across a plurality of storage systems | |
| US11636089B2 (en) | Deferred reclamation of invalidated entries that are associated with a transaction log in a log-structured array | |
| US11307935B2 (en) | Management of volume snapshots in a data storage system | |
| US11144399B1 (en) | Managing storage device errors during processing of inflight input/output requests | |
| US11789917B2 (en) | Data deduplication in a storage system | |
| US11301162B2 (en) | Balancing resiliency and performance by selective use of degraded writes and spare capacity in storage systems | |
| US11487460B2 (en) | Deferred reclamation of invalidated entries associated with replication in a log-structured array | |
| US11842051B2 (en) | Intelligent defragmentation in a storage system | |
| US11550479B1 (en) | Metadata management in storage systems | |
| US11487432B2 (en) | Direct response to IO request in storage system with remote replication | |
| US11733874B2 (en) | Managing replication journal in a distributed replication system | |
| CN116601596A (en) | Use data similarity to select segments for garbage collection | |
| US11418589B1 (en) | Object synchronization of server nodes in a network computing environment | |
| CN115867884A (en) | Providing data management as a service | |
| US11704053B1 (en) | Optimization for direct writes to raid stripes | |
| US20220342758A1 (en) | Recovery from partial device error in data storage system | |
| US11966294B2 (en) | Journal barrier consistency determination | |
| US11630773B1 (en) | Utilizing a persistent write cache as a redo log | |
| US11650920B1 (en) | Write cache management | |
| US20190141128A1 (en) | Scalable storage system | |
| US11868248B2 (en) | Optimization for garbage collection in a storage system | |
| CN111316251A (en) | Scalable Storage System | |
| US12339805B2 (en) | Facilitating access to fragmented snapshot data | |
| US12038835B2 (en) | Garbage collection processing in storage systems |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| AS | Assignment |
Owner name: EMC IP HOLDING COMPANY LLC, MASSACHUSETTS Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:SHATSKY, YOSEF;TAL, DORON;SIGNING DATES FROM 20210616 TO 20210617;REEL/FRAME:056586/0731 |
|
| FEPP | Fee payment procedure |
Free format text: ENTITY STATUS SET TO UNDISCOUNTED (ORIGINAL EVENT CODE: BIG.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
| AS | Assignment |
Owner name: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, NORTH CAROLINA Free format text: SECURITY AGREEMENT;ASSIGNORS:DELL PRODUCTS, L.P.;EMC IP HOLDING COMPANY LLC;REEL/FRAME:057682/0830 Effective date: 20211001 |
|
| AS | Assignment |
Owner name: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT, TEXAS Free format text: SECURITY INTEREST;ASSIGNORS:DELL PRODUCTS L.P.;EMC IP HOLDING COMPANY LLC;REEL/FRAME:057931/0392 Effective date: 20210908 Owner name: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT, TEXAS Free format text: SECURITY INTEREST;ASSIGNORS:DELL PRODUCTS L.P.;EMC IP HOLDING COMPANY LLC;REEL/FRAME:058014/0560 Effective date: 20210908 Owner name: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT, TEXAS Free format text: SECURITY INTEREST;ASSIGNORS:DELL PRODUCTS L.P.;EMC IP HOLDING COMPANY LLC;REEL/FRAME:057758/0286 Effective date: 20210908 |
|
| AS | Assignment |
Owner name: EMC IP HOLDING COMPANY LLC, TEXAS Free format text: RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (057758/0286);ASSIGNOR:THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT;REEL/FRAME:061654/0064 Effective date: 20220329 Owner name: DELL PRODUCTS L.P., TEXAS Free format text: RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (057758/0286);ASSIGNOR:THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT;REEL/FRAME:061654/0064 Effective date: 20220329 Owner name: EMC IP HOLDING COMPANY LLC, TEXAS Free format text: RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (058014/0560);ASSIGNOR:THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT;REEL/FRAME:062022/0473 Effective date: 20220329 Owner name: DELL PRODUCTS L.P., TEXAS Free format text: RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (058014/0560);ASSIGNOR:THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT;REEL/FRAME:062022/0473 Effective date: 20220329 Owner name: EMC IP HOLDING COMPANY LLC, TEXAS Free format text: RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (057931/0392);ASSIGNOR:THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT;REEL/FRAME:062022/0382 Effective date: 20220329 Owner name: DELL PRODUCTS L.P., TEXAS Free format text: RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (057931/0392);ASSIGNOR:THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT;REEL/FRAME:062022/0382 Effective date: 20220329 |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: NON FINAL ACTION MAILED |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: FINAL REJECTION MAILED |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE AFTER FINAL ACTION FORWARDED TO EXAMINER |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: ADVISORY ACTION MAILED |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: NON FINAL ACTION MAILED |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: AWAITING TC RESP, ISSUE FEE PAYMENT VERIFIED |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT VERIFIED |
|
| STCF | Information on status: patent grant |
Free format text: PATENTED CASE |