# US 12,182,453 B2 · Flash registry with on-disk hashing

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

- Number: US 12,182,453 B2
- Document ID: US12182453B2
- Status: Granted
- Kind: B2
- Application number: 18/540,244
- Filed: 2023-12-14
- Published: 2024-06-20
- Granted: 2024-12-31
- Earliest claimed: 2017-11-13
- Assignees: Weka.IO Ltd.
- Applicants: Weka.IO Ltd.
- Inventors: Maor Ben Dayan; Omri Palmon; Liran Zvibel; Kanael Arditti
- Web page: https://patentgrep.com/patent/US12182453B2

## CPC

- G06F 3/0659: {Command handling arrangements, e.g. command buffers, queues, command scheduling}
- G06F 3/0604: {Improving or facilitating administration, e.g. storage management}
- G06F 3/064: {Management of blocks}
- G06F 3/0664: {at device level, e.g. emulation of a storage device or system}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- G06F 13/1668: {Details of memory controller}
- G06F 13/4027: {using bus bridges (G06F13/4022 takes precedence)}
- G06F 13/4282: {on a serial bus, e.g. I2C bus, SPI bus (on daisy chain buses G06F13/4247)}
- G06F 2213/0026: PCI express
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A plurality of computing devices are communicatively coupled to each other via a network, and each of the plurality of computing devices is operably coupled to one or more of a plurality of storage devices. Each computing device is operable to access one or more memory blocks within the storage devices and maintain a registry over the same one or more memory blocks. The registry may be adaptively resized according to the access of the one or more memory blocks.

## Claims

### Claim 1

A system comprising:
a registry of a plurality of memory blocks, wherein:
the registry is adaptively resized,
the registry comprises one or more registry blocks,
each registry block comprises a split level and one or more keys,
each of the one or more keys comprises an identical number of bits,
an index, in each of the one or more keys, is indicated by a specified number of bits, and
the specified number is the split level.

### Claim 2 (depends on 1)

The system of claim 1, wherein the plurality of memory blocks comprises non-volatile memory.

### Claim 3 (depends on 1)

The system of claim 1, wherein the plurality of memory blocks comprises flash memory.

### Claim 4 (depends on 1)

The system of claim 1, wherein the registry is resized as the one or more memory blocks are written.

### Claim 5 (depends on 1)

The system of claim 1, wherein the registry is resized as the one or more memory blocks are read.

### Claim 6 (depends on 1)

The system of claim 1, wherein each of the one or more keys in each of the one or more registry blocks is associated with a key-value entry of one or more key-value entries.

### Claim 7 (depends on 6)

The system of claim 6, wherein the one or more key-value entries are added to a registry block of the one or more registry blocks until a number of the one or more key-value entries exceeds a predetermined capacity, at which time the registry block is split and a new registry block is added to the one or more registry blocks.

### Claim 8 (depends on 6)

The system of claim 6, wherein the one or more key-value entries are removed from a registry block of the one or more registry blocks until a number of the one or more key-value entries is at or below a predetermined level, at which time the registry block is merged with another registry block of the one or more registry blocks.

### Claim 9 (depends on 1)

The system of claim 1, wherein the storage network comprises a failure resilient address space distributed across a plurality of storage devices.

### Claim 10 (depends on 8)

The system of claim 8, wherein each registry block is identified by the index and the split level.

### Claim 11

A method comprising:
maintaining a registry of one or more memory blocks; and
adaptively resizing the registry, wherein:
the registry comprises one or more registry blocks,
each registry block comprises a split level and one or more keys,
each of the one or more keys comprises an identical number of bits,
an index, in each of the one or more keys, is indicated by a specified number of bits, and
the specified number is the split level.

### Claim 12 (depends on 11)

The method of claim 11, wherein the plurality of memory blocks comprises non-volatile memory.

### Claim 13 (depends on 11)

The method of claim 11, wherein the plurality of memory blocks comprises flash memory.

### Claim 14 (depends on 11)

The method of claim 11, wherein the registry is resized as the one or more memory blocks are written.

### Claim 15 (depends on 11)

The method of claim 11, wherein the registry is resized as the one or more memory blocks are read.

### Claim 16 (depends on 11)

The method of claim 11, wherein each of the one or more keys in each of the one or more registry blocks is associated with a key-value entry of one or more key-value entries.

### Claim 17 (depends on 16)

The method of claim 16, wherein the method comprises:
adding the one or more key-value entries to a registry block of the one or more registry blocks; and
if a number of the one or more key-value entries exceeds a predetermined capacity, splitting the registry block and adding a new registry block to the one or more registry blocks.

### Claim 18 (depends on 16)

The method of claim 16, wherein the method comprises:
removing the one or more key-value entries from a registry block of the one or more registry blocks; and
if a number of the one or more key-value entries is at or below a predetermined level, merging the registry block with another registry block of the one or more registry blocks.

### Claim 19 (depends on 11)

The method of claim 11, wherein the storage network comprises a failure resilient address space distributed across a plurality of storage devices.

### Claim 20 (depends on 18)

The method of claim 18, wherein each registry block is identified by the index and the split level.
