You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAKE -j多任务并行机制在服务器环境下失效问题排查

Make并行编译性能异常:多核服务器CPU利用率极低

使用make -j编译约1700个文件时,出现以下异常表现:

  • 8核PC:编译耗时13分钟,CPU负载达100%
  • 56核服务器:编译耗时7分钟,CPU负载仅10%

该现象在MINGW64、PowerShell、CMD三种环境下测试结果一致。

Make目标依赖关系

all → all_build → $(BUILD_DIR)/$(TARGET_BASENAME).elf → $(BUILD_DIR)/ld.args → $(OBJECTS) → $(BUILD_DIR)/%.o → ...

其中**$(BUILD_DIR)/%.o**对应约1700个目标文件,占据了编译过程的绝大部分耗时。

Makefile核心片段

#######################################
# build the application
#######################################
all: all-build
    @( \
        tTime=$$(($$(date +%s) - $(START_TIME))); \
        if [ $$tTime -lt 60 ]; then \
            echo "Build Finished (took $$(($$tTime))s)"; \
        else \
            echo "Build Finished (took $$(($$tTime / 60))m:$$(($$tTime % 60))s)"; \
        fi \
    )
    @echo ' '

all-build:
    $(MAKE) -j -f $(THIS_MAKEFILE) --no-print-directory $(BUILD_DIR)/$(TARGET)

$(BUILD_DIR)/$(TARGET_BASENAME).elf: $(BUILD_DIR)/ld.args
    @mkdir -p $(@D)
    @echo '[LD]: $@'
    $(CC) "@$(BUILD_DIR)/ld.args" -o $@
    @echo 'Finished building target: $@'
    @echo ' '
ifneq (, $(DST_DIR))
ifneq (, $(DST_JSON))
    $(MAKE) -j -f $(THIS_MAKEFILE) --no-print-directory post-build-elf
endif
endif
    @echo '[SZ]: $@'
    $(SZ) --format=berkeley $@
    @echo ' '

$(BUILD_DIR)/%.o: $(CURDIR)/%.c $(BUILD_DIR)/cc.args
    @mkdir -p $(@D)
    @echo '[CC]: $<'
    $(CC) "@$(BUILD_DIR)/cc.args" -MD -o "$@" "$<"
    @echo 'Finished building: $<'
    @echo ' '

$(BUILD_DIR)/%.o: $(CURDIR)/%.s $(BUILD_DIR)/as.args
    @mkdir -p $(@D)
    @echo '[AS]: $<'
    $(CC) "@$(BUILD_DIR)/as.args" -o "$@" "$<"
    @echo 'Finished building: $<'
    @echo ' '

$(BUILD_DIR)/ld.args: $(THIS_MAKEFILE) $(LD_SRCS) $(addprefix $(BUILD_DIR)/, $(OBJECTS)) $(USER_LIBS) | $(BUILD_DIR)
    $(file  > $(BUILD_DIR)/ld.args,$(subst $(SPACE),$(NEWLINE),$(addprefix -T , $(LD_SRCS))))
ifneq ($(CC_BIN), ccarm)
    $(file >> $(BUILD_DIR)/ld.args,$(subst $(SPACE),$(NEWLINE),-Wl,-Map,"$(BUILD_DIR)/$(TARGET_BASENAME).map"))
endif
    $(file >> $(BUILD_DIR)/ld.args,$(subst $(SPACE),$(NEWLINE),$(LD_ARGS)))
    $(file >> $(BUILD_DIR)/ld.args,$(subst $(SPACE),$(NEWLINE),$(addprefix $(BUILD_DIR)/, $(OBJECTS)) $(USER_LIBS)))
    $(file >> $(BUILD_DIR)/ld.args,$(subst $(SPACE),$(NEWLINE),$(LIBS)))
    @echo 'Finished building: $@'
    @echo ' '

$(BUILD_DIR):
    @mkdir -p $@

post-build-elf:
ifneq ($(CC_BIN), ccarm)
    $(dir $(CURDIR)/$(THIS_MAKEFILE))/PostBuild.bat \
    $(DST_DIR) $(DST_JSON) $(BUILD_DIR)/ $(TARGET_BASENAME) $(CC_PATH) $(PREFIX) $(user_postbuild) $(arg_postbuild)
else
    $(dir $(CURDIR)/$(THIS_MAKEFILE))/PostBuild.bat \
    $(DST_DIR) $(DST_JSON) $(BUILD_DIR)/ $(TARGET_BASENAME) $(CC_PATH_s32k3xx_gcc) $(PREFIX) $(user_postbuild) $(arg_postbuild)
endif
    @echo ' '

CPU负载情况

8核PC

8核PC CPU负载情况

56核服务器

56核服务器CPU负载情况

内容的提问来源于stack exchange,提问作者yyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:55:01