From nobody Tue Dec 2 01:04:11 2025 Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8CD2156F45 for ; Sun, 23 Nov 2025 04:04:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763870693; cv=none; b=UONLz1I+0mVsbIut2pMmxCX1//MN377PGQ0VgP9q1uGXoiDgJhO6ak9LHuJcXVNUD3xiUnvDrxA2qx6mgG5ZoIx29NhZ6X5CNL5Ptw+U4xjlUwjXWuIx2hGM3sYnvVSqI+m/o1UOUUiT/DGSdbh6bXdP+Lr15G0t5aN5IugGxrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763870693; c=relaxed/simple; bh=bfM2jDofVin29KMQRVcjHPRl0GbvvE+j3MD6kQ0qS4M=; h=MIME-Version:From:Date:Message-ID:Subject:To:Content-Type; b=qLUmZFXIS6z4ddp/0RtLTJzbN/iIQ2hWR9yme1FTUqnTZJVNHPdZjhY5PYf5P1h7W6FIc0J27h3aRbzECYN5er2y3MGb72QovYyzc4Naad1m42tvodJpCB+Wznkw4Prskz3+HkTKN8UH9RPQodlTyKBBur85ktk3TQdPM6X3oaM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nklVE+MY; arc=none smtp.client-ip=209.85.219.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nklVE+MY" Received: by mail-qv1-f44.google.com with SMTP id 6a1803df08f44-882390f7952so35945846d6.3 for ; Sat, 22 Nov 2025 20:04:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763870691; x=1764475491; darn=vger.kernel.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=nLz+OCIrxHh1tiUf6/H+x9KOZx1XIeoUhEWsCOIEi+w=; b=nklVE+MYGBH4lHeBSqQENnYSV9dZEmYWRQpwdo/8SWuD6WqJHQUOZ5r0eC0eUo5iLr Ny94ByJew573N/fONQxEYJuKt1v/+5C+qIwE3ghDFyImW0a2ZiFJrwRJchrKn3oFWMYk 4+Kx395nw4akF0EYrwIcA6x7MSDQLWNpIiJkF1p0sN5eKf0IaIOSFo384/1yARnYhH4o TrqYR3Hj54o0+2m/SE5fvLwbON6acd165XEV2kzGxoqGi0eRRk3Apt60bJTmbSek5Rvx /9Rx4q0OGFBT250cBpBdFkdd0Nx909juy+YFeMiEBF1PwiWNkb6haQo4wk1oqwQBedzb Ns3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763870691; x=1764475491; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nLz+OCIrxHh1tiUf6/H+x9KOZx1XIeoUhEWsCOIEi+w=; b=wqlGZvKdXYvPFCxGcov2JreuvKpuO+OkgLwdhhn1ZJyUnJZH89ElV/1+rJ3mfI2vXj hbL7LvSwNUXjPU9VrCMRKrtUmPWGAxPenSUZAFsMOD0U54ETJQFOaVaywWJKm1tDfIVB 8T2VPe0zRMjo8OV+CQ7vW/TzMjJAfuO3jOvWW0AnKfiNy9XaFMRYhJjv0AWGGOkBJ+0v 5pbRDZKuFoImybW/zm4LQ2KpaeOr3zo99fiPgDZvGxnzyH6ndsm+qGEaGsUdiy7O7f7W T07VtkbSVVcgZ57wr8N3qn2lzUOJmlTSmkO+KypALHHyzyeb+GI6sXN996sAOE6N/dJ1 whNQ== X-Forwarded-Encrypted: i=1; AJvYcCXD5MBtvuhvSB6GnAEu3hVVPOn4eaxm1T3UXiDlM09j0Wt9w0DTnZE/6Xav2dekFpqCOUkcNTAr9PDF8wM=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5OjCFK6hsiUNOhFJH6vCSqPcQqfEft5Sq2oTv17nbcxPUSu76 c10mrGvReT1j2wQSJ+sPPnrs/p8JhXED5dJ8fVraDC+VgxMY5Of7O1C+ZtM9f07MR03RtOOvJOn /qtrBxP65o8bZuIVgA6JW+MW7DYRVDWU= X-Gm-Gg: ASbGncug7T3+81Xpjzn9PYuicvPrnM1YxP+csNZd0su42iW3QbX6p1Q+JnK7CinL3MB 5C/ZplYVn0aWS3hJMnl8raTbKclb3kQuhqSwAcL1G4cYRGLukVjELM000196qoUwdZKkH/rGVqG tmyrMAKQeoek6jSnxo4iNd/R66grsBse8hH+rBgt/Ibq8AKrO7ETFQJeVCYS+jt7UXgOU0GXMG2 iHC+AprNFM7miamHmhGD+Y3fdjCb22kq5MSmkbUO+/zHFQdc+nS99BTcHsq2NWVg1k= X-Google-Smtp-Source: AGHT+IFWneRHVVhxne0FQBU6FEnTv1u3VIZthNVu+McOsU6xWrztAw61myvk/JvA0w3WflrbeCSG6Gjot/oEzjwOZbk= X-Received: by 2002:a05:6214:c25:b0:882:7571:c023 with SMTP id 6a1803df08f44-8847c53565fmr105586936d6.47.1763870690688; Sat, 22 Nov 2025 20:04:50 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Tingjia Cao Date: Sat, 22 Nov 2025 22:04:39 -0600 X-Gm-Features: AWmQ_bk2nVk0Qh70WlYcRMJ2Gpcilq3yTxez6u_d_dySBrvDtghs-USjKzM4vlk Message-ID: Subject: [Patch] select_idle_sibling v.s. DELAYED_DEQUEUE To: peterz@infradead.org, Vincent Guittot , mingo@redhat.com, juri.lelli@redhat.com, dietmar.eggemann@arm.com, linux-kernel@vger.kernel.org Content-Type: multipart/mixed; boundary="000000000000f2d1e106443b254b" --000000000000f2d1e106443b254b Content-Type: multipart/alternative; boundary="000000000000f2d1df06443b2549" --000000000000f2d1df06443b2549 Content-Type: text/plain; charset="UTF-8" Recently, we encountered an issue that sync wakeup kthread didn't choose the current CPU though the waker is the only runnable task. It is caused by a conflict between delayed dequeue feature and select_idle_sibling function. With the DELAYED_DEQUEUE mechanism enabled, a task that goes to sleep may not be removed from the runqueue immediately. As a result, nr_running may overcount the number of runnable tasks. Inside select_idle_sibling, there is a special case for sync wakeup: if (is_per_cpu_kthread(current) && in_task() && prev == smp_processor_id() && this_rq()->nr_running <= 1 && asym_fits_cpu(...)) { return prev; } For "this_rq()->nr_running <= 1": we should use the real running-tasks rq to check whether to place the wake-up task to the current cpu. To fix this (patch attached), we can use the true number of runnable tasks by subtracting the delayed-dequeue count: this_rq()->nr_running - cfs_h_nr_delayed(this_rq()) <= 1 Best, Tingjia --000000000000f2d1df06443b2549 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Recently, we encountered an issue that= sync wakeup kthread didn't choose the current CPU though the waker is = the only runnable task. It is caused by a conflict between delayed dequeue = feature and=C2=A0select_idle_sibling function.

With the DELAYED_DEQUE= UE mechanism enabled, a task that goes to sleep may not be removed from the= runqueue immediately. As a result, nr_running may overcount the number of = runnable tasks. Inside select_idle_sibling, there is a special case for syn= c wakeup:

if (is_per_cpu_kthread(current) &&
=C2=A0 =C2=A0= in_task() &&
=C2=A0 =C2=A0 prev =3D=3D smp_processor_id() &= &
=C2=A0 =C2=A0 this_rq()->nr_running <=3D 1 &&
=C2= =A0 =C2=A0 asym_fits_cpu(...)) {
=C2=A0 =C2=A0 return prev;
}

=

For "this_rq()->nr_running <=3D 1": we should use the re= al running-tasks rq to check whether to place the wake-up task to the curre= nt cpu.

To fix this (patch attached), we can use the true number of = runnable tasks by subtracting the delayed-dequeue count:

=C2=A0 =C2= =A0 =C2=A0 =C2=A0 this_rq()->nr_running - cfs_h_nr_delayed(this_rq()) &l= t;=3D 1


Best,
Tingjia

--000000000000f2d1df06443b2549-- --000000000000f2d1e106443b254b Content-Type: application/octet-stream; name="fix-select_idle_sibling-vs-DELAYED_DEQUEUE.patch" Content-Disposition: attachment; filename="fix-select_idle_sibling-vs-DELAYED_DEQUEUE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mib6trvq0 RnJvbSAyNTQwYWM4MTVlOWNmYTQ3ZTk4NGE4MjgxMzk1MjZlMjkwZjRmNDU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaW5namlhLTB2MCA8dGpjYW85ODAzMTFAZ21haWwuY29tPgpE YXRlOiBTYXQsIDIyIE5vdiAyMDI1IDIxOjQyOjAwIC0wNjAwClN1YmplY3Q6IFtQQVRDSF0gZml4 IHNlbGVjdF9pZGxlX3NpYmxpbmcgdnMgREVMQVlFRF9ERVFVRVVFCgotLS0KIGtlcm5lbC9zY2hl ZC9mYWlyLmMgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRp b24oLSkKCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2Zh aXIuYwppbmRleCA1Yjc1MjMyNDI3MGIuLmQ2MGEzZjVlYmVjYSAxMDA2NDQKLS0tIGEva2VybmVs L3NjaGVkL2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWQvZmFpci5jCkBAIC03ODY5LDcgKzc4Njks NyBAQCBzdGF0aWMgaW50IHNlbGVjdF9pZGxlX3NpYmxpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpw LCBpbnQgcHJldiwgaW50IHRhcmdldCkKIAlpZiAoaXNfcGVyX2NwdV9rdGhyZWFkKGN1cnJlbnQp ICYmCiAJICAgIGluX3Rhc2soKSAmJgogCSAgICBwcmV2ID09IHNtcF9wcm9jZXNzb3JfaWQoKSAm JgotCSAgICB0aGlzX3JxKCktPm5yX3J1bm5pbmcgPD0gMSAmJgorCSAgICB0aGlzX3JxKCktPm5y X3J1bm5pbmcgLSBjZnNfaF9ucl9kZWxheWVkKHRoaXNfcnEoKSkgPD0gMSAmJgogCSAgICBhc3lt X2ZpdHNfY3B1KHRhc2tfdXRpbCwgdXRpbF9taW4sIHV0aWxfbWF4LCBwcmV2KSkgewogCQlyZXR1 cm4gcHJldjsKIAl9Ci0tIAoyLjQzLjAKCg== --000000000000f2d1e106443b254b--