user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH 6/7] thread: avoid Perl5 internal scratchpad target cache
  2021-10-24  0:20  7% [PATCH 0/7] misc tweaks and fixes Eric Wong
@ 2021-10-24  0:20  6% ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-10-24  0:20 UTC (permalink / raw)
  To: meta

The use of array-returning built-ins such as `grep' inside
arrayref declarations appears to result in permanently allocated
scratchpad space for caching according to my malloc inspector.

Thread skeletons get discarded every response, but multiple
skeletons can exist in memory at once, so do what we can to
prevent long-lived allocations from being made, here.

In other words, replacing constructs such as:

	my $foo = [ grep(...) ];

with:

	my @foo = grep(...);

Seems to ensure the mortality of the underlying array.
---
 lib/PublicInbox/SearchThread.pm | 22 +++++++++++-----------
 lib/PublicInbox/SearchView.pm   |  4 ++--
 lib/PublicInbox/View.pm         |  4 ++--
 t/thread-cycle.t                |  4 ++--
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/lib/PublicInbox/SearchThread.pm b/lib/PublicInbox/SearchThread.pm
index 507f25ba..f07dd696 100644
--- a/lib/PublicInbox/SearchThread.pm
+++ b/lib/PublicInbox/SearchThread.pm
@@ -83,15 +83,15 @@ sub thread {
 		}
 	}
 	my $ibx = $ctx->{ibx};
-	my $rootset = [ grep { # n.b.: delete prevents cyclic refs
+	my @rootset = grep { # n.b.: delete prevents cyclic refs
 			!delete($_->{parent}) && $_->visible($ibx)
-		} values %id_table ];
-	$rootset = $ordersub->($rootset);
-	$_->order_children($ordersub, $ctx) for @$rootset;
+		} values %id_table;
+	$ordersub->(\@rootset);
+	$_->order_children($ordersub, $ctx) for @rootset;
 
 	# parent imposter messages with reused Message-IDs
 	unshift(@{$id_table{$_->{mid}}->{children}}, $_) for @imposters;
-	$rootset;
+	\@rootset;
 }
 
 package PublicInbox::SearchThread::Msg;
@@ -172,12 +172,12 @@ sub order_children {
 	my @q = ($cur);
 	my $ibx = $ctx->{ibx};
 	while (defined($cur = shift @q)) {
-		my $c = $cur->{children}; # The hashref here...
-
-		$c = [ grep { !$seen{$_}++ && visible($_, $ibx) } values %$c ];
-		$c = $ordersub->($c) if scalar @$c > 1;
-		$cur->{children} = $c; # ...becomes an arrayref
-		push @q, @$c;
+		# the {children} hashref here...
+		my @c = grep { !$seen{$_}++ && visible($_, $ibx) }
+			values %{$cur->{children}};
+		$ordersub->(\@c) if scalar(@c) > 1;
+		$cur->{children} = \@c; # ...becomes an arrayref
+		push @q, @c;
 	}
 }
 
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm
index a42867c5..b1cdb480 100644
--- a/lib/PublicInbox/SearchView.pm
+++ b/lib/PublicInbox/SearchView.pm
@@ -274,10 +274,10 @@ sub search_nav_bot { # also used by WwwListing for searching extindex miscidx
 }
 
 sub sort_relevance {
-	[ sort {
+	@{$_[0]} = sort {
 		(eval { $b->topmost->{pct} } // 0) <=>
 		(eval { $a->topmost->{pct} } // 0)
-	} @{$_[0]} ]
+	} @{$_[0]};
 }
 
 sub mset_thread {
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 116aa641..2e9cf705 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -1073,10 +1073,10 @@ sub _skel_ghost {
 }
 
 sub sort_ds {
-	[ sort {
+	@{$_[0]} = sort {
 		(eval { $a->topmost->{ds} } || 0) <=>
 		(eval { $b->topmost->{ds} } || 0)
-	} @{$_[0]} ];
+	} @{$_[0]};
 }
 
 # accumulate recent topics if search is supported
diff --git a/t/thread-cycle.t b/t/thread-cycle.t
index e89b1846..1e5dfb51 100644
--- a/t/thread-cycle.t
+++ b/t/thread-cycle.t
@@ -108,7 +108,7 @@ SKIP: {
 	eval 'package EmptyInbox; sub smsg_by_mid { undef }';
 	my $ctx = { ibx => bless {}, 'EmptyInbox' };
 	my $rootset = PublicInbox::SearchThread::thread($smsgs, sub {
-		[ sort { $a->{mid} cmp $b->{mid} } @{$_[0]} ] }, $ctx);
+		@{$_[0]} = sort { $a->{mid} cmp $b->{mid} } @{$_[0]} }, $ctx);
 	my $oldout = select $fh;
 	find_cycle($rootset);
 	select $oldout;
@@ -120,7 +120,7 @@ done_testing;
 sub thread_to_s {
 	my ($msgs) = @_;
 	my $rootset = PublicInbox::SearchThread::thread($msgs, sub {
-		[ sort { $a->{mid} cmp $b->{mid} } @{$_[0]} ] });
+		@{$_[0]} = sort { $a->{mid} cmp $b->{mid} } @{$_[0]} });
 	my $st = '';
 	my @q = map { (0, $_) } @$rootset;
 	while (@q) {

^ permalink raw reply related	[relevance 6%]

* [PATCH 0/7] misc tweaks and fixes
@ 2021-10-24  0:20  7% Eric Wong
  2021-10-24  0:20  6% ` [PATCH 6/7] thread: avoid Perl5 internal scratchpad target cache Eric Wong
  0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2021-10-24  0:20 UTC (permalink / raw)
  To: meta

Patch 2 helps lei users avoid wasting bandwidth.

I've been running patches 6 and 7 on https://yhbt.net/lore/
for a while, now; and memory use seems far lower.

The rest are pretty minor things, I think.

Eric Wong (7):
  lei: always pass $lei to LeiAuth->op_merge
  lei export-kw: skip read-only IMAP folders
  shared_kv: remove cache_size attribute support
  http: use a larger buffer for ->getline responses
  listener: emit warnings on EPERM
  thread: avoid Perl5 internal scratchpad target cache
  git: avoid Perl5 internal scratchpad target cache

 lib/PublicInbox/Git.pm                |  3 ++-
 lib/PublicInbox/HTTP.pm               |  2 +-
 lib/PublicInbox/LeiExportKw.pm        | 14 ++++++++++++--
 lib/PublicInbox/LeiForgetSearch.pm    |  2 +-
 lib/PublicInbox/LeiImport.pm          |  2 +-
 lib/PublicInbox/LeiLsMailSource.pm    |  2 +-
 lib/PublicInbox/LeiMailDiff.pm        |  2 +-
 lib/PublicInbox/LeiRefreshMailSync.pm |  2 +-
 lib/PublicInbox/LeiTag.pm             |  2 +-
 lib/PublicInbox/LeiXSearch.pm         |  2 +-
 lib/PublicInbox/Listener.pm           |  8 ++------
 lib/PublicInbox/NetWriter.pm          |  9 +++++++++
 lib/PublicInbox/SearchThread.pm       | 22 +++++++++++-----------
 lib/PublicInbox/SearchView.pm         |  4 ++--
 lib/PublicInbox/SharedKV.pm           |  3 ---
 lib/PublicInbox/View.pm               |  4 ++--
 t/lei-export-kw.t                     |  2 +-
 t/lei-import-imap.t                   |  3 +++
 t/thread-cycle.t                      |  4 ++--
 19 files changed, 54 insertions(+), 38 deletions(-)


^ permalink raw reply	[relevance 7%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-10-24  0:20  7% [PATCH 0/7] misc tweaks and fixes Eric Wong
2021-10-24  0:20  6% ` [PATCH 6/7] thread: avoid Perl5 internal scratchpad target cache Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).