US Pat. No. 9,087,013

METHODS AND APPARATUS FOR POINT-IN-TIME VOLUMES

DataCore Software Corpora...

1. A method for creating point-in-time volumes, the method comprising:
creating a first point-in-time volume from a first source volume, the first point-in-time volume being configured for independent
use as a second source volume without requiring reference to the first source volume; and

creating a second point-in-time volume based upon the first point-in-time volume.

US Pat. No. 9,519,431

COLLABORATION BETWEEN DISCRETE SYSTEMS AND A SHARED SYSTEM TO CONSOLIDATE SHARED STORAGE-RELATED SERVICES

DataCore Software Corpora...

1. A method for providing shared, consolidated storage-related services and high-availability, the method comprising:
pairing each of a plurality of discrete block storage virtualization modules to a shared block storage virtualization module,
each of the discrete block storage virtualization modules and the shared block storage virtualization module respectively
residing on separate application servers, each of the discrete block storage virtualization modules and the shared block storage
virtualization modules performing block storage virtualization functions that include presentation of a given virtual disk,
the plurality of discrete block storage virtualization modules and the shared block storage virtualization module being distinct
from dedicated physical storage resources;

maintaining logical volume coherency locally by and among each of the plurality of discrete block storage virtualization modules,
and globally by the shared block storage virtualization module; and

allocating a set of the block storage virtualization functions to be performed between one of the plurality of discrete block
storage virtualization modules and the shared block storage virtualization module according to the pairing.

US Pat. No. 9,946,606

STREAM ARCHITECTURE FOR DATA REPRESENTATION

DataCore Software Corpora...

1. A method for data representation comprising:receiving write transactions to a given volume, the write transactions respectively including one or more blocks, such that the write transactions have differing numbers of blocks;
retaining a stream including a sequence of the write transactions according to the order in which the write transactions are received for the given volume between a first point in time and a second point in time after the first point in time, wherein each write transaction in the sequence of the write transactions is distinctly and sequentially identified in the stream, such that individual entries in the stream represent respective individual instances of the write transactions and the corresponding differing numbers of blocks occurring in the sequence of the write transactions;
receiving a read request directed to the given volume for data corresponding to an intermediate point in time that is between the first point in time and the second point in time;
in response to the read request, retrieving data in the given volume for the intermediate point in time by referencing a non-contiguous subset of the sequence of write transactions in the stream in reverse order starting at the intermediate point in time, wherein said referencing the non-contiguous subset of the sequence of the write transactions comprises excluding at least one entry in the sequence of write transactions between the intermediate point in time and the first point in time,
wherein an additional copy of underlying data for the write transactions is not required to concurrently retain the stream and coherency of the given volume even where the underlying data involves a write to a given block in the given volume to which data has previously been written; and
generating a first stream image corresponding to the stream for the intermediate point in time, wherein the first stream image provides a full representation of a new volume at the intermediate point in time by referencing a non-contiguous subset of the sequence of the write transactions in the stream,
wherein an additional stream is layered on the first stream image, the additional stream providing the sequence of the write transactions for the new volume following the intermediate point in time, the additional stream being separate from the stream, such that write transactions directed to the given volume are appended to the stream and write transactions directed to the new volume are appended to the additional stream.

US Pat. No. 10,003,636

MULTI-NODE DATA STORE MANAGEMENT

DataCore Software Corpora...

1. A method for processing storage transactions in a node-based system having a plurality of nodes, the method comprising:presenting, by at least one processing unit, a virtual volume from any of the nodes in the node-based system;
receiving, by the at least one processing unit, write transactions directed to the virtual volume at any of the nodes, the write transactions having differing numbers of blocks;
storing, at any of the nodes, a stream including a sequence of the write transactions according to the order in which the write transactions are received for the virtual volume between a first point in time and a second point in time after the first point in time, wherein individual entries in the stream represent respective individual instances of the write transactions and the differing numbers of blocks occurring in the sequence of the write transactions;
generating a stream image corresponding to the stream for an intermediate point in time that is between the first point in time and the second point in time; and
in response to a read request that occurs after the intermediate point in time, retrieving data presented by the virtual volume as of the intermediate point in time by accessing the stream image and the stream, the stream image providing a representation of the data in the virtual volume, the stream image providing a representation of the data in the virtual volume, the stream image referencing a non-contiguous subset of the sequence of the write transactions in the stream in reverse time order starting at the intermediate point in time, wherein said referencing the non-contiguous subset of the sequence of the write transactions comprises excluding at least one entry in the sequence of the write transactions between the intermediate point in time and the first point in time, wherein the at least one entry that is excluded exists at the time of the read request.

US Pat. No. 9,411,518

METHOD, COMPUTER PROGRAM PRODUCT AND APPARATUS FOR ACCELERATING RESPONSES TO REQUESTS FOR TRANSACTIONS INVOLVING DATA OPERATIONS

DataCore Software Corpora...

1. A method for accelerating responses to requests for transactions involving data operations, the method comprising:
presenting from a server device a logical disk having corresponding storage resources, the logical disk being presented to
an application container;

maintaining a disk block cache corresponding to the logical disk and the storage resources within the server device, the cache
including blocks of data for the logical disk that are determined as being accessed by the application container, the cache
being resident in a memory having a responsiveness that is faster than a responsiveness of the storage resources, the cache
being transparent to the application container to which the logical disk is presented;

receiving from the application container a transaction request that involves a data operation on the logical disk, the transaction
request being received through a first connection;

satisfying the data operation on the logical disk using the cache; and
reconciling the cache with data for the logical disk that is stored on the storage resources, through a second connection
with the storage resources.

US Pat. No. 9,344,235

NETWORK MANAGED VOLUMES

DataCore Software Corpora...

1. A method for managing virtual volumes, the method comprising:
defining a storage pool to which one or more physical storage devices is assigned by selection from a plurality of available
physical storage devices, the assigned physical storage devices having a total logical size;

defining virtual volumes that are associated to the storage pool;
presenting the virtual volumes to one or more client devices, wherein the virtual volumes have respective logical sizes, and
the sum of the logical sizes for the virtual volumes intentionally exceeds the total logical size of the assigned physical
storage devices, and wherein the virtual volumes are presented to the client devices without requiring the assigned physical
storage devices to have been previously presented to any of the client devices;

defining the storage pool to include a plurality of available chunks each having a chunk size, the chunk size differing from
and being larger than a block size used for basic write requests received from the client devices for the virtual volumes,
the defining of the storage pool to include the plurality of available chunks occurring separately from the presenting of
the virtual volumes to the client devices; and

allocating physical chunks of the chunk size from the plurality of available chunks that are included in the storage pool
to dynamically allocate physical resources to the virtual volumes on demand;

wherein managing the virtual volumes is performed independently of the client devices.

US Pat. No. 10,013,283

METHODS AND APPARATUS FOR DATA REQUEST SCHEDULING IN PERFORMING PARALLEL IO OPERATIONS

DataCore Software Corpora...

1. A method for handling Input/Output (I/O) requests directed to an operating system having an IO scheduling component, the method comprising:intercepting an IO request directed from an application to the operating system;
determining whether the IO request is subject to immediate processing using available parallel processing resources; and
bypassing the IO scheduling component of the operating system when it is determined that the IO request is subject to immediate processing using the available parallel processing resources,
wherein said determining whether the IO request is subject to immediate processing comprises
querying a disk block cache status, and
determining that the IO request is subject to immediate processing where the disk block cache status query indicates availability to immediately process the IO request.

US Pat. No. 10,599,477

METHODS AND APPARATUS FOR COMMAND LIST PROCESSING IN PERFORMING PARALLEL IO OPERATIONS

DataCore Software Corpora...

1. A method for handling IO requests directed to an operating system having an IO scheduling component, the method comprising:allocating a command to a thread in association with one of the IO requests, the command being allocated from one of a plurality of command lists accessible in parallel;
linking the command to one of a plurality of active command lists that are accessible in parallel;
returning a success indication to the thread, unlinking the command from the one of the plurality of active command lists, and freeing the command to one of the plurality of command lists following a cache hit corresponding to the one of the IO requests,
wherein each of the active command lists respectively corresponds to one of a plurality of CPUs on a multi-core processing platform on which the IO requests are processed.

US Pat. No. 10,498,802

MULTI-NODE DATA STORE MANAGEMENT

DataCore Software Corpora...

1. A method for processing storage transactions in a node-based system having a plurality of nodes, the method comprising:receiving, by at least one processing unit, write transactions directed to a volume at any of the nodes, the write transactions having differing numbers of blocks;
storing, at any of the nodes, a stream including a sequence of the write transactions according to an order in which the write transactions are received for the volume between a first point in time and a second point in time after the first point in time, wherein individual entries in the stream represent respective individual instances of the write transactions and the differing numbers of blocks occurring in the sequence of the write transactions;
generating a stream image corresponding to the stream for an intermediate point in time that is between the first point in time and the second point in time; and
in response to a read request that occurs after the intermediate point in time, retrieving data presented by the volume as of the intermediate point in time by accessing the stream image and the stream, the stream image providing a representation of the data in the volume, the stream image referencing a non-contiguous subset of the sequence of the write transactions in the stream in reverse time order starting at the intermediate point in time, wherein said referencing the noncontiguous subset of the sequence of the write transactions comprises excluding at least one entry in the sequence of the write transactions between the intermediate point in time and the first point in time, wherein the at least one entry that is excluded exists at the time of the read request.

US Pat. No. 10,318,354

METHODS AND APPARATUS FOR COMMAND LIST PROCESSING IN PERFORMING PARALLEL IO OPERATIONS

DataCore Software Corpora...

1. A method for handling IO requests directed to an operating system having an IO scheduling component, the method comprising:allocating a command to a thread in association with an IO request, the command being allocated from one of a plurality of command lists accessible in parallel;
linking the command to one of a plurality of active command lists that are accessible in parallel; and
returning a success indication to the thread, unlinking the command from the one of the plurality of active command lists, and freeing the command to one of the plurality of command lists following a cache hit corresponding to the IO request,
wherein the plurality of command lists include a plurality of per-CPU command lists, with each per-CPU command list corresponding to one of a plurality of CPUs on a multi-core processing platform on which the IO requests are processed.

US Pat. No. 10,409,640

METHODS AND APPARATUS FOR DATA REQUEST SCHEDULING IN PERFORMING PARALLEL IO OPERATIONS

DataCore Software Corpora...

1. A method for handling Input/Output (IO) requests directed to an operating system having an IO scheduling component, the method comprising:intercepting an IO request directed from an application to the operating system;
determining whether the IO request is subject to immediate processing using available parallel processing resources; and
bypassing the IO scheduling component of the operating system when it is determined that the IO request is subject to immediate processing using the available parallel processing resources.