From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "ISHIKAWA,chiaki" Newsgroups: gmane.emacs.bugs Subject: bug#66096: High CPU usage, basically runaway emacs with visit to bidi_cache_search on and off? Date: Wed, 20 Sep 2023 16:09:03 +0900 Message-ID: <80682fbe-b5ac-4605-b8e5-7baac2d71da5@yk.rim.or.jp> References: <1808d5a1-3ee6-d675-3ad3-c6bcc2fe5e36@yk.rim.or.jp> <834jjqe85z.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------kcjWW2kzp4JrMOBLWEZZB3WC" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36655"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: 66096@debbugs.gnu.org, "ishikawa, chiaki" To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Sep 20 09:09:10 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qirKf-0009OP-Vm for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 20 Sep 2023 09:09:10 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qirKV-0003fj-8O; Wed, 20 Sep 2023 03:08:59 -0400 Original-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 ) id 1qirKP-0003f6-El for bug-gnu-emacs@gnu.org; Wed, 20 Sep 2023 03:08:55 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qirKP-00085S-75 for bug-gnu-emacs@gnu.org; Wed, 20 Sep 2023 03:08:53 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qirKY-0002TE-EP for bug-gnu-emacs@gnu.org; Wed, 20 Sep 2023 03:09:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: "ISHIKAWA,chiaki" Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 20 Sep 2023 07:09:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66096 X-GNU-PR-Package: emacs Original-Received: via spool by 66096-submit@debbugs.gnu.org id=B66096.16951937149454 (code B ref 66096); Wed, 20 Sep 2023 07:09:02 +0000 Original-Received: (at 66096) by debbugs.gnu.org; 20 Sep 2023 07:08:34 +0000 Original-Received: from localhost ([127.0.0.1]:58175 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qirK5-0002SQ-MW for submit@debbugs.gnu.org; Wed, 20 Sep 2023 03:08:34 -0400 Original-Received: from mail06.siriuscloud.jp ([219.118.72.6]:41118) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qirK2-0002S5-5C for 66096@debbugs.gnu.org; Wed, 20 Sep 2023 03:08:32 -0400 Original-Received: from [192.168.0.77] (M106073032161.v4.enabler.ne.jp [106.73.32.161]) (Authenticated sender: ishikawa@yk.rim.or.jp) by access06.SiriusCloud.jp (Postfix) with ESMTPA id 4Rr8kp22gVz60Nb; Wed, 20 Sep 2023 16:08:18 +0900 (JST) Authentication-Results: access06.SiriusCloud.jp; dkim=none reason="no signature"; dkim-adsp=none (unprotected policy); dkim-atps=neutral Content-Language: en-US In-Reply-To: <834jjqe85z.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:270906 Archived-At: This is a multi-part message in MIME format. --------------kcjWW2kzp4JrMOBLWEZZB3WC Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2023/09/19 20:04, Eli Zaretskii wrote: >> Cc: "ishikawa, chiaki" >> Date: Tue, 19 Sep 2023 13:12:33 +0900 >> From: "ISHIKAWA,chiaki" >> >> High CPU usage, basically runaway emacs with visit to bidi_cache_search >> on and off? >> >> Hi, >> >> Environment: >> OS GNU/Debian Linux  X86_64 >> Emacs version >> GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, >> cairo version 1.16.0) of 2023-08-01 >> I compiled emacs using gcc. >> >> Has anyone seen emacs 29.1 spending CPU way too high, basically went >> into an infinite loop of some sort, and could not be interrupted by >> Control-G?  Basically it is in a runaway state. >> I found that the stacktraces show that bidi_cache_search >> and friends are visited now and then.  It is not the recursive blowup >> probably since the stack depth is quite limited during my observation. >> >> >> I have experienced this issue this morning.  Observing the stack >> backtrace by monitoring the runaway emacs using gdb, I was surprised >> to see many appearances of bidi_cache_search that were observed from >> time to time while I do control-C to stop emacs and monitor >> stacktrace, and the continue for a few seconds, and interrupt it again >> with control-C.  After letting emacs run in this manner for about 5 >> minutes, I had tp kill emacs.  I had to edit the file by a deadline and >> could not continue debugging. :-( >> >> At the end is a single stacktrace with bidi_cache_search at the top. >> I have seen this occurring multiple times. My hitting control-C to emacs >> to enter gdb interaction means that the chance of hitting a particular >> stacktrace pattern is small and seeing the same pattern multiple times >> means that that pattern happens quite often. > The backtrace shows we were resizing the mini-window, but it doesn't > tell where and why we were looping. > > (The bidi_cache_search part is probably a red herring: that function > is indeed called very frequently when Emacs performs display and > layout calculations -- which is not surprising, since that's why the > bidi cache exists: to provide cache hits whenever possible.) > > So it is important to have a file and the sequence of commands that > trigger this. Please try to produce such a file and a recipe to > reproduce the problem. > > Alternatively, you can use the technique described in etc/DEBUG for > finding where Emacs loops, see there under "If the symptom of the bug > is that Emacs fails to respond". I think even if you do discover > where it loops, we'd need an example file to see why, though. > >> I have a dozen or so more different stacktraces during gdb monitoring. >> If someone wants to see the log, I can post it. >> What is the preferred URL where I can paste the whole gdb session? > You can post them here, perhaps compressed. However, if they are all > of the same kind, i.e. start with resize_echo_area_exactly, then I > don't think more backtraces alone will help. > > Thanks. > Thank you for your comment. There seem to be enough variation of the stacktrace patterns. I am attaching the gdb session file as zipped archive. As you suggested, it seems Emacs is trying to resize echo area, and is looping somehow. resize_echo_area_exactly () seems to be always there. It could be that it was trying to dump the S-expression that encodes the latest GC information after each GC. I have the following code snippet to monitor GC issues on my PC for quite sometime. But I have not seen this particular problem before. The long pause I have seen before was strictly in GC-related routines. (setq my-gc-statistics (make-vector 30 nil)) ;;; The element is ;;; (append (memory-use-counts) (list gc-elapsed gcs-done)) ;;; Each time the following function is called, the ;;; elements in the array is shifted toward the end. ;;; Use (message "%S" my-gc-statistics) to force the ;;; recording of my-gc-statistics value in *Messages* buffer for later analysis. (defun update-my-gc-statistics ()   (let ((i 28))     (progn      ;;; very unlike Lisp      (while (<= 0 i)        (progn (aset my-gc-statistics (+ 1 i) (aref my-gc-statistics i))              (setq i (- i 1) )))      (aset my-gc-statistics 0            (append (memory-use-counts) (list gc-elapsed gcs-done)))      ;;; print the latest one last so that I can see the glimpse in the narrow      ;;; output window.      (message "%S\n%S" (current-time-string) (pp (reverse my-gc-statistics)))))) (setq post-gc-hook 'update-my-gc-statistics) For example, in one place, I see #0  0x0000556f1905be9e in string_char_and_length     (length=, p=0x556f20d8a3d8 " 70337 417360 2.323839139 50)\n (99058573 3875 59193441 34949 11084445 70337 417401 2.391973008 51)]\n\"") at /home/ishikawa/repos/emacs-29.1/src/character.h:375 And that string is probably   from (append (memory-use-counts) (list gc-elapsed gcs-done)) Also I see recursive_edit at the bottom of the stakctrace. Not sure why. Maybe I was doing some error recovery of Japanese input? In any case, Emacs should not enter a state that cannot be interrupted by CONTROL-G for a long time IMHO. (Or was it that the processing of control-G somehow resulted in the effort to widen echo area and emacs failed?) TIA Chiaki --------------kcjWW2kzp4JrMOBLWEZZB3WC Content-Type: application/x-zip-compressed; name="emacs-cant-be-interrupted-with-control-g.zip" Content-Disposition: attachment; filename="emacs-cant-be-interrupted-with-control-g.zip" Content-Transfer-Encoding: base64 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 jt0XKucpz3hIbB1uUKeF/pZs74yZtKby3y89LaN2H5Vl7FrbleSLrtMTGh7dnLwtCxLkbcJH r07e5g1nq8c8edtoQN5Wt4qrRcI3b4u8TUaIk7dJHfuK5G2Rx7QCeZtmSQ+akLc3yaPaBEwl 5O2GadKbaNkEXhH8syJ3+ltleyUc+PazvcrOi33CdrL/oia2I2a2GraT1ph7h+2abtCH1MXR MjqkLpBdQYfUMVEBHZKc6xXRIQnTrYYO3eLHs5PokA3CJf5QAYeN8CEtBw0PDw8fsns/fUlA Iv5XBvRKtNoMXyiVolCvLTijzkVDdj0qwpnKuWjk3YqGcGbbe0MJnCFZ16vBmffbHCJwdfXm 0CrTXgARRetp052R/QIQJGKmHoAgNXGrAYiuJm6J+e8q2qrM/65VtEWs+CY8/NeDE/4nKIOH ZUI7P579x88bsZH5r7yOdyb74I+cVof5K0eZNn8e/AtQSwECFAAUAAAACADNfTRXXStj88od AADc+wAALAAAAAAAAAABACAAAAAAAAAAZW1hY3MtY2FudC1iZS1pbnRlcnJ1cHRlZC13aXRo LWNvbnRyb2wtZy50eHRQSwUGAAAAAAEAAQBaAAAAFB4AAAAA --------------kcjWW2kzp4JrMOBLWEZZB3WC--