The Linux Kernel Mailing List
 help / color / mirror / Atom feed
  • * Re: [PATCH 0/7] Accelerate page migration with batch copying and hardware offload
           [not found] <20260428155043.39251-2-shivankg@amd.com>
           [not found] ` <20260428155043.39251-6-shivankg@amd.com>
    @ 2026-05-07  9:58 ` Huang, Ying
      2026-05-11 15:19   ` David Hildenbrand (Arm)
           [not found] ` <87zf2kvnqy.fsf@DESKTOP-5N7EMDA>
                       ` (4 subsequent siblings)
      6 siblings, 1 reply; 14+ messages in thread
    From: Huang, Ying @ 2026-05-07  9:58 UTC (permalink / raw)
      To: Shivank Garg
      Cc: akpm, david, kinseyho, weixugc, ljs, Liam.Howlett, vbabka, willy,
    	rppt, surenb, mhocko, ziy, matthew.brost, joshua.hahnjy,
    	rakie.kim, byungchul, gourry, apopple, dave, Jonathan.Cameron,
    	rkodsara, vkoul, bharata, sj, rientjes, xuezhengchu, yiannis,
    	dave.hansen, hannes, jhubbard, peterx, riel, shakeel.butt,
    	stalexan, tj, nifan.cxl, jic23, aneesh.kumar, nathan.lynch,
    	Frank.li, djbw, linux-kernel, linux-mm
    
    Shivank Garg <shivankg@amd.com> writes:
    
    > This is the fifth RFC of the patchset to enhance page migration by
    > batching folio-copy operations and enabling acceleration via DMA offload.
    >
    > Single-threaded, folio-by-folio copying bottlenecks page migration in
    > modern systems with deep memory hierarchies, especially for large folios
    > where copy overhead dominates, leaving significant hardware potential
    > untapped.
    >
    > By batching the copy phase, we create an opportunity for hardware
    > acceleration. This series builds the framework and provides a DMA
    > offload driver (dcbm) as a reference implementation, targeting bulk
    > migration workloads where offloading the copy improves throughput
    > and latency while freeing the CPU cycles.
    >
    > See the RFC V3 cover letter [2] for motivation.
    >
    > Changelog since V4:
    > -------------------
    >
    > 1. Renamed PAGE_* migration state flags to FOLIO_*. (David)
    > 2. Use the new folio->migrate_info field instead of folio->private
    >    for migration state. (David)
    > 3. Fold folios_mc_copy patch in batch-copy implementation patch. (David)
    > 3. Renamed migrate_offload_start()/stop() to register()/unregister().
    >    (Huang, Ying)
    > 4. Dropped should_batch() callback from struct migrator. Reason-based
    >    policy now lives in migrate_pages_batch(). Migrators can still skip
    >    a batch they don't want (size based policy). (Huang, Ying)
    > 5. CONFIG_MIGRATION_COPY_OFFLOAD is now hidden and selected by the
    >    migrator driver. CONFIG_DCBM_DMA is tristate. (Huang Ying, Gregory Price). 
    > 6. Wrapped the SRCU + static_call dispatch in a small helper. (Huang, Ying)
    > 7. Requir m->owner in migrate_offload_register(), SRCU sync at
    >    unregister relies on it. Counters are atomic_long_t to avoid lock-order
    >    issue.
    > 9. Moved DCBM sysfs from /sys/kernel/dcbm to /sys/module/dcbm (Huang, Ying) 
    > 10. Rebased on v7.1-rc1.
    >
    >
    > DESIGN:
    > -------
    >
    > New Migration Flow:
    >
    > [ migrate_pages_batch() ]
    >     |
    >     |--> do_batch = migrate_offload_do_batch(reason)  // core filters by migration reason
    >     |
    >     |--> for each folio:
    >     |      migrate_folio_unmap()        // unmap the folio
    >     |      |
    >     |      +--> (success):
    >     |           if do_batch && folio_supports_batch_copy():
    >     |               -> unmap_batch / dst_batch  // batch list for copy offloading
    >     |           else:
    >     |               -> unmap_single / dst_single // single lists for per-folio CPU copy
    >     |
    >     |--> try_to_unmap_flush()                   // single batched TLB flush
    >     |
    >     |--> Batch copy (if unmap_batch not empty):
    >     |    - Migrator is configurable at runtime via sysfs.
    >     |
    >     |      static_call(migrate_offload_copy)    // Pluggable Migrators
    >     |              /          |            \
    >     |             v           v             v
    >     |     [ Default ]  [ DMA Offload ]  [ ... ]
    >     |
    >     |      On -EOPNOTSUPP or other error, batch falls back to per-folio CPU copy.
    >     |
    >     +--> migrate_folios_move()      // metadata, update PTEs, finalize
    >          (batch list with already_copied=true, single list with false)
    >
    > Offload Registration:
    >
    >     Driver fills struct migrator { .name, .offload_copy, .owner } and calls
    >     migrate_offload_register().  This:
    >       - Pins the module via try_module_get()
    >       - Patches the migrate_offload_copy() static_call target
    >       - Enables the migrate_offload_enabled static branch
    >
    >     migrate_offload_unregister() disables the static branch and reverts
    >     the static_call, then synchronize_srcu() waits for in-flight migrations
    >     before module_put().
    >
    > PERFORMANCE RESULTS:
    > --------------------
    >
    > Re-ran the V4 workload on v7.1-rc1 with this series; relative
    > speedups match V4 (~6x for 2MB folios at 16 DMA channels). No design
    > change in V5 alters this picture; please refer to the V4 cover letter
    > for the throughput tables [1].
    >
    >
    > PLAN:
    > -----
    >
    > Patches 1-4 (the batching infrastructure) don't depend on the migrator
    > interface, so if it helps I can split them off and post them ahead of
    > the migrator and DCBM bits, which still have a few open questions to
    > work through.
    >
    > I would appreciate guidance on splitting the infrastructure portion
    > ahead of the migrator interface if that matches maintainers' preference.
    >
    > OPEN QUESTIONS:
    > ---------------
    >
    > 1. Should the batch path run without a registered migrator? Patches 1-4
    >    are self-contained and use folios_mc_copy() (CPU). I have several
    >    options like making batch path always-on for eligible folios, or
    >    giving admin an option to flip the static branch, or keep the gate.
    >    I'm leaning toward always-on.
    >
    > 2. Carrying already_copied via folio->migrate_info vs changing the
    >    migrate_folio() callback signature (Huang, Ying). I went with the
    >    field for now to avoid touching every fs callback before the design
    >    settles. Happy to revisit.
    
    Personally, I still prefer to change migrate_folio() callbacks for
    better readability.
    
    > 3. Per-caller offload selection: Today eligibility is by migrate_reason
    >    only. Some are latency-tolerant, others may be not. Is reason the
    >    right granularity, or do we want a per-caller hint?
    >
    > 4. Cgroup integration: How should per-cgroup be accounted for different
    >    migrators (e.g.: any accounting for DMA-busy time)?
    >
    > 5. Tuning migrate_pages callers for offloading. For instance, in
    >    compaction COMPACT_CLUSTER_MAX = 32 caps DMA's payoff for compaction
    >    (V4 experiment).
    >
    > 6. Where do batch-size thresholds live, and how are they tuned? Per
    >    Huang Ying's split, that policy lives in the migrator. DCBM has no
    >    threshold today. Open whether it should later be a per-migrator
    >    sysfs knob or hard-coded; probably clearer once a second migrator
    >    (SDXI, mtcopy) shows the trade-off.
    >
    >
    > FOLLOW-UPS:
    > --------------
    >
    > 1. dmaengine_prep_dma_memcpy_sg() in DCBM (Vinod Koul). The SG-prep
    >    variant cuts per-batch prep/submit cost (=CPU savings), but ptdma does
    >    not implement the SG hook yet [10]. The end-to-end migration throughput
    >    delta is small because per-descriptor execute time dominates.
    >    I'll post the ptdma SG hook + DCBM switch as a follow-up.
    >   
    > 2. SDXI as a second migrator. The SDXI series [11] is in  review. SDXI is
    >    a generic memcpy engine without DMA_PRIVATE, so channel acquisition
    >    goes through dma_find_channel() or async_tx rather than
    >    dma_request_chan_by_mask(). I have a local DCBM variant working on top
    >    of the SDXI driver. I'm planning to send it as a follow-up once the
    >    SDXI series settles.
    >  
    > 3. IOMMU SG merging in DCBM (Gregory). dma_map_sgtable() may merge
    >    contiguous PFNs unevenly, so src.nents != dst.nents. DCBM falls back
    >    to CPU for safety. Though I haven't seen it on Zen3 + PTDMA. I'll
    >    understand this and address it a follow-up.
    >  
    > 4. Revisit Multi-threaded CPU copy migrator once the infra is settled.
    >
    > EARLIER POSTINGS:
    > -----------------
    > [1] RFC V4: https://lore.kernel.org/all/20260309120725.308854-3-shivankg@amd.com
    > [2] RFC V3: https://lore.kernel.org/all/20250923174752.35701-1-shivankg@amd.com
    > [3] RFC V2: https://lore.kernel.org/all/20250319192211.10092-1-shivankg@amd.com
    > [4] RFC V1: https://lore.kernel.org/all/20240614221525.19170-1-shivankg@amd.com
    > [5] RFC from Zi Yan: https://lore.kernel.org/all/20250103172419.4148674-1-ziy@nvidia.com
    >
    > RELATED DISCUSSIONS:
    > --------------------
    > [6] MM-alignment Session [Nov 12, 2025]:
    >     https://lore.kernel.org/linux-mm/bd6a3c75-b9f0-cbcf-f7c4-1ef5dff06d24@google.com
    > [7] Linux Memory Hotness and Promotion call [Nov 6, 2025]:
    >     https://lore.kernel.org/linux-mm/8ff2fd10-c9ac-4912-cf56-7ecd4afd2770@google.com
    > [8] LSFMM 2025:
    >     https://lore.kernel.org/all/cf6fc05d-c0b0-4de3-985e-5403977aa3aa@amd.com
    > [9] OSS India:
    >     https://ossindia2025.sched.com/event/23Jk1
    > [10] DMA_MEMCPY_SG comparison:
    >      https://lore.kernel.org/linux-mm/3e73addb-ac01-4a05-bc75-c6c1c56072df@amd.com
    > [11] SDXI V1:
    >      https://lore.kernel.org/all/20260410-sdxi-base-v1-0-1d184cb5c60a@amd.com
    >
    > Thanks to everyone who reviewed, tested or participated in discussions
    > around this series. Your feedback helped me throughout the development
    > process.
    >
    > Best Regards,
    > Shivank
    >
    >
    > Shivank Garg (6):
    >   mm/migrate: rename PAGE_ migration flags to FOLIO_
    >   mm/migrate: use migrate_info field instead of private
    >   mm/migrate: skip data copy for already-copied folios
    >   mm/migrate: add batch-copy path in migrate_pages_batch
    >   mm/migrate: add copy offload registration infrastructure
    >   drivers/migrate_offload: add DMA batch copy driver (dcbm)
    >
    > Zi Yan (1):
    >   mm/migrate: adjust NR_MAX_BATCHED_MIGRATION for testing
    >
    >  drivers/Kconfig                       |   2 +
    >  drivers/Makefile                      |   2 +
    >  drivers/migrate_offload/Kconfig       |   9 +
    >  drivers/migrate_offload/Makefile      |   1 +
    >  drivers/migrate_offload/dcbm/Makefile |   1 +
    >  drivers/migrate_offload/dcbm/dcbm.c   | 440 ++++++++++++++++++++++++++
    >  include/linux/migrate_copy_offload.h  |  44 +++
    >  include/linux/mm.h                    |   2 +
    >  include/linux/mm_types.h              |   1 +
    >  mm/Kconfig                            |   6 +
    >  mm/Makefile                           |   1 +
    >  mm/migrate.c                          | 211 ++++++++----
    >  mm/migrate_copy_offload.c             |  94 ++++++
    >  mm/util.c                             |  30 ++
    >  14 files changed, 784 insertions(+), 60 deletions(-)
    >  create mode 100644 drivers/migrate_offload/Kconfig
    >  create mode 100644 drivers/migrate_offload/Makefile
    >  create mode 100644 drivers/migrate_offload/dcbm/Makefile
    >  create mode 100644 drivers/migrate_offload/dcbm/dcbm.c
    >  create mode 100644 include/linux/migrate_copy_offload.h
    >  create mode 100644 mm/migrate_copy_offload.c
    >
    >
    > base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
    
    ---
    Best Regards,
    Huang, Ying
    
    ^ permalink raw reply	[flat|nested] 14+ messages in thread
  • [parent not found: <87zf2kvnqy.fsf@DESKTOP-5N7EMDA>]
  • [parent not found: <20260428155043.39251-8-shivankg@amd.com>]
  • [parent not found: <20260428155043.39251-10-shivankg@amd.com>]
  • [parent not found: <20260428155043.39251-12-shivankg@amd.com>]
  • * Re: [PATCH 0/7] Accelerate page migration with batch copying and hardware offload
           [not found] <20260428155043.39251-2-shivankg@amd.com>
                       ` (5 preceding siblings ...)
           [not found] ` <20260428155043.39251-12-shivankg@amd.com>
    @ 2026-05-11 15:53 ` David Hildenbrand (Arm)
      6 siblings, 0 replies; 14+ messages in thread
    From: David Hildenbrand (Arm) @ 2026-05-11 15:53 UTC (permalink / raw)
      To: Shivank Garg, akpm
      Cc: kinseyho, weixugc, ljs, Liam.Howlett, vbabka, willy, rppt, surenb,
    	mhocko, ziy, matthew.brost, joshua.hahnjy, rakie.kim, byungchul,
    	gourry, ying.huang, apopple, dave, Jonathan.Cameron, rkodsara,
    	vkoul, bharata, sj, rientjes, xuezhengchu, yiannis, dave.hansen,
    	hannes, jhubbard, peterx, riel, shakeel.butt, stalexan, tj,
    	nifan.cxl, jic23, aneesh.kumar, nathan.lynch, Frank.li, djbw,
    	linux-kernel, linux-mm
    
    On 4/28/26 17:50, Shivank Garg wrote:
    > This is the fifth RFC of the patchset to enhance page migration by
    
    Ah, this is an RFC ...
    
    ... I suggest b4 for patch series management :P
    
    That also explains why patch #7 is still in there.
    
    > batching folio-copy operations and enabling acceleration via DMA offload.
    > 
    > Single-threaded, folio-by-folio copying bottlenecks page migration in
    > modern systems with deep memory hierarchies, especially for large folios
    > where copy overhead dominates, leaving significant hardware potential
    > untapped.
    > 
    > By batching the copy phase, we create an opportunity for hardware
    > acceleration. This series builds the framework and provides a DMA
    > offload driver (dcbm) as a reference implementation, targeting bulk
    > migration workloads where offloading the copy improves throughput
    > and latency while freeing the CPU cycles.
    > 
    > See the RFC V3 cover letter [2] for motivation.
    > 
    > Changelog since V4:
    > -------------------
    > 
    > 1. Renamed PAGE_* migration state flags to FOLIO_*. (David)
    > 2. Use the new folio->migrate_info field instead of folio->private
    >    for migration state. (David)
    > 3. Fold folios_mc_copy patch in batch-copy implementation patch. (David)
    > 3. Renamed migrate_offload_start()/stop() to register()/unregister().
    >    (Huang, Ying)
    > 4. Dropped should_batch() callback from struct migrator. Reason-based
    >    policy now lives in migrate_pages_batch(). Migrators can still skip
    >    a batch they don't want (size based policy). (Huang, Ying)
    > 5. CONFIG_MIGRATION_COPY_OFFLOAD is now hidden and selected by the
    >    migrator driver. CONFIG_DCBM_DMA is tristate. (Huang Ying, Gregory Price). 
    > 6. Wrapped the SRCU + static_call dispatch in a small helper. (Huang, Ying)
    > 7. Requir m->owner in migrate_offload_register(), SRCU sync at
    >    unregister relies on it. Counters are atomic_long_t to avoid lock-order
    >    issue.
    > 9. Moved DCBM sysfs from /sys/kernel/dcbm to /sys/module/dcbm (Huang, Ying) 
    > 10. Rebased on v7.1-rc1.
    > 
    
    [...]
    
    > 
    > OPEN QUESTIONS:
    > ---------------
    > 
    > 1. Should the batch path run without a registered migrator? Patches 1-4
    >    are self-contained and use folios_mc_copy() (CPU). I have several
    >    options like making batch path always-on for eligible folios, or
    >    giving admin an option to flip the static branch, or keep the gate.
    >    I'm leaning toward always-on.
    
    Hiding that detail from migrate.c sounds interesting.
    
    > 
    > 2. Carrying already_copied via folio->migrate_info vs changing the
    >    migrate_folio() callback signature (Huang, Ying). I went with the
    >    field for now to avoid touching every fs callback before the design
    >    settles. Happy to revisit.
    > 
    > 3. Per-caller offload selection: Today eligibility is by migrate_reason
    >    only. Some are latency-tolerant, others may be not. Is reason the
    >    right granularity, or do we want a per-caller hint?
    
    Isn't it sufficient to just do it based on the #folios or sth like that?
    
    If someone migrates a handful of folios, latency is likely more important (and
    batching less beneficial).
    
    I'd assume when migrating many folios, batching could just always be done. Or
    what's the concern?
    
    > 
    > 4. Cgroup integration: How should per-cgroup be accounted for different
    >    migrators (e.g.: any accounting for DMA-busy time)?
    
    Oh. Do we even have to mess with that?
    
    > 
    > 5. Tuning migrate_pages callers for offloading. For instance, in
    >    compaction COMPACT_CLUSTER_MAX = 32 caps DMA's payoff for compaction
    >    (V4 experiment).
    
    Is that HW dependent?
    
    > 
    > 6. Where do batch-size thresholds live, and how are they tuned? Per
    >    Huang Ying's split, that policy lives in the migrator. DCBM has no
    >    threshold today. Open whether it should later be a per-migrator
    >    sysfs knob or hard-coded; probably clearer once a second migrator
    >    (SDXI, mtcopy) shows the trade-off.
    
    Again, sounds like being HW dependent, no?
    
    
    -- 
    Cheers,
    
    David
    
    ^ permalink raw reply	[flat|nested] 14+ messages in thread

  • end of thread, other threads:[~2026-05-11 15:53 UTC | newest]
    
    Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <20260428155043.39251-2-shivankg@amd.com>
         [not found] ` <20260428155043.39251-6-shivankg@amd.com>
    2026-05-07  9:43   ` [PATCH 2/7] mm/migrate: use migrate_info field instead of private Huang, Ying
    2026-05-11 15:22   ` David Hildenbrand (Arm)
    2026-05-07  9:58 ` [PATCH 0/7] Accelerate page migration with batch copying and hardware offload Huang, Ying
    2026-05-11 15:19   ` David Hildenbrand (Arm)
         [not found] ` <87zf2kvnqy.fsf@DESKTOP-5N7EMDA>
    2026-05-08 11:04   ` Garg, Shivank
    2026-05-08 11:28     ` Huang, Ying
    2026-05-08 12:34       ` Garg, Shivank
    2026-05-09  7:49         ` Huang, Ying
    2026-05-10 15:03           ` Garg, Shivank
         [not found] ` <20260428155043.39251-8-shivankg@amd.com>
    2026-05-11 15:35   ` [PATCH 3/7] mm/migrate: skip data copy for already-copied folios David Hildenbrand (Arm)
         [not found] ` <20260428155043.39251-10-shivankg@amd.com>
    2026-05-11 15:40   ` [PATCH 4/7] mm/migrate: add batch-copy path in migrate_pages_batch David Hildenbrand (Arm)
         [not found] ` <20260428155043.39251-12-shivankg@amd.com>
    2026-05-11 15:46   ` [PATCH 5/7] mm/migrate: add copy offload registration infrastructure David Hildenbrand (Arm)
    2026-05-11 15:50   ` David Hildenbrand (Arm)
    2026-05-11 15:53 ` [PATCH 0/7] Accelerate page migration with batch copying and hardware offload David Hildenbrand (Arm)
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox