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 4A42B1A6838 for ; Wed, 11 Mar 2026 08:11:46 +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=1773216708; cv=none; b=tsCeA/VgXlbusYfO3jb54C45qm7y1AlwsWEhJ37cQ3BgGR3gJ4X+z3LXX1TbiCulgPtaMqnapzVo5YUxtpdi0w0dcQ8ep/YPPwmlTCy9SWLl5JaSwlKf4ah5lWMSjwGvFgxnlgrkQXapy5xOUQYcgWANWdhiQ0PyzX2aYQJq+ds= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773216708; c=relaxed/simple; bh=ZUZzx5Yfgx+23VWqU8GHw8S3WxeDdGn4PN0EcqFSaIA=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=RJaqBYWg/mYYvLMfcYNt9Yjm5S7/TGLn+imgF+vmW528tPGqT0aLHTZhYibk+hVwge+ftD5E05FOEDKsAGOwx6I68I3IB0IwxK1+o21kLnIbHNqh3etPwFhX2NpwgpndiaL1DmCerP2nfFeYFx4SaUbThGQg73ooUd1+2Ce8rFc= 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 80C5E165C; Wed, 11 Mar 2026 01:11:39 -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 C08313F73B; Wed, 11 Mar 2026 01:11:37 -0700 (PDT) Message-ID: <3fb1c538-e666-4bb3-b3f4-6f631f4db325@arm.com> Date: Wed, 11 Mar 2026 13:41:35 +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: Lance Yang Cc: Liam.Howlett@oracle.com, akpm@linux-foundation.org, anshuman.khandual@arm.com, axelrasmussen@google.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, bhe@redhat.com, chrisl@kernel.org, david@kernel.org, harry.yoo@oracle.com, hughd@google.com, jannh@google.com, kas@kernel.org, kasong@tencent.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, ljs@kernel.org, mhocko@suse.com, nphamcs@gmail.com, pfalcato@suse.de, riel@surriel.com, rppt@kernel.org, ryan.roberts@arm.com, shikemeng@huaweicloud.com, surenb@google.com, vbabka@kernel.org, weixugc@google.com, willy@infradead.org, youngjun.park@lge.com, yuanchu@google.com, yuzhao@google.com, ziy@nvidia.com References: <20260310073013.4069309-1-dev.jain@arm.com> <20260310125940.39707-1-lance.yang@linux.dev> Content-Language: en-US From: Dev Jain In-Reply-To: <20260310125940.39707-1-lance.yang@linux.dev> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 10/03/26 6:29 pm, Lance Yang 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: >> >> without patch: >> madvise(MADV_PAGEOUT) took 52192959 ns (52.193 ms) >> >> with patch: >> madvise(MADV_PAGEOUT) took 26676625 ns (26.677 ms) > > Good numbers! Just tested on x86 KVM with THP=never, no performance > regression observed. Thanks Lance! Although still I'll try to get no-regression numbers and perf-boost numbers on x86 myself and post it in next version. > > Cheers, > Lance >