From: Catalin Marinas <catalin.marinas@arm.com>
To: Yu Xu <xuyu@linux.alibaba.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Johannes Weiner <hannes@cmpxchg.org>,
Hillf Danton <hdanton@sina.com>, Hugh Dickins <hughd@google.com>,
Josef Bacik <josef@toxicpanda.com>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
Linux-MM <linux-mm@kvack.org>,
mm-commits@vger.kernel.org, Will Deacon <will.deacon@arm.com>,
Matthew Wilcox <willy@infradead.org>,
yang.shi@linux.alibaba.com
Subject: Re: [patch 01/15] mm/memory.c: avoid access flag update TLB flush for retried page fault
Date: Mon, 27 Jul 2020 12:05:14 +0100 [thread overview]
Message-ID: <20200727110512.GB25400@gaia> (raw)
In-Reply-To: <0323de82-cfbd-8506-fa9c-a702703dd654@linux.alibaba.com>
On Mon, Jul 27, 2020 at 03:31:16PM +0800, Yu Xu wrote:
> On 7/25/20 4:22 AM, Linus Torvalds wrote:
> > On Fri, Jul 24, 2020 at 12:27 PM Linus Torvalds
> > <torvalds@linux-foundation.org> wrote:
> > >
> > > It *may* make sense to say "ok, don't bother flushing the TLB if this
> > > is a retry, because we already did that originally". MAYBE.
[...]
> > We could say that we never need it at all for FAULT_FLAG_RETRY. That
> > makes a lot of sense to me.
> >
> > So a patch that does something like the appended (intentionally
> > whitespace-damaged) seems sensible.
>
> I tested your patch on our aarch64 box, with 128 online CPUs.
[...]
> There are two points to sum up.
>
> 1) the performance of page_fault3_process is restored, while the performance
> of page_fault3_thread is about ~80% of the vanilla, except the case of 128
> threads.
>
> 2) in the case of 128 threads, test worker threads seem to get stuck, making
> no progress in the iterations of mmap-write-munmap until a period of time
> later. the test result is 0 because only first 16 samples are counted, and
> they are all 0. This situation is easy to re-produce with large number of
> threads (not necessarily 128), and the stack of one stuck thread is shown
> below.
>
> [<0>] __switch_to+0xdc/0x150
> [<0>] wb_wait_for_completion+0x84/0xb0
> [<0>] __writeback_inodes_sb_nr+0x9c/0xe8
> [<0>] try_to_writeback_inodes_sb+0x6c/0x88
> [<0>] ext4_nonda_switch+0x90/0x98 [ext4]
> [<0>] ext4_page_mkwrite+0x248/0x4c0 [ext4]
> [<0>] do_page_mkwrite+0x4c/0x100
> [<0>] do_fault+0x2ac/0x3e0
> [<0>] handle_pte_fault+0xb4/0x258
> [<0>] __handle_mm_fault+0x1d8/0x3a8
> [<0>] handle_mm_fault+0x104/0x1d0
> [<0>] do_page_fault+0x16c/0x490
> [<0>] do_translation_fault+0x60/0x68
> [<0>] do_mem_abort+0x58/0x100
> [<0>] el0_da+0x24/0x28
> [<0>] 0xffffffffffffffff
>
> It seems quite normal, right? and I've run out of ideas.
If threads get stuck here, it could be a stale TLB entry that's not
flushed with Linus' patch. Since that's a write fault, I think it hits
the FAULT_FLAG_TRIED case.
Could you give my patch here a try as an alternative:
https://lore.kernel.org/linux-mm/20200725155841.GA14490@gaia/
It leaves the spurious flush in place but only local (though note that
in a guest under KVM, all local TLBIs are upgraded to inner-shareable,
so you'd not get the performance benefit).
--
Catalin
next prev parent reply other threads:[~2020-07-27 11:05 UTC|newest]
Thread overview: 136+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-24 4:14 incoming Andrew Morton
2020-07-24 4:15 ` [patch 01/15] mm/memory.c: avoid access flag update TLB flush for retried page fault Andrew Morton
2020-07-24 4:38 ` Yang Shi
2020-07-24 4:56 ` Andrew Morton
2020-07-24 19:27 ` Linus Torvalds
2020-07-24 20:22 ` Linus Torvalds
2020-07-25 0:36 ` Yang Shi
2020-07-25 1:29 ` Linus Torvalds
2020-07-25 15:58 ` Catalin Marinas
2020-07-28 9:22 ` Will Deacon
2020-07-28 9:39 ` Catalin Marinas
2020-07-28 10:07 ` Yu Xu
2020-07-28 11:46 ` Catalin Marinas
2020-07-28 10:21 ` Will Deacon
2020-07-28 18:28 ` Linus Torvalds
2020-07-27 17:52 ` Yang Shi
2020-07-27 18:04 ` Linus Torvalds
2020-07-27 18:42 ` Catalin Marinas
2020-07-27 20:56 ` Linus Torvalds
2020-07-27 22:34 ` Yang Shi
2020-07-27 7:31 ` Yu Xu
2020-07-27 11:05 ` Catalin Marinas [this message]
2020-07-27 17:01 ` Linus Torvalds
2020-07-28 11:19 ` Catalin Marinas
2020-07-27 17:12 ` Yu Xu
2020-07-27 18:04 ` Yang Shi
2020-07-27 18:37 ` Linus Torvalds
2020-07-27 22:43 ` Yang Shi
2020-07-28 0:38 ` Linus Torvalds
2020-07-28 0:13 ` Yu Xu
2020-07-28 10:53 ` Nicholas Piggin
2020-07-28 10:53 ` Nicholas Piggin
2020-07-28 19:02 ` Linus Torvalds
2020-07-28 19:02 ` Linus Torvalds
2020-07-28 22:53 ` Nicholas Piggin
2020-07-28 22:53 ` Nicholas Piggin
2020-07-29 13:58 ` Michael Ellerman
2020-07-28 6:41 ` Yu Xu
2020-07-24 4:15 ` [patch 02/15] mm/mmap.c: close race between munmap() and expand_upwards()/downwards() Andrew Morton
2020-07-24 4:15 ` [patch 03/15] vfs/xattr: mm/shmem: kernfs: release simple xattr entry in a right way Andrew Morton
2020-07-24 4:15 ` [patch 04/15] mm: initialize return of vm_insert_pages Andrew Morton
2020-07-24 4:15 ` [patch 05/15] mm/memcontrol: fix OOPS inside mem_cgroup_get_nr_swap_pages() Andrew Morton
2020-07-24 4:15 ` [patch 06/15] mm/memcg: fix refcount error while moving and swapping Andrew Morton
2020-07-24 13:41 ` Alex Shi
2020-07-24 4:15 ` [patch 07/15] mm: memcg/slab: fix memory leak at non-root kmem_cache destroy Andrew Morton
2020-07-24 4:15 ` [patch 08/15] mm/hugetlb: avoid hardcoding while checking if cma is enabled Andrew Morton
2020-07-24 4:15 ` [patch 09/15] khugepaged: fix null-pointer dereference due to race Andrew Morton
2020-07-24 4:15 ` [patch 10/15] mailmap: add entry for Mike Rapoport Andrew Morton
2020-07-24 4:15 ` [patch 11/15] squashfs: fix length field overlap check in metadata reading Andrew Morton
2020-07-24 4:15 ` [patch 12/15] scripts/decode_stacktrace: strip basepath from all paths Andrew Morton
2020-07-24 4:15 ` [patch 13/15] io-mapping: indicate mapping failure Andrew Morton
2020-07-24 4:15 ` [patch 14/15] MAINTAINERS: add KCOV section Andrew Morton
2020-07-24 4:15 ` [patch 15/15] scripts/gdb: fix lx-symbols 'gdb.error' while loading modules Andrew Morton
2020-07-27 19:47 ` + mm-remove-unnecessary-wrapper-function-do_mmap_pgoff.patch added to -mm tree Andrew Morton
2020-07-27 19:56 ` + nilfs2-only-call-unlock_new_inode-if-i_new.patch " Andrew Morton
2020-07-27 19:57 ` + nilfs2-convert-__nilfs_msg-to-integrate-the-level-and-format.patch " Andrew Morton
2020-07-27 19:57 ` + nilfs2-use-a-more-common-logging-style.patch " Andrew Morton
2020-07-27 19:58 ` + checkpatch-add-test-for-repeated-words.patch " Andrew Morton
2020-07-27 20:05 ` + ocfs2-replace-http-links-with-https-ones.patch " Andrew Morton
2020-07-27 20:09 ` + ocfs2-fix-unbalanced-locking.patch " Andrew Morton
2020-07-27 20:10 ` + kernelh-remove-duplicate-include-of-asm-div64h.patch " Andrew Morton
2020-07-27 20:11 ` + tools-replace-http-links-with-https-ones.patch " Andrew Morton
2020-07-27 20:12 ` + lib-replace-http-links-with-https-ones.patch " Andrew Morton
2020-07-27 20:12 ` + include-replace-http-links-with-https-ones.patch " Andrew Morton
2020-07-27 20:34 ` + mm-make-mm-locked_vm-an-atomic64-counter.patch " Andrew Morton
2020-07-27 20:34 ` + mm-util-account_locked_vm-does-not-hold-mmap_lock.patch " Andrew Morton
2020-07-27 20:37 ` + cg_read_strcmp-fix-null-pointer-dereference.patch " Andrew Morton
2020-07-27 20:51 ` + mm-hugetlb-add-mempolicy-check-in-the-reservation-routine.patch " Andrew Morton
2020-07-27 20:52 ` [withdrawn] checkpatch-support-deprecated-terms-checking.patch removed from " Andrew Morton
2020-07-27 23:47 ` [obsolete] scripts-deprecated_terms-recommend-denylist-allowlist-instead-of-blacklist-whitelist.patch " Andrew Morton
2020-07-27 23:50 ` [obsolete] scripts-deprecated_terms-sync-with-inclusive-terms.patch " Andrew Morton
2020-07-28 0:18 ` [failures] mm-hugetlb-add-mempolicy-check-in-the-reservation-routine.patch " Andrew Morton
2020-07-28 1:19 ` mmotm 2020-07-27-18-18 uploaded Andrew Morton
2020-07-28 2:14 ` Stephen Rothwell
2020-07-28 3:22 ` mmotm 2020-07-27-18-18 uploaded (drivers/scsi/ufs/: SCSI_UFS_EXYNOS) Randy Dunlap
2020-07-28 8:23 ` Alim Akhtar
2020-07-28 12:33 ` mmotm 2020-07-27-18-18 uploaded (mm/page_alloc.c) Randy Dunlap
2020-07-28 21:55 ` Andrew Morton
2020-07-28 22:20 ` Stephen Rothwell
2020-07-28 22:31 ` Andrew Morton
2020-07-29 14:18 ` Michael S. Tsirkin
2020-07-29 14:38 ` David Hildenbrand
2020-07-29 16:14 ` David Hildenbrand
2020-07-29 17:29 ` Randy Dunlap
2020-07-28 22:39 ` Randy Dunlap
2020-07-29 1:43 ` Nathan Chancellor
2020-07-29 1:44 ` Andrew Morton
2020-07-29 2:04 ` Randy Dunlap
2020-07-29 14:09 ` make oldconfig (Re: mmotm 2020-07-27-18-18 uploaded (mm/page_alloc.c)) Alexey Dobriyan
2020-07-28 20:53 ` + mm-mempolicy-fix-kerneldoc-of-numa_map_to_online_node.patch added to -mm tree Andrew Morton
2020-07-28 20:53 ` + mm-mmu_notifier-fix-and-extend-kerneldoc.patch " Andrew Morton
2020-07-28 20:54 ` + mm-swap-fix-kerneldoc-of-swap_vma_readahead.patch " Andrew Morton
2020-07-28 20:58 ` + mm-memcontrol-dont-count-limit-setting-reclaim-as-memory-pressure.patch " Andrew Morton
2020-07-28 21:01 ` + mm-memcontrol-restore-proper-dirty-throttling-when-memoryhigh-changes.patch " Andrew Morton
2020-07-28 22:06 ` + mm-compaction-correct-the-comments-of-compact_defer_shift.patch " Andrew Morton
2020-07-28 22:09 ` + selftests-add-mincore-tests.patch " Andrew Morton
2020-07-28 22:16 ` + proc-pid-smaps-consistent-whitespace-output-format.patch " Andrew Morton
2020-07-28 22:21 ` + xtensa-switch-to-generic-version-of-pte-allocation-fix.patch " Andrew Morton
2020-07-28 22:21 ` Andrew Morton
2020-07-29 21:49 ` + mm-slab-avoid-the-use-of-one-element-array-and-use-struct_size-helper.patch " Andrew Morton
2020-07-29 23:52 ` [obsolete] mm-slab-avoid-the-use-of-one-element-array-and-use-struct_size-helper.patch removed from " Andrew Morton
2020-07-31 19:24 ` + kasan-dont-tag-stacks-allocated-with-pagealloc.patch added to " Andrew Morton
2020-07-31 19:24 ` + kasan-arm64-dont-instrument-functions-that-enable-kasan.patch " Andrew Morton
2020-07-31 19:24 ` + kasan-allow-enabling-stack-tagging-for-tag-based-mode.patch " Andrew Morton
2020-07-31 19:24 ` + kasan-adjust-kasan_stack_oob-for-tag-based-mode.patch " Andrew Morton
2020-07-31 20:00 ` [obsolete] mmhwpoison-rework-soft-offline-for-in-use-pages-fix.patch removed from " Andrew Morton
2020-07-31 20:05 ` + mmhwpoison-cleanup-unused-pagehuge-check.patch added to " Andrew Morton
2020-07-31 20:05 ` + mm-hwpoison-remove-recalculating-hpage.patch " Andrew Morton
2020-07-31 20:05 ` + mmmadvise-call-soft_offline_page-without-mf_count_increased.patch " Andrew Morton
2020-07-31 20:05 ` + mmmadvise-refactor-madvise_inject_error.patch " Andrew Morton
2020-07-31 20:05 ` + mmhwpoison-inject-dont-pin-for-hwpoison_filter.patch " Andrew Morton
2020-07-31 20:05 ` + mmhwpoison-un-export-get_hwpoison_page-and-make-it-static.patch " Andrew Morton
2020-07-31 20:05 ` + mmhwpoison-kill-put_hwpoison_page.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-remove-mf_count_increased.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-remove-flag-argument-from-soft-offline-functions.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-unify-thp-handling-for-hard-and-soft-offline.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-rework-soft-offline-for-free-pages.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-rework-soft-offline-for-in-use-pages.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-refactor-soft_offline_huge_page-and-__soft_offline_page.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-return-0-if-the-page-is-already-poisoned-in-soft-offline.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-introduce-mf_msg_unsplit_thp.patch " Andrew Morton
2020-07-31 20:06 ` + mmhwpoison-double-check-page-count-in-__get_any_page.patch " Andrew Morton
2020-07-31 20:23 ` + mm-gup-restrict-cma-region-by-using-allocation-scope-api.patch " Andrew Morton
2020-07-31 20:23 ` + mm-hugetlb-make-hugetlb-migration-callback-cma-aware.patch " Andrew Morton
2020-07-31 20:23 ` + mm-gup-use-a-standard-migration-target-allocation-callback.patch " Andrew Morton
2020-07-31 20:25 ` + mm-migrate-make-a-standard-migration-target-allocation-function-fix.patch " Andrew Morton
2020-07-31 20:26 ` + mm-memcontrol-decouple-reference-counting-from-page-accounting-fix.patch " Andrew Morton
2020-07-31 20:32 ` + mm-dmapoolc-add-warn_on-in-dma_pool_destroy.patch " Andrew Morton
2020-07-31 20:49 ` + kstrto-correct-documentation-references-to-simple_strto.patch " Andrew Morton
2020-07-31 20:49 ` + kstrto-do-not-describe-simple_strto-as-obsolete-replaced.patch " Andrew Morton
2020-07-31 20:57 ` + mm-hugetlb-fix-calculation-of-adjust_range_if_pmd_sharing_possible.patch " Andrew Morton
2020-07-31 20:59 ` + poison-remove-obsolete-comment.patch " Andrew Morton
2020-07-31 21:02 ` + cma-dont-quit-at-first-error-when-activating-reserved-areas.patch " Andrew Morton
2020-07-31 21:10 ` [nacked] mm-dmapoolc-add-warn_on-in-dma_pool_destroy.patch removed from " Andrew Morton
2020-07-31 23:46 ` mmotm 2020-07-31-16-45 uploaded Andrew Morton
2020-08-01 5:24 ` mmotm 2020-07-31-16-45 uploaded (drivers/staging/vc04_services/) Randy Dunlap
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200727110512.GB25400@gaia \
--to=catalin.marinas@arm.com \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=hdanton@sina.com \
--cc=hughd@google.com \
--cc=josef@toxicpanda.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-mm@kvack.org \
--cc=mm-commits@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=will.deacon@arm.com \
--cc=willy@infradead.org \
--cc=xuyu@linux.alibaba.com \
--cc=yang.shi@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.