Linux NILFS development
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: Theodore Tso <tytso@mit.edu>
Cc: Jan Kara <jack@suse.com>, Mark Fasheh <mark@fasheh.com>,
	Joel Becker <jlbec@evilplan.org>,
	Joseph Qi <joseph.qi@linux.alibaba.com>,
	Ryusuke Konishi <konishi.ryusuke@gmail.com>,
	Viacheslav Dubeyko <slava@dubeyko.com>,
	Trond Myklebust <trondmy@kernel.org>,
	Anna Schumaker <anna@kernel.org>,
	Chuck Lever <chuck.lever@oracle.com>,
	Jeff Layton <jlayton@kernel.org>, NeilBrown <neil@brown.name>,
	Olga Kornievskaia <okorniev@redhat.com>,
	Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
	Dave Kleikamp <shaggy@kernel.org>,
	Miklos Szeredi <miklos@szeredi.hu>,
	Andreas Hindborg <a.hindborg@kernel.org>,
	Breno Leitao <leitao@debian.org>, Kees Cook <kees@kernel.org>,
	"Tigran A. Aivazian" <aivazian.tigran@gmail.com>,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	ocfs2-devel@lists.linux.dev, linux-nilfs@vger.kernel.org,
	linux-nfs@vger.kernel.org, jfs-discussion@lists.sourceforge.net,
	linux-ext4@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH 10/17] jbd2: replace __get_free_pages() with kmalloc()
Date: Thu, 4 Jun 2026 09:14:57 +0300	[thread overview]
Message-ID: <aiEX4UTxEnBTjVKo@kernel.org> (raw)
In-Reply-To: <yfzx3jgzwesernofl7mzixa2mhjfii5v3o7yapghtmozixrpfu@6bsh7iixyiov>

Hi Ted,

On Wed, Jun 03, 2026 at 09:50:15AM -0400, Theodore Tso wrote:
> On Sat, May 23, 2026 at 08:54:22PM +0300, Mike Rapoport (Microsoft) wrote:
> > jbd2_alloc() falls back from kmem_cache_alloc() to __get_free_pages() for
> > allocations larger than PAGE_SIZE.
> > But kmalloc() can handle such cases with essentially the same fallback.
> > 
> > Replace use of __get_free_pages() with kmalloc() and simplify
> > jbd2_free() as both kmem_cache_alloc() and kmalloc() allocations can be
> > freed with kfree().
> > 
> > Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> 
> So historically __get_free_pages() was more efficient than kmalloc
> since previously the kmalloc overhead meant that a single 4k
> allocation would take two pages instead of one.  I'm guessing that has
> since changed?

Today there's no memory overhead for kmalloc(PAGE_SIZE). Cache refill takes
more pages of course, but they will be handed over to the next
kmalloc(PAGE_SIZE).
 
> Can you explain to someone who hasn't been tracking the changes in
> kmalloc over time:
> 
>   * How does the efficiency of kmalloc compare to __get_free_page when
>     order == 1?  What is the overhead in terms of memory overhead?
>     I'm a bit less concerned about CPU overhead, but it would be good
>     to know that?

There's no memory overhead when order == 1.
As for the CPU overhead, the difference for the fast path allocations is
not measurable and for the slow path it is anyway determined by the amount
of reclaim involved rather than by what allocator is used.
 
>   * What does kmalloc() do when a size > PAGE_SIZE is passed?  Will it
>     return contiguous memory, or return an error or worse, BUG?  And
>     same question as above; what is the overhead of kmalloc() when
>     size is 2*PAGE_SIZE?  8*PAGE_SIZE?

For size >= PAGE_SIZE kmalloc() always returns contiguous page aligned
memory.

Larger allocations (> PAGE_SIZE * 2) go straight to the page allocator. 

> Thanks,
> 
> 						- Ted

-- 
Sincerely yours,
Mike.

  reply	other threads:[~2026-06-04  6:15 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-23 17:54 [PATCH 00/17] fs: replace __get_free_pages() call with kmalloc() Mike Rapoport (Microsoft)
2026-05-23 17:54 ` [PATCH 01/17] quota: allocate dquot_hash " Mike Rapoport (Microsoft)
2026-05-25 16:10   ` Jan Kara
2026-05-23 17:54 ` [PATCH 02/17] proc: replace __get_free_page() " Mike Rapoport (Microsoft)
2026-05-25 16:11   ` Jan Kara
2026-05-23 17:54 ` [PATCH 03/17] ocfs2/dlm: " Mike Rapoport (Microsoft)
2026-05-25  2:50   ` Joseph Qi
2026-05-25 16:13   ` Jan Kara
2026-05-23 17:54 ` [PATCH 04/17] nilfs2: replace get_zeroed_page() with kzalloc() Mike Rapoport (Microsoft)
2026-05-25 17:07   ` Viacheslav Dubeyko
2026-05-27 16:02     ` Ryusuke Konishi
2026-05-23 17:54 ` [PATCH 05/17] NFS: replace __get_free_page() with kmalloc() in nfs_show_devname() Mike Rapoport (Microsoft)
2026-05-23 17:54 ` [PATCH 06/17] NFS: remove unused page and page2 in nfs4_replace_transport() Mike Rapoport (Microsoft)
2026-05-23 17:54 ` [PATCH 07/17] NFSD: replace __get_free_page() with kmalloc() in nfsd_buffered_readdir() Mike Rapoport (Microsoft)
2026-05-23 18:45   ` Jeff Layton
2026-05-23 17:54 ` [PATCH 08/17] libfs: simple_transaction_get(): replace get_zeroed_page() with kzalloc() Mike Rapoport (Microsoft)
2026-05-23 17:54 ` [PATCH 09/17] jfs: replace __get_free_page() with kmalloc() Mike Rapoport (Microsoft)
2026-05-23 17:54 ` [PATCH 10/17] jbd2: replace __get_free_pages() " Mike Rapoport (Microsoft)
2026-05-25 16:17   ` Jan Kara
2026-05-25 17:21     ` David Laight
2026-05-25 17:55       ` Matthew Wilcox
2026-05-26  9:35         ` David Laight
2026-06-03 13:50   ` Theodore Tso
2026-06-04  6:14     ` Mike Rapoport [this message]
2026-06-04 14:05       ` Theodore Tso
2026-06-04 14:46         ` Matthew Wilcox
2026-05-23 17:54 ` [PATCH 11/17] isofs: replace __get_free_page() " Mike Rapoport (Microsoft)
2026-05-25 16:17   ` Jan Kara
2026-05-23 17:54 ` [PATCH 12/17] fuse: " Mike Rapoport (Microsoft)
2026-05-26 15:00   ` Miklos Szeredi
2026-05-23 17:54 ` [PATCH 13/17] fs/select: " Mike Rapoport (Microsoft)
2026-05-25 16:19   ` Jan Kara
2026-05-23 17:54 ` [PATCH 14/17] fs/namespace: use __getname() to allocate mntpath buffer Mike Rapoport (Microsoft)
2026-05-25 16:22   ` Jan Kara
2026-05-26  9:06     ` Mike Rapoport
2026-05-28 11:54       ` Christian Brauner
2026-05-23 17:54 ` [PATCH 15/17] configfs: replace __get_free_pages() with kzalloc() Mike Rapoport (Microsoft)
2026-05-25 16:22   ` Jan Kara
2026-05-23 17:54 ` [PATCH 16/17] binfmt_misc: replace __get_free_page() with kmalloc() Mike Rapoport (Microsoft)
2026-05-23 17:54 ` [PATCH 17/17] bfs: replace get_zeroed_page() with kzalloc() Mike Rapoport (Microsoft)
2026-05-27 12:05 ` [PATCH 00/17] fs: replace __get_free_pages() call with kmalloc() Christian Brauner

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=aiEX4UTxEnBTjVKo@kernel.org \
    --to=rppt@kernel.org \
    --cc=Dai.Ngo@oracle.com \
    --cc=a.hindborg@kernel.org \
    --cc=aivazian.tigran@gmail.com \
    --cc=anna@kernel.org \
    --cc=brauner@kernel.org \
    --cc=chuck.lever@oracle.com \
    --cc=jack@suse.com \
    --cc=jack@suse.cz \
    --cc=jfs-discussion@lists.sourceforge.net \
    --cc=jlayton@kernel.org \
    --cc=jlbec@evilplan.org \
    --cc=joseph.qi@linux.alibaba.com \
    --cc=kees@kernel.org \
    --cc=konishi.ryusuke@gmail.com \
    --cc=leitao@debian.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-nilfs@vger.kernel.org \
    --cc=mark@fasheh.com \
    --cc=miklos@szeredi.hu \
    --cc=neil@brown.name \
    --cc=ocfs2-devel@lists.linux.dev \
    --cc=okorniev@redhat.com \
    --cc=shaggy@kernel.org \
    --cc=slava@dubeyko.com \
    --cc=tom@talpey.com \
    --cc=trondmy@kernel.org \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox