From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Hugh Dickins <hughd@google.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Sasha Levin <sasha.levin@oracle.com>,
Minchan Kim <minchan@kernel.org>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Vladimir Davydov <vdavydov@parallels.com>
Subject: Re: [PATCH 4/4] mm: prepare page_referenced() and page_idle to new THP refcounting
Date: Mon, 9 Nov 2015 01:40:16 +0200 [thread overview]
Message-ID: <20151108234016.GC29600@node.shutemov.name> (raw)
In-Reply-To: <20151106143900.e61c38b5bf3e44547873d9d2@linux-foundation.org>
On Fri, Nov 06, 2015 at 02:39:00PM -0800, Andrew Morton wrote:
> On Fri, 6 Nov 2015 12:29:21 +0200 "Kirill A. Shutemov" <kirill@shutemov.name> wrote:
>
> > > page_mapcount() is getting pretty bad too.
> >
> > Do you want me to uninline slow path (PageCompound())?
>
> I guess so. Uninlining all of page_mapcount() does this:
>
> gcc-4.4.4:
>
> text data bss dec hex filename
> 973702 273954 831512 2079168 1fb9c0 mm/built-in.o-before
> 970148 273954 831000 2075102 1fa9de mm/built-in.o-after
>
> That's quite a bit of bloat.
>
> I don't know why bss changed; this usually (always?) happens. Seems
> bogus.
Here it is.
WARNING: multiple messages have this Message-ID (diff)
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Hugh Dickins <hughd@google.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Sasha Levin <sasha.levin@oracle.com>,
Minchan Kim <minchan@kernel.org>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Vladimir Davydov <vdavydov@parallels.com>
Subject: Re: [PATCH 4/4] mm: prepare page_referenced() and page_idle to new THP refcounting
Date: Mon, 9 Nov 2015 01:40:16 +0200 [thread overview]
Message-ID: <20151108234016.GC29600@node.shutemov.name> (raw)
In-Reply-To: <20151106143900.e61c38b5bf3e44547873d9d2@linux-foundation.org>
On Fri, Nov 06, 2015 at 02:39:00PM -0800, Andrew Morton wrote:
> On Fri, 6 Nov 2015 12:29:21 +0200 "Kirill A. Shutemov" <kirill@shutemov.name> wrote:
>
> > > page_mapcount() is getting pretty bad too.
> >
> > Do you want me to uninline slow path (PageCompound())?
>
> I guess so. Uninlining all of page_mapcount() does this:
>
> gcc-4.4.4:
>
> text data bss dec hex filename
> 973702 273954 831512 2079168 1fb9c0 mm/built-in.o-before
> 970148 273954 831000 2075102 1fa9de mm/built-in.o-after
>
> That's quite a bit of bloat.
>
> I don't know why bss changed; this usually (always?) happens. Seems
> bogus.
Here it is.
>From 4bd3af3b6b9498254bd71e8288721dcff641156c Mon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Date: Mon, 9 Nov 2015 01:34:08 +0200
Subject: [PATCH] mm: uninline slowpath of page_mapcount()
Let's move page_mapcount() part for compound page into mm/util.c.
make allyesconfig:
text data bss dec hex filename
188515051 153360535 85458720 427334306 19789aa2 vmlinux.o.before
188512917 153356439 85458720 427328076 1978824c vmlinux.o.after
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
---
include/linux/mm.h | 14 +++++---------
mm/util.c | 14 ++++++++++++++
2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index f874d2a1d1a6..72edbbec7b91 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -417,19 +417,15 @@ static inline void page_mapcount_reset(struct page *page)
atomic_set(&(page)->_mapcount, -1);
}
+int __page_mapcount(struct page *page);
+
static inline int page_mapcount(struct page *page)
{
- int ret;
VM_BUG_ON_PAGE(PageSlab(page), page);
- ret = atomic_read(&page->_mapcount) + 1;
- if (PageCompound(page)) {
- page = compound_head(page);
- ret += atomic_read(compound_mapcount_ptr(page)) + 1;
- if (PageDoubleMap(page))
- ret--;
- }
- return ret;
+ if (unlikely(PageCompound(page)))
+ return __page_mapcount(page);
+ return atomic_read(&page->_mapcount) + 1;
}
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
diff --git a/mm/util.c b/mm/util.c
index 902b65a43899..68535c0bb9da 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -376,6 +376,20 @@ struct address_space *page_mapping(struct page *page)
return mapping;
}
+/* Slow path of page_mapcount() for compound pages */
+int __page_mapcount(struct page *page)
+{
+ int ret;
+
+ page = compound_head(page);
+ ret = atomic_read(&page->_mapcount) + 1;
+ ret += atomic_read(compound_mapcount_ptr(page)) + 1;
+ if (PageDoubleMap(page))
+ ret--;
+ return ret;
+}
+EXPORT_SYMBOL_GPL(__page_mapcount);
+
int overcommit_ratio_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
loff_t *ppos)
--
Kirill A. Shutemov
next prev parent reply other threads:[~2015-11-08 23:40 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-03 15:26 [PATCH 0/4] Bugfixes for THP refcounting Kirill A. Shutemov
2015-11-03 15:26 ` Kirill A. Shutemov
2015-11-03 15:26 ` [PATCH 1/4] mm: do not crash on PageDoubleMap() for non-head pages Kirill A. Shutemov
2015-11-03 15:26 ` Kirill A. Shutemov
2015-11-03 15:26 ` [PATCH 2/4] mm: duplicate rmap reference for hugetlb pages as compound Kirill A. Shutemov
2015-11-03 15:26 ` Kirill A. Shutemov
2015-11-03 15:26 ` [PATCH 3/4] thp: fix split vs. unmap race Kirill A. Shutemov
2015-11-03 15:26 ` Kirill A. Shutemov
2015-11-03 15:26 ` [PATCH 4/4] mm: prepare page_referenced() and page_idle to new THP refcounting Kirill A. Shutemov
2015-11-03 15:26 ` Kirill A. Shutemov
2015-11-05 9:10 ` Vladimir Davydov
2015-11-05 9:10 ` Vladimir Davydov
2015-11-05 9:24 ` Kirill A. Shutemov
2015-11-05 9:24 ` Kirill A. Shutemov
2015-11-05 12:07 ` Vladimir Davydov
2015-11-05 12:07 ` Vladimir Davydov
2015-11-05 12:36 ` Kirill A. Shutemov
2015-11-05 12:36 ` Kirill A. Shutemov
2015-11-05 12:53 ` Vladimir Davydov
2015-11-05 12:53 ` Vladimir Davydov
2015-11-05 12:58 ` Kirill A. Shutemov
2015-11-05 12:58 ` Kirill A. Shutemov
2015-11-05 16:31 ` Vladimir Davydov
2015-11-05 16:31 ` Vladimir Davydov
2015-11-06 14:37 ` [PATCH] mm: add page_check_address_transhuge helper Vladimir Davydov
2015-11-06 14:37 ` Vladimir Davydov
2015-11-06 15:24 ` Kirill A. Shutemov
2015-11-06 15:24 ` Kirill A. Shutemov
2015-11-05 16:03 ` [PATCH 4/4] mm: prepare page_referenced() and page_idle to new THP refcounting Vladimir Davydov
2015-11-05 16:03 ` Vladimir Davydov
2015-11-05 17:27 ` Kirill A. Shutemov
2015-11-05 17:27 ` Kirill A. Shutemov
2015-11-06 0:32 ` Andrew Morton
2015-11-06 0:32 ` Andrew Morton
2015-11-06 10:29 ` Kirill A. Shutemov
2015-11-06 10:29 ` Kirill A. Shutemov
2015-11-06 22:39 ` Andrew Morton
2015-11-06 22:39 ` Andrew Morton
2015-11-08 23:40 ` Kirill A. Shutemov [this message]
2015-11-08 23:40 ` Kirill A. Shutemov
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=20151108234016.GC29600@node.shutemov.name \
--to=kirill@shutemov.name \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=hughd@google.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=n-horiguchi@ah.jp.nec.com \
--cc=sasha.levin@oracle.com \
--cc=vdavydov@parallels.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.