]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/V2Writable.pm
v2writable: nproc: use sysconf() on Linux and FreeBSD
[public-inbox.git] / lib / PublicInbox / V2Writable.pm
index 7f9342b08d36941d1784615739f300ebf532542f..35b7fe3049cf0943834141068e1f2815495592f5 100644 (file)
@@ -21,6 +21,7 @@ use PublicInbox::Search;
 use PublicInbox::SearchIdx qw(log2stack is_ancestor check_size is_bad_blob);
 use IO::Handle; # ->autoflush
 use File::Temp ();
+use POSIX ();
 
 my $OID = qr/[a-f0-9]{40,}/;
 # an estimate of the post-packed size to the raw uncompressed size
@@ -35,6 +36,11 @@ our $PACKING_FACTOR = 0.4;
 our $NPROC_MAX_DEFAULT = 4;
 
 sub detect_nproc () {
+       # _SC_NPROCESSORS_ONLN = 84 on both Linux glibc and musl
+       return POSIX::sysconf(84) if $^O eq 'linux';
+       return POSIX::sysconf(58) if $^O eq 'freebsd';
+       # TODO: more OSes
+
        # getconf(1) is POSIX, but *NPROCESSORS* vars are not
        for (qw(_NPROCESSORS_ONLN NPROCESSORS_ONLN)) {
                `getconf $_ 2>/dev/null` =~ /^(\d+)$/ and return $1;