]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
ipc: move nproc_shards from v2writable
authorEric Wong <e@80x24.org>
Tue, 21 Mar 2023 23:07:16 +0000 (23:07 +0000)
committerEric Wong <e@80x24.org>
Sat, 25 Mar 2023 09:37:39 +0000 (09:37 +0000)
We'll be using nproc_shards for indexing non-Inbox stuff.

lib/PublicInbox/IPC.pm
lib/PublicInbox/V2Writable.pm

index 548a72ebb11c70dba1ba1360fdc8d6d5598b9c95..730f2cf6bdb0dd71bb4a3dbd2984fbdb702e0c75 100644 (file)
@@ -19,7 +19,7 @@ use PublicInbox::WQWorker;
 use Socket qw(AF_UNIX MSG_EOR SOCK_STREAM);
 my $MY_MAX_ARG_STRLEN = 4096 * 33; # extra 4K for serialization
 my $SEQPACKET = eval { Socket::SOCK_SEQPACKET() }; # portable enough?
-our @EXPORT_OK = qw(ipc_freeze ipc_thaw);
+our @EXPORT_OK = qw(ipc_freeze ipc_thaw nproc_shards);
 my ($enc, $dec);
 # ->imports at BEGIN turns sereal_*_with_object into custom ops on 5.14+
 # and eliminate method call overhead
@@ -454,4 +454,28 @@ sub detect_nproc () {
        undef
 }
 
+# SATA storage lags behind what CPUs are capable of, so relying on
+# nproc(1) can be misleading and having extra Xapian shards 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 shards
+our $NPROC_MAX_DEFAULT = 4;
+
+sub nproc_shards ($) {
+       my ($creat_opt) = @_;
+       my $n = $creat_opt->{nproc} if ref($creat_opt) eq 'HASH';
+       $n //= $ENV{NPROC};
+       if (!$n) {
+               # assume 2 cores if not detectable or zero
+               state $NPROC_DETECTED = PublicInbox::IPC::detect_nproc() || 2;
+               $n = $NPROC_DETECTED;
+               $n = $NPROC_MAX_DEFAULT if $n > $NPROC_MAX_DEFAULT;
+       }
+
+       # subtract for the main process and git-fast-import
+       $n -= 1;
+       $n < 1 ? 1 : $n;
+}
+
 1;
index ed5182ae846029a5af0837060335c7d7d8a45066..d3d139410ef52f859825cf8209873400c6d29ac7 100644 (file)
@@ -8,7 +8,7 @@ use strict;
 use v5.10.1;
 use parent qw(PublicInbox::Lock PublicInbox::IPC);
 use PublicInbox::SearchIdxShard;
-use PublicInbox::IPC;
+use PublicInbox::IPC qw(nproc_shards);
 use PublicInbox::Eml;
 use PublicInbox::Git;
 use PublicInbox::Import;
@@ -29,30 +29,6 @@ my $OID = qr/[a-f0-9]{40,}/;
 # an estimate of the post-packed size to the raw uncompressed size
 our $PACKING_FACTOR = 0.4;
 
-# SATA storage lags behind what CPUs are capable of, so relying on
-# nproc(1) can be misleading and having extra Xapian shards 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 shards
-our $NPROC_MAX_DEFAULT = 4;
-
-sub nproc_shards ($) {
-       my ($creat_opt) = @_;
-       my $n = $creat_opt->{nproc} if ref($creat_opt) eq 'HASH';
-       $n //= $ENV{NPROC};
-       if (!$n) {
-               # assume 2 cores if not detectable or zero
-               state $NPROC_DETECTED = PublicInbox::IPC::detect_nproc() || 2;
-               $n = $NPROC_DETECTED;
-               $n = $NPROC_MAX_DEFAULT if $n > $NPROC_MAX_DEFAULT;
-       }
-
-       # subtract for the main process and git-fast-import
-       $n -= 1;
-       $n < 1 ? 1 : $n;
-}
-
 sub count_shards ($) {
        my ($self) = @_;
        # always load existing shards in case core count changes: