From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3C3F2C71157 for ; Sun, 22 Jun 2025 00:44:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B8DF6B007B; Sat, 21 Jun 2025 20:44:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 269DE6B0088; Sat, 21 Jun 2025 20:44:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 17F4E6B008A; Sat, 21 Jun 2025 20:44:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 087C16B007B for ; Sat, 21 Jun 2025 20:44:55 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 74C985DEB7 for ; Sun, 22 Jun 2025 00:44:54 +0000 (UTC) X-FDA: 83581191708.12.E82446A Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) by imf16.hostedemail.com (Postfix) with ESMTP id 97DE918000A for ; Sun, 22 Jun 2025 00:44:52 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=dejzGo0e; spf=pass (imf16.hostedemail.com: domain of sef1548@gmail.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=sef1548@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750553092; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=9seqvFVjHSHj8qBAizqEN5td7cNupZ5qJ9c3mcC8dzI=; b=x6aR/5ODirUM/oYNIgeu/ru9kyNQ3Vp/DV4kQJE1bws7RvbpaNcGcrY7c7L3QWzedFbuhp p2VMLR8AEIJf3vRyLnB8hoAHC9MHOMO46k7N4OwFR9HGrotM5PuUTZKi6tuk3t4eKWkEVM D7LR6CLvUd1IrIDzZ7QIY0MC9x/slFk= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=dejzGo0e; spf=pass (imf16.hostedemail.com: domain of sef1548@gmail.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=sef1548@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750553092; a=rsa-sha256; cv=none; b=WBQOIXT4pgf9QTCmn/j5uGgRUQ+nDwWQnbMVzJ2QfhZnfs250onJXILd2cTTNNb1je7Wmh UOp4kvAuQrPHmJ93++mZxiD01TgTQA0n2ZhDSQJ8/rE+zULs0F5Jm7TAJJmjMG+ycPW2Lz q3K4QpSEdL14CRl9tsLD8wbLOphMLoU= Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-b26df8f44e6so3542836a12.2 for ; Sat, 21 Jun 2025 17:44:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750553091; x=1751157891; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9seqvFVjHSHj8qBAizqEN5td7cNupZ5qJ9c3mcC8dzI=; b=dejzGo0ewZSSV9Fcx2Mc3VFGvEHeKyeH2X6YoEE45QX8TVWbjqY6Wi+qdRYbq0fqxT NVG7TSxejjK0vVAYtISXk7r/oVwV+uROhZYOD2TqCxjwwWAsuTXPwMr8ZjewDpuWaMRg XLA/3H4al3OVklEu1rq9ZMDDZ9LIyDCq0qE+lTW4PRT0RbLJaYXolGDzRDWifDbO4RIl pspn+8kNgo7Sa1cGVBpd7UrpuLK8mjrlwjTwKO4f3ok+igHKOYmyrIh7Gvxmn22blv2z 7gW5ZNdGEnqoqxu72JLwMLOH46CY74l2xmhLPQ87mQnT375OsRt115WbGuqCvJoqCuEB PiNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750553091; x=1751157891; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9seqvFVjHSHj8qBAizqEN5td7cNupZ5qJ9c3mcC8dzI=; b=OcahBMb8d5/Jw1fUlXeP5tbsKas5jvOwZwyI0LDRmq/8mWVSHrG93hUnARO/of9NFS 0QFvAuHB6L4rH4RNhzSXZre1IJMpADObj+wjlRKmFxL22HbwQok+mw7CMgxLK9CE5cfn q3kN4eLxuSGnW55m7/Xy3i8IlhLpL4Dt8MSQ7J+uzeCR8wXRud1md1dp+5m5g4Y9Md90 JiU6B0eOteq2dZc+ZlVi+bRNw12y/0OdHJOEhlJgrznxmPjEYtuEpUGAPXvVvUpTSDZl NMmYwr/lbk6lDNci9N+FjQB2QbA8HL7KPwmZXUuByjYoXXKbj5SABDo1lRfxhi3IiWi+ rGOQ== X-Forwarded-Encrypted: i=1; AJvYcCUOvynyrO6y4A2wvSMM0vpso0nqJc98pER/KrdVs2a8mRNZBuya344fJ3+SVcaanEIrharvR0Nkaw==@kvack.org X-Gm-Message-State: AOJu0Yyg/gZT0Y3ra9/wcfWzQYCGqptn+noq9TA4jpcxy28jgVuLZtKT Ufxem3EUvrV+5kPgLxhu0tKY8g102J7k2NBNx2aicZyZELc5o1Ueyqde X-Gm-Gg: ASbGncvZI2GP/SFXOR++wBqcrvPi4AXmwbe/k8cywzDjDstfmfelw27PUKOdWcY1Sgg RIS4hknC+tBm5gv413aY+S5aKXAL1BnO8t+cGSirGqOW115pL8oTJ0B2JS8zc2hP8d1n2d//TlW L2MOJAO4XplIOAshzPIsN5hyZ2bz9gjw5UfXCJYpdXxs7fg55BfoI3jT5BJ1Tj4CLwFbE5xCJ27 pZPpUcjYAITeSxS9p0O9cjkBplKGpDle2V/LwGP1yMAHxkgC909S6MzGzzMgIxhevRY7H3GHJNh mKDlRyli5YPS9iMqEk1PHK+4hzNZRzmGhpJwgfj7w7/Kmwyq3GQpXNFaVGpTohERPtiCwn/7MlT teDm7Xia5jRpDTirTe3zQ5Xla0v2M3JomMKAKcgYIV2kz9g== X-Google-Smtp-Source: AGHT+IEIDOfIsZ9YDpsivWP+Szc2Gqabf0O6jEy+YJN7YNlJ3K+YooA00VbkYe+2gMs5AGVF0/sPwQ== X-Received: by 2002:a17:90b:1642:b0:313:5d2f:5505 with SMTP id 98e67ed59e1d1-3159d8c143bmr14134416a91.16.1750553091209; Sat, 21 Jun 2025 17:44:51 -0700 (PDT) Received: from localhost.localdomain (36-231-187-194.dynamic-ip.hinet.net. [36.231.187.194]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b31f118ea01sm4658390a12.5.2025.06.21.17.44.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 17:44:50 -0700 (PDT) From: Nick Huang To: alexs@kernel.org Cc: si.yanteng@linux.dev, dzm91@hust.edu.cn, corbet@lwn.net, akpm@linux-foundation.org, wangkefeng.wang@huawei.com, vishal.moola@gmail.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, david@redhat.com, linux-mm@kvack.org, Nick Huang Subject: [PATCH] mm/balloon_compaction: update Chinese docs for movable_ops Date: Sun, 22 Jun 2025 08:42:47 +0800 Message-ID: <20250622004249.9083-1-sef1548@gmail.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 97DE918000A X-Stat-Signature: sx6u7s1yzobppqrrz1eg9ipr1icikz41 X-Rspam-User: X-Rspamd-Server: rspam04 X-HE-Tag: 1750553092-759289 X-HE-Meta: U2FsdGVkX1/szB1OWRwebDvmQNWjw/42+AIU0y8hYlYCGjFZ4WUEw/hbcF9FPrYLP+xAb5N7S8lWC4EFb8tLlY2ilrbu/r7fcUsUXUSmgnUoSCicDd3IZjFen7+tSipGTvFwwUiS9c60nLXWlu9lYE+PoyD+kygE0oy5ZQU2CB9cIuCDXs3kujCZ7WLHqZDMFAWH3cuK+21HG2l1VIK7Hec+3XMy0FDK+qciHMHAuvHB3m4yhskPIUunryDom03V/hDQHHGrjdPQ0gB2JvRxt/s1J9r0bavRBPn7Xj/Ue2AI3FYaeqdpvkxh3rc/LIvtbaO+8lu1mTZVAtNRraDzHtfbPvAT4UgBbEvNTzW+eU2iUaTseMWsjus7OC+pe3GqSTzOufXEO9XHtVla+hDfYcDcKtenGv4V4au5JEAjnCIECjSx1R0FlEYSmkSDA7MSsiuk58uC8c90hF55PbV5LKScXzS7LLtMPiv+DSLGYBrS9C/hrhnfC5H89d/YuWqfI0TBIkfq6R/e9iL/8QkAsMGmDSjZotHQhCA/blHFvgIKoh8MmpPq2I5SgrWE5Q/iux2XfI9MgQUjv4mTBGBKkk0zicrUUxvooqbEzJi5r8dOI5LopCDdXkJ9fCWFewSq6Gi+Oq7KLrkP6B2oqXQcLkXOFcvD+cd3g01SHCwzyKHcPbUmP4UI1mt6mZF6/gRCb9UOZzsXxTVt2cyr2BAi2QMoTq+UXTOrjmtOpEfjfO2CLMheFNUw9fiSoM9Y+3dXLDfr6pbxutSU5FeMOnTTQX4GB+8Leoo1a+DVCZ0YrmDYRnnNYhSkyVhxeQE4NAfXjniQCmXx1JBVg3tPc6scfeg4e/B0g2bG5BXLGfXwZ4JllkGjDflfe6siquK8fXQGSuWRxwEnFALOqyEkjRRgMoBzMFvMRW4QpZMYLMW5IGtQEitiFM1bv1Bj85sIZZhh3GyMllWIC9d3KXiTD8/ 14xXsi0k dG4XAmDzS+MBArw3rvQYqb5qaBjsYimhSG3eTujJMQhepTAT6b4TgWMzIEzoWVkNCa00BWd+etgfnwyEn3MJLQiNoqLnYHMVZgHY0qYv8cG0vpchGd7wthHTu836muwu1yiKZJxmVgJT2t7X2QRTyxBOBwg76/f0rHsVR1kSAjZDMhGKpbkNesiwrJMonaWGmQOittzD7sOumpt0QcIXDxPEE3M6OBLu1n/DdeYTJ6FqhucZ+wxtVCn2FwtIMd/FIKLPiWXnwKMOfjAC6i++j7XOvXJ6UKgFp9//zzQFwJKgp0153msSncxC4xIA2JPQR8g8mNogDXng/NIe7FnAA6DlyYiBKMCFBOyV4Rg3k55B72i9xLrHOLB58BEiwKe1317BEHI2INFgb+3rlGkr8o4I4jOJZa2E207KCIE4kjavlazu5Q/R5R01aI+X6qv4G1vNcAPwpRV1V2HyIJjjIkRTbHwDZ0pYnvkQFOGdn7g4z16DinjmRk43E2YeNga0G6wgg8uKwDeu5/WZ1my4VJsCwEiNZgHpkjvO4EdIyq3GhH6o= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Remove Non-LRU Page Migration and Add Movable_ops Page Migration Reference: https://lore.kernel.org/all/20250618174014.1168640-28-david@redhat.com/ --- .../translations/zh_CN/mm/page_migration.rst | 88 +++---------------- 1 file changed, 10 insertions(+), 78 deletions(-) diff --git a/Documentation/translations/zh_CN/mm/page_migration.rst b/Documentation/translations/zh_CN/mm/page_migration.rst index 8c8461c6cb9f..e4f03228dbd9 100644 --- a/Documentation/translations/zh_CN/mm/page_migration.rst +++ b/Documentation/translations/zh_CN/mm/page_migration.rst @@ -114,91 +114,23 @@ migrate_pages()对它的页面列表进行了多次处理。如果当时对一 18. 新的页面被移到LRU中,可以被交换器等再次扫描。 -非LRU页面迁移 +movable_ops 页面迁移 ============= -尽管迁移最初的目的是为了减少NUMA的内存访问延迟,但压缩也使用迁移来创建高阶页面。 +选定的特定类型且非 folio 的页面(例如 memory balloon 或 zsmalloc 分配的页面)可以借助 movable_ops 迁移框架实现页面迁移。 -目前实现的问题是,它被设计为只迁移*LRU*页。然而,有一些潜在的非LRU页面可以在驱动中 -被迁移,例如,zsmalloc,virtio-balloon页面。 +struct movable_operations 提供了与页面类型相关的回调函数,用于隔离、迁移以及将页面放回。 -对于virtio-balloon页面,迁移代码路径的某些部分已经被钩住,并添加了virtio-balloon -的特定函数来拦截迁移逻辑。这对一个驱动来说太特殊了,所以其他想让自己的页面可移动的驱 -动就必须在迁移路径中添加自己的特定钩子。 +一旦页面被标记为具有 movable_ops,在页面被释放回 buddy 系统之前,不应更改其状态。这包括不得更改或清除页面类型,也不得更改或清除 PG_movable_ops 页面标志。 -为了克服这个问题,VM支持非LRU页面迁移,它为非LRU可移动页面提供了通用函数,而在迁移 -路径中没有特定的驱动程序钩子。 +目前,任意驱动程序尚无法直接使用此框架,因为使用该机制需满足以下条件: -如果一个驱动程序想让它的页面可移动,它应该定义三个函数,这些函数是 -struct address_space_operations的函数指针。 +(a) 页面类型; +(b) 在 page_has_movable_ops() 中根据页面类型标示这些页面可能具有 movable_ops; +(c) 在 page_has_movable_ops() 中根据页面类型返回对应的 movable_ops; +(d) 不得将 PG_movable_ops 和 PG_movable_ops_isolated 页面标志用于其他用途。 -1. ``bool (*isolate_page) (struct page *page, isolate_mode_t mode);`` - - VM对驱动的isolate_page()函数的期望是,如果驱动成功隔离了该页,则返回*true*。 - 返回true后,VM会将该页标记为PG_isolated,这样多个CPU的并发隔离就会跳过该 - 页进行隔离。如果驱动程序不能隔离该页,它应该返回*false*。 - - 一旦页面被成功隔离,VM就会使用page.lru字段,因此驱动程序不应期望保留这些字段的值。 - -2. ``int (*migratepage) (struct address_space *mapping,`` -| ``struct page *newpage, struct page *oldpage, enum migrate_mode);`` - - 隔离后,虚拟机用隔离的页面调用驱动的migratepage()。migratepage()的功能是将旧页 - 的内容移动到新页,并设置struct page newpage的字段。请记住,如果你成功迁移了旧页 - 并返回MIGRATEPAGE_SUCCESS,你应该通过page_lock下的__ClearPageMovable()向虚 - 拟机表明旧页不再可移动。如果驱动暂时不能迁移该页,驱动可以返回-EAGAIN。在-EAGAIN - 时,VM会在短时间内重试页面迁移,因为VM将-EAGAIN理解为 "临时迁移失败"。在返回除 - -EAGAIN以外的任何错误时,VM将放弃页面迁移而不重试。 - - 在migratepage()函数中,驱动程序不应该接触page.lru字段。 - -3. ``void (*putback_page)(struct page *);`` - - 如果在隔离页上迁移失败,VM应该将隔离页返回给驱动,因此VM用隔离页调用驱动的 - putback_page()。在这个函数中,驱动应该把隔离页放回自己的数据结构中。 - -非LRU可移动页标志 - - 有两个页面标志用于支持非LRU可移动页面。 - - * PG_movable - - 驱动应该使用下面的函数来使页面在page_lock下可移动。:: - - void __SetPageMovable(struct page *page, struct address_space *mapping) - - 它需要address_space的参数来注册将被VM调用的migration family函数。确切地说, - PG_movable不是struct page的一个真正的标志。相反,VM复用了page->mapping的低 - 位来表示它:: - - #define PAGE_MAPPING_MOVABLE 0x2 - page->mapping = page->mapping | PAGE_MAPPING_MOVABLE; - - 所以驱动不应该直接访问page->mapping。相反,驱动应该使用page_mapping(),它可 - 以在页面锁下屏蔽掉page->mapping的低2位,从而获得正确的struct address_space。 - - 对于非LRU可移动页面的测试,VM支持__PageMovable()函数。然而,它并不能保证识别 - 非LRU可移动页面,因为page->mapping字段与struct page中的其他变量是统一的。如 - 果驱动程序在被虚拟机隔离后释放了页面,尽管page->mapping设置了PAGE_MAPPING_MOVABLE, - 但它并没有一个稳定的值(看看__ClearPageMovable)。但是__PageMovable()在页 - 面被隔离后,无论页面是LRU还是非LRU可移动的,调用它开销都很低,因为LRU页面在 - page->mapping中不可能有PAGE_MAPPING_MOVABLE设置。在用pfn扫描中的lock_page() - 进行更大开销的检查来选择受害者之前,它也很适合只是瞥一眼来测试非LRU可移动的页面。 - - 为了保证非LRU的可移动页面,VM提供了PageMovable()函数。与__PageMovable()不 - 同,PageMovable()在lock_page()下验证page->mapping和 - mapping->a_ops->isolate_page。lock_page()可以防止突然破坏page->mapping。 - - 使用__SetPageMovable()的驱动应该在释放页面之前通过page_lock()下的 - __ClearMovablePage()清除该标志。 - - * PG_isolated - - 为了防止几个CPU同时进行隔离,VM在lock_page()下将隔离的页面标记为PG_isolated。 - 因此,如果一个CPU遇到PG_isolated非LRU可移动页面,它可以跳过它。驱动程序不需要 - 操作这个标志,因为VM会自动设置/清除它。请记住,如果驱动程序看到PG_isolated页, - 这意味着该页已经被VM隔离,所以它不应该碰page.lru字段。PG_isolated标志与 - PG_reclaim标志是同义的,所以驱动程序不应该为自己的目的使用PG_isolated。 +例如: Balloon 驱动程序可以通过核心内核提供的 balloon-compaction 框架使用该机制。 监测迁移 ======== -- 2.48.1