IP Library › Granted Patent US 11,354,288
Granted Patent B2
US 11,354,288 · App. 15/927,025 · Granted Jun 7, 2022

Optimizing operations on b e-trees stored on solid state media

Inventors: Abhishek Gupta (Sunnyvale, CA); Rob T. Johnson (Palo Alto, CA); Srinath Premachandran (Fremont, CA); Richard P. Spillane (Mountain View, CA); Sandeep Rangaswamy (Mountain View, CA); Jorge Guerra Delgado (Fremont, CA); Kapil Chowksey (Cupertino, CA); Wenguang Wang (Santa Clara, CA)
Assignee: VMware, Inc.
G06F16/2246G06F3/0679G06F16/17G06F16/2272G06F16/24534
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,354,288
App. No.
15/927,025
Granted
Jun 7, 2022
Kind
B2
Abstract

Exemplary methods, apparatuses, and systems include a file system process determining to a flush a node in a first tree. The first node includes a buffer structured as a second tree. The file system process generates an input/output instruction to load the buffer from a first memory to a second memory. The second tree is stored in two more non-contiguous locations in the first memory and the input/output operation includes a read operation corresponding to each of the two or more non-contiguous locations. The file system process causes the input/output instruction to be executed concurrently on the first memory.

Claims (57)

1. A computer-implemented method, comprising:

providing a file system as a first tree data structure comprising a plurality of leaf nodes and a plurality of non-leaf nodes, wherein the non-leaf nodes store pivot keys and child node pointers and the leaf nodes store key-value pairs, and wherein each non-leaf node further comprises a buffer, each buffer storing pending insert messages to a subtree rooted at that non-leaf node, and wherein the buffer of a non-leaf node in the first tree is structured as a second tree comprising a plurality of node buffers that are non-contiguously stored in two or more distinct memory regions of a first memory;

determining, by the file system in response to a first buffer reaching a threshold size, to flush the pending insert messages of the first buffer of the first non-leaf node in the first tree data structure to one or more child node buffers of the first non-leaf node; and

flushing the first buffer, wherein flushing the first buffer comprises:

generating a first input/output instruction to load insert messages of the first buffer of the first non-leaf node being flushed from the first memory to a second volatile memory, in its entirety, wherein the plurality of node buffers of the second tree are stored in the two or more non-contiguous locations in the first memory and wherein the input/output instruction includes a read operation to read each node buffer of the second tree structure to the second memory without regard to whether or not the first memory stored the individual nodes contiguously;

executing the first input/output instruction to load the first buffer to be executed on the first memory, wherein the read operations are executed concurrently on the memory regions of the first memory to load the entire first buffer to the second memory in a single input/output instruction;

identifying a plurality of child nodes of the first non-leaf node;

generating a second input/output instruction to load each of the one more child nodes of the first non-leaf node, including a child node buffer of each of the child nodes, from the first memory to the second memory; and

executing the second input/output instruction including concurrent execution of read operations for the child node buffers.

2. The computer-implemented method of claim 1 , wherein the first tree is a B ε -tree and the second tree is a B-tree.

3. The computer-implemented method of claim 1 , further comprising:

receiving a query request at the node for a key;

determining a second node in the second tree corresponding to the key;

generating a second input/output instruction to load the second node from the second tree in the first memory to the second memory.

4. The computer-implemented method of claim 3 , wherein the second input/output operation loads less than all nodes in the second tree.

5. The computer-implemented method of claim 1 , wherein the first memory is a solid-state storage device (“SSD”).

6. The computer-implemented method of claim 5 , wherein the SSD comprises a plurality of NAND flash packages and wherein nodes of the second tree are stored in two or more of the plurality of NAND flash packages.

7. The computer-implemented method of claim 1 ,

wherein each child node is also a non-leaf node that includes a buffer using a tree structure and wherein one or more of the child node buffers are stored in two or more non-contiguous locations in the first memory.

8. A non-transitory computer-readable medium storing instructions, which when executed by a processing device, cause the processing device to perform a method comprising:

providing a file system as a first tree data structure comprising a plurality of leaf nodes and a plurality of non-leaf nodes, wherein the non-leaf nodes store pivot keys and child node pointers and the leaf nodes store key-value pairs, and wherein each non-leaf node further comprises a buffer, each buffer storing pending insert messages to a subtree rooted at that non-leaf node, and wherein the buffer of a non-leaf node in the first tree is structured as a second tree comprising a plurality of node buffers that are non-contiguously stored in two or more distinct memory regions of a first memory;

determining, by the file system in response to a first buffer reaching a threshold size, to flush the pending insert messages of the first buffer of the first non-leaf node in the first tree data structure to one or more child node buffers of the first non-leaf node; and

flushing the first buffer, wherein flushing the first buffer comprises:

generating a first input/output instruction to load insert messages of the first buffer of the first non-leaf node being flushed from the first memory to a second volatile memory, in its entirety, wherein the plurality of node buffers of the second tree are stored in the two or more non-contiguous locations in the first memory and wherein the input/output instruction includes a read operation to read each node buffer of the second tree structure to the second memory without regard to whether or not the first memory stored the individual nodes contiguously;

executing the first input/output instruction to load the first buffer to be executed on the first memory, wherein the read operations are executed concurrently on the memory regions of the first memory to load the entire first buffer to the second memory in a single input/output instruction;

identifying a plurality of child nodes of the first non-leaf node;

generating a second input/output instruction to load each of the one more child nodes of the first non-leaf node, including a child node buffer of each of the child nodes, from the first memory to the second memory; and

executing the second input/output instruction including concurrent execution of read operations for the child node buffers.

9. The non-transitory computer-readable medium of claim 8 , wherein the first tree is a B ε -tree and the second tree is a B-tree.

10. The non-transitory computer-readable medium of claim 8 , the method further comprising:

receiving a query request at the node for a key;

determining a second node in the second tree corresponding to the key;

generating a second input/output instruction to load the second node from the second tree in the first memory to the second memory.

11. The non-transitory computer-readable medium of claim 10 , wherein the second input/output operation loads less than all nodes in the second tree.

12. The non-transitory computer-readable medium of claim 8 , wherein the first memory is a solid-state storage device (“SSD”).

13. The non-transitory computer-readable medium of claim 12 , wherein the SSD comprises a plurality of NAND flash packages and wherein nodes of the second tree are stored in two or more of the plurality of NAND flash packages.

14. The non-transitory computer-readable medium of claim 8 , wherein each child node is also a non-leaf node that includes a buffer using a tree structure and wherein one or more of the child node buffers are stored in two or more non-contiguous locations in the first memory.

15. An apparatus comprising:

a processing device; and

a memory coupled to the processing device, the memory storing instructions which, when executed by the processing device, cause the apparatus to:

provide a file system as a first tree data structure comprising a plurality of leaf nodes and a plurality of non-leaf nodes, wherein the non-leaf nodes store pivot keys and child node pointers and the leaf nodes store key-value pairs, and wherein each non-leaf node further comprises a buffer, each buffer storing pending insert messages to a subtree rooted at that non-leaf node, and wherein the buffer of a non-leaf node in the first tree is structured as a second tree comprising a plurality of node buffers that are non-contiguously stored in two or more distinct memory regions of a first memory;

determine, by the file system in response to a first buffer reaching a threshold size, to flush the pending insert messages of the first buffer of the first non-leaf node in the first tree data structure to one or more child node buffers of the first non-leaf node; and

flush the first buffer, wherein flushing the first buffer comprises:

generating a first input/output instruction to load insert messages of the first buffer of the first non-leaf node being flushed from the first memory to a second volatile memory, in its entirety, wherein the plurality of node buffers of the second tree are stored in the two or more non-contiguous locations in the first memory and wherein the input/output instruction includes a read operation to read each node buffer of the second tree structure to the second memory without regard to whether or not the first memory stored the individual nodes contiguously;

executing the first input/output instruction to load the first buffer to be executed on the first memory, wherein the read operations are executed concurrently on the memory regions of the first memory to load the entire first buffer to the second memory in a single input/output instruction;

identifying a plurality of child nodes of the first non-leaf node;

generating a second input/output instruction to load each of the one more child nodes of the first non-leaf node, including a child node buffer of each of the child nodes, from the first memory to the second memory; and

executing the second input/output instruction including concurrent execution of read operations for the child node buffers.

16. The apparatus of claim 15 , wherein the first tree is a B ε -tree and the second tree is a B-tree.

17. The apparatus of claim 15 , the instructions further causing the apparatus to:

receive a query request at the node for a key;

determine a second node in the second tree corresponding to the key;

generate a second input/output instruction to load the second node from the second tree in the first memory to the second memory.

18. The apparatus of claim 17 , wherein the second input/output operation loads less than all nodes in the second tree.

19. The apparatus of claim 18 , wherein the first memory is a solid-state storage device (“SSD”) and wherein the SSD comprises a plurality of NAND flash packages and wherein nodes of the second tree are stored in two or more of the plurality of NAND flash packages.

20. The apparatus of claim 15 ,

wherein each child node is also a non-leaf node that includes a buffer using a tree structure and wherein one or more of the child node buffers are stored in two or more non-contiguous locations in the first memory.

Assignments (2)
CHANGE OF NAME Recorded Apr 15, 2024
From: VMWARE, INC.
To: VMWARE LLC
Reel/Frame 067102/0395 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 30, 2018
From: GUPTA, ABHISHEK; JOHNSON, ROB T.; PREMACHANDRAN, SRINATH; SPILLANE, RICHARD P.; RANGASWAMY, SANDEEP; GUERRA DELGADO, JORGE; CHOWKSEY, KAPIL; WANG, WENGUANG
To: VMWARE, INC.
Reel/Frame 045402/0254 →
Continuity (1)
Related Publication 20190294710A1 · Sep 26, 2019