GNU logs - #78735, boring messages


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#78735: feature/igc: [PATCH] Reduce the size of the kbd-buffer GC root
Resent-From: Helmut Eller <eller.helmut@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Mon, 09 Jun 2025 19:38:03 +0000
Resent-Message-ID: <handler.78735.B.17494978299818 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 78735
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: 78735 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.17494978299818
          (code B ref -1); Mon, 09 Jun 2025 19:38:03 +0000
Received: (at submit) by debbugs.gnu.org; 9 Jun 2025 19:37:09 +0000
Received: from localhost ([127.0.0.1]:57750 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uOiIu-0002Y5-8d
	for submit <at> debbugs.gnu.org; Mon, 09 Jun 2025 15:37:09 -0400
Received: from lists.gnu.org ([2001:470:142::17]:57994)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eller.helmut@HIDDEN>)
 id 1uOiIq-0002Vm-Qj
 for submit <at> debbugs.gnu.org; Mon, 09 Jun 2025 15:37:05 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eller.helmut@HIDDEN>)
 id 1uOiId-0006ug-QI
 for bug-gnu-emacs@HIDDEN; Mon, 09 Jun 2025 15:36:51 -0400
Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <eller.helmut@HIDDEN>)
 id 1uOiIb-000456-Nc
 for bug-gnu-emacs@HIDDEN; Mon, 09 Jun 2025 15:36:51 -0400
Received: by mail-wm1-x334.google.com with SMTP id
 5b1f17b1804b1-441ab63a415so48644295e9.3
 for <bug-gnu-emacs@HIDDEN>; Mon, 09 Jun 2025 12:36:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1749497807; x=1750102607; darn=gnu.org;
 h=mime-version:user-agent:message-id:date:subject:to:from:from:to:cc
 :subject:date:message-id:reply-to;
 bh=FxrgLnE6VyxDp7YZaNOj10PNt3a9fh4QtFMflRtFl+Y=;
 b=kwv7xAbQb1tJ2RzWxDMp0tz2C1ywsRAO/LYpDxWt5MjQhuDHelpSGo2M0vRhEjhHiO
 q71rK3zO7lQrUzu3m5egikjZLXpq3OUqW7uZBiH1WqIm+iiRuD0HQLEW6gAQ2C9z2fn0
 hLIL+xU6CJPb2evKiid56DoUnmFs6YkSqqqLYK13IldYEt5q2HvEfdUZgkw/rJFH8Gqb
 rOYV7XVv7OgCUMI7JN6hxBlfLaF61GQxgNddCQSErqQqhE69pI/TN2bKqV/XUl7VbLhU
 FvYbgKOK0DNXXuoKFtVwCfS9gwbIhXUQOiLHJogwVSvbXSOPAWn7C5i5U8TvUV2scAzP
 6ZAw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1749497807; x=1750102607;
 h=mime-version:user-agent:message-id:date:subject:to:from
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=FxrgLnE6VyxDp7YZaNOj10PNt3a9fh4QtFMflRtFl+Y=;
 b=fWH5TR3c8c4WScYY5XRncIIKWWay8AFrX8nT8B8MqYxEPHZd3xd36f1ELd3DIbJCD1
 n6LkTJXHRA1yNqR2kYdNLCxtdRGKZ7qMcbOm+XBV3MNkSv29/rgmZ9gp85YxLzqcbfJX
 GiNK7KIaYGzwQ+wUDM/RQdrj0C+42fS/FoF4LfUObK7/e7NBb0cNo9lrfhb9awiHw/WS
 5BADZslX3oIgnDkmhPveksvkinCOKZcJlZPHHFt7FOn5X8qG87gkF2qx5MbiSKR0TPQv
 NkZOepgp3EKixZIcBTDrvhcGfrzweEwm/8iesFU6CTeiPmjymQq1TOkkof3QVq7bd5Yy
 +8Xw==
X-Gm-Message-State: AOJu0Yy34sUG2PKsPxvFPtMwJLdwklIhWTZPfZ6fzvlYbGBIQhHEjGQT
 Qf4RxpRs9XQggYePeC8d/vKRLZaN+0UluJHeI2cVEFgubFegHI62mZlxDa8rlw==
X-Gm-Gg: ASbGncuOiw80tBqlCCqiz22fD+O3K82LNsQ+52qzum7jhk0nB26Jhe/WZOFTDsp9qrv
 rw9waVdJNDNahBJ7UhKonr3B7B5DcXrncqXFPA0QbR+XLy1kJ/6nvDisc44ja5VBz6ewuKawjOM
 dDGmVWl/dy82N0iLEwo++sEEG6vyMPj4YCYOZBnv2Nbg9EUYbDSYZq4H0MKWY218vTerPo6u8ED
 kvhULCo3tGYGTwPHQlsuOxNtA8WNVDAVn0Y+BDWggKKfzd7TAwJxCB5sMAPSXghHzQSJBIQ7TYi
 iwvGXZETi7jlts/OMiXIX5o+p9Dpro7apXVC6RtjFcdC1bcfqRmjyhi8NN5K+oo9ECmuY3QUghD
 hIl2tCsEf3xm/FprjgLM=
X-Google-Smtp-Source: AGHT+IENANJWap2bniZjwCdeKI0ctruYBKr6Pe2rU2GkMrOxDG47Xj1TWO9pxAzBTb+Fz4wntIrChA==
X-Received: by 2002:a05:600c:1c95:b0:453:a95:f07d with SMTP id
 5b1f17b1804b1-4531de05552mr220105e9.10.1749497806732; 
 Mon, 09 Jun 2025 12:36:46 -0700 (PDT)
Received: from caladan (dial-184179.pool.broadband44.net. [212.46.184.179])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-4526e0563b6sm117527515e9.7.2025.06.09.12.36.45
 for <bug-gnu-emacs@HIDDEN>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 09 Jun 2025 12:36:45 -0700 (PDT)
From: Helmut Eller <eller.helmut@HIDDEN>
Date: Mon, 09 Jun 2025 21:36:45 +0200
Message-ID: <87v7p4g10y.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=2a00:1450:4864:20::334;
 envelope-from=eller.helmut@HIDDEN; helo=mail-wm1-x334.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--=-=-=
Content-Type: text/plain

This is a proposal to reduce of the size of the kbd-buffer root.
Currently the kdb-buffer is an area of ~250kb that is scanned
ambiguously.

With the patch, instead of tracing the entire kbd_buffer, we only scan
the region from kbd_fetch_ptr - 1 to kbd_store_ptr + 1.  The -1/+1 is
supposed to cover the cases where MPS stops the mutator while those
pointers are being updated.  If the kbd_buffer is empty, then only 180
bytes are scanned.  It's still scanned ambiguously.



--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=0001-Reduce-the-size-of-the-kbd-buffer-GC-root.patch

From d1e9eeb7d3cfea48d1037564fda50b511e80a52b Mon Sep 17 00:00:00 2001
From: Helmut Eller <eller.helmut@HIDDEN>
Date: Mon, 9 Jun 2025 18:28:10 +0200
Subject: [PATCH] Reduce the size of the kbd-buffer GC root

* src/igc.c (root_create_kbd_buffer): New.
(root_create_main_thread): Use it.
(scan_kbd_buffer_ambig): New. The actual scan function.
(next_kbd_event, prev_kbd_event): New helpers, similar to next_kbd_event
in keyboard.c.
* src/keyboard.c (init_keyboard): Move the GC root creation code to
root_create_kbd_buffer in igc.c.
---
 src/igc.c      | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/keyboard.c |  4 ----
 2 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/src/igc.c b/src/igc.c
index f63b0fe8c88..5f7a1a78cda 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -60,6 +60,7 @@
 #include "thread.h"
 #include "treesit.h"
 #include "termchar.h"
+#include "keyboard.h"
 #ifdef HAVE_WINDOW_SYSTEM
 #include TERM_HEADER
 #endif /* HAVE_WINDOW_SYSTEM */
@@ -1725,6 +1726,48 @@ scan_tty_list (mps_ss_t ss, void *start, void *end, void *closure)
   return MPS_RES_OK;
 }
 
+static union buffered_input_event *
+prev_kbd_event (union buffered_input_event *kbd_buffer,
+		union buffered_input_event *ptr)
+{
+  return ptr == kbd_buffer ? kbd_buffer + KBD_BUFFER_SIZE - 1 : ptr - 1;
+}
+
+static union buffered_input_event *
+next_kbd_event (union buffered_input_event *kbd_buffer,
+		union buffered_input_event *ptr)
+{
+  return ptr == kbd_buffer + KBD_BUFFER_SIZE - 1 ? kbd_buffer : ptr + 1;
+}
+
+static mps_res_t
+scan_kbd_buffer_ambig (mps_ss_t ss, void *start, void *end, void *closure)
+{
+  igc_assert (start == kbd_buffer);
+  igc_assert (end == kbd_buffer + ARRAYELTS (kbd_buffer));
+
+  /* Instead of tracing the entire kbd_buffer, only scan the region from
+     kbd_fetch_ptr - 1 to kbd_store_ptr + 1.  The -1/+1 is supposed to
+     cover the cases where MPS stops the mutator while those pointers
+     are being updated. */
+
+  union buffered_input_event *fetch
+    = prev_kbd_event (kbd_buffer, kbd_fetch_ptr);
+  union buffered_input_event *store
+    = next_kbd_event (kbd_buffer, kbd_store_ptr);
+
+  if (fetch < store)
+    return scan_ambig (ss, fetch, store, closure);
+  else
+    {
+      mps_res_t res
+	= scan_ambig (ss, fetch, kbd_buffer + KBD_BUFFER_SIZE, closure);
+      if (res == MPS_RES_OK)
+	res = scan_ambig (ss, kbd_buffer, store, closure);
+      return res;
+    }
+}
+
 /***********************************************************************
 			 Default pad, fwd, ...
  ***********************************************************************/
@@ -2905,6 +2948,14 @@ root_create_tty_list (struct igc *gc)
 		     scan_tty_list, "tty-list");
 }
 
+static void
+root_create_kbd_buffer (struct igc *gc)
+{
+  root_create (gc, kbd_buffer, kbd_buffer + ARRAYELTS (kbd_buffer),
+	       mps_rank_ambig (), scan_kbd_buffer_ambig, NULL,
+	       true, "kbd-buffer");
+}
+
 static void
 root_create_main_thread (struct igc *gc)
 {
@@ -4934,6 +4985,7 @@ make_igc (void)
   root_create_main_thread (gc);
   root_create_exact_ptr (gc, &current_thread);
   root_create_exact_ptr (gc, &all_threads);
+  root_create_kbd_buffer (gc);
 
   enable_messages (gc, true);
   return gc;
diff --git a/src/keyboard.c b/src/keyboard.c
index 72c6e4c17d8..1c2b4ba9e63 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -12892,10 +12892,6 @@ delete_kboard (KBOARD *kb)
 void
 init_keyboard (void)
 {
-#ifdef HAVE_MPS
-  igc_root_create_ambig (kbd_buffer, kbd_buffer + ARRAYELTS (kbd_buffer),
-			 "kbd-buffer");
-#endif
   /* This is correct before outermost invocation of the editor loop.  */
   command_loop_level = -1;
   quit_char = Ctl ('g');
-- 
2.39.5


--=-=-=--




Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: Helmut Eller <eller.helmut@HIDDEN>
Subject: bug#78735: Acknowledgement (feature/igc: [PATCH] Reduce the size
 of the kbd-buffer GC root)
Message-ID: <handler.78735.B.17494978299818.ack <at> debbugs.gnu.org>
References: <87v7p4g10y.fsf@HIDDEN>
X-Gnu-PR-Message: ack 78735
X-Gnu-PR-Package: emacs
X-Gnu-PR-Keywords: patch
Reply-To: 78735 <at> debbugs.gnu.org
Date: Mon, 09 Jun 2025 19:38:04 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-gnu-emacs@HIDDEN

If you wish to submit further information on this problem, please
send it to 78735 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
78735: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D78735
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#78735: feature/igc: [PATCH] Reduce the size of the kbd-buffer GC root
Resent-From: Pip Cet <pipcet@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Mon, 09 Jun 2025 20:09:05 +0000
Resent-Message-ID: <handler.78735.B78735.174949974130552 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 78735
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Helmut Eller <eller.helmut@HIDDEN>
Cc: 78735 <at> debbugs.gnu.org
Received: via spool by 78735-submit <at> debbugs.gnu.org id=B78735.174949974130552
          (code B ref 78735); Mon, 09 Jun 2025 20:09:05 +0000
Received: (at 78735) by debbugs.gnu.org; 9 Jun 2025 20:09:01 +0000
Received: from localhost ([127.0.0.1]:57952 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uOinj-0007wK-8F
	for submit <at> debbugs.gnu.org; Mon, 09 Jun 2025 16:09:01 -0400
Received: from mail-4316.protonmail.ch ([185.70.43.16]:18513)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1uOinW-0007tJ-Ds
 for 78735 <at> debbugs.gnu.org; Mon, 09 Jun 2025 16:08:48 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1749499719; x=1749758919;
 bh=LcV6dj3b4bvrxMz2HnEViXRvk6F++crDnwNMLQ9CcCQ=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=KDXlYaIVQbWEFX7i1k823HmsyGB+OS+NYs+OA+YE/N1rar64ihaiVxeLQqAF5zofP
 doOYKeH2rO75F9EIaNubgAZr23D0dXDyYgfDylDvPLF+eYT/+bBXWm6M1KL3PTC2tZ
 JVX2Zyl4aCiYu2s84SJQBYN2InwIeY4rDaHrjEUg2rVZCtBFsk5KGDNpP+Ma017hLe
 AgAHNmu2YowytHaKIfN1YpWxndTw0Og9qCnoW7aOPJyVMnWtjT5bh9Xtb8NjOnFnYj
 ep6FkFjf2fWNa3IFS5g1td3aIM8lwbeqtMAWiIn0FxJdX1dpovVgeU1JAUionM4eES
 LlG1dK59cS5xg==
Date: Mon, 09 Jun 2025 20:08:36 +0000
From: Pip Cet <pipcet@HIDDEN>
Message-ID: <87y0u03cg0.fsf@HIDDEN>
In-Reply-To: <87v7p4g10y.fsf@HIDDEN>
References: <87v7p4g10y.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: cb1733aa83d308e01d9e937e36763256985794af
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Helmut Eller" <eller.helmut@HIDDEN> writes:

> This is a proposal to reduce of the size of the kbd-buffer root.
> Currently the kdb-buffer is an area of ~250kb that is scanned
> ambiguously.
>
> With the patch, instead of tracing the entire kbd_buffer, we only scan
> the region from kbd_fetch_ptr - 1 to kbd_store_ptr + 1.  The -1/+1 is
> supposed to cover the cases where MPS stops the mutator while those
> pointers are being updated.  If the kbd_buffer is empty, then only 180
> bytes are scanned.  It's still scanned ambiguously.

That sounds great to me.

> +static union buffered_input_event *
> +prev_kbd_event (union buffered_input_event *kbd_buffer,
> +=09=09union buffered_input_event *ptr)
> +{
> +  return ptr =3D=3D kbd_buffer ? kbd_buffer + KBD_BUFFER_SIZE - 1 : ptr =
- 1;
> +}
> +
> +static union buffered_input_event *
> +next_kbd_event (union buffered_input_event *kbd_buffer,
> +=09=09union buffered_input_event *ptr)
> +{
> +  return ptr =3D=3D kbd_buffer + KBD_BUFFER_SIZE - 1 ? kbd_buffer : ptr =
+ 1;
> +}

Just out of curiosity, is there a reason for the extra kbd_buffer
argument?  Since this code is replicated a few times, maybe it would be
better to keep next_kbd_event in keyboard.c identical to the one in
igc.c.  Maybe not, though...

> +  union buffered_input_event *fetch
> +    =3D prev_kbd_event (kbd_buffer, kbd_fetch_ptr);
> +  union buffered_input_event *store
> +    =3D next_kbd_event (kbd_buffer, kbd_store_ptr);
> +
> +  if (fetch < store)
> +    return scan_ambig (ss, fetch, store, closure);

I think this will fail if kbd_store_ptr + 1 =3D=3D kbd_fetch_ptr (i.e. the
kbd_buffer is full)?

if (fetch < store - 1)

should work, though, and it's not like this case is common enough to
worry about scanning the same event twice.

Pip






Last modified: Mon, 9 Jun 2025 20:15:03 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.