The worker pool and the default workspaceConcurrency took the CPU count from os.availableParallelism(), which counts the CPUs in the process's affinity mask. In a container with a cgroup CPU quota smaller than that mask, such as a Kubernetes pod with a 4-CPU limit on a 233-CPU node, pnpm 11 created 232 workers per install, and four concurrent installs exhausted a 16 GiB memory limit while the workers were still loading. Node's libuv does try to apply the quota, but its cgroup v1 parser looks for ":cpu," and keeps "cpuacct:" in the path it builds, so it never finds the quota file there, and both it and Rust's standard library give up when the cgroup path from /proc/self/cgroup is not mounted under /sys/fs/cgroup, as happens with a host cgroup namespace and a bind-mounted controller. A new package, `@pnpm/os.available-parallelism`, reads the quota itself: the smallest limit/period walking from the process's cgroup up to the hierarchy root, for cgroup v2 (cpu.max) and v1 (cpu.cfs_quota_us and cpu.cfs_period_us), rounded down and floored at 1 like Rust's std::thread::available_parallelism, which pnpm 12 already uses. The cgroup directory is located through /proc/self/mountinfo, which says which cgroup each mount shows, so a container that sees only its own cgroup bind-mounted at /sys/fs/cgroup is read correctly; the standard mount points are the fallback. The worker pool and the config reader's workspace-concurrency default both use it, so the two stay in step. pnpm 12 is unaffected: every Rust pool is sized with std::thread::available_parallelism, which honours the quota. Closes pnpm/pnpm#17382
587 lines
9.0 KiB
JSON
587 lines
9.0 KiB
JSON
{
|
|
"ignorePaths": [
|
|
"**/nodeReleaseKeys.ts",
|
|
"**/nodeReleaseKeys.d.ts",
|
|
"**/node_release_keys.rs",
|
|
"bench-work-env/**",
|
|
"target/**",
|
|
"vendor/**"
|
|
],
|
|
"words": [
|
|
"abrt",
|
|
"adduser",
|
|
"adipiscing",
|
|
"agentkeepalive",
|
|
"agentkeepalive's",
|
|
"aliasless",
|
|
"amet",
|
|
"andreineculau",
|
|
"APFS",
|
|
"appdata",
|
|
"applyq",
|
|
"archy",
|
|
"argumentless",
|
|
"armv",
|
|
"AUTHTOKEN",
|
|
"autocheckpoint",
|
|
"autocompleting",
|
|
"autofix",
|
|
"autofixed",
|
|
"autoinstalled",
|
|
"autozoom",
|
|
"babek",
|
|
"Backblaze",
|
|
"badheaders",
|
|
"baires",
|
|
"basedirs",
|
|
"bdist",
|
|
"behaviour",
|
|
"blabla",
|
|
"Bluesky",
|
|
"brasileiro",
|
|
"bryntum",
|
|
"bsdtar",
|
|
"btrfs",
|
|
"buildx",
|
|
"Bunzip",
|
|
"cafile",
|
|
"cafs",
|
|
"camelcase",
|
|
"canonicalizer",
|
|
"cantopen",
|
|
"canva",
|
|
"CDPATH",
|
|
"cerbos",
|
|
"certfile",
|
|
"cgroup",
|
|
"cgroups",
|
|
"chcp",
|
|
"chmods",
|
|
"clonedeep",
|
|
"clonefile",
|
|
"cmds",
|
|
"Codeberg",
|
|
"codegen",
|
|
"codeload",
|
|
"codenames",
|
|
"codesign",
|
|
"colorterm",
|
|
"compdef",
|
|
"COMPREPLY",
|
|
"comver",
|
|
"confbox",
|
|
"cooldown",
|
|
"copyfiles",
|
|
"corejs",
|
|
"corepack",
|
|
"corge",
|
|
"cowsay",
|
|
"cpuacct",
|
|
"creatordate",
|
|
"Creds",
|
|
"cryptiles",
|
|
"cves",
|
|
"CWORD",
|
|
"cwsay",
|
|
"cyclonedx",
|
|
"cygdrive",
|
|
"dashrc",
|
|
"deburr",
|
|
"dedup",
|
|
"denoland",
|
|
"denolib",
|
|
"dependson",
|
|
"deptype",
|
|
"desugared",
|
|
"desugars",
|
|
"devextreme",
|
|
"devowl",
|
|
"dgimuvys",
|
|
"didyoumean",
|
|
"dirents",
|
|
"dirtyforms",
|
|
"diskusage",
|
|
"dislink",
|
|
"dpkg",
|
|
"drivelist",
|
|
"duplexify",
|
|
"dylint",
|
|
"eacces",
|
|
"eagain",
|
|
"ebadplatform",
|
|
"ebusy",
|
|
"eexist",
|
|
"ehrkoext",
|
|
"eintegrity",
|
|
"eisdir",
|
|
"elifecycle",
|
|
"elit",
|
|
"embedder",
|
|
"embedders",
|
|
"emfile",
|
|
"enametoolong",
|
|
"endgroup",
|
|
"endregion",
|
|
"eneedauth",
|
|
"enoent",
|
|
"enotdir",
|
|
"enotempty",
|
|
"enten",
|
|
"eotp",
|
|
"eperm",
|
|
"epipe",
|
|
"erofs",
|
|
"errcode",
|
|
"errorlevel",
|
|
"esac",
|
|
"esep",
|
|
"etamponi",
|
|
"exdev",
|
|
"execa",
|
|
"execpath",
|
|
"exploitability",
|
|
"fakehash",
|
|
"fastlist",
|
|
"fellback",
|
|
"fetchings",
|
|
"filenamify",
|
|
"filesystem",
|
|
"filesystems",
|
|
"fnpm",
|
|
"fnumber",
|
|
"foobarqar",
|
|
"foofoo",
|
|
"footgun",
|
|
"forgejo",
|
|
"forwardable",
|
|
"fsevents",
|
|
"fslib",
|
|
"fstype",
|
|
"gabor",
|
|
"garply",
|
|
"gcttmf",
|
|
"getaddrinfo",
|
|
"getattr",
|
|
"ghes",
|
|
"ghsa",
|
|
"ghsas",
|
|
"gitdir",
|
|
"gitea",
|
|
"globalconfig",
|
|
"globstar",
|
|
"gnueabihf",
|
|
"gpgsign",
|
|
"grault",
|
|
"gruntfile",
|
|
"gwhitney",
|
|
"gypfile",
|
|
"haptics",
|
|
"hardlink",
|
|
"hardlinked",
|
|
"hardlinking",
|
|
"hardlinks",
|
|
"hashbang",
|
|
"hashless",
|
|
"highmaps",
|
|
"hikljmi",
|
|
"hoistable",
|
|
"homepath",
|
|
"hosters",
|
|
"hostnames",
|
|
"hotspots",
|
|
"htpasswd",
|
|
"hyperdrive",
|
|
"idempotency",
|
|
"imagetools",
|
|
"imurmurhash",
|
|
"inodes",
|
|
"invalidformat",
|
|
"ionicons",
|
|
"isexe",
|
|
"istvan",
|
|
"italiano",
|
|
"jega",
|
|
"jhcg",
|
|
"jnbpamcxayl",
|
|
"journaled",
|
|
"junyi",
|
|
"kebabcase",
|
|
"kevva",
|
|
"keyfile",
|
|
"keyid",
|
|
"keytype",
|
|
"killcb",
|
|
"kloc",
|
|
"kochan",
|
|
"koorchik",
|
|
"kshrc",
|
|
"kubepods",
|
|
"LASTEXITCODE",
|
|
"ldid",
|
|
"ldni",
|
|
"ledgered",
|
|
"leniolabs",
|
|
"libc",
|
|
"libnpmpublish",
|
|
"libnpx",
|
|
"libpnpm",
|
|
"libsql",
|
|
"libzip",
|
|
"licence",
|
|
"licences",
|
|
"lifecycles",
|
|
"lightningcss",
|
|
"linearization",
|
|
"linuxstatic",
|
|
"localappdata",
|
|
"lockfiles",
|
|
"loglevel",
|
|
"logstream",
|
|
"longlink",
|
|
"longpaths",
|
|
"loong",
|
|
"lowlink",
|
|
"ltrim",
|
|
"luca",
|
|
"malloc",
|
|
"manylinux",
|
|
"martensson",
|
|
"maxsockets",
|
|
"maxtimeout",
|
|
"mdast",
|
|
"metacharacter",
|
|
"metafile",
|
|
"millis",
|
|
"mimalloc",
|
|
"minioadmin",
|
|
"mintimeout",
|
|
"mkfifo",
|
|
"mksh",
|
|
"mmap",
|
|
"monorepolint",
|
|
"montudor",
|
|
"moonrepo",
|
|
"mountinfo",
|
|
"mountpoint",
|
|
"msgpack",
|
|
"msgpackr",
|
|
"msvc",
|
|
"msys",
|
|
"MSYSTEM",
|
|
"mtimes",
|
|
"musleabihf",
|
|
"mycomp",
|
|
"mycompany",
|
|
"myorg",
|
|
"mypackage",
|
|
"mytoken",
|
|
"napi",
|
|
"ndjson",
|
|
"nerfed",
|
|
"newteam",
|
|
"newversion",
|
|
"nistp",
|
|
"NOASSERTION",
|
|
"nodepath",
|
|
"nodetouch",
|
|
"noent",
|
|
"nonexec",
|
|
"noninjected",
|
|
"nonvulnerable",
|
|
"noopener",
|
|
"nopadding",
|
|
"noprofile",
|
|
"noproxy",
|
|
"norc",
|
|
"noreferrer",
|
|
"nosystem",
|
|
"nothrow",
|
|
"npath",
|
|
"npmcli",
|
|
"npmignore",
|
|
"npmjs",
|
|
"npmmirror",
|
|
"npmrcs",
|
|
"npmx",
|
|
"ntfs",
|
|
"nushell",
|
|
"ofjergrg",
|
|
"oldteam",
|
|
"onclickoutside",
|
|
"onstat",
|
|
"oomol",
|
|
"openharmony",
|
|
"openpgp",
|
|
"openpyxl",
|
|
"ossl",
|
|
"outfile",
|
|
"overrider",
|
|
"packlist",
|
|
"packr",
|
|
"packument",
|
|
"packuments",
|
|
"pacquet",
|
|
"paralleljs",
|
|
"parallelly",
|
|
"parseable",
|
|
"partialmatch",
|
|
"pathext",
|
|
"pathsep",
|
|
"peeker",
|
|
"pegjs",
|
|
"pgid",
|
|
"pids",
|
|
"pidtree",
|
|
"pify",
|
|
"pinnable",
|
|
"pkgid",
|
|
"pkgname",
|
|
"pkgs",
|
|
"plotly",
|
|
"plugh",
|
|
"pnpmfile",
|
|
"pnpmfiles",
|
|
"pnpmjs",
|
|
"pnpmrc",
|
|
"pnpmtest",
|
|
"pnpr",
|
|
"polyfilling",
|
|
"português",
|
|
"posix",
|
|
"postbuild",
|
|
"postconditions",
|
|
"postfoo",
|
|
"postpack",
|
|
"postprepare",
|
|
"postpublish",
|
|
"postrestart",
|
|
"postshrinkwrap",
|
|
"poststart",
|
|
"poststop",
|
|
"posttest",
|
|
"postuninstall",
|
|
"postversion",
|
|
"preact",
|
|
"prebuild",
|
|
"prefoo",
|
|
"prefs",
|
|
"preinstall",
|
|
"premajor",
|
|
"preminor",
|
|
"preopens",
|
|
"prepatch",
|
|
"prepublish",
|
|
"prereleases",
|
|
"prerestart",
|
|
"preshrinkwrap",
|
|
"prestart",
|
|
"prestop",
|
|
"preuninstall",
|
|
"preversion",
|
|
"prioritizer",
|
|
"promisified",
|
|
"propfind",
|
|
"proxied",
|
|
"publickey",
|
|
"pwsh",
|
|
"pylock",
|
|
"pypi",
|
|
"pyproject",
|
|
"pythonhosted",
|
|
"qrcode",
|
|
"quux",
|
|
"rcompare",
|
|
"redownload",
|
|
"refclone",
|
|
"refetched",
|
|
"refetches",
|
|
"reflattened",
|
|
"reflink",
|
|
"reflinked",
|
|
"reflinks",
|
|
"rehoist",
|
|
"rehosted",
|
|
"reimagining",
|
|
"reka",
|
|
"Rekor",
|
|
"relinks",
|
|
"renderable",
|
|
"reparses",
|
|
"replit",
|
|
"repoint",
|
|
"repointing",
|
|
"reqheaders",
|
|
"rescans",
|
|
"rescopable",
|
|
"rescope",
|
|
"rescoped",
|
|
"rescopes",
|
|
"rescoping",
|
|
"resolv",
|
|
"revisioned",
|
|
"rimrafed",
|
|
"riscv",
|
|
"rmgr",
|
|
"rpmdevtools",
|
|
"rpmlint",
|
|
"rsort",
|
|
"rstacruz",
|
|
"rushstack",
|
|
"rustc",
|
|
"rustup",
|
|
"safecrlf",
|
|
"sccache",
|
|
"scim",
|
|
"scopeless",
|
|
"scriptless",
|
|
"sdiff",
|
|
"searchexclude",
|
|
"searchlimit",
|
|
"searchopts",
|
|
"searchstaleness",
|
|
"secp",
|
|
"sels",
|
|
"semistrict",
|
|
"serde",
|
|
"serp",
|
|
"serverjs",
|
|
"setgid",
|
|
"SETLOCAL",
|
|
"setx",
|
|
"shasums",
|
|
"sheetjs",
|
|
"Sherov",
|
|
"shlex",
|
|
"shrc",
|
|
"SIGPIPE",
|
|
"sigstore",
|
|
"sindresorhus",
|
|
"sirv",
|
|
"skopeo",
|
|
"SLSA",
|
|
"soporan",
|
|
"sopts",
|
|
"spdxdocs",
|
|
"SPDXID",
|
|
"sqld",
|
|
"srcset",
|
|
"ssri",
|
|
"stackblitz",
|
|
"stacktracey",
|
|
"statter",
|
|
"stdtype",
|
|
"streamsearch",
|
|
"stringifying",
|
|
"strongconnect",
|
|
"subcmd",
|
|
"subdep",
|
|
"subdependencies",
|
|
"subdependency",
|
|
"subdeps",
|
|
"subdir",
|
|
"subdirs",
|
|
"subkey",
|
|
"subkeys",
|
|
"subpkg",
|
|
"subresource",
|
|
"supercede",
|
|
"superopts",
|
|
"Swatinem",
|
|
"syml",
|
|
"symref",
|
|
"syncer",
|
|
"syscall",
|
|
"syscalls",
|
|
"sysfs",
|
|
"systemroot",
|
|
"szia",
|
|
"tabtab",
|
|
"taffydb",
|
|
"taiki",
|
|
"tarballtemplate",
|
|
"Tarjan",
|
|
"taskkill",
|
|
"tcsh",
|
|
"teambit",
|
|
"tempy",
|
|
"testcase",
|
|
"thesys",
|
|
"tlog",
|
|
"TLSV",
|
|
"toctou",
|
|
"todomvc",
|
|
"toplevel",
|
|
"TOTP",
|
|
"triaging",
|
|
"tsgo",
|
|
"tsparticles",
|
|
"turso",
|
|
"typecheck",
|
|
"typeflag",
|
|
"TYPELESS",
|
|
"unallowed",
|
|
"Unawaited",
|
|
"uncacheable",
|
|
"unconfigured",
|
|
"undeprecate",
|
|
"underperformance",
|
|
"undispatched",
|
|
"undollar",
|
|
"unextractable",
|
|
"Unincluded",
|
|
"uninstallation",
|
|
"unmigrated",
|
|
"unnest",
|
|
"unparseable",
|
|
"unproxied",
|
|
"unreleasable",
|
|
"unreviewed",
|
|
"Unseparated",
|
|
"unskip",
|
|
"unstar",
|
|
"untracks",
|
|
"unvalidated",
|
|
"usecase",
|
|
"userconfig",
|
|
"userprofile",
|
|
"ustar",
|
|
"uuidv",
|
|
"valign",
|
|
"venv",
|
|
"versionless",
|
|
"virtiofs",
|
|
"vuln",
|
|
"wabt",
|
|
"wafpickle",
|
|
"waitpid",
|
|
"wakeup",
|
|
"wasi",
|
|
"wasip",
|
|
"wbem",
|
|
"webauth",
|
|
"webcontainer",
|
|
"webdav",
|
|
"WIFEXITED",
|
|
"windir",
|
|
"windowspowershell",
|
|
"winst",
|
|
"wordbreaks",
|
|
"workleap",
|
|
"worktree",
|
|
"worktrees",
|
|
"wrappy",
|
|
"wscript",
|
|
"wslpath",
|
|
"WTERMSIG",
|
|
"xattr",
|
|
"xattrs",
|
|
"xmarw",
|
|
"yazl",
|
|
"zdotdir",
|
|
"zkochan",
|
|
"zoli",
|
|
"zoltan",
|
|
"zstd"
|
|
]
|
|
}
|