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

为何不同命令行调用Deno时执行耗时差异巨大?

问题:Deno在likwid-powermeter下使用绝对路径导致性能骤降

我正在进行如下基准测试:

likwid-powermeter deno run scripts/sets.deno.js 1024

返回结果:

Runtime: 2.99816 s
Measure for socket 0 on CPU 0
Domain CORE:
Energy consumed: 39.3306 Joules
Power consumed: 13.1182 Watt
Domain PKG:
Energy consumed: 139.635 Joules
Power consumed: 46.5737 Watt

但使用理论等效的绝对路径命令时,耗时是前者的8倍:

likwid-powermeter `which deno` run scripts/sets.deno.js 1024

返回结果:

Runtime: 17.4637 s
Measure for socket 0 on CPU 0
Domain CORE:
Energy consumed: 312.243 Joules
Power consumed: 17.8795 Watt
Domain PKG:
Energy consumed: 910.834 Joules
Power consumed: 52.1557 Watt

已通过time命令排查,问题并非出在Deno本身;其他运行时或命令未出现此问题。请问可能的原因是什么,或应从何处入手排查?


可能的原因与排查方向
  • likwid-powermeter的进程追踪逻辑差异:likwid对通过PATH查找的命令和绝对路径命令的进程附着机制可能不同。直接用deno时,likwid能准确追踪目标进程;而用绝对路径时,可能因shell替换时机问题,likwid误追踪了shell父进程,或未正确附着到Deno子进程,导致CPU调度/亲和性异常,拖慢执行。可以用ps或pstree在测试过程中查看likwid追踪的进程ID,确认是否正确绑定到Deno。

  • Deno的路径相关缓存机制:Deno会基于调用路径区分缓存(如字节码缓存、模块缓存)。使用绝对路径调用时,可能触发全新的缓存生成流程,而非复用deno命令名对应的缓存,导致重复编译、初始化操作。可以检查$DENO_DIR下的缓存目录,对比两种调用方式生成的缓存文件数量、大小差异。

  • 进程启动时的环境与参数差异:用反引号执行which deno会改变进程的argv[0](从deno变为绝对路径),同时可能影响PWD等环境变量。Deno可能根据argv[0]加载不同的配置或触发特殊初始化逻辑。可以用strace对比两种启动方式的系统调用,看是否存在额外的文件读取、环境变量处理步骤:

    strace -c likwid-powermeter deno run scripts/sets.deno.js 1024
    strace -c likwid-powermeter `which deno` run scripts/sets.deno.js 1024
    
  • CPU亲和性绑定失效:likwid默认会将目标进程绑定到特定CPU核心(如测试中的CPU 0)。使用绝对路径时,可能likwid的绑定逻辑未生效,导致Deno进程在多核心间切换,增加调度开销。可以手动用taskset指定核心后对比测试:

    likwid-powermeter taskset -c 0 deno run scripts/sets.deno.js 1024
    likwid-powermeter taskset -c 0 `which deno` run scripts/sets.deno.js 1024
    
  • likwid版本或配置问题:不同版本的likwid对进程追踪的处理存在差异,本地likwid.cfg配置也可能对绝对路径进程有特殊规则。可以尝试更新likwid到最新版本,或重置配置后重新测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:08:27