Hacker News 中文摘要

RSS订阅

我制作了一个实时C/C++/Rust构建可视化工具 -- I made a real-time C/C++/Rust build visualizer

文章摘要

作者开发了一款名为“What the Fork”的跨平台工具,用于实时可视化C/C++/Rust等项目的编译过程,帮助识别和优化编译中的低效问题,如未使用并行编译、文件或编译阶段耗时过长等,尤其适用于优化CI构建。

文章总结

标题:我开发了一个实时C/C++/Rust构建可视化工具

许多软件项目的编译时间较长,有时是因为代码量庞大,如LLVM项目,但更多时候是由于一些可修复的低效问题。为了帮助开发者发现并优化这些低效问题,我开发了一个跨平台的构建可视化工具,名为What the Fork。该工具不仅适用于C/C++,还支持任何构建系统或编程语言。

What the Fork通过监听系统调用来追踪构建过程中的每个步骤,包括forkexecexit,从而生成详细的构建时间线。它能够识别常见的构建问题,如未使用make-j标志、某些文件或编译阶段耗时过长、以及未并行执行的命令等。该工具特别适用于优化持续集成(CI)构建,因为CI构建通常是干净的重新构建,没有缓存。

工具的使用非常简单,只需在构建命令前加上wtf,例如: $ wtf make $ wtf cargo build

What the Fork支持macOS、Linux和Windows系统,分别使用不同的API来监听系统调用:macOS使用Endpoint Security API,Linux使用ptrace(),Windows则使用Event Tracing for Windows(ETW)。

通过可视化构建过程,开发者可以轻松发现构建中的低效问题。例如,某些项目在构建依赖项时未充分利用多核CPU的并行能力,导致构建时间大幅增加。此外,工具还揭示了某些构建系统(如CMake)在构建过程中重复执行不必要的操作,进一步拖慢了构建速度。

目前,What the Fork已进入早期测试阶段,开发者可以通过此链接申请加入测试并提供反馈。

总之,What the Fork通过可视化构建过程,帮助开发者发现并优化构建中的低效问题,从而显著提升构建速度。

评论总结

评论内容总结:

  1. 工具的价值与实用性

    • 多位评论者认为该工具非常有用,尤其是在复杂的构建环境中。例如,Night_Thastus提到:“I am stuck in an environment with CMake, GCC and Unix Make... If this tool can handle that kind of mess, I’ll be very interested to see what I can learn.”(我身处一个使用CMake、GCC和Unix Make的环境……如果这个工具能处理这种混乱,我会非常感兴趣看看我能学到什么。)
    • forrestthewoods表示:“This could be a super super useful tool for the industry.”(这可能是行业中非常非常有用的工具。)
  2. 工具的局限性与改进建议

    • 一些评论者提出了工具的局限性,如对非fork()操作系统的支持问题。brcmthrowaway问道:“What about OSes that dont use fork()?”(那些不使用fork()的操作系统怎么办?)
    • boris则关注性能问题,指出:“Ninja builds this project from scratch in 3.23s while build2 builds it in 3.54s.”(Ninja从头构建这个项目需要3.23秒,而build2需要3.54秒。)
  3. 工具的扩展性与应用场景

    • supportengineer询问:“What limits your tool to compiler/build tools, can it be used for any arbitrary process?”(是什么限制了你的工具只能用于编译器/构建工具,它能用于任何任意进程吗?)
    • jeffbee建议:“This seems like a good place to integrate a Bazel Build Event Protocol stream consumer.”(这似乎是一个集成Bazel构建事件协议流消费者的好地方。)
  4. 工具的命名与可视化

    • CyberDildonics建议:“I would think about a different name... something short and elegantly descriptive (like BuildViz etc.)”(我会考虑一个不同的名字……一些简短且优雅的描述性名称(如BuildViz等))
    • entelechy分享了类似的可视化工具经验:“We did something similar using strace/dtruss back in 2018... We used graphviz, https://perfetto.dev/ and couple other tools to visualise things.”(我们在2018年使用strace/dtruss做了类似的事情……我们使用了graphviz、https://perfetto.dev/和其他一些工具来可视化事物。)
  5. 工具的潜在问题与挑战

    • entelechy提到了一些技术挑战:“syscall logs can get huge - especially when saved to disk. Our strace logs would get over 100GB for some projects.”(系统调用日志可能会变得非常大——尤其是保存到磁盘时。我们的strace日志在某些项目中会超过100GB。)
    • proctorg76则从制造业的角度提出了问题:“this looks so much like the machine monitoring / execution system we use in the car parts plant I want to ask if you’ve calculated the TEEP and OEE of your build farm”(这看起来非常像我们在汽车零件工厂使用的机器监控/执行系统,我想问你是否计算过你的构建农场的TEEP和OEE。)

总结:评论者普遍认为该工具在复杂构建环境中具有很高的实用价值,但也提出了一些局限性和改进建议,如对非fork()操作系统的支持、性能优化、扩展应用场景等。此外,工具的命名和可视化效果也得到了关注,同时一些技术挑战和潜在问题也被提及。