From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.bugs Subject: bug#37321: 27.0.50; Excessive gc in a use case (el-search) Date: Sat, 07 Sep 2019 16:23:42 +0200 Message-ID: <87sgp84235.fsf@web.de> References: <87lfv1pm5x.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="180063"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) To: 37321@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Sep 07 16:24:25 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1i6bdY-000kgC-Dr for geb-bug-gnu-emacs@m.gmane.org; Sat, 07 Sep 2019 16:24:24 +0200 Original-Received: from localhost ([::1]:35318 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6bdX-0003t0-7H for geb-bug-gnu-emacs@m.gmane.org; Sat, 07 Sep 2019 10:24:23 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:56472) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6bdD-0003su-Jl for bug-gnu-emacs@gnu.org; Sat, 07 Sep 2019 10:24:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i6bdC-0008BD-Ju for bug-gnu-emacs@gnu.org; Sat, 07 Sep 2019 10:24:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:57387) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i6bdC-0008Au-D1 for bug-gnu-emacs@gnu.org; Sat, 07 Sep 2019 10:24:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1i6bdC-00024W-7J for bug-gnu-emacs@gnu.org; Sat, 07 Sep 2019 10:24:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Michael Heerdegen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 07 Sep 2019 14:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 37321 X-GNU-PR-Package: emacs Original-Received: via spool by 37321-submit@debbugs.gnu.org id=B37321.15678662327948 (code B ref 37321); Sat, 07 Sep 2019 14:24:02 +0000 Original-Received: (at 37321) by debbugs.gnu.org; 7 Sep 2019 14:23:52 +0000 Original-Received: from localhost ([127.0.0.1]:37975 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1i6bd2-000248-BG for submit@debbugs.gnu.org; Sat, 07 Sep 2019 10:23:52 -0400 Original-Received: from mout.web.de ([212.227.15.14]:44317) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1i6bcz-00023t-6N for 37321@debbugs.gnu.org; Sat, 07 Sep 2019 10:23:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1567866222; bh=Ubf+83kBJ/zZJHnR3broe5Jz34zbNKGDWp5DD7jT+Rs=; h=X-UI-Sender-Class:From:To:Subject:References:Date:In-Reply-To; b=nMJHvQfBBhEBylkMl40+jcIsFxl6C076+snGBPNwoUVRXoRSZmheYiJKk+vRALY4s IZne8ir1N39zgkLC3WOAaqER9QlveGekwRiYEgT6y0Sh1VgaI6RqNDHlH/v9XUrVjs fUSk011PI9cfIU37kLFRHBxROR3fJCZ8jmlEPKBo= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Original-Received: from drachen.dragon ([94.218.186.138]) by smtp.web.de (mrweb001 [213.165.67.108]) with ESMTPSA (Nemesis) id 0MIvJx-1i8WMp2JeT-002UF0; Sat, 07 Sep 2019 16:23:42 +0200 In-Reply-To: <87lfv1pm5x.fsf@web.de> (Michael Heerdegen's message of "Fri, 06 Sep 2019 15:52:10 +0200") X-Provags-ID: V03:K1:kVjWS8PwejhVze859NREmTafAOjo7AjNFTqGPcZJI5kKI15grH9 tGUWQVAYUaFDNcr/sNhm3USz/RRCIvfl/GAertjpw5+w9xFFrh+fWyGqkxRc1+Qt3s+MugE b2VZek9W6P7QV7Z+gQcD3gJRp8vM9rKsJCZECDhaOvQCBrTBn4TKQujKKaLmGtndSWkPn+m sxS5s+/FZRztyHqCcdjvA== X-UI-Out-Filterresults: notjunk:1;V03:K0:7xwg1hQwkzw=:U7VkKGGpq8I6/8GPlRWfOg 3w4xYjyiubr6ZVUaodRJ44qqkH42hXQXso4sg5W9u5SEhH/1Uce/qP3v/T8PU4vfK3kTaOzti QwKiS/Y2bbEVJBIeet6L/tbnFK3+bBPnchaM9gMg2HpKlRTh4IIuMRTdZxwKa64pNTYLk4/pO 4WIDpLJ6e1cSVmRE4mfJDUgoFtjwbz7Z5Fxjk0nmeNePv/ciT4hf1dBic3W2XAJv32XmB4aus PBi22xzwldSCcDvialnOVTP8jYZLl09qmdFr7XR6v7ufSmQ7cB/TESK5Efd1Nd9p/l6Aawb45 OGXukLBNJir73rJ+9+6AhxXEGjaIaDrnMBVV73YTnM+kyZdq/sSoQ0T5cmExauo1+zAOkA6Ym zc+vvA8z0yxu/ixJzy7jGaBCyKSJTolHOoi+7h+q4wXgqsKul17997JEJTgBhkctQNBewYfOf kdj1uRlF2ciL3aMWicXbHDR4AhpLh+FW5bwZkRTxw5WqNtkijRsOmrfzyMT3BEjyM0hEWL9pp 7wHWyKg/erTDYD++OapGKi1TOSfKENGmXwYNrfJCFPkQ/3P4sUVroUkW9YwGan1NTK5InV5nD SIygYfS6O51H665ASuzoCiNd4SwZ3N0fqOLIFdeoVrJQfHanvh0/SR0T6Dg/SRGzpDj3Hss4X LPtEcwEaYlP9qdEaI51EMzGxHCaurgVgoldU0qYzdqrygeTLC0+TIhB5yyA7mqrdMQOloN6Rp iTlPCcJFWW2eDFIdNYO3ujusEqKll4c3/5Z8Kryh8GXcoPiLUsX/kcmg/SaaHcD+N/tsZinG X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:166272 Archived-At: Michael Heerdegen writes: > M-x el-search-emacs-elisp-sources 'pcase M-RET I found the culprit. It's this simple function: #+begin_src emacs-lisp (defun el-search--flatten-tree (tree) "Return a list of `el-search--atomic-p' objects in TREE." (let ((elements ()) (walked-objects ;to avoid infinite recursion for circular TREEs (make-hash-table :test #'eq)) (gc-cons-percentage 0.8) ) ;Why is binding it here more effective than binding it more top-level? (cl-labels ((walker (object) (if (el-search--atomic-p object) (push object elements) (unless (gethash object walked-objects) (puthash object t walked-objects) (if (consp object) (progn (while (consp object) (walker (car object)) (setq object (cdr object)) (if (gethash object walked-objects) (setq object nil) (puthash object t walked-objects))) (when object ;dotted list (walker object))) (cl-loop for elt being the elements of object do (walker elt))))))) (walker tree) elements))) #+end_src I've put a lot of work in optimizing el-searching speed. It now mainly depends of effectiveness of gc, mostly in the above function. When I wrote it I noticed that it worked best when binding gc-cons-percentage to a value of 0.8 (inside the function, see the code). But now this binding slows the thing down as hell. When I remove the binding, searching is fast again, but it still takes twice as long as in the past when 0.8 worked. I've no clue about how gc works and how the above function can be optimized, and if gc is expected to be that slow now with the gc-cons-percentage binding in effect. Advice appreciated. TIA, Michael.