# US 2014/0195480 A1 · Persistent memory management

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2014/0195480 A1
- Document ID: US20140195480A1
- Status: Published application
- Kind: A1
- Application number: 14/207,093
- Filed: 2014-03-12
- Published: 2014-07-10
- Earliest claimed: 2010-12-13
- Assignees: Fusion-Io, Inc.
- Applicants: Fusion-io, Inc.
- Inventors: Nisha Talagala; Swaminathan Sundararaman; David Flynn
- Web page: https://patentgrep.com/patent/US20140195480A1

## CPC

- G06F 16/2365: {Ensuring data consistency and integrity}
- G06F 11/1441: {Resetting or repowering}
- G06F 12/0804: with main memory updating (G06F12/0806 takes precedence)
- G06F 11/1666: {where the redundant component is memory or memory area}
- G06F 11/20: using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F 12/0238: {Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory}
- G06F 2212/202: Non-volatile memory
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Apparatuses, systems, methods, and computer program products are disclosed for persistent memory management. Persistent memory management may include providing a persistent data structure stored at least partially in volatile memory configured to ensure persistence of the data structure in a non-volatile memory medium. Persistent memory management may include replicating a persistent data structure in volatile memory buffers of at least two non-volatile storage devices. Persistent memory management may include preserving a snapshot copy of data in association with completion of a barrier operation for the data. Persistent memory management may include determining which interface of a plurality of supported interfaces is to be used to flush data from a processor complex.

## Claims

### Claim 1

A method comprising:
writing data for a first end of a data structure to a volatile memory module, the volatile memory module configured to ensure that the data is preserved in a non-volatile memory medium in response to a trigger;
storing at least a portion of the data of the data structure in the non-volatile memory medium; and
loading data of a second end of the data structure from the non-volatile memory medium into volatile memory for access by a client.

### Claim 2 (depends on 1)

The method of claim 1, further comprising enforcing one or more rules for the data structure.

### Claim 3 (depends on 2)

The method of claim 2, wherein the data structure comprises a queue data structure, the one or more rules define the queue data structure as sequential and append-only, and enforcing the one or more rules comprises requiring that data be written only to the first end of the queue data structure and that data be read only from the second end of the queue data structure.

### Claim 4 (depends on 1)

The method of claim 1, wherein the portion of the data stored in the non-volatile memory medium is between the first end and the second end of the data structure such that the data structure comprises a queue data structure.

### Claim 5 (depends on 1)

The method of claim 1, wherein the first end and the second end of the data structure comprise the same end such that the data structure comprises a stack data structure.

### Claim 6 (depends on 1)

The method of claim 1, further comprising tracking which data of the data structure resides in the volatile memory module and which data of the data structure resides in the non-volatile memory medium.

### Claim 7 (depends on 1)

The method of claim 1, further comprising limiting a rate at which the data for the first end of the data structure is written to the volatile memory module such that the rate is at, or below, a rate at which data of the data structure is copied to the non-volatile memory medium.

### Claim 8 (depends on 1)

The method of claim 1, wherein the volatile memory comprises the volatile memory module.

### Claim 9 (depends on 1)

The method of claim 1, wherein the volatile memory comprises host memory of a computing device in communication with the volatile memory module.

### Claim 10

An apparatus comprising:
a persistent data structure module configured to store at least a portion of a data structure in a first volatile memory buffer within an isolation zone of a first non-volatile storage device; and
a replication module configured to copy data of the data structure to a second volatile memory buffer within an isolation zone of a second non-volatile storage device such that both the first and second non-volatile storage devices ensure persistence of the data structure.

### Claim 11 (depends on 10)

The apparatus of claim 10, wherein the replication module is configured to copy the data of the data structure over a network interface from the first non-volatile storage device to the second non-volatile storage device.

### Claim 12 (depends on 11)

The apparatus of claim 11, wherein the replication module is configured to copy the data of the data structure over the network interface independent of a processor and host volatile memory of a host computing device.

### Claim 13 (depends on 11)

The apparatus of claim 11, wherein the network interface comprises one or more of a serial bus, a parallel bus, a peripheral component interconnect (PCI) interface, a PCI express (PCIe) interface, a universal serial bus (USB), an Ethernet interface, a small computer system interface (SCSI), and an advance technology attachment (ATA) interface.

### Claim 14 (depends on 10)

The apparatus of claim 10, wherein the data structure is accessible to both an application for the first non-volatile storage device and an application for the second non-volatile storage device.

### Claim 15 (depends on 14)

The apparatus of claim 14, wherein the data structure is accessible as a file associated with a filename.

### Claim 16 (depends on 15)

The apparatus of claim 15, wherein a portion of the file is stored in the first and second volatile memory buffers and a portion of the file is stored on the first and second non-volatile storage devices.

### Claim 17 (depends on 10)

The apparatus of claim 10, wherein the replication module is configured to copy the data of the data structure at a byte granularity, the data of the data structure comprising one or more updates to the data structure.

### Claim 18

An apparatus comprising:
a hardware controller for a volatile memory associated with a non-volatile storage medium, the hardware controller comprising,
a barrier completion module configured to determine completion of a barrier operation for a first page of the volatile memory; and
a checkpoint module configured to preserve a snapshot copy of data of the first page in response to the barrier completion module determining completion of the barrier operation.

### Claim 19 (depends on 18)

The apparatus of claim 18, wherein the checkpoint module is configured to preserve the snapshot copy by dynamically switching data operations for the data of the first page to a second page of the volatile memory.

### Claim 20 (depends on 19)

The apparatus of claim 19, wherein the second page comprises a blank page.

### Claim 21 (depends on 19)

The apparatus of claim 19, wherein the second page comprises a copy of the first page.

### Claim 22 (depends on 18)

The apparatus of claim 18, wherein the checkpoint module is configured to write the data of the first page to the non-volatile storage medium.

### Claim 23 (depends on 22)

The apparatus of claim 22, wherein the checkpoint module is configured to provide the data of the first page to a client from the non-volatile storage medium after recovery from a restart event.

### Claim 24 (depends on 23)

The apparatus of claim 23, wherein the checkpoint module is configured to provide the data by loading the data from the non-volatile storage medium into the volatile memory.

### Claim 25 (depends on 18)

The apparatus of claim 18, wherein the hardware controller further comprises a request module configured to receive a barrier request for the volatile memory.

### Claim 26

An apparatus comprising:
an interface module configured to determine which of a memory interface and a peripheral interface is to be used to flush data from a processor complex;
a memory flush module configured to issue a memory serializing instruction that flushes the data from the processor complex using the memory interface in response to the interface module determining that the memory interface is to be used to flush the data; and
a peripheral flush module configured to issue a peripheral serializing instruction that flushes the data from the processor complex using the peripheral interface in response to the interface module determining that the peripheral interface is to be used to flush the data.

### Claim 27 (depends on 26)

The apparatus of claim 26, wherein one or more of the interface module, the memory flush module, and the peripheral flush module comprise at least a portion of a device driver executing on a host computing device, the device driver supporting both the memory interface and the peripheral interface.

### Claim 28 (depends on 26)

The apparatus of claim 26, wherein the memory interface comprises a host memory bus interface and the peripheral interface comprises a peripheral component interconnect express (PCIe) interface.
