From: Muhammad Usama Anjum <usama.anjum@collabora.com>
To: "Andrew Morton" <akpm@linux-foundation.org>,
"Michał Mirosław" <emmir@google.com>,
"Andrei Vagin" <avagin@gmail.com>
Cc: Muhammad Usama Anjum <usama.anjum@collabora.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
kernel@collabora.com, Paul Gofman <pgofman@codeweavers.com>
Subject: Re: [PATCH v33 3/6] fs/proc/task_mmu: Add fast paths to get/clear PAGE_IS_WRITTEN flag
Date: Fri, 6 Oct 2023 16:40:53 +0500 [thread overview]
Message-ID: <6cee3838-1807-4983-9d7f-b3a30ee30563@collabora.com> (raw)
In-Reply-To: <20230821141518.870589-4-usama.anjum@collabora.com>
Hi Andrew,
You picked up all the other patches in this series except this one. Thank
you so much. I'm unable to find any comment on why this wasn't picked or
maybe you missed it?
Please let me know what you think.
Regards,
Usama
On 8/21/23 7:15 PM, Muhammad Usama Anjum wrote:
> Adding fast code paths to handle specifically only get and/or clear
> operation of PAGE_IS_WRITTEN, increases its performance by 0-35%.
> The results of some test cases are given below:
>
> Test-case-1
> t1 = (Get + WP) time
> t2 = WP time
> t1 t2
> Without this patch: 140-170mcs 90-115mcs
> With this patch: 110mcs 80mcs
> Worst case diff: 35% faster 30% faster
>
> Test-case-2
> t3 = atomic Get and WP
> t3
> Without this patch: 120-140mcs
> With this patch: 100-110mcs
> Worst case diff: 21% faster
>
> Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
> ---
> The test to measure the performance can be found: https://is.gd/FtSKcD
> 8 8192 3 1 0 and 8 8192 3 1 1 arguments have been used to produce the
> above mentioned results.
>
> Changes in v29:
> - Minor updates in flush logic following the original patch
> ---
> fs/proc/task_mmu.c | 36 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 36 insertions(+)
>
> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
> index 6e6261e8b91b1..79cf023148b28 100644
> --- a/fs/proc/task_mmu.c
> +++ b/fs/proc/task_mmu.c
> @@ -2138,6 +2138,41 @@ static int pagemap_scan_pmd_entry(pmd_t *pmd, unsigned long start,
> return 0;
> }
>
> + if (!p->vec_out) {
> + /* Fast path for performing exclusive WP */
> + for (addr = start; addr != end; pte++, addr += PAGE_SIZE) {
> + if (pte_uffd_wp(ptep_get(pte)))
> + continue;
> + make_uffd_wp_pte(vma, addr, pte);
> + if (!flush_end)
> + start = addr;
> + flush_end = addr + PAGE_SIZE;
> + }
> + goto flush_and_return;
> + }
> +
> + if (!p->arg.category_anyof_mask && !p->arg.category_inverted &&
> + p->arg.category_mask == PAGE_IS_WRITTEN &&
> + p->arg.return_mask == PAGE_IS_WRITTEN) {
> + for (addr = start; addr < end; pte++, addr += PAGE_SIZE) {
> + unsigned long next = addr + PAGE_SIZE;
> +
> + if (pte_uffd_wp(ptep_get(pte)))
> + continue;
> + ret = pagemap_scan_output(p->cur_vma_category | PAGE_IS_WRITTEN,
> + p, addr, &next);
> + if (next == addr)
> + break;
> + if (~p->arg.flags & PM_SCAN_WP_MATCHING)
> + continue;
> + make_uffd_wp_pte(vma, addr, pte);
> + if (!flush_end)
> + start = addr;
> + flush_end = next;
> + }
> + goto flush_and_return;
> + }
> +
> for (addr = start; addr != end; pte++, addr += PAGE_SIZE) {
> unsigned long categories = p->cur_vma_category |
> pagemap_page_category(p, vma, addr, ptep_get(pte));
> @@ -2161,6 +2196,7 @@ static int pagemap_scan_pmd_entry(pmd_t *pmd, unsigned long start,
> flush_end = next;
> }
>
> +flush_and_return:
> if (flush_end)
> flush_tlb_range(vma, start, addr);
>
--
BR,
Muhammad Usama Anjum
next prev parent reply other threads:[~2023-10-06 11:41 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-21 14:15 [PATCH v33 0/6] Implement IOCTL to get and optionally clear info about PTEs Muhammad Usama Anjum
2023-08-21 14:15 ` [PATCH v33 1/6] userfaultfd: UFFD_FEATURE_WP_ASYNC Muhammad Usama Anjum
2023-08-21 14:15 ` [PATCH v33 2/6] fs/proc/task_mmu: Implement IOCTL to get and optionally clear info about PTEs Muhammad Usama Anjum
2023-08-28 6:57 ` Muhammad Usama Anjum
2023-08-21 14:15 ` [PATCH v33 3/6] fs/proc/task_mmu: Add fast paths to get/clear PAGE_IS_WRITTEN flag Muhammad Usama Anjum
2023-10-06 11:40 ` Muhammad Usama Anjum [this message]
2023-10-06 16:27 ` Andrew Morton
2023-08-21 14:15 ` [PATCH v33 4/6] tools headers UAPI: Update linux/fs.h with the kernel sources Muhammad Usama Anjum
2023-08-21 14:15 ` [PATCH v33 5/6] mm/pagemap: add documentation of PAGEMAP_SCAN IOCTL Muhammad Usama Anjum
2023-08-21 14:15 ` [PATCH v33 6/6] selftests: mm: add pagemap ioctl tests Muhammad Usama Anjum
2023-11-02 11:45 ` Ryan Roberts
2023-11-02 11:49 ` Muhammad Usama Anjum
2023-11-02 12:04 ` Ryan Roberts
2023-09-06 12:44 ` [PATCH v33 0/6] Implement IOCTL to get and optionally clear info about PTEs Muhammad Usama Anjum
2023-09-06 16:06 ` Greg KH
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=6cee3838-1807-4983-9d7f-b3a30ee30563@collabora.com \
--to=usama.anjum@collabora.com \
--cc=akpm@linux-foundation.org \
--cc=avagin@gmail.com \
--cc=emmir@google.com \
--cc=kernel@collabora.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=pgofman@codeweavers.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®