All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Boichat <drinkcat@chromium.org>
To: hch@infradead.org
Cc: Robin Murphy <robin.murphy@arm.com>,
	willy@infradead.org, Christoph Lameter <cl@linux.com>,
	Levin Alexander <Alexander.Levin@microsoft.com>,
	Mike Rapoport <rppt@linux.vnet.ibm.com>,
	Huaisheng Ye <yehs1@lenovo.com>, Tomasz Figa <tfiga@google.com>,
	Will Deacon <will.deacon@arm.com>,
	lkml <linux-kernel@vger.kernel.org>,
	Pekka Enberg <penberg@kernel.org>,
	linux-mm@kvack.org, iommu@lists.linux-foundation.org,
	Michal Hocko <mhocko@suse.com>,
	linux-arm Mailing List <linux-arm-kernel@lists.infradead.org>,
	David Rientjes <rientjes@google.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	yingjoe.chen@mediatek.com, Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Mel Gorman <mgorman@techsingularity.net>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vlastimil Babka <vbabka@suse.cz>
Subject: Re: [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables
Date: Fri, 23 Nov 2018 11:04:36 +0800	[thread overview]
Message-ID: <CANMq1KALUmxkhE8aaYzEbd7YodF1296KdVympOP+2mWVQ9zmDA@mail.gmail.com> (raw)
In-Reply-To: <20181122082336.GA2049@infradead.org>

On Thu, Nov 22, 2018 at 4:23 PM Christoph Hellwig <hch@infradead.org> wrote:
>
> On Wed, Nov 21, 2018 at 10:26:26PM +0000, Robin Murphy wrote:
> > TBH, if this DMA32 stuff is going to be contentious we could possibly just
> > rip out the offending kmem_cache - it seemed like good practice for the
> > use-case, but provided kzalloc(SZ_1K, gfp | GFP_DMA32) can be relied upon to
> > give the same 1KB alignment and chance of succeeding as the equivalent
> > kmem_cache_alloc(), then we could quite easily make do with that instead.
>
> Neither is the slab support for kmalloc, not do kmalloc allocations
> have useful alignment apparently (at least if you use slub debug).
>
> But I do agree with the sentiment of not wanting to spread GFP_DMA32
> futher into the slab allocator.
>
> I think you want a simple genalloc allocator for this rather special
> use case.

So I had a look at genalloc, we'd need to add pre-allocated memory
using gen_pool_add [1]. There can be up to 4096 L2 page tables, so we
may need to pre-allocate 4MB of memory (1KB per L2 page table). We
could add chunks on demand, but then it'd be difficult to free them up
(genalloc does not have a "gen_pool_remove" call). So basically if the
full 4MB end up being requested, we'd be stuck with that until the
iommu domain is freed (on the arm64 Mediatek platforms I looked at,
there is only one iommu domain, and it never gets freed).

page_frag would at least have a chance to reclaim those pages (if I
understand Christoph's statement correctly)

Robin: Do you have some ideas of the lifetime/usage of L2 tables? If
they are usually few of them, or if they don't get reclaimed easily,
some on demand genalloc allocation would be ok (or even 4MB allocation
on init, if we're willing to take that hit). If they get allocated and
freed together, maybe page_frag is a better option?

Thanks,

[1] https://www.kernel.org/doc/html/v4.19/core-api/genalloc.html

WARNING: multiple messages have this Message-ID (diff)
From: Nicolas Boichat <drinkcat-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
To: hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org
Cc: Pekka Enberg <penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Michal Hocko <mhocko-IBi9RG/b67k@public.gmane.org>,
	Andrew Morton
	<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
	Huaisheng Ye <yehs1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>,
	linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
	Mel Gorman
	<mgorman-3eNAlZScCAx27rWaFMvyedHuzzzSOjJt@public.gmane.org>,
	Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
	lkml <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org,
	Levin Alexander
	<Alexander.Levin-0li6OtcxBFHby3iVrkZq2A@public.gmane.org>,
	Tomasz Figa <tfiga-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	Mike Rapoport
	<rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>,
	Vlastimil Babka <vbabka-AlSwsSmVLrQ@public.gmane.org>,
	David Rientjes <rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Matthias Brugger
	<matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	yingjoe.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
	Christoph Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>,
	Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>,
	Joonsoo Kim <iamjoonsoo.kim-Hm3cg6mZ9cc@public.gmane.org>,
	linux-arm Mailing List
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>
Subject: Re: [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables
Date: Fri, 23 Nov 2018 11:04:36 +0800	[thread overview]
Message-ID: <CANMq1KALUmxkhE8aaYzEbd7YodF1296KdVympOP+2mWVQ9zmDA@mail.gmail.com> (raw)
In-Reply-To: <20181122082336.GA2049-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>

On Thu, Nov 22, 2018 at 4:23 PM Christoph Hellwig <hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org> wrote:
>
> On Wed, Nov 21, 2018 at 10:26:26PM +0000, Robin Murphy wrote:
> > TBH, if this DMA32 stuff is going to be contentious we could possibly just
> > rip out the offending kmem_cache - it seemed like good practice for the
> > use-case, but provided kzalloc(SZ_1K, gfp | GFP_DMA32) can be relied upon to
> > give the same 1KB alignment and chance of succeeding as the equivalent
> > kmem_cache_alloc(), then we could quite easily make do with that instead.
>
> Neither is the slab support for kmalloc, not do kmalloc allocations
> have useful alignment apparently (at least if you use slub debug).
>
> But I do agree with the sentiment of not wanting to spread GFP_DMA32
> futher into the slab allocator.
>
> I think you want a simple genalloc allocator for this rather special
> use case.

So I had a look at genalloc, we'd need to add pre-allocated memory
using gen_pool_add [1]. There can be up to 4096 L2 page tables, so we
may need to pre-allocate 4MB of memory (1KB per L2 page table). We
could add chunks on demand, but then it'd be difficult to free them up
(genalloc does not have a "gen_pool_remove" call). So basically if the
full 4MB end up being requested, we'd be stuck with that until the
iommu domain is freed (on the arm64 Mediatek platforms I looked at,
there is only one iommu domain, and it never gets freed).

page_frag would at least have a chance to reclaim those pages (if I
understand Christoph's statement correctly)

Robin: Do you have some ideas of the lifetime/usage of L2 tables? If
they are usually few of them, or if they don't get reclaimed easily,
some on demand genalloc allocation would be ok (or even 4MB allocation
on init, if we're willing to take that hit). If they get allocated and
freed together, maybe page_frag is a better option?

Thanks,

[1] https://www.kernel.org/doc/html/v4.19/core-api/genalloc.html

WARNING: multiple messages have this Message-ID (diff)
From: drinkcat@chromium.org (Nicolas Boichat)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables
Date: Fri, 23 Nov 2018 11:04:36 +0800	[thread overview]
Message-ID: <CANMq1KALUmxkhE8aaYzEbd7YodF1296KdVympOP+2mWVQ9zmDA@mail.gmail.com> (raw)
In-Reply-To: <20181122082336.GA2049@infradead.org>

On Thu, Nov 22, 2018 at 4:23 PM Christoph Hellwig <hch@infradead.org> wrote:
>
> On Wed, Nov 21, 2018 at 10:26:26PM +0000, Robin Murphy wrote:
> > TBH, if this DMA32 stuff is going to be contentious we could possibly just
> > rip out the offending kmem_cache - it seemed like good practice for the
> > use-case, but provided kzalloc(SZ_1K, gfp | GFP_DMA32) can be relied upon to
> > give the same 1KB alignment and chance of succeeding as the equivalent
> > kmem_cache_alloc(), then we could quite easily make do with that instead.
>
> Neither is the slab support for kmalloc, not do kmalloc allocations
> have useful alignment apparently (at least if you use slub debug).
>
> But I do agree with the sentiment of not wanting to spread GFP_DMA32
> futher into the slab allocator.
>
> I think you want a simple genalloc allocator for this rather special
> use case.

So I had a look at genalloc, we'd need to add pre-allocated memory
using gen_pool_add [1]. There can be up to 4096 L2 page tables, so we
may need to pre-allocate 4MB of memory (1KB per L2 page table). We
could add chunks on demand, but then it'd be difficult to free them up
(genalloc does not have a "gen_pool_remove" call). So basically if the
full 4MB end up being requested, we'd be stuck with that until the
iommu domain is freed (on the arm64 Mediatek platforms I looked at,
there is only one iommu domain, and it never gets freed).

page_frag would at least have a chance to reclaim those pages (if I
understand Christoph's statement correctly)

Robin: Do you have some ideas of the lifetime/usage of L2 tables? If
they are usually few of them, or if they don't get reclaimed easily,
some on demand genalloc allocation would be ok (or even 4MB allocation
on init, if we're willing to take that hit). If they get allocated and
freed together, maybe page_frag is a better option?

Thanks,

[1] https://www.kernel.org/doc/html/v4.19/core-api/genalloc.html

  reply	other threads:[~2018-11-23  3:04 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-11  9:03 [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables Nicolas Boichat
2018-11-11  9:03 ` Nicolas Boichat
2018-11-11  9:03 ` Nicolas Boichat
2018-11-11  9:03 ` [PATCH v2 1/3] mm: slab/slub: Add check_slab_flags function to check for valid flags Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03 ` [PATCH v2 2/3] mm: Add support for SLAB_CACHE_DMA32 Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-21 18:32   ` Christopher Lameter
2018-11-21 18:32     ` Christopher Lameter
2018-11-22  0:52     ` Nicolas Boichat
2018-11-22  0:52       ` Nicolas Boichat
2018-11-22  0:52       ` Nicolas Boichat
2018-11-11  9:03 ` [PATCH v2 3/3] iommu/io-pgtable-arm-v7s: Request DMA32 memory, and improve debugging Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-21 16:46   ` Will Deacon
2018-11-21 16:46     ` Will Deacon
2018-11-21 17:38     ` Christopher Lameter
2018-11-21 17:38       ` Christopher Lameter
2018-11-21 17:43       ` Robin Murphy
2018-11-21 17:43         ` Robin Murphy
2018-11-21 18:18         ` Christopher Lameter
2018-11-21 18:18           ` Christopher Lameter
2018-11-21 18:02     ` Michal Hocko
2018-11-21 18:02       ` Michal Hocko
2018-11-22  1:20       ` Nicolas Boichat
2018-11-22  1:20         ` Nicolas Boichat
2018-11-22  1:20         ` Nicolas Boichat
2018-11-23 12:15         ` Vlastimil Babka
2018-11-23 12:15           ` Vlastimil Babka
2018-11-21 18:20 ` [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables Christopher Lameter
2018-11-21 18:20   ` Christopher Lameter
2018-11-21 21:38   ` Matthew Wilcox
2018-11-21 21:38     ` Matthew Wilcox
2018-11-21 21:38     ` Matthew Wilcox
2018-11-21 22:26     ` Robin Murphy
2018-11-21 22:26       ` Robin Murphy
2018-11-21 22:26       ` Robin Murphy
2018-11-22  1:05       ` Nicolas Boichat
2018-11-22  1:05         ` Nicolas Boichat
2018-11-22  1:05         ` Nicolas Boichat
2018-11-22  2:35       ` Matthew Wilcox
2018-11-22  2:35         ` Matthew Wilcox
2018-11-22  2:35         ` Matthew Wilcox
2018-11-22  5:56         ` Nicolas Boichat
2018-11-22  5:56           ` Nicolas Boichat
2018-11-22  5:56           ` Nicolas Boichat
2018-11-22  8:26         ` Christoph Hellwig
2018-11-22  8:26           ` Christoph Hellwig
2018-11-22  8:26           ` Christoph Hellwig
2018-11-22 15:16           ` Matthew Wilcox
2018-11-22 15:16             ` Matthew Wilcox
2018-11-22 15:16             ` Matthew Wilcox
2018-11-22 15:19             ` Christoph Hellwig
2018-11-22 15:19               ` Christoph Hellwig
2018-11-22 15:19               ` Christoph Hellwig
2018-11-22  8:23       ` Christoph Hellwig
2018-11-22  8:23         ` Christoph Hellwig
2018-11-22  8:23         ` Christoph Hellwig
2018-11-23  3:04         ` Nicolas Boichat [this message]
2018-11-23  3:04           ` Nicolas Boichat
2018-11-23  3:04           ` Nicolas Boichat
2018-11-23  5:37           ` Nicolas Boichat
2018-11-23  5:37             ` Nicolas Boichat
2018-11-23  5:37             ` Nicolas Boichat
2018-11-23 12:23         ` Vlastimil Babka
2018-11-23 12:23           ` Vlastimil Babka
2018-11-23 12:23           ` Vlastimil Babka
2018-11-23 12:30           ` Michal Hocko
2018-11-23 12:30             ` Michal Hocko
2018-11-23 12:30             ` Michal Hocko
2018-11-26  8:02           ` Christoph Hellwig
2018-11-26  8:02             ` Christoph Hellwig
2018-11-26  8:02             ` Christoph Hellwig
2018-11-28  8:55             ` Nicolas Boichat
2018-11-28  8:55               ` Nicolas Boichat
2018-11-28  8:55               ` Nicolas Boichat
2018-12-04  9:37 ` Nicolas Boichat
2018-12-04  9:37   ` Nicolas Boichat
2018-12-04 14:35   ` Vlastimil Babka
2018-12-04 14:35     ` Vlastimil Babka
2018-12-04 14:35     ` Vlastimil Babka
2018-12-05  2:04     ` Nicolas Boichat
2018-12-05  2:04       ` Nicolas Boichat
2018-12-05  2:04       ` Nicolas Boichat
2018-12-05  5:51       ` Nicolas Boichat
2018-12-05  5:51         ` Nicolas Boichat
2018-12-05  5:51         ` Nicolas Boichat
2018-12-05 14:41       ` Will Deacon
2018-12-05 14:41         ` Will Deacon
2018-12-05 14:41         ` Will Deacon
2018-12-04 16:28   ` Will Deacon
2018-12-04 16:28     ` Will Deacon
2018-12-04 16:28     ` Will Deacon

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=CANMq1KALUmxkhE8aaYzEbd7YodF1296KdVympOP+2mWVQ9zmDA@mail.gmail.com \
    --to=drinkcat@chromium.org \
    --cc=Alexander.Levin@microsoft.com \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=hch@infradead.org \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=matthias.bgg@gmail.com \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@suse.com \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=robin.murphy@arm.com \
    --cc=rppt@linux.vnet.ibm.com \
    --cc=tfiga@google.com \
    --cc=vbabka@suse.cz \
    --cc=will.deacon@arm.com \
    --cc=willy@infradead.org \
    --cc=yehs1@lenovo.com \
    --cc=yingjoe.chen@mediatek.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.