# US 2021/0240616 A1 · External memory as an extension to local primary memory

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

- Number: US 2021/0240616 A1
- Document ID: US20210240616A1
- Status: Published application
- Kind: A1
- Application number: 17/161,830
- Filed: 2021-01-29
- Published: 2021-08-05
- Earliest claimed: 2020-01-31
- Assignees: Kove IP, LLC
- Applicants: Kove IP, LLC
- Inventors: Timothy A. Stabrawa; Zachary A. Cornelius; John Overton; Andrew S. Poling; Jesse I. Taylor
- Web page: https://patentgrep.com/patent/US20210240616A1

## CPC

- G06F 12/0646: {Configuration or reconfiguration}
- G06F 21/6218: {to a system of files or objects, e.g. local or distributed file system or database}
- G06F 3/0608: {Saving storage space on storage systems}
- G06F 3/0631: {by allocating resources to storage systems}
- G06F 3/0685: {Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays}
- G06F 9/5016: {the resource being the memory}
- G06F 12/0804: with main memory updating (G06F12/0806 takes precedence)
- G06F 12/0893: Caches characterised by their organisation or structure
- G06F 2212/1008: Correctness of operation, e.g. memory ordering
- G06F 2212/152: Virtualized environment, e.g. logically partitioned system
- G06F 2212/282: Partitioned cache
- G06F 2221/2107: File encryption
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Methods and systems are provided for allocating memory. A portion of memory may be allocated by: selecting a type of memory to allocate in a client device from a group of memory types in response to a memory allocation request and/or in response to a request to access a portion of an address space, wherein the selection of the type of memory to allocate is based on an available memory determination; selecting a portion of the local primary memory, a portion of the external primary memory, or a portion of the memory-mapped file for the portion of memory to allocate at the client device depending on the selected type of memory; and mapping at least the selected portion to the address space.

## Claims

### Claim 1

A method comprising:
allocating a portion of memory by:
selecting a type of memory to allocate in a client device from a group of memory types in response to a memory allocation request and/or in response to a request to access a portion of an address space addressable by a processor of the client device, wherein the selection of the type of memory to allocate is based on an available memory determination, wherein the group of memory types includes a local primary memory, wherein the group of memory types further includes an external primary memory and/or a memory-mapped file, wherein the external primary memory is memory that is located in a memory appliance external to the client device but is treated as primary memory at the client device;
selecting a portion of the local primary memory, a portion of the external primary memory, and/or a portion of the memory-mapped file for the portion of memory to allocate at the client device depending on the selected type of memory; and
mapping at least the selected portion to the address space.

### Claim 2 (depends on 1)

The method of claim 1, wherein the type of memory to allocate is selected from the group of memory types including the local primary memory and the external primary memory, and wherein data in the external primary memory is accessible via client-side memory access in which a communication interface of the memory appliance is configured to access the data in memory of the memory appliance.

### Claim 3 (depends on 1)

The method of claim 1, wherein the type of memory to allocate is selected from the group of memory types including the local primary memory and the memory-mapped file.

### Claim 4 (depends on 1)

The method of claim 1, wherein the type of memory to allocate is selected in response to a memory allocation request, which includes an invocation of an operating system programmatic procedure configured to allocate memory for a caller of the operating system programmatic procedure.

### Claim 5 (depends on 1)

The method of claim 1, wherein the available memory determination includes a determination that an amount of allocated local primary memory is less than a limit and, therefore, the local primary memory is selected as the type of memory to allocate.

### Claim 6 (depends on 1)

The method of claim 1, wherein the available memory determination includes a determination that an amount of local primary memory used to cache the external primary memory and/or to cache the memory-mapped file is within a limit and, wherein the external primary memory and/or memory-mapped file is selected as the type of memory to allocate.

### Claim 7 (depends on 1)

The method of claim 1, wherein the available memory determination includes a determination that a ratio of an amount of allocated local primary memory to an amount of local primary memory used to cache the external primary memory and/or to cache the memory-mapped file is within a limit and, therefore, the local primary memory is selected as the type of memory to allocate.

### Claim 8 (depends on 1)

The method of claim 1, wherein the type of memory to allocate is selected from the group of memory types including the local primary memory and the memory-mapped file, wherein the available memory determination includes a determination of available local primary memory and/or available file space in the memory-mapped file.

### Claim 9 (depends on 1)

The method of claim 1, wherein the allocated portion of memory is converted from the local primary memory to the memory-mapped file by copying data in the selected portion of the local primary memory to a second portion of local primary memory that is associated with the memory-mapped file.

### Claim 10 (depends on 1)

The method of claim 1, wherein the allocated portion of memory is converted from the local primary memory to the memory-mapped file without copying data of the selected portion of the local primary memory by associating the selected portion of the local primary memory with the memory-mapped file.

### Claim 11 (depends on 10)

The method of claim 10, further comprising reading data into the selected portion of the local primary memory from a swap backing store before associating the selected portion of the local primary memory with the memory-mapped file.

### Claim 12 (depends on 1)

The method of claim 1, wherein the allocated portion of memory is converted from the memory-mapped file to the local primary memory by copying data from the portion of the memory-mapped file to a second portion of the local primary memory not associated with the memory-mapped file.

### Claim 13 (depends on 1)

The method of claim 1, wherein the allocated portion of memory is converted from the memory-mapped file to the local primary memory without copying data of the allocated portion of memory by dis-associating the allocated portion of memory from the memory-mapped file and updating one or more page table entries to reference the allocated portion of memory.

### Claim 14 (depends on 1)

The method of claim 1, wherein the available memory determination is controlled by setting a configurable parameter indicating a limit on a usable amount of the local primary memory and/or the external primary memory.

### Claim 15

A client device comprising:
a processor; and
a local primary memory in communication with the processor, the local primary memory comprising:
an application logic unit; and
a client logic unit configured to:
receive a memory allocation request from the application logic unit to allocate a portion of memory and/or receive a request to access a portion of an address space addressable by the processor;
select a type of memory to allocate at the client device from a group of memory types in response to the memory allocation request and/or in response to the request to access the portion of the address space, wherein the selection of the type of memory to allocate is based on an available memory determination, wherein the group of memory types includes the local primary memory, wherein the group of memory types further includes an external primary memory and/or a memory-mapped file, wherein the external primary memory is memory that is located in a memory appliance external to the client device but is treated as primary memory at the client device;
select a portion of the local primary memory, a portion of the external primary memory, and/or a portion of the memory-mapped file for the portion of memory to allocate at the client device depending on the selected type of memory; and
map at least the selected portion to the address space.

### Claim 16 (depends on 15)

The client device of claim 15, wherein the selection of the type of memory to allocate is based on the available memory determination and on a configurable parameter indicating a manner in which the allocated portion of memory is to be used.

### Claim 17 (depends on 15)

The client device of claim 15, wherein the client logic unit is configured to map the at least the selected portion to the address space before the memory allocation request and/or the request to access the portion of the address space is received.

### Claim 18 (depends on 15)

The client device of claim 15, wherein the client logic unit includes a swap implementation of an operating system.

### Claim 19 (depends on 15)

The client device of claim 15, wherein the application logic unit includes a virtualization instance, a virtual machine, a container, a jail, or a zone.

### Claim 20

A computer readable storage medium comprising computer executable instructions executable by a processor of a client device, the computer executable instructions comprising:
instructions executable to allocate a portion of memory by:
selecting a type of memory to allocate in the client device from a group of memory types in response to a memory allocation request, wherein the selection of the type of memory to allocate is based on an available memory determination, wherein the group of memory types includes a local primary memory and an external primary memory, wherein the external primary memory is memory that is located in a memory appliance external to the client device but is treated as primary memory at the client device, wherein data in the external primary memory is accessible via client-side memory access in which a communication interface of the memory appliance is configured to access the data in memory of the memory appliance;
selecting a portion of the local primary memory and/or a portion of the external primary memory for the portion of memory to allocate at the client device depending on the selected type of memory; and
mapping at least the selected portion to an address space addressable by the processor.
