From nobody Thu May 15 14:23:29 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Zysrd4jGqz5wQmx; Thu, 15 May 2025 14:23:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Zysrd3tHfz3c90; Thu, 15 May 2025 14:23:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747319009; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=7emMQ5pF+I5zqUfmDNLDYxw9A5DL3rNCKUQA/yI1f8s=; b=alSYrNNNbGFnzqbh4qemZV7WM46ZzB7e6nwxaQkSY+a7WA4ZiPh09ElzqFiVGRBTVXojjk ZjXbKjKtRBq7lqrydZ8TiZ/MTPdRylpb4bs4k5Sq8khhmKtt7d+AT5sAa+sIEJBQQPsNxI tv/5oJe3d+h2XuIzv5DyeAoPD9WFJlQgCe4mTr7+YPH5troxoMWaST06gUTvOkCEPAXYaj QOlgGTjlcIKPV22uS1hdkjMkiD/KS36PSKWv3JIVjQvg9xcU74S8Mcsj4B8peRElVR30qi Gi6cLWKZ7buTrUOYrA9OYUNXANQ56V40HvXrSwpxHDZ+u8Bvcq5FQ+MMDN8ftg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747319009; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=7emMQ5pF+I5zqUfmDNLDYxw9A5DL3rNCKUQA/yI1f8s=; b=NJE4ftgGQsSdgeCai6zh8TNDtU+6edU6bW5YZktz5S+r6uXXEMcD96WjSowwt2NOofACo2 CpqutmejOTc7mY0dR6UfyH0gJIzqU3uSYzTs1R9HqG9D1u35OaH46L1OSa0NPJ+P214iBI U49+Nj05/fOHUg3YovZeWOsdliQzAivacSq8W3NhOU8JFlHK1UqwvC4eaPE4m/XSxJDDRP D016VGRkIKebPhWXHxhBamX/sNF21BDprS5n5Qvlf0+IPIvQdXfK/8sMrqJz+qH8tyLhJp Go+/WSTspk4yLui3F/9kIM42bN/kMyy3WI8dvOKK3swf63kYvKoe2A6cfvie0Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1747319009; a=rsa-sha256; cv=none; b=s7Vg8vaBKpI+43f4v1DYOLSzEeC5crvMixiV2RaRp5d0P53J/98msDxNXUzk4YIbddt0X0 JWr9ISQz+LoIosBfAF+yaa5hl/MoRUsVL63CHid9WNEr3FBCe9zOm7yJcmcWrDNHhHl5n3 45DCEHJH7Xfmd3chm7J2ilr09dGpbd9o73qSEqhQepuibnhnmtVXFthLKA0PTIKD3Blt0S uCR5aP0T9nDQovVXM+4jr7LfTuNQ4kp9FmcC6RY2rEayB+Xavgf51hUnCWVwYK1SFV+SDg yPRBjZVpbsV4p8HtR5hHW/5MjflZYCHv137CXlk3EbihWfef4iu9urr66AJSdA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Zysrd3RGMz63k; Thu, 15 May 2025 14:23:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54FENTJv057688; Thu, 15 May 2025 14:23:29 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54FENTXl057685; Thu, 15 May 2025 14:23:29 GMT (envelope-from git) Date: Thu, 15 May 2025 14:23:29 GMT Message-Id: <202505151423.54FENTXl057685@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 73f9251c0b52 - main - Compute 'maxproc'/'maxfiles' from memory amount; Expand/fix comments List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 73f9251c0b52ac0bfb2f2baff27493d6bae216f6 Auto-Submitted: auto-generated The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=73f9251c0b52ac0bfb2f2baff27493d6bae216f6 commit 73f9251c0b52ac0bfb2f2baff27493d6bae216f6 Author: Olivier Certner AuthorDate: 2025-05-02 12:47:32 +0000 Commit: Olivier Certner CommitDate: 2025-05-15 14:22:53 +0000 Compute 'maxproc'/'maxfiles' from memory amount; Expand/fix comments Change the formulae so that 'maxproc' and 'maxfiles' are computed based on the physical memory amount, and not the corresponding number of pages. Make sure that the practical results are unchanged for all architectures (which is possible since all have 4096 as their PAGE_SIZE). Despite this, we do this change to make it clearer how many units of these values are computed per MB, which is easier on readers. Change the comments accordingly and expand them to indicate which parts of the computations are actually not used by default. In passing, fix the comments about default values and limits for 'maxfiles' (they were off). No functional change (intended). MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D50124 --- sys/kern/subr_param.c | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/sys/kern/subr_param.c b/sys/kern/subr_param.c index f4359efec466..471640c290a7 100644 --- a/sys/kern/subr_param.c +++ b/sys/kern/subr_param.c @@ -69,13 +69,14 @@ # define HZ_VM HZ # endif #endif +/* See the comments in init_param2() for these. */ #define NPROC (20 + 16 * maxusers) -#ifndef NBUF -#define NBUF 0 -#endif #ifndef MAXFILES #define MAXFILES (40 + 32 * maxusers) #endif +#ifndef NBUF +#define NBUF 0 +#endif static int sysctl_kern_vm_guest(SYSCTL_HANDLER_ARGS); @@ -275,13 +276,14 @@ init_param1(void) void init_param2(long physpages) { + long maxproc_clamp, maxfiles_clamp; TSENTER(); /* Base parameters */ maxusers = MAXUSERS; TUNABLE_INT_FETCH("kern.maxusers", &maxusers); if (maxusers == 0) { - maxusers = physpages / (2 * 1024 * 1024 / PAGE_SIZE); + maxusers = pgtok(physpages) / (2 * 1024); if (maxusers < 32) maxusers = 32; #ifdef VM_MAX_AUTOTUNE_MAXUSERS @@ -290,35 +292,43 @@ init_param2(long physpages) #endif /* * Scales down the function in which maxusers grows once - * we hit 384. + * we hit 384 (16MB to get a new "user"). */ if (maxusers > 384) maxusers = 384 + ((maxusers - 384) / 8); } /* - * The following can be overridden after boot via sysctl. Note: - * unless overridden, these macros are ultimately based on maxusers. - * Limit maxproc so that kmap entries cannot be exhausted by - * processes. + * The following can be overridden after boot via sysctl. Note: unless + * overridden, these macros are ultimately based on 'maxusers'. Limit + * maxproc so that kmap entries cannot be exhausted by processes. The + * default for 'maxproc' linearly scales as 16 times 'maxusers' (so, + * linearly with 8 processes per MB up to 768MB, then 1 process per MB; + * overridable by a tunable), and is then clamped at 21 + 1/3 processes + * per MB (which never happens by default as long as physical memory is + * > ~1.5MB). */ maxproc = NPROC; TUNABLE_INT_FETCH("kern.maxproc", &maxproc); - if (maxproc > (physpages / 12)) - maxproc = physpages / 12; + maxproc_clamp = pgtok(physpages) / (3 * 1024 / 64); + if (maxproc > maxproc_clamp) + maxproc = maxproc_clamp; if (maxproc > pid_max) maxproc = pid_max; maxprocperuid = (maxproc * 9) / 10; /* - * The default limit for maxfiles is 1/12 of the number of - * physical page but not less than 16 times maxusers. - * At most it can be 1/6 the number of physical pages. + * 'maxfiles' by default is set to 32 files per MB (overridable by + * a tunable), and is then clamped at 64 files per MB (which thus never + * happens by default). (The default MAXFILES is for all practical + * purposes not used, as it gives a lower value than 32 files per MB as + * soon as there is more than ~2.5MB of memory.) */ - maxfiles = imax(MAXFILES, physpages / 8); + maxfiles = imax(MAXFILES, pgtok(physpages) / (1024 / 32)); TUNABLE_INT_FETCH("kern.maxfiles", &maxfiles); - if (maxfiles > (physpages / 4)) - maxfiles = physpages / 4; + maxfiles_clamp = pgtok(physpages) / (1024 / 64); + if (maxfiles > maxfiles_clamp) + maxfiles = maxfiles_clamp; maxfilesperproc = (maxfiles / 10) * 9; TUNABLE_INT_FETCH("kern.maxfilesperproc", &maxfilesperproc);