From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2FEACC54EAA for ; Mon, 30 Jan 2023 12:37:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BE20D6B0073; Mon, 30 Jan 2023 07:37:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B925C6B0074; Mon, 30 Jan 2023 07:37:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A5AE46B0075; Mon, 30 Jan 2023 07:37:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 950296B0073 for ; Mon, 30 Jan 2023 07:37:02 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 67DAE809EF for ; Mon, 30 Jan 2023 12:37:02 +0000 (UTC) X-FDA: 80411415084.15.0E4256A Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf07.hostedemail.com (Postfix) with ESMTP id 7DD9F40006 for ; Mon, 30 Jan 2023 12:37:00 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=Z+WmqlLu; spf=pass (imf07.hostedemail.com: domain of mhocko@suse.com designates 195.135.220.29 as permitted sender) smtp.mailfrom=mhocko@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675082220; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=1450QT1I5sWl0OhZRQWY9u52Bs4XcX/IrDlMZ/w1pZc=; b=wC3f+DI2mCWMmvbtmsf1hCybgwhqL6ReMnO33mOjy24/6705lM2SwKbXmHHBlcgrgNyiMF cGEphYUgUDbkaJC/h0MFjTB3aDDRVoGLF7Bu4RVZyiiZJV4OgALnPdIGk8DOfjWvfcmjD8 FUdxmaqq9ltEOFXdOxJgh7A4DQCXBTQ= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=Z+WmqlLu; spf=pass (imf07.hostedemail.com: domain of mhocko@suse.com designates 195.135.220.29 as permitted sender) smtp.mailfrom=mhocko@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675082220; a=rsa-sha256; cv=none; b=v502rMEkibhCaXxy42zY8nZZ6cSZMAOQPL60ScDoLld/+ETSYjA0XDjNuiYQ/1ZCzjRKhY fuwCu3AboxnmqRku1GKS2kYg5LxPmNHv4d3E4pHXJEkBE4nKdgS/yxBtqr0r1InPoyCUms S6UdHqWzMTxJ59a17Q4DNNqcIrxjmUw= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id F34A51FD67; Mon, 30 Jan 2023 12:36:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1675082219; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=1450QT1I5sWl0OhZRQWY9u52Bs4XcX/IrDlMZ/w1pZc=; b=Z+WmqlLuRjOFu1Oh8r1mI+f1kJ1O3XSdQ8+mzoO2lqUfzYf3EeCXsiGp0FLZyLF/0wcuPD zA1vPqXNoF7H6hOT5MsrvYxx5n2w8Im1fF3wfEGLn912gySg0+atCk1FzZ2bXG3BvieulG Q4jhG1b4zjl6uDmJhvuCHFf1KUEOjtc= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id D912B13444; Mon, 30 Jan 2023 12:36:58 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id SrUrNOq512MlRQAAMHmgww (envelope-from ); Mon, 30 Jan 2023 12:36:58 +0000 Date: Mon, 30 Jan 2023 13:36:58 +0100 From: Michal Hocko To: Mike Kravetz Cc: Andrew Morton , David Hildenbrand , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Naoya Horiguchi , James Houghton , Peter Xu , Yang Shi , Vishal Moola , Matthew Wilcox , Muchun Song , stable@vger.kernel.org Subject: Re: [PATCH 1/2] mm: hugetlb: proc: check for hugetlb shared PMD in /proc/PID/smaps Message-ID: References: <20230126222721.222195-1-mike.kravetz@oracle.com> <20230126222721.222195-2-mike.kravetz@oracle.com> <4ad5163f-5368-0bd8-de9b-1400a7a653ed@redhat.com> <20230127150411.7c3b7b99fa4884a6af0b9351@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Stat-Signature: 8etxqzgqzohchcfdch6woztfhd1e9u7w X-Rspam-User: X-Rspamd-Queue-Id: 7DD9F40006 X-Rspamd-Server: rspam06 X-HE-Tag: 1675082220-767622 X-HE-Meta: U2FsdGVkX1+SdrRfY4zOGONWOhswn0VQrdrvvCa29dzVyX2cRMM/rrWXZYXye1BCcjdZDkeJzBimj5FtsWFk0hBnDO5uKONYAzpVmJTP8jx0GGExJpTDlo94UPu6C7Sl0cHPLVTOH3t9j9Jo+C7parbNmo1BCf7Ep3ja1ra3mszzRjlmJgEy10cIBl43knBikzLPp57oQU4oCacc7zGhPuIfBjOMRwASuDDshE5a+MfCsAZJqOuoNGJQB5eg58WmVD9k5piFvtIpOSxYsWuhlncLvvC0JLbVDqeRQOZibZCu+C32G1Vk9PZKJcTAVGYgwHcbj3sj0slEB03+6EdOXTHTjZ8+2v03UAlI5G25X8LyjK8oxWG236ShYWaiy7TZu6rMTeBDUO2ZwGga0uDWYPBW6f4+JY/Nz3aBrdkbC+82kw8C6xNftiPe2Eyk29kxsZ3dM2SHCPM/rUX0ZQQNTbI7+9TrCYjsVDjkr1AYY6WsX7a1aUZ086eCkrBGGGYnbC8iOcOYMsRHjW+jWSCdnSkWG1cvPpzRUK2fwRwzlBXr0TEFzD4HH2rNnHCNfEDkwRNyyVBaOkpFgvX7Hk4BExjzFn7x5qvxujpBhcVaV5QANJ0+ON1JyJS2z5aC0szcgj0tgsMRYV99a2AJNMPpEe3dQFA8E2Cy4yUk6JHKtBBiIzXXuUQN5RovVdgQ1/Kc8x6y3WJ/G8qDXbt1pq7ZOrus4HVQwuOL0wReLm0IWoStyRQQHOO9FPsINke8DK63pDYjeQe5Ybuas+D43FcFw55UNqrpw8+tUapMrPeG8/wRjXw5QfUrfVaY1GsyxUbenq+18l7k3tlz6i000UUBUZe5BbkO9hanDl/6mEG8VZCC2aEKVFZAkY/L/5JbtlAFdQw5qmFP3I4f5TUd2he7Vuqwmin6TemZz9OYLvrjCmsbUv8gayMFr9SF6tzeu18+xMCMYIhWQ2RjW3GZiHz ct17IAKi U/rxcnPPZwuF3fz8LI5VC2NBw0mVVVbYwrNsOaUHDJprF825rZv5v9m58EGcwHso9fcEujzLxlgrhJ6UqQUtJVRsD3uYRWdwLm+e2EZd4bQvx9KDX5AqVIw9kj4DweHwd5qrI4jmAsExQFMxel0Ad2cKwIFxVNWYZ14uxlt+9+wzlNyDgXiIOcOjlX4iRirNYf2wOYeoRTEEVfodZ0BoB0H4vVK9kIXhE8CafQxQK3KnmCBoaYbnv9rrjyyBAX0ZBPclKOv3h+WrOFdU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri 27-01-23 17:12:05, Mike Kravetz wrote: > On 01/27/23 15:04, Andrew Morton wrote: > > On Fri, 27 Jan 2023 17:23:39 +0100 David Hildenbrand wrote: > > > > > On 26.01.23 23:27, Mike Kravetz wrote: > > > > A hugetlb page will have a mapcount of 1 if mapped by multiple processes > > > > via a shared PMD. This is because only the first process increases the > > > > map count, and subsequent processes just add the shared PMD page to > > > > their page table. > > > > > > > > page_mapcount is being used to decide if a hugetlb page is shared or > > > > private in /proc/PID/smaps. Pages referenced via a shared PMD were > > > > incorrectly being counted as private. > > > > > > > > To fix, check for a shared PMD if mapcount is 1. If a shared PMD is > > > > found count the hugetlb page as shared. A new helper to check for a > > > > shared PMD is added. > > > > > > > ... > > > > > > > --- a/fs/proc/task_mmu.c > > > > +++ b/fs/proc/task_mmu.c > > > > @@ -749,8 +749,14 @@ static int smaps_hugetlb_range(pte_t *pte, unsigned long hmask, > > > > > > > > if (mapcount >= 2) > > > > mss->shared_hugetlb += huge_page_size(hstate_vma(vma)); > > > > - else > > > > - mss->private_hugetlb += huge_page_size(hstate_vma(vma)); > > > > + else { > > > > > > Better: > > > > > > if (mapcount >= 2 || hugetlb_pmd_shared(pte)) > > > mss->shared_hugetlb += huge_page_size(hstate_vma(vma)); > > > else > > > mss->private_hugetlb += huge_page_size(hstate_vma(vma)); > > > > Yup. And that local doesn't add any value? > > > > --- a/fs/proc/task_mmu.c~mm-hugetlb-proc-check-for-hugetlb-shared-pmd-in-proc-pid-smaps-fix > > +++ a/fs/proc/task_mmu.c > > @@ -745,18 +745,10 @@ static int smaps_hugetlb_range(pte_t *pt > > page = pfn_swap_entry_to_page(swpent); > > } > > if (page) { > > - int mapcount = page_mapcount(page); > > - > > - if (mapcount >= 2) > > + if (page_mapcount(page) >= 2 || hugetlb_pmd_shared(pte)) > > mss->shared_hugetlb += huge_page_size(hstate_vma(vma)); > > - else { > > - if (hugetlb_pmd_shared(pte)) > > - mss->shared_hugetlb += > > - huge_page_size(hstate_vma(vma)); > > - else > > - mss->private_hugetlb += > > - huge_page_size(hstate_vma(vma)); > > - } > > + else > > + mss->private_hugetlb += huge_page_size(hstate_vma(vma)); > > } > > return 0; > > } > > Thank you both! That looks much better. Yes, this looks simple enough. My only concern would be that this special casing might be required on other places which is hard to evaluate. I thought PSS reported by smaps would be broken as well but it seems pss is not really accounted for hugetlb mappings at all. Have you tried to look into {in,de}creasing the map count of the page when the the pte is {un}shared for it? -- Michal Hocko SUSE Labs