The patch titled Subject: mm-lru-replace-pgdat-lru_lock-with-lruvec-lock-fix has been removed from the -mm tree. Its filename was mm-lru-replace-pgdat-lru_lock-with-lruvec-lock-fix.patch This patch was dropped because it was folded into mm-lru-replace-pgdat-lru_lock-with-lruvec-lock.patch ------------------------------------------------------ From: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> Subject: mm-lru-replace-pgdat-lru_lock-with-lruvec-lock-fix fix comment typo This patch moves per node lru_lock into lruvec, thus bring a lru_lock for each of memcg per node. So on a large machine, each of memcg don't have to suffer from per node pgdat->lru_lock competition. They could go fast with their self lru_lock. After move memcg charge before lru inserting, page isolation could serialize page's memcg, then per memcg lruvec lock is stable and could replace per node lru lock. In func isolate_migratepages_block, compact_unlock_should_abort and lock_page_lruvec_irqsave are open coded to work with compact_control. Also add a debug func in locking which may give some clues if there are sth out of hands. Daniel Jordan's testing show 62% improvement on modified readtwice case on his 2P * 10 core * 2 HT broadwell box. https://lore.kernel.org/lkml/20200915165807.kpp7uhiw7l3loofu@xxxxxxxxxxxxxxxxxxxxxxxxxx/ On a large machine with memcg enabled but not used, the page's lruvec seeking pass a few pointers, that may lead to lru_lock holding time increase and a bit regression. Hugh Dickins helped on the patch polish, thanks! Link: https://lkml.kernel.org/r/5b085715-292a-4b43-50b3-d73dc90d1de5@xxxxxxxxxxxxxxxxx Signed-off-by: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> Acked-by: Hugh Dickins <hughd@xxxxxxxxxx> Cc: Rong Chen <rong.a.chen@xxxxxxxxx> Cc: Hugh Dickins <hughd@xxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxxxx> Cc: Vladimir Davydov <vdavydov.dev@xxxxxxxxx> Cc: Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> Cc: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxxxxxx> Cc: Tejun Heo <tj@xxxxxxxxxx> Cc: linux-kernel@xxxxxxxxxxxxxxx Cc: linux-mm@xxxxxxxxx Cc: cgroups@xxxxxxxxxxxxxxx Cc: Alexander Duyck <alexander.duyck@xxxxxxxxx> Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx> Cc: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> Cc: Daniel Jordan <daniel.m.jordan@xxxxxxxxxx> Cc: "Huang, Ying" <ying.huang@xxxxxxxxx> Cc: Jann Horn <jannh@xxxxxxxxxx> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Cc: Kirill A. Shutemov <kirill@xxxxxxxxxxxxx> Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxx> Cc: Mika Penttilä <mika.penttila@xxxxxxxxxxxx> Cc: Minchan Kim <minchan@xxxxxxxxxx> Cc: Shakeel Butt <shakeelb@xxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Vlastimil Babka <vbabka@xxxxxxx> Cc: Wei Yang <richard.weiyang@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/memcontrol.c | 1 + 1 file changed, 1 insertion(+) --- a/mm/memcontrol.c~mm-lru-replace-pgdat-lru_lock-with-lruvec-lock-fix +++ a/mm/memcontrol.c @@ -1374,6 +1374,7 @@ out: * * This series functions should be used in either conditions: * PageLRU is cleared or unset + * or page->_refcount is zero * or page is locked. */ struct lruvec *lock_page_lruvec(struct page *page) _ Patches currently in -mm which might be from alex.shi@xxxxxxxxxxxxxxxxx are fs-ntfs-remove-unused-varibles.patch fs-ntfs-remove-unused-varible-attr_len.patch mm-truncate-add-parameter-explanation-for-invalidate_mapping_pagevec.patch mm-memcg-update-page-struct-member-in-comments.patch mm-memcg-remove-incorrect-comments.patch mm-mapping_dirty_helpers-enhance-the-kernel-doc-markups.patch mm-add-colon-to-fix-kernel-doc-markups-error-for-check_pte.patch mm-vmalloc-add-align-parameter-explanation-for-pvm_determine_end_from_reverse.patch docs-vm-remove-unused-3-items-explanation-for-proc-vmstat.patch khugepaged-add-couples-parameter-explanation-for-kernel-doc-markup.patch mm-thp-move-lru_add_page_tail-func-to-huge_memoryc.patch mm-thp-use-head-for-head-page-in-lru_add_page_tail.patch mm-thp-simplify-lru_add_page_tail.patch mm-thp-narrow-lru-locking.patch mm-vmscan-remove-unnecessary-lruvec-adding.patch mm-rmap-stop-store-reordering-issue-on-page-mapping.patch mm-memcg-add-debug-checking-in-lock_page_memcg.patch mm-swapc-fold-vm-event-pgrotated-into-pagevec_move_tail_fn.patch mm-lru-move-lock-into-lru_note_cost.patch mm-vmscan-remove-lruvec-reget-in-move_pages_to_lru.patch mm-mlock-remove-lru_lock-on-testclearpagemlocked.patch mm-mlock-remove-__munlock_isolate_lru_page.patch mm-lru-introduce-testclearpagelru.patch mm-compaction-do-page-isolation-first-in-compaction.patch mm-swapc-serialize-memcg-changes-in-pagevec_lru_move_fn.patch mm-lru-replace-pgdat-lru_lock-with-lruvec-lock.patch mm-lru-replace-pgdat-lru_lock-with-lruvec-lock-fix-2.patch mm-lru-introduce-the-relock_page_lruvec-function-fix.patch mm-vmscan-__isolate_lru_page_prepare-clean-up.patch fs-nilfs2-remove-some-unused-macros-to-tame-gcc.patch gcov-fix-kernel-doc-markup-issue.patch mm-memcg-bail-early-from-swap-accounting-if-memcg-disabled.patch mm-memcg-warning-on-memcg-after-readahead-page-charged.patch mm-memcontrol-rewrite-mem_cgroup_page_lruvec-fix.patch