From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EDC1C43DA47 for ; Tue, 10 Mar 2026 09:28:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134941; cv=none; b=S9l+Ty+4vNs2ivgsnUMPtfQIfVvG4yJ5TJM1OpwOFr0X1ol96HJjV2W99kWm8AvYJ1XB3HV5a056b0P71IWbSvJkbbURxr5QITaostpci+R3Ix5l6VIVR74l90K+us/Qy7DjCjh1gOkgBhNi2PPZWVVeFth9mlgR/AvYukSACjs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134941; c=relaxed/simple; bh=oPfgrxWcwWnJINeaJRYjmT6nYDR/+B09gxjJj+wGq7c=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=kgnafFtjpqSUhoKuvb5tNgJuSciIzu38nk5j7TKnLVxgNtR3e/O7eDVW61nsBr3hbd8kz2vmPzLIqYGff2BJDT7Az7F97xEe898Duc+lpGLkzwcmRo6J1ihFbUkOSc8zFc1RDfiqtSyIpBNjto/1h614ONIMdQ50kzzSMN0IbtE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0A31F16A3; Tue, 10 Mar 2026 02:28:52 -0700 (PDT) Received: from [10.164.19.59] (unknown [10.164.19.59]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6ED8A3F73B; Tue, 10 Mar 2026 02:28:50 -0700 (PDT) Message-ID: <0a5279ba-7964-49ea-a84b-c80b5e53c359@arm.com> Date: Tue, 10 Mar 2026 14:58:47 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 0/9] mm/rmap: Optimize anonymous large folio unmapping To: "Lorenzo Stoakes (Oracle)" Cc: akpm@linux-foundation.org, axelrasmussen@google.com, yuanchu@google.com, david@kernel.org, hughd@google.com, chrisl@kernel.org, kasong@tencent.com, weixugc@google.com, Liam.Howlett@oracle.com, vbabka@kernel.org, rppt@kernel.org, surenb@google.com, mhocko@suse.com, riel@surriel.com, harry.yoo@oracle.com, jannh@google.com, pfalcato@suse.de, baolin.wang@linux.alibaba.com, shikemeng@huaweicloud.com, nphamcs@gmail.com, bhe@redhat.com, baohua@kernel.org, youngjun.park@lge.com, ziy@nvidia.com, kas@kernel.org, willy@infradead.org, yuzhao@google.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, ryan.roberts@arm.com, anshuman.khandual@arm.com References: <20260310073013.4069309-1-dev.jain@arm.com> <032ab9a6-a49f-41c7-81fe-1c6fbaf94a79@lucifer.local> Content-Language: en-US From: Dev Jain In-Reply-To: <032ab9a6-a49f-41c7-81fe-1c6fbaf94a79@lucifer.local> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 10/03/26 1:32 pm, Lorenzo Stoakes (Oracle) wrote: > On Tue, Mar 10, 2026 at 01:00:04PM +0530, Dev Jain wrote: >> Speed up unmapping of anonymous large folios by clearing the ptes, and >> setting swap ptes, in one go. >> >> The following benchmark (stolen from Barry at [1]) is used to measure the >> time taken to swapout 256M worth of memory backed by 64K large folios: >> >> #define _GNU_SOURCE >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> >> #define SIZE_MB 256 >> #define SIZE_BYTES (SIZE_MB * 1024 * 1024) >> >> int main() { >> void *addr = mmap(NULL, SIZE_BYTES, PROT_READ | PROT_WRITE, >> MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); >> if (addr == MAP_FAILED) { >> perror("mmap failed"); >> return 1; >> } >> >> memset(addr, 0, SIZE_BYTES); >> >> struct timespec start, end; >> clock_gettime(CLOCK_MONOTONIC, &start); >> >> if (madvise(addr, SIZE_BYTES, MADV_PAGEOUT) != 0) { >> perror("madvise(MADV_PAGEOUT) failed"); >> munmap(addr, SIZE_BYTES); >> return 1; >> } >> >> clock_gettime(CLOCK_MONOTONIC, &end); >> >> long duration_ns = (end.tv_sec - start.tv_sec) * 1e9 + >> (end.tv_nsec - start.tv_nsec); >> printf("madvise(MADV_PAGEOUT) took %ld ns (%.3f ms)\n", >> duration_ns, duration_ns / 1e6); >> >> munmap(addr, SIZE_BYTES); >> return 0; >> } >> >> On arm64, only showing one of the middle values in the distribution: >> > > This doesn't seem very statistically valid. > > How about you give median, stddev etc.? Variance matters too. Okay. > >> without patch: >> madvise(MADV_PAGEOUT) took 52192959 ns (52.193 ms) >> >> with patch: >> madvise(MADV_PAGEOUT) took 26676625 ns (26.677 ms) > > You have a habit of only giving data on arm64, and not mentioning whether you've > tested on any other arch/setup. I did do an x86 build, forgot to mention that. I didn't do the numbers thinking this patchset is quite generic and has got nothing to do with the arm64 cont bit - but arguably I should have. > > I've commented on this before so I'm a bit disappointed you've done the exact > same thing here again. Especially since you've previously introduced regressions > this way. > > Please can you test this on (hardware!) x86-64 _at least_ as well and confirm > you aren't regressing anything for 4K pages? Lemme go and manage that :) > >> >> >> [1] https://lore.kernel.org/all/20250513084620.58231-1-21cnbao@gmail.com/ >> >> --- >> Based on mm-unstable bb420884e9e0. mm-selftests pass. >> >> Dev Jain (9): >> mm/rmap: make nr_pages signed in try_to_unmap_one >> mm/rmap: initialize nr_pages to 1 at loop start in try_to_unmap_one >> mm/rmap: refactor lazyfree unmap commit path to >> commit_ttu_lazyfree_folio() >> mm/memory: Batch set uffd-wp markers during zapping >> mm/rmap: batch unmap folios belonging to uffd-wp VMAs >> mm/swapfile: Make folio_dup_swap batchable >> mm/swapfile: Make folio_put_swap batchable >> mm/rmap: introduce folio_try_share_anon_rmap_ptes >> mm/rmap: enable batch unmapping of anonymous folios >> >> include/linux/mm_inline.h | 37 +++-- >> include/linux/page-flags.h | 11 ++ >> include/linux/rmap.h | 38 ++++- >> mm/internal.h | 26 ++++ >> mm/memory.c | 26 +--- >> mm/mprotect.c | 17 --- >> mm/rmap.c | 274 ++++++++++++++++++++++++------------- >> mm/shmem.c | 8 +- >> mm/swap.h | 10 +- >> mm/swapfile.c | 25 ++-- >> 10 files changed, 298 insertions(+), 174 deletions(-) >> >> -- >> 2.34.1 >>