Skip to content

Conversation

@osalyk
Copy link
Contributor

@osalyk osalyk commented Jan 19, 2026

This change is Reviewable

osalyk and others added 14 commits January 16, 2026 10:13
Signed-off-by: Oksana Salyk <[email protected]>
... chunk reinit

Issue

Huge memory blocks with the header chunk of type CHUNK_TYPE_FREE had not
reinitialized their footer chunk.

Context

- Allocator divides the available space into zones and zones into
  smaller chunks.
- All chunk headers belonging to a single zone are stored in an array.
- Chunk header describes its: type, size_idx and flags.
- Chunk can be of a few types. The types important for this patch are:
  CHUNK_TYPE_FOOTER, CHUNK_TYPE_FREE, and CHUNK_TYPE_USED.
- CHUNK_TYPE_FREE and _USED are chunk types marking the beginning of so
  called huge memory block. This means this chunk and a number of chunks
  following it (size_idx) constitues a single allocation or a free
  memory.
- The last chunk belonging to a huge memory block ought to be of type
  CHUNK_TYPE_FOOTER. Its size_idx allows to easily find the first chunk
  belonging to this huge memory block and determine the huge memory
  block type.
- Huge memory blocks' footers are written immediately but persited
  lazily. It is not a problem at runtime since the footers are there at
  runtime. But in case of a crash the footers may be not persisted
  properly and missing on open. So, when the allocator is booted up it
  recreates footers just in case any of them is missing.

Note: The huge memory block's first chunk header and the last chunk
header (footer) are not written nor persisted in any way
transactionally. The first chunk header occupies only 8 bytes so it is
written and persisted atomically. But its footer is written
independently and not explicitly persisted.

Note: The first chunk header contains all the required info to recreate
footer. The last chunk header is there only to make huge memory blocks
coalescing easier to compute. Reading the footer allows to immediately
find the memory block leaving just before the memory block which
neighbours one might want to find.

This patch makes sure the huge memory block's footer is recreated no
matter whather its type is CHUNK_TYPE_FREE or CHUNK_TYPE_USED.

The patch is inspired by work done for DAOS' DAV allocator (DAOS-18195)
which is heavily based on the PMEMOBJ allocator.

Signed-off-by: Jan Michalski <[email protected]>
Inspired-by: Sherin T George <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
Signed-off-by: liuxiang <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
Co-authored-by: Jan Michalski <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
DAOS-18296

Signed-off-by: Jan Michalski <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
Signed-off-by: Oksana Salyk <[email protected]>
@osalyk osalyk requested review from grom72 and janekmi January 19, 2026 09:55
Copy link
Contributor

@janekmi janekmi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janekmi reviewed 2 files and all commit messages, and made 1 comment.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @grom72 and @osalyk).


a discussion (no related file):
We are doing something very wrong. All these commits on the list should not be there in my opinion. Thoughts?

Copy link
Contributor

@grom72 grom72 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

@grom72 made 1 comment.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @osalyk).

Copy link
Contributor Author

@osalyk osalyk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@osalyk resolved 1 discussion.
Reviewable status: :shipit: complete! all files reviewed, all discussions resolved (waiting on @osalyk).

@osalyk osalyk merged commit 76a2029 into master Jan 19, 2026
9 checks passed
@osalyk osalyk deleted the merge branch January 19, 2026 12:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants