about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-06-12 00:35:32 +0000
committerEric Wong <e@80x24.org>2019-06-14 01:30:40 +0000
commit268d79cfd72d8b0739a1a19d36218756df76a345 (patch)
tree8ca1a76b024da5045bca7807517c8b9ce5d410e4
parentc44825f8b2f3d57f6aca29d75516db8712261954 (diff)
downloadpublic-inbox-268d79cfd72d8b0739a1a19d36218756df76a345.tar.gz
Apparently 16 CPUs (probably HT) and SATA storage is common
these days.  Having excessive Xapian partitions leads to
contention and excessive FD/space use.  So set a smaller
default but continue allowing user-specified values to bump
this up.
-rw-r--r--lib/PublicInbox/V2Writable.pm18
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index a8c33ef4..c5046517 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -23,7 +23,14 @@ use IO::Handle;
 # an estimate of the post-packed size to the raw uncompressed size
 my $PACKING_FACTOR = 0.4;
 
-# assume 2 cores if GNU nproc(1) is not available
+# SATA storage lags behind what CPUs are capable of, so relying on
+# nproc(1) can be misleading and having extra Xapian partions is a
+# waste of FDs and space.  It can also lead to excessive IO latency
+# and slow things down.  Users on NVME or other fast storage can
+# use the NPROC env or switches in our script/public-inbox-* programs
+# to increase Xapian partitions.
+our $NPROC_MAX_DEFAULT = 4;
+
 sub nproc_parts ($) {
         my ($creat_opt) = @_;
         if (ref($creat_opt) eq 'HASH') {
@@ -32,7 +39,14 @@ sub nproc_parts ($) {
                 }
         }
 
-        my $n = int($ENV{NPROC} || `nproc 2>/dev/null` || 2);
+        my $n = $ENV{NPROC};
+        if (!$n) {
+                chomp($n = `nproc 2>/dev/null`);
+                # assume 2 cores if GNU nproc(1) is not available
+                $n = 2 if !$n;
+                $n = $NPROC_MAX_DEFAULT if $NPROC_MAX_DEFAULT > 4;
+        }
+
         # subtract for the main process and git-fast-import
         $n -= 1;
         $n < 1 ? 1 : $n;