Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zswap.zpool: z3fold is now deprecated and zbud could have the same faith in the near future, better handle this change #215

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

Oxalin
Copy link

@Oxalin Oxalin commented Dec 29, 2024

By default, z3fold is not built anymore since it has been deprecated in kernel 6.12. Zbud could have the same faith in the near future. The default allocator is zsmalloc and is always available when Zswap is enabled.
N.B.: A new allocator is in the work that will need to be added in the near future.

Default to zsmalloc if unsure or if the module for the requested Zpool allocator is not available and inform the user about it.

I also pushed an improvement for estimating available free memory by using MemAvailable instead of MemFree. This commit (afb82b4) could have been in a different PR, but it was taken in the series.

By default, z3fold is not built anymore since it has been deprecated in
kernel 6.12. The default allocator is zsmalloc. A new allocator is in the
work that will need to be added in the near future.

Signed-off-by: Alexandre Demers <[email protected]>
According to MemAvailable's introduction, while MemFree represents to
amount of RAM not allocated by the kernel, this doesn't give a good
estimate of the memory really available to any application.

MemAvailable was introduced so "user space really should not be expected
to know kernel internals to come up with an estimate for the amount of free
memory."

"MemAvailable: An estimate of how much memory is available for starting new
applications, without swapping."
(See https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773)

Thus, using MemAvailable seems a better alternative to estimate if and when
swapping may happen.

Signed-off-by: Alexandre Demers <[email protected]>
Firstly, z3fold has been deprecated since kernel 6.12. So it can be
expected that some actual systemd-swap users will hit a wall in the near
future either because the z3fold module will not be built by default or
because it will have been stripped out of the kernel entirely.

Secondly, talks are ongoing about doing the same for zbud.

Finally, the user should be both warned about missing modules preventing
swapFC from working as expected, but be supported in maintaining the
functionality available by using alternative allocators.

Thus, a check is applied to validate if the requested allocator is
available. If it is not, systemd-swap should either use the allocator
already set or default to zsmalloc (which is expected to be available if
Zswap was built in the kernel).

Signed-off-by: Alexandre Demers <[email protected]>
@Oxalin Oxalin changed the title zswap.zpool: z3fold is now deprecated in kernel 6.12, prefer zsmalloc zswap.zpool: z3fold is now deprecated and zbud could have the same faith in the near future, better handle this change Dec 30, 2024
Check for both MemAvailable and MemFree. While MemFree should always be
found, on older systems, we may potentially end up with MemAvailable not
being defined.

For this case, revert back to using MemFree.

Signed-off-by: Alexandre Demers <[email protected]>
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.

1 participant