edk2/BaseTools/Source/Python
Ayden Meng a058a2856d BaseTools: Cap AutoGen thread count to avoid file descriptor exhaustion
When the number of build threads multiplied by per-thread file
descriptor usage exceeds the system's open file descriptor limit,
some threads may fail to acquire necessary resources (e.g., pipes
or semaphores), leading to deadlocks or hangs during parallel builds.

To prevent this situation, calculate the safety upper limit of
concurrency by dividing the system's maximum file descriptor limit by
3 (An empirical value derived from balancing performance overhead
against the theoretical number of file descriptors consumed per thread).
The actual thread count is then clamped to this safe value.

Other usages of ThreadNum()—such as during actual compilation or log
queue creation—do not significantly contribute to file descriptor
consumption. Therefore, adjusting ThreadNum() globally would be
unwarranted, as it could unnecessarily restrict parallelism in stages
that are not FD-bound.

This ensures stable parallel builds even under constrained resource
limits.

Signed-off-by: Ayden Meng <mengxiangdong@loongson.cn>
2025-12-03 14:11:32 +00:00
..
AmlToC BaseTools: Resolve regex syntax warnings 2023-12-21 00:33:31 +00:00
AutoGen BaseTools: AutoGen: Optimize tuple creation using tuple() for PcdDbBuffer 2025-12-02 02:21:22 +00:00
BPDG BaseTools: Remove unused import 2025-07-01 09:51:38 +08:00
build BaseTools: Cap AutoGen thread count to avoid file descriptor exhaustion 2025-12-03 14:11:32 +00:00
Capsule BaseTools: Remove ARM32 Support 2025-09-25 22:04:10 +00:00
Common BaseTools: Remove DXE_SAL_DRIVER 2025-10-30 10:00:32 +00:00
CommonDataClass BaseTools: Add support for SUBTYPE_GUID section generation 2022-10-19 06:32:07 +00:00
Ecc BaseTools: Remove ARM32 Support 2025-09-25 22:04:10 +00:00
Eot BaseTools: Eot: Remove unnecessary code 2025-07-01 09:51:38 +08:00
FirmwareStorageFormat BaseTools: Enable FMMT Rebase function 2025-11-23 23:30:49 +00:00
FMMT BaseTools: Enhance FMMT rebase feature with FFS type check 2025-11-23 23:30:49 +00:00
GenFds BaseTools: Remove DXE_SAL_DRIVER 2025-10-30 10:00:32 +00:00
GenPatchPcdTable BaseTools: Resolve regex syntax warnings 2023-12-21 00:33:31 +00:00
PatchPcdValue BaseTools: Decouple AutoGen Objects 2019-08-09 23:15:52 +08:00
Pkcs7Sign BaseTools:Updata the output encoding of the Popen function 2019-08-01 15:36:48 +08:00
Rsa2048Sha256Sign BaseTools:Updata the output encoding of the Popen function 2019-08-01 15:36:48 +08:00
Split BaseTools: use shutil.copyfile instead shutil.copy2 2021-08-02 03:52:15 +00:00
Table BaseTools: Table: Remove unnecessary code 2025-07-01 09:51:38 +08:00
TargetTool BaseTools: Remove ARM32 Support 2025-09-25 22:04:10 +00:00
tests/Split BaseTools: fix the split output files root dir 2021-02-07 01:46:18 +00:00
Trim BaseTools: Trim: Add header/footer for ASL include 2024-08-31 04:58:54 +00:00
UPT BaseTools: Remove DXE_SAL_DRIVER 2025-10-30 10:00:32 +00:00
Workspace BaseTools: fix various typos 2025-11-21 21:49:59 +00:00
basetool_tiano_python_path_env.yaml BaseTools: Add YAML files with path env and tool extdeps 2019-11-11 13:01:53 -08:00
GNUmakefile BaseTools: Replace BSD License with BSD+Patent License 2019-04-09 09:10:20 -07:00
Makefile BaseTools: strip trailing whitespace 2019-10-04 11:18:22 +01:00
sitecustomize.py BaseTools: Do not call sys.setdefaultencoding with python 3 2019-10-23 14:25:23 +08:00