Re: [PATCH v1 27/29] docs/mm: convert from "Non-LRU page migration" to "movable_ops page migration"

Lorenzo Stoakes
2025-07-01T13:21:24Z

On Mon, Jun 30, 2025 at 03:00:08PM +0200, David Hildenbrand wrote:
> Let's bring the docs up-to-date.
>
> Reviewed-by: Zi Yan <ziy@nvidia.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>

LGTM, so:

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>

> ---
> Documentation/mm/page_migration.rst | 39 ++++++++++++++++++++---------
> 1 file changed, 27 insertions(+), 12 deletions(-)
>
> diff --git a/Documentation/mm/page_migration.rst b/Documentation/mm/page_migration.rst
> index 519b35a4caf5b..d611bc21920d7 100644
> --- a/Documentation/mm/page_migration.rst
> +++ b/Documentation/mm/page_migration.rst
> @@ -146,18 +146,33 @@ Steps:
> 18. The new page is moved to the LRU and can be scanned by the swapper,
> etc. again.
>
> -Non-LRU page migration
> -======================
> -
> -Although migration originally aimed for reducing the latency of memory
> -accesses for NUMA, compaction also uses migration to create high-order
> -pages. For compaction purposes, it is also useful to be able to move
> -non-LRU pages, such as zsmalloc and virtio-balloon pages.
> -
> -If a driver wants to make its pages movable, it should define a struct
> -movable_operations. It then needs to call __SetPageMovable() on each
> -page that it may be able to move. This uses the ``page->mapping`` field,
> -so this field is not available for the driver to use for other purposes.
> +movable_ops page migration
> +==========================

Bye bye inaccurate reference to LRU :)

> +
> +Selected typed, non-folio pages (e.g., pages inflated in a memory balloon,
> +zsmalloc pages) can be migrated using the movable_ops migration framework.
> +
> +The "struct movable_operations" provide callbacks specific to a page type
> +for isolating, migrating and un-isolating (putback) these pages.
> +
> +Once a page is indicated as having movable_ops, that condition must not
> +change until the page was freed back to the buddy. This includes not
> +changing/clearing the page type and not changing/clearing the
> +PG_movable_ops page flag.
> +
> +Arbitrary drivers cannot currently make use of this framework, as it
> +requires:
> +
> +(a) a page type
> +(b) indicating them as possibly having movable_ops in page_has_movable_ops()
> + based on the page type
> +(c) returning the movable_ops from page_has_movable_ops() based on the page
> + type
> +(d) not reusing the PG_movable_ops and PG_movable_ops_isolated page flags
> + for other purposes
> +
> +For example, balloon drivers can make use of this framework through the
> +balloon-compaction infrastructure residing in the core kernel.
>
> Monitoring Migration
> =====================
> --
> 2.49.0
>