public inbox for linux-mm@kvack.org
 help / color / mirror / Atom feed
From: Leonardo Bras <leobras.c@gmail.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Leonardo Bras <leobras.c@gmail.com>,
	linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
	linux-mm@kvack.org, Johannes Weiner <hannes@cmpxchg.org>,
	Michal Hocko <mhocko@kernel.org>,
	Roman Gushchin <roman.gushchin@linux.dev>,
	Shakeel Butt <shakeel.butt@linux.dev>,
	Muchun Song <muchun.song@linux.dev>,
	Andrew Morton <akpm@linux-foundation.org>,
	Christoph Lameter <cl@linux.com>,
	Pekka Enberg <penberg@kernel.org>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	Hyeonggon Yoo <42.hyeyoo@gmail.com>,
	Leonardo Bras <leobras@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Waiman Long <longman@redhat.com>,
	Boqun Feng <boqun.feng@gmail.com>
Subject: Re: [PATCH 3/4] swap: apply new queue_percpu_work_on() interface
Date: Sun,  8 Mar 2026 14:35:30 -0300	[thread overview]
Message-ID: <aa2zYkzFeexyObwj@WindFlash> (raw)
In-Reply-To: <aaBrfg0ozWK4moxC@tpad>

On Thu, Feb 26, 2026 at 12:49:18PM -0300, Marcelo Tosatti wrote:
> On Fri, Feb 06, 2026 at 10:06:28PM -0300, Leonardo Bras wrote:
> > > +	cpu = smp_processor_id();
> > 
> > Wondering if for these cases it would make sense to have something like:
> > 
> > qpw_get_local_cpu() and 
> > qpw_put_local_cpu() 
> > 
> > so we could encapsulate these migrate_{en,dis}able()
> > and the smp_processor_id().
> > 
> > Or even,
> > 
> > int qpw_local_lock() {
> > 	migrate_disable();
> > 	cpu = smp_processor_id();
> > 	qpw_lock(..., cpu);
> > 
> > 	return cpu;
> > }
> > 
> > and
> > 
> > qpw_local_unlock(cpu){
> > 	qpw_unlock(...,cpu);
> > 	migrate_enable();
> > } 
> > 
> > so it's more direct to convert the local-only cases.
> > 
> > What do you think?
> 
> Switched to local_qpw_lock variants.
> 
> > >  {
> > > -	local_lock(&cpu_fbatches.lock);
> > > -	lru_add_drain_cpu(smp_processor_id());
> > 
> > and here ?
> 
> Fixed lack of migrate_disable/migrate_enable, thanks!
> 
> > > @@ -950,7 +954,7 @@ void lru_cache_disable(void)
> > >  #ifdef CONFIG_SMP
> > >  	__lru_add_drain_all(true);
> > >  #else
> > > -	lru_add_mm_drain();
> > 
> > and here, I wonder
> 
> This is !CONFIG_SMP, so smp_processor_id is always 0.
> 
> > >  	drain_pages(cpu);
> > >  
> > >  	/*
> > > 
> > > 
> > 
> > TBH, I am still trying to understand if we need the migrate_{en,dis}able():
> > - There is a data dependency beween cpu being filled and being used.
> > - If we get the cpu, and then migrate to a different cpu, the operation 
> >   will still be executed with the data from that starting cpu 
> 
> Yes, but on a remote CPU. What prevents the original CPU from accessing 
> its per-CPU local data, therefore racing with the code executing on the
> remote CPU.


Yes, but really rarely, and contention even more rare.
It also should not break anything, as locking will make sure access to that 
per-cpu value is being serialized.

I was wondering on the extra cost of migrate_* on the hot path being an 
undesired effect for other code evaluating switching to QPW. But maybe it's 
not that bad, and we get rid of that very rare contention.

Thanks!
Leo

> 
> > - But maybe the compiler tries to optize this because the processor number 
> >   can be on a register and of easy access, which would break this.
> > 
> > Maybe a READ_ONCE() on smp_processor_id() should suffice?
> > 
> > Other than that, all the conversions done look correct.
> > 
> > That being said, I understand very little about mm code, so let's hope we 
> > get proper feedback from those who do :) 
> > 
> > Thanks!
> > Leo
> > 
> > 
> 


  reply	other threads:[~2026-03-08 17:35 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-06 14:34 [PATCH 0/4] Introduce QPW for per-cpu operations Marcelo Tosatti
2026-02-06 14:34 ` [PATCH 1/4] Introducing qpw_lock() and per-cpu queue & flush work Marcelo Tosatti
2026-02-06 15:20   ` Marcelo Tosatti
2026-02-07  0:16   ` Leonardo Bras
2026-02-11 12:09     ` Marcelo Tosatti
2026-02-14 21:32       ` Leonardo Bras
2026-02-06 14:34 ` [PATCH 2/4] mm/swap: move bh draining into a separate workqueue Marcelo Tosatti
2026-02-06 14:34 ` [PATCH 3/4] swap: apply new queue_percpu_work_on() interface Marcelo Tosatti
2026-02-07  1:06   ` Leonardo Bras
2026-02-26 15:49     ` Marcelo Tosatti
2026-03-08 17:35       ` Leonardo Bras [this message]
2026-02-06 14:34 ` [PATCH 4/4] slub: " Marcelo Tosatti
2026-02-07  1:27   ` Leonardo Bras
2026-02-06 23:56 ` [PATCH 0/4] Introduce QPW for per-cpu operations Leonardo Bras
2026-02-10 14:01 ` Michal Hocko
2026-02-11 12:01   ` Marcelo Tosatti
2026-02-11 12:11     ` Marcelo Tosatti
2026-02-14 21:35       ` Leonardo Bras
2026-02-11 16:38     ` Michal Hocko
2026-02-11 16:50       ` Marcelo Tosatti
2026-02-11 16:59         ` Vlastimil Babka
2026-02-11 17:07         ` Michal Hocko
2026-02-14 22:02       ` Leonardo Bras
2026-02-16 11:00         ` Michal Hocko
2026-02-19 15:27           ` Marcelo Tosatti
2026-02-19 19:30             ` Michal Hocko
2026-02-20 14:30               ` Marcelo Tosatti
2026-02-23  9:18                 ` Michal Hocko
2026-03-03 10:55                   ` Frederic Weisbecker
2026-02-23 21:56               ` Frederic Weisbecker
2026-02-24 17:23                 ` Marcelo Tosatti
2026-02-25 21:49                   ` Frederic Weisbecker
2026-02-26  7:06                     ` Michal Hocko
2026-02-26 11:41                     ` Marcelo Tosatti
2026-03-03 11:08                       ` Frederic Weisbecker
2026-02-20 10:48             ` Vlastimil Babka
2026-02-20 12:31               ` Michal Hocko
2026-02-20 17:35               ` Marcelo Tosatti
2026-02-20 17:58                 ` Vlastimil Babka
2026-02-20 19:01                   ` Marcelo Tosatti
2026-02-23  9:11                     ` Michal Hocko
2026-02-23 11:20                       ` Marcelo Tosatti
2026-02-24 14:40                 ` Frederic Weisbecker
2026-02-24 18:12                   ` Marcelo Tosatti
2026-02-20 16:51           ` Marcelo Tosatti
2026-02-20 16:55             ` Marcelo Tosatti
2026-02-20 22:38               ` Leonardo Bras
2026-02-23 18:09               ` Vlastimil Babka
2026-02-26 18:24                 ` Marcelo Tosatti
2026-02-20 21:58           ` Leonardo Bras
2026-02-23  9:06             ` Michal Hocko
2026-02-28  1:23               ` Leonardo Bras
2026-03-03  0:19                 ` Marcelo Tosatti
2026-03-08 17:41                   ` Leonardo Bras
2026-03-09  9:52                     ` Vlastimil Babka (SUSE)
2026-03-11  0:01                       ` Leonardo Bras
2026-03-10 21:24                     ` Marcelo Tosatti
2026-03-11  0:03                       ` Leonardo Bras
2026-03-11 10:23                         ` Marcelo Tosatti
2026-02-19 13:15       ` Marcelo Tosatti

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=aa2zYkzFeexyObwj@WindFlash \
    --to=leobras.c@gmail.com \
    --cc=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=boqun.feng@gmail.com \
    --cc=cgroups@vger.kernel.org \
    --cc=cl@linux.com \
    --cc=hannes@cmpxchg.org \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=leobras@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=longman@redhat.com \
    --cc=mhocko@kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=muchun.song@linux.dev \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=shakeel.butt@linux.dev \
    --cc=tglx@linutronix.de \
    --cc=vbabka@suse.cz \
    /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