From 31ec75b69e02df6330bc16dd2bd48d354726f4c1 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 19 Mar 2020 03:32:55 -0500 Subject: [PATCH] daemon: do more immortal allocations up front Doing immortal allocations late can cause those allocations to end up in places where it fragments the heap. So do more things up front for long-lived daemons. --- lib/PublicInbox/NNTPD.pm | 4 ++++ lib/PublicInbox/WWW.pm | 21 +++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/PublicInbox/NNTPD.pm b/lib/PublicInbox/NNTPD.pm index 7a917169..451f4d41 100644 --- a/lib/PublicInbox/NNTPD.pm +++ b/lib/PublicInbox/NNTPD.pm @@ -45,6 +45,10 @@ sub refresh_groups () { # Only valid if msgmap and search works $new->{$ngname} = $ng; push @list, $ng; + + # preload to avoid fragmentation: + $ng->description; + $ng->base_url; } }); @list = sort { $a->{newsgroup} cmp $b->{newsgroup} } @list; diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 534ee028..2434f2f5 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -132,7 +132,9 @@ sub call { } } -# for CoW-friendliness, MOOOOO! +# for CoW-friendliness, MOOOOO! Even for single-process setups, +# we want to get all immortal allocations done early to avoid heap +# fragmentation since common allocators favor a large contiguous heap. sub preload { my ($self) = @_; require PublicInbox::ExtMsg; @@ -148,18 +150,29 @@ sub preload { require PublicInbox::Search; PublicInbox::Search::load_xapian(); }; - foreach (qw(PublicInbox::SearchView - PublicInbox::MboxGz - PublicInbox::NewsWWW)) { + foreach (qw(PublicInbox::SearchView PublicInbox::MboxGz)) { eval "require $_;"; } if (ref($self)) { + my $pi_config = $self->{pi_config}; + if (defined($pi_config->{'publicinbox.cgitrc'})) { + $pi_config->limiter('-cgit'); + } $self->cgit; $self->stylesheets_prepare($_) for ('', '../', '../../'); $self->www_listing; + $self->news_www; + $pi_config->each_inbox(\&preload_inbox); } } +sub preload_inbox { + my $ibx = shift; + $ibx->cloneurl; + $ibx->description; + $ibx->base_url; +} + # private functions below sub r404 { -- 2.44.0