Efficient block-level space allocation for multi-version concurrency control data
First Claim
Patent Images
1. A method comprising:
- initiating lockless allocation of a block from a page by computing a needed block size from an original value in a page header, the original value comprising a currently used block size of the page and a capacity of the page;
computing a next used block size based on the currently used block size and the needed block size and a remaining capacity of the page after allocation of the block from the page;
generating a new value comprising the next used block size of the page and the remaining capacity of the page; and
replacing the original value in the page header with the new value.
1 Assignment
0 Petitions
Accused Products
Abstract
Lockless allocation of a block from a page is initiated by computing a needed block size from an original block header value. Thereafter, a currently used block size and a capacity of the page are determined. A new block size is then computed based on the currently used block size and the needed block size and a remaining capacity of the page. A new block header value is subsequently generated that includes the determined new block size and the determined remaining capacity of the page The original block header value is then replaced with the new block header value. Related apparatus, systems, techniques and articles are also described.
116 Citations
20 Claims
-
1. A method comprising:
-
initiating lockless allocation of a block from a page by computing a needed block size from an original value in a page header, the original value comprising a currently used block size of the page and a capacity of the page; computing a next used block size based on the currently used block size and the needed block size and a remaining capacity of the page after allocation of the block from the page; generating a new value comprising the next used block size of the page and the remaining capacity of the page; and replacing the original value in the page header with the new value. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8)
-
-
9. A method comprising:
-
initiating allocation of a block from a new page in a multi-version concurrency control (MVCC) page chain by obtaining a first current last page number in the MVCC page chain; acquiring a mutex lock that prevents allocation of pages in the page chain; obtaining a second current last page number in the MVCC page chain; attempting to allocate a block from a last page in the MVCC page chain if the first current last page number and the second current last page number differs; allocating a new MVCC page in the MVCC page chain if the attempt to allocate the block fails or if there is no change in the last page; allocating a new block with a specified block size from a newly allocated page using lockless block allocation logic that returns a pointer to the block; appending the allocated new page to the MVCC page chain; and releasing the mutex lock and returning a block handle holding the allocated new block. - View Dependent Claims (10, 11)
-
-
12. A method comprising:
-
initiating allocation of a block from a last page in a multi-version concurrency control (MVCC) page chain by attempting to return a block from a lockless free list, or, if no block is available, then allocating a block from the last page; loading a last page of the MVCC page chain; attempting to allocate the block using lockless block allocation from the last page in the MVCC page chain if the last page is valid; allocating the block from a new page if the attempt to allocate fails or there are no changes in the pages; and returning a block handle associated with allocated new block. - View Dependent Claims (13, 14, 15, 16, 17, 18, 19, 20)
-
Specification