All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <yury.norov@gmail.com>
To: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	linux-kernel@vger.kernel.org,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Ingo Molnar <mingo@redhat.com>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	Daniel Bristot de Oliveira <bristot@redhat.com>,
	Valentin Schneider <vschneid@redhat.com>, Jan Kara <jack@suse.cz>,
	Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>,
	Matthew Wilcox <willy@infradead.org>,
	Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>,
	Alexey Klimov <klimov.linux@gmail.com>
Subject: Re: [PATCH 04/34] sched: add cpumask_find_and_set() and use it in __mm_cid_get()
Date: Tue, 21 Nov 2023 05:31:30 -0800	[thread overview]
Message-ID: <ZVyxMrisyuBtQ+2Y@yury-ThinkPad> (raw)
In-Reply-To: <1eb9435a-aa1c-4c30-ab1a-9167b73d1b83@efficios.com>

On Mon, Nov 20, 2023 at 11:17:32AM -0500, Mathieu Desnoyers wrote:

...

> > > diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
> > > index 2e5a95486a42..b2f095a9fc40 100644
> > > --- a/kernel/sched/sched.h
> > > +++ b/kernel/sched/sched.h
> > > @@ -3345,28 +3345,6 @@ static inline void mm_cid_put(struct mm_struct *mm)
> > >   	__mm_cid_put(mm, mm_cid_clear_lazy_put(cid));
> > >   }
> > > -static inline int __mm_cid_try_get(struct mm_struct *mm)
> > > -{
> > > -	struct cpumask *cpumask;
> > > -	int cid;
> > > -
> > > -	cpumask = mm_cidmask(mm);
> > > -	/*
> > > -	 * Retry finding first zero bit if the mask is temporarily
> > > -	 * filled. This only happens during concurrent remote-clear
> > > -	 * which owns a cid without holding a rq lock.
> > > -	 */
> > > -	for (;;) {
> > > -		cid = cpumask_first_zero(cpumask);
> > > -		if (cid < nr_cpu_ids)
> > > -			break;
> > > -		cpu_relax();
> > > -	}
> > > -	if (cpumask_test_and_set_cpu(cid, cpumask))
> > > -		return -1;
> 
> This was split in find / test_and_set on purpose because following
> patches I have (implementing numa-aware mm_cid) have a scan which
> needs to scan sets of two cpumasks in parallel (with "and" and
> and_not" operators).
> 
> Moreover, the "mask full" scenario only happens while a concurrent
> remote-clear temporarily owns a cid without rq lock. See
> sched_mm_cid_remote_clear():
> 
>         /*
>          * The cid is unused, so it can be unset.
>          * Disable interrupts to keep the window of cid ownership without rq
>          * lock small.
>          */
>         local_irq_save(flags);
>         if (try_cmpxchg(&pcpu_cid->cid, &lazy_cid, MM_CID_UNSET))
>                 __mm_cid_put(mm, cid);
>         local_irq_restore(flags);
> 
> The proposed patch here turns this scenario into something heavier
> (setting the use_cid_lock) rather than just retrying. I guess the
> question to ask here is whether it is theoretically possible to cause
> __mm_cid_try_get() to fail to have forward progress if we have a high
> rate of sched_mm_cid_remote_clear. If we decide that this is indeed
> a possible progress-failure scenario, then it makes sense to fallback
> to use_cid_lock as soon as a full mask is encountered.
> 
> However, removing the __mm_cid_try_get() helper will make it harder to
> integrate the following numa-awareness patches I have on top.
> 
> I am not against using cpumask_find_and_set, but can we keep the
> __mm_cid_try_get() helper to facilitate integration of future work ?
> We just have to make it use cpumask_find_and_set, which should be
> easy.

Sure, I can. Can you point me to the work you mention here?

  reply	other threads:[~2023-11-21 13:31 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-18 15:50 [PATCH 00/34] biops: add atomig find_bit() operations Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` [PATCH 01/34] lib/find: add atomic find_bit() primitives Yury Norov
2023-11-18 15:50   ` Yury Norov
2023-11-18 15:50   ` Yury Norov
2023-11-18 16:23   ` Bart Van Assche
2023-11-18 16:23     ` Bart Van Assche
2023-11-18 16:23     ` Bart Van Assche
2023-11-18 16:34   ` biops: add atomig find_bit() operations bluez.test.bot
2023-11-18 15:50 ` [PATCH 02/34] lib/sbitmap; make __sbitmap_get_word() using find_and_set_bit() Yury Norov
2023-11-18 15:50 ` [PATCH 03/34] watch_queue: use atomic find_bit() in post_one_notification() Yury Norov
2023-11-18 15:50 ` [PATCH 04/34] sched: add cpumask_find_and_set() and use it in __mm_cid_get() Yury Norov
2023-11-20 11:31   ` Peter Zijlstra
2023-11-20 16:17     ` Mathieu Desnoyers
2023-11-21 13:31       ` Yury Norov [this message]
2023-11-21 13:44         ` Mathieu Desnoyers
2023-11-21 17:00           ` Yury Norov
2023-11-18 15:50 ` [PATCH 05/34] mips: sgi-ip30: rework heart_alloc_int() Yury Norov
2023-11-18 15:50 ` [PATCH 06/34] sparc: fix opencoded find_and_set_bit() in alloc_msi() Yury Norov
2023-11-18 15:50 ` [PATCH 07/34] perf/arm: optimize opencoded atomic find_bit() API Yury Norov
2023-11-18 15:50   ` Yury Norov
2023-11-21 15:53   ` Will Deacon
2023-11-21 15:53     ` Will Deacon
2023-11-21 16:16     ` Yury Norov
2023-11-21 16:16       ` Yury Norov
2023-11-21 16:17       ` Will Deacon
2023-11-21 16:17         ` Will Deacon
2023-11-18 15:50 ` [PATCH 08/34] drivers/perf: optimize ali_drw_get_counter_idx() by using find_bit() Yury Norov
2023-11-18 15:50   ` Yury Norov
2023-11-21 15:54   ` Will Deacon
2023-11-21 15:54     ` Will Deacon
2023-11-18 15:50 ` [PATCH 09/34] dmaengine: idxd: optimize perfmon_assign_event() Yury Norov
2023-11-20 15:34   ` Dave Jiang
2023-11-24 12:15   ` Vinod Koul
2023-11-18 15:50 ` [PATCH 10/34] ath10k: optimize ath10k_snoc_napi_poll() by using find_bit() Yury Norov
2023-11-18 15:50   ` Yury Norov
2023-11-18 15:50 ` [PATCH 11/34] wifi: rtw88: optimize rtw_pci_tx_kick_off() " Yury Norov
2023-11-18 15:50 ` [PATCH 12/34] wifi: intel: use atomic find_bit() API where appropriate Yury Norov
2023-11-19 19:58   ` Johannes Berg
2023-11-21 16:36     ` Yury Norov
2023-11-18 15:50 ` [PATCH 13/34] KVM: x86: hyper-v: optimize and cleanup kvm_hv_process_stimers() Yury Norov
2023-11-20 14:26   ` Vitaly Kuznetsov
2023-11-21 13:35     ` Yury Norov
2023-11-18 15:50 ` [PATCH 14/34] PCI: hv: switch hv_get_dom_num() to use atomic find_bit() Yury Norov
2023-11-18 17:59   ` Michael Kelley
2023-11-18 15:50 ` [PATCH 15/34] scsi: use atomic find_bit() API where appropriate Yury Norov
2023-11-18 16:30   ` Bart Van Assche
2023-11-18 15:50 ` [PATCH 16/34] powerpc: " Yury Norov
2023-11-18 15:50   ` Yury Norov
2023-11-18 15:50 ` [PATCH 17/34] iommu: " Yury Norov
2023-11-18 15:50   ` Yury Norov
2023-11-18 15:50 ` [PATCH 18/34] media: radio-shark: " Yury Norov
2023-11-18 15:50 ` [PATCH 19/34] sfc: switch to using " Yury Norov
2023-11-21 19:46   ` Edward Cree
2023-11-18 15:50 ` [PATCH 20/34] tty: nozomi: optimize interrupt_handler() Yury Norov
2023-11-18 15:50 ` [PATCH 21/34] usb: cdc-acm: optimize acm_softint() Yury Norov
2023-11-20 11:39   ` Oliver Neukum
2023-11-18 15:50 ` [PATCH 22/34] block: null_blk: fix opencoded find_and_set_bit() in get_tag() Yury Norov
2023-11-18 15:50 ` [PATCH 23/34] RDMA/rtrs: fix opencoded find_and_set_bit_lock() in __rtrs_get_permit() Yury Norov
2023-11-18 15:50 ` [PATCH 24/34] mISDN: optimize get_free_devid() Yury Norov
2023-11-18 15:50 ` [PATCH 25/34] media: em28xx: cx231xx: fix opencoded find_and_set_bit() Yury Norov
2023-11-18 15:50 ` [PATCH 26/34] ethernet: rocker: optimize ofdpa_port_internal_vlan_id_get() Yury Norov
2023-11-18 15:50 ` [PATCH 27/34] serial: sc12is7xx: optimize sc16is7xx_alloc_line() Yury Norov
2023-11-18 15:50 ` [PATCH 28/34] bluetooth: optimize cmtp_alloc_block_id() Yury Norov
2023-11-18 15:51 ` [PATCH 29/34] net: smc: fix opencoded find_and_set_bit() in smc_wr_tx_get_free_slot_index() Yury Norov
2023-11-20  8:43   ` Alexandra Winter
2023-11-21 13:41     ` Yury Norov
2023-11-21 15:39       ` Alexandra Winter
2023-11-20  9:56   ` Tony Lu
2023-11-18 15:51 ` [PATCH 30/34] ALSA: use atomic find_bit() functions where applicable Yury Norov
2023-11-20 15:57   ` Takashi Iwai
2023-11-18 15:51 ` [PATCH 31/34] drivers/perf: optimize m1_pmu_get_event_idx() by using find_bit() API Yury Norov
2023-11-18 15:51   ` Yury Norov
2023-11-18 18:40   ` Marc Zyngier
2023-11-18 18:40     ` Marc Zyngier
2023-11-18 18:45     ` Yury Norov
2023-11-18 18:45       ` Yury Norov
2023-11-18 15:51 ` [PATCH 32/34] m68k: rework get_mmu_context() Yury Norov
2023-11-19 19:29   ` Geert Uytterhoeven
2023-11-21 14:39   ` Greg Ungerer
2023-11-18 15:51 ` [PATCH 33/34] microblaze: " Yury Norov
2023-11-18 15:51 ` [PATCH 34/34] sh: rework ilsel_enable() Yury Norov
2023-11-18 16:15   ` John Paul Adrian Glaubitz
2023-11-21 13:43     ` Yury Norov
2023-11-18 16:18 ` [PATCH 00/34] biops: add atomig find_bit() operations Bart Van Assche
2023-11-18 16:18   ` Bart Van Assche
2023-11-18 16:18   ` Bart Van Assche
2023-11-18 19:06   ` Sergey Shtylyov
2023-11-18 19:06     ` Sergey Shtylyov
2023-11-18 19:06     ` Sergey Shtylyov

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=ZVyxMrisyuBtQ+2Y@yury-ThinkPad \
    --to=yury.norov@gmail.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=jack@suse.cz \
    --cc=juri.lelli@redhat.com \
    --cc=klimov.linux@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=maxim.kuvyrkov@linaro.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=mirsad.todorovac@alu.unizg.hr \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=willy@infradead.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.