lkml.org 
[lkml]   [2023]   [Feb]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH -v4 0/9] migrate_pages(): batch TLB flushing
    Date
    From: "Huang, Ying" <ying.huang@intel.com>

    Now, migrate_pages() migrate folios one by one, like the fake code as
    follows,

    for each folio
    unmap
    flush TLB
    copy
    restore map

    If multiple folios are passed to migrate_pages(), there are
    opportunities to batch the TLB flushing and copying. That is, we can
    change the code to something as follows,

    for each folio
    unmap
    for each folio
    flush TLB
    for each folio
    copy
    for each folio
    restore map

    The total number of TLB flushing IPI can be reduced considerably. And
    we may use some hardware accelerator such as DSA to accelerate the
    folio copying.

    So in this patch, we refactor the migrate_pages() implementation and
    implement the TLB flushing batching. Base on this, hardware
    accelerated folio copying can be implemented.

    If too many folios are passed to migrate_pages(), in the naive batched
    implementation, we may unmap too many folios at the same time. The
    possibility for a task to wait for the migrated folios to be mapped
    again increases. So the latency may be hurt. To deal with this
    issue, the max number of folios be unmapped in batch is restricted to
    no more than HPAGE_PMD_NR in the unit of page. That is, the influence
    is at the same level of THP migration.

    We use the following test to measure the performance impact of the
    patchset,

    On a 2-socket Intel server,

    - Run pmbench memory accessing benchmark

    - Run `migratepages` to migrate pages of pmbench between node 0 and
    node 1 back and forth.

    With the patch, the TLB flushing IPI reduces 99.1% during the test and
    the number of pages migrated successfully per second increases 291.7%.

    This patchset is based on v6.2-rc4.

    Changes:

    v4:

    - Fixed another bug about non-LRU folio migration. Thanks Hyeonggon!

    v3:

    - Rebased on v6.2-rc4

    - Fixed a bug about non-LRU folio migration. Thanks Mike!

    - Fixed some comments. Thanks Baolin!

    - Collected reviewed-by.

    v2:

    - Rebased on v6.2-rc3

    - Fixed type force cast warning. Thanks Kees!

    - Added more comments and cleaned up the code. Thanks Andrew, Zi, Alistair, Dan!

    - Collected reviewed-by.

    from rfc to v1:

    - Rebased on v6.2-rc1

    - Fix the deadlock issue caused by locking multiple pages synchronously
    per Alistair's comments. Thanks!

    - Fix the autonumabench panic per Rao's comments and fix. Thanks!

    - Other minor fixes per comments. Thanks!

    Best Regards,
    Huang, Ying

    \
     
     \ /
      Last update: 2023-03-27 00:10    [W:4.516 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site