# US 10,372,602 B2 · Ordering updates for nonvolatile memory accesses

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

- Number: US 10,372,602 B2
- Document ID: US10372602B2
- Status: Granted
- Kind: B2
- Application number: 15/545,901
- Filed: 2015-01-30
- Published: 2018-01-18
- Granted: 2019-08-06
- Earliest claimed: 2015-01-30
- Assignees: Hewlett Packard Enterprise Development LP
- Applicants: Hewlett Packard Enterprise Development LP
- Inventors: Sanketh Nalli; Haris Volos; Kimberly Keeton
- Web page: https://patentgrep.com/patent/US10372602B2

## CPC

- G06F 12/0238: {Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory}
- G06F 12/0804: with main memory updating (G06F12/0806 takes precedence)
- G06F 12/0868: Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
- G06F 2212/1028: Power efficiency
- G06F 2212/1032: Reliability improvement, data loss prevention, degraded operation etc
- G06F 2212/7203: Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
- Y02D 10/00: Energy efficient computing, e.g. low power processors, power management or thermal management
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- Y02D: CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE

## Abstract

Examples relate to ordering updates for nonvolatile memory accesses. In some examples, a first update that is propagated from a write-through processor cache of a processor is received by a write ordering buffer, where the first update is associated with a first epoch. The first update is stored in a first buffer entry of the write ordering buffer. At this stage, a second update that is propagated from the write-through processor cache is received, where the second update is associated with a second epoch. A second buffer entry of the write ordering buffer is allocated to store the second update. The first buffer entry and the second buffer entry can then be evicted to non-volatile memory in epoch order.

## Claims

### Claim 1

A system for ordering updates for nonvolatile memory accesses, the system comprising:
a processor to process a plurality of updates;
a write-through processor cache that is operatively connected to the processor;
non-volatile memory;
a write ordering buffer that is operatively connected to the write-through processor cache and the non-volatile memory, wherein the write ordering buffer comprises a plurality of buffer entries that are each allocated using a cache line size of the write-through processor cache, the write ordering buffer to:
receive a first update of the plurality of updates that is propagated from the write-through processor cache, wherein the first update is associated with a first epoch;
store the first update in a first buffer entry of the plurality of buffer entries;
receive a second update of the plurality of updates that is propagated from the write-through processor cache, wherein the second update is associated with a second epoch;
allocate a second buffer entry of the plurality of buffer entries, wherein the second update is stored in the second buffer entry;
in response to determining that the second update is less than the cache line size, update a dirty bit associated with the second buffer entry to specify that the second buffer entry is dirty;
evict the first buffer entry and the second buffer entry to the non-volatile memory in epoch order;
receive a third update of the plurality of updates that is propagated from the write-through processor cache, wherein the third update is associated with a second epoch; and
coalesce the third update into the second buffer entry.

### Claim 2 (depends on 1)

The system of claim 1, wherein the write-through processor cache implements a no-allocate write policy.

### Claim 3 (depends on 1)

The system of claim 1, wherein the dirty bit specifies that a subset of the second buffer entry is dirty, and wherein the subset is a byte or word of the second buffer entry.

### Claim 4 (depends on 1)

The system of claim 1, wherein the first update is stored in the first buffer entry in response to determining that the first buffer entry associated with the first epoch is available.

### Claim 5 (depends on 1)

The system of claim 1, wherein the epoch order is a first in first out order.

### Claim 6

A method for ordering updates for nonvolatile memory accesses, the method comprising:
receiving, by a write ordering buffer, a first update of a plurality of updates that is propagated from a write-through processor cache of a processor, wherein the first update is associated with a first epoch;
storing the first update in a first buffer entry of a plurality of buffer entries of the write ordering buffer;
receiving a second update of the plurality of updates that is propagated from the write-through processor cache, wherein the second update is associated with a second epoch;
allocating a second buffer entry of the plurality of buffer entries, wherein the second update is stored in the second buffer entry;
in response to determining that the second update is less than the cache line size, updating a dirty bit associated with the second buffer entry to specify that the second buffer entry is dirty;
evicting the first buffer entry and the second buffer entry to non-volatile memory in a first in first out order;
receiving a third update of the plurality of updates that is propagated from the write-through processor cache, wherein the third update is associated with a second epoch; and
coalescing the third update into the second buffer entry.

### Claim 7 (depends on 6)

The method of claim 6, wherein the write-through processor cache implements a no-allocate write policy.

### Claim 8 (depends on 6)

The method of claim 6, wherein the dirty bit specifies that a subset of the second buffer entry is dirty, and wherein the subset is a byte or word of the second buffer entry.

### Claim 9 (depends on 6)

The method of claim 6, wherein the first update is stored in the first buffer entry in response to determining that the first buffer entry associated with the first epoch is available.

### Claim 10

A non-transitory machine-readable storage medium encoded with instructions executable by a processor for ordering updates for nonvolatile memory accesses, the machine-readable storage medium comprising instructions to:
receive a first update of a plurality of updates that is propagated from a write-through processor cache of a processor, wherein the first update is associated with a first epoch;
in response to determining that a write ordering buffer includes a first buffer that is associated with the first epoch, store the first update in the first buffer entry of a plurality of buffer entries;
receive a second update of the plurality of updates that is propagated from the write-through processor cache, wherein the second update is associated with a second epoch;
allocate a second buffer entry of the plurality of buffer entries, wherein the second update is stored in the second buffer entry;
to in response to determining that the second update is less than the cache line size, update a dirty bit associated with the second buffer entry to specify that the second buffer entry is dirty;
evict the first buffer entry and the second buffer entry to non-volatile memory in epoch order; and
receive a third update of the plurality of updates that is propagated from the write-through processor cache, wherein the third update is associated with a second epoch; and
coalesce the third update into the second buffer entry.

### Claim 11 (depends on 10)

The non-transitory machine-readable storage medium of claim 10, wherein the write-through processor cache implements a no-allocate write policy.

### Claim 12 (depends on 11)

The non-transitory machine-readable storage medium of claim 11, wherein the dirty bit specifies that a subset of the second buffer entry is dirty, and wherein the subset is a byte or word of the second buffer entry.

### Claim 13 (depends on 11)

The non-transitory machine-readable storage medium of claim 11, wherein the first update is stored in the first buffer entry in response to determining that the first buffer entry associated with the first epoch is available.
