From: Mike Kravetz <mike.kravetz-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
To: Mina Almasry <almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: shuah-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
gthelen-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v12 6/9] hugetlb_cgroup: support noreserve mappings
Date: Tue, 18 Feb 2020 12:57:36 -0800 [thread overview]
Message-ID: <ace490c3-03b3-da85-bbdf-00959a71ff2f@oracle.com> (raw)
In-Reply-To: <20200211213128.73302-6-almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
On 2/11/20 1:31 PM, Mina Almasry wrote:
> Support MAP_NORESERVE accounting as part of the new counter.
>
> For each hugepage allocation, at allocation time we check if there is
> a reservation for this allocation or not. If there is a reservation for
> this allocation, then this allocation was charged at reservation time,
> and we don't re-account it. If there is no reserevation for this
> allocation, we charge the appropriate hugetlb_cgroup.
>
> The hugetlb_cgroup to uncharge for this allocation is stored in
> page[3].private. We use new APIs added in an earlier patch to set this
> pointer.
>
> Signed-off-by: Mina Almasry <almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
>
> ---
>
> Changes in v12:
> - Minor rebase to new interface for readability.
>
> Changes in v10:
> - Refactored deferred_reserve check.
>
> ---
> mm/hugetlb.c | 27 ++++++++++++++++++++++++++-
> 1 file changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index a9171c3cbed6b..2d62dd35399db 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -1342,6 +1342,8 @@ static void __free_huge_page(struct page *page)
> clear_page_huge_active(page);
> hugetlb_cgroup_uncharge_page(hstate_index(h),
> pages_per_huge_page(h), page);
> + hugetlb_cgroup_uncharge_page_rsvd(hstate_index(h),
> + pages_per_huge_page(h), page);
> if (restore_reserve)
> h->resv_huge_pages++;
>
> @@ -2175,6 +2177,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
> long gbl_chg;
> int ret, idx;
> struct hugetlb_cgroup *h_cg;
> + bool deferred_reserve;
>
> idx = hstate_index(h);
> /*
> @@ -2212,9 +2215,19 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
> gbl_chg = 1;
> }
>
> + /* If this allocation is not consuming a reservation, charge it now.
> + */
> + deferred_reserve = map_chg || avoid_reserve || !vma_resv_map(vma);
> + if (deferred_reserve) {
> + ret = hugetlb_cgroup_charge_cgroup_rsvd(
> + idx, pages_per_huge_page(h), &h_cg);
> + if (ret)
> + goto out_subpool_put;
> + }
> +
> ret = hugetlb_cgroup_charge_cgroup(idx, pages_per_huge_page(h), &h_cg);
> if (ret)
> - goto out_subpool_put;
> + goto out_uncharge_cgroup_reservation;
>
> spin_lock(&hugetlb_lock);
> /*
> @@ -2237,6 +2250,14 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
> /* Fall through */
> }
> hugetlb_cgroup_commit_charge(idx, pages_per_huge_page(h), h_cg, page);
> + /* If allocation is not consuming a reservation, also store the
> + * hugetlb_cgroup pointer on the page.
> + */
> + if (deferred_reserve) {
> + hugetlb_cgroup_commit_charge_rsvd(idx, pages_per_huge_page(h),
> + h_cg, page);
> + }
> +
This started before your new code, but those two cgroup_commit_charge calls
could/should be done outside the hugetlb_lock. No need to change as it is
not a big deal. Those calls only set fields in the page structs.
Reviewed-by: Mike Kravetz <mike.kravetz-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
--
Mike Kravetz
> spin_unlock(&hugetlb_lock);
>
> set_page_private(page, (unsigned long)spool);
> @@ -2261,6 +2282,10 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
>
> out_uncharge_cgroup:
> hugetlb_cgroup_uncharge_cgroup(idx, pages_per_huge_page(h), h_cg);
> +out_uncharge_cgroup_reservation:
> + if (deferred_reserve)
> + hugetlb_cgroup_uncharge_cgroup_rsvd(idx, pages_per_huge_page(h),
> + h_cg);
> out_subpool_put:
> if (map_chg || avoid_reserve)
> hugepage_subpool_put_pages(spool, 1);
> --
> 2.25.0.225.g125e21ebc7-goog
>
WARNING: multiple messages have this Message-ID (diff)
From: Mike Kravetz <mike.kravetz@oracle.com>
To: Mina Almasry <almasrymina@google.com>
Cc: shuah@kernel.org, rientjes@google.com, shakeelb@google.com,
gthelen@google.com, akpm@linux-foundation.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-kselftest@vger.kernel.org, cgroups@vger.kernel.org
Subject: Re: [PATCH v12 6/9] hugetlb_cgroup: support noreserve mappings
Date: Tue, 18 Feb 2020 12:57:36 -0800 [thread overview]
Message-ID: <ace490c3-03b3-da85-bbdf-00959a71ff2f@oracle.com> (raw)
In-Reply-To: <20200211213128.73302-6-almasrymina@google.com>
On 2/11/20 1:31 PM, Mina Almasry wrote:
> Support MAP_NORESERVE accounting as part of the new counter.
>
> For each hugepage allocation, at allocation time we check if there is
> a reservation for this allocation or not. If there is a reservation for
> this allocation, then this allocation was charged at reservation time,
> and we don't re-account it. If there is no reserevation for this
> allocation, we charge the appropriate hugetlb_cgroup.
>
> The hugetlb_cgroup to uncharge for this allocation is stored in
> page[3].private. We use new APIs added in an earlier patch to set this
> pointer.
>
> Signed-off-by: Mina Almasry <almasrymina@google.com>
>
> ---
>
> Changes in v12:
> - Minor rebase to new interface for readability.
>
> Changes in v10:
> - Refactored deferred_reserve check.
>
> ---
> mm/hugetlb.c | 27 ++++++++++++++++++++++++++-
> 1 file changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index a9171c3cbed6b..2d62dd35399db 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -1342,6 +1342,8 @@ static void __free_huge_page(struct page *page)
> clear_page_huge_active(page);
> hugetlb_cgroup_uncharge_page(hstate_index(h),
> pages_per_huge_page(h), page);
> + hugetlb_cgroup_uncharge_page_rsvd(hstate_index(h),
> + pages_per_huge_page(h), page);
> if (restore_reserve)
> h->resv_huge_pages++;
>
> @@ -2175,6 +2177,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
> long gbl_chg;
> int ret, idx;
> struct hugetlb_cgroup *h_cg;
> + bool deferred_reserve;
>
> idx = hstate_index(h);
> /*
> @@ -2212,9 +2215,19 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
> gbl_chg = 1;
> }
>
> + /* If this allocation is not consuming a reservation, charge it now.
> + */
> + deferred_reserve = map_chg || avoid_reserve || !vma_resv_map(vma);
> + if (deferred_reserve) {
> + ret = hugetlb_cgroup_charge_cgroup_rsvd(
> + idx, pages_per_huge_page(h), &h_cg);
> + if (ret)
> + goto out_subpool_put;
> + }
> +
> ret = hugetlb_cgroup_charge_cgroup(idx, pages_per_huge_page(h), &h_cg);
> if (ret)
> - goto out_subpool_put;
> + goto out_uncharge_cgroup_reservation;
>
> spin_lock(&hugetlb_lock);
> /*
> @@ -2237,6 +2250,14 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
> /* Fall through */
> }
> hugetlb_cgroup_commit_charge(idx, pages_per_huge_page(h), h_cg, page);
> + /* If allocation is not consuming a reservation, also store the
> + * hugetlb_cgroup pointer on the page.
> + */
> + if (deferred_reserve) {
> + hugetlb_cgroup_commit_charge_rsvd(idx, pages_per_huge_page(h),
> + h_cg, page);
> + }
> +
This started before your new code, but those two cgroup_commit_charge calls
could/should be done outside the hugetlb_lock. No need to change as it is
not a big deal. Those calls only set fields in the page structs.
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
--
Mike Kravetz
> spin_unlock(&hugetlb_lock);
>
> set_page_private(page, (unsigned long)spool);
> @@ -2261,6 +2282,10 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
>
> out_uncharge_cgroup:
> hugetlb_cgroup_uncharge_cgroup(idx, pages_per_huge_page(h), h_cg);
> +out_uncharge_cgroup_reservation:
> + if (deferred_reserve)
> + hugetlb_cgroup_uncharge_cgroup_rsvd(idx, pages_per_huge_page(h),
> + h_cg);
> out_subpool_put:
> if (map_chg || avoid_reserve)
> hugepage_subpool_put_pages(spool, 1);
> --
> 2.25.0.225.g125e21ebc7-goog
>
next prev parent reply other threads:[~2020-02-18 20:57 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-11 21:31 [PATCH v12 1/9] hugetlb_cgroup: Add hugetlb_cgroup reservation counter Mina Almasry
2020-02-11 21:31 ` Mina Almasry
2020-02-11 21:31 ` [PATCH v12 2/9] hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations Mina Almasry
2020-02-15 0:50 ` Mike Kravetz
2020-02-16 1:21 ` David Rientjes
2020-02-11 21:31 ` [PATCH v12 4/9] hugetlb: disable region_add file_region coalescing Mina Almasry
[not found] ` <20200211213128.73302-4-almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2020-02-15 1:27 ` Mike Kravetz
2020-02-15 1:27 ` Mike Kravetz
2020-02-16 1:25 ` David Rientjes
2020-02-16 1:25 ` David Rientjes
2020-02-11 21:31 ` [PATCH v12 6/9] hugetlb_cgroup: support noreserve mappings Mina Almasry
[not found] ` <20200211213128.73302-6-almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2020-02-18 20:57 ` Mike Kravetz [this message]
2020-02-18 20:57 ` Mike Kravetz
2020-02-11 21:31 ` [PATCH v12 9/9] hugetlb_cgroup: Add hugetlb_cgroup reservation docs Mina Almasry
[not found] ` <20200211213128.73302-9-almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2020-02-20 0:03 ` Mina Almasry
2020-02-20 0:03 ` Mina Almasry
2020-02-20 0:18 ` Mike Kravetz
2020-02-20 0:18 ` Mike Kravetz
[not found] ` <20200211213128.73302-1-almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2020-02-11 21:31 ` [PATCH v12 3/9] hugetlb_cgroup: add reservation accounting for private mappings Mina Almasry
2020-02-11 21:31 ` Mina Almasry
2020-02-11 21:31 ` [PATCH v12 5/9] hugetlb_cgroup: add accounting for shared mappings Mina Almasry
2020-02-11 21:31 ` Mina Almasry
2020-02-16 1:29 ` David Rientjes
[not found] ` <20200211213128.73302-5-almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2020-02-18 18:07 ` Mike Kravetz
2020-02-18 18:07 ` Mike Kravetz
2020-02-11 21:31 ` [PATCH v12 7/9] hugetlb: support file_region coalescing again Mina Almasry
2020-02-11 21:31 ` Mina Almasry
2020-02-16 1:29 ` David Rientjes
2020-02-19 3:28 ` Mike Kravetz
2020-02-19 7:54 ` Mina Almasry
2020-02-19 23:36 ` [PATCH] hugetlb: Remove check_coalesce_bug debug code Mina Almasry
2020-02-19 23:36 ` Mina Almasry
2020-02-20 0:07 ` Mike Kravetz
2020-02-11 21:31 ` [PATCH v12 8/9] hugetlb_cgroup: Add hugetlb_cgroup reservation tests Mina Almasry
2020-02-11 21:31 ` Mina Almasry
2020-02-12 8:50 ` Sandipan Das
[not found] ` <37a49c35-567f-1663-33cd-3dac150020a0-tEXmvtCZX7AybS5Ee8rs3A@public.gmane.org>
2020-02-20 0:05 ` Mina Almasry
2020-02-20 0:05 ` Mina Almasry
[not found] ` <20200211213128.73302-8-almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2020-02-21 0:52 ` Mike Kravetz
2020-02-21 0:52 ` Mike Kravetz
2020-02-11 23:19 ` [PATCH v12 1/9] hugetlb_cgroup: Add hugetlb_cgroup reservation counter Andrew Morton
2020-02-11 23:19 ` Andrew Morton
[not found] ` <20200211151906.637d1703e4756066583b89da-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2020-02-18 14:21 ` Qian Cai
2020-02-18 14:21 ` Qian Cai
[not found] ` <1582035660.7365.90.camel-J5quhbR+WMc@public.gmane.org>
2020-02-18 18:35 ` Mina Almasry
2020-02-18 18:35 ` Mina Almasry
2020-02-18 18:41 ` Qian Cai
[not found] ` <CAHS8izO5=vKs-v9v=Di3hQXBD41+_YpYarXn1yZu9YE6SR-i6Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-02-18 19:14 ` Mike Kravetz
2020-02-18 19:14 ` Mike Kravetz
2020-02-18 19:25 ` Mina Almasry
2020-02-18 21:36 ` Mina Almasry
[not found] ` <CAHS8izODfKaLqWAehhR_XuN=FRgmWBE7+eCJMD2HGig8s+zvwg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-02-18 21:41 ` Mike Kravetz
2020-02-18 21:41 ` Mike Kravetz
[not found] ` <9d6690e9-0dd4-f779-89b2-e02ff9a517e4-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2020-02-18 22:27 ` Mina Almasry
2020-02-18 22:27 ` Mina Almasry
2020-02-19 19:05 ` Mina Almasry
[not found] ` <CAHS8izPUFQWq3PzhhRzp7u11173_-cmRkNuQWEswS51Xz6ZM0Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-02-19 21:06 ` Andrew Morton
2020-02-19 21:06 ` Andrew Morton
2020-02-20 19:22 ` Mina Almasry
2020-02-21 0:28 ` Andrew Morton
[not found] ` <20200220162813.aea8a14fe050473b73440323-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2020-02-21 0:41 ` Mike Kravetz
2020-02-21 0:41 ` Mike Kravetz
[not found] ` <0cdd654b-a1f6-fea2-e448-209fbbe14b5c-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2020-02-21 1:52 ` Mina Almasry
2020-02-21 1:52 ` Mina Almasry
[not found] ` <20200219130648.83e6810848774c6fd649c445-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2020-02-21 20:19 ` Mina Almasry
2020-02-21 20:19 ` Mina Almasry
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=ace490c3-03b3-da85-bbdf-00959a71ff2f@oracle.com \
--to=mike.kravetz-qhclzuegtsvqt0dzr+alfa@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=almasrymina-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=gthelen-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=shuah-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/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.