如何找到程序的哪一部分花费最多时间(包括内核时间和上下文切换)

发布于 2025-01-15 19:05:13 字数 397 浏览 0 评论 0原文

在对 CPU 密集型工作进行性能分析时,我通常使用 sudo perf record -a -s -e cpu-clock -g。但这并没有显示在上下文切换上花费了多少时间,在网络堆栈上花费了多少时间,我认为这对网络 IO 限制的任务没有太大帮助。

我的具体案例: 我有一个从 gcs 加载数据并反序列化的程序。

我已经验证峰值吞吐量可以>200MBps,但是初始化时间需要4.5秒,其中1秒用于身份验证,另外3.5秒用于真正加载数据。

数据初始化读取约 300 个文件的元数据,但每个文件仅读取 1.25MB。

这是我的具体案例的抽象背景。我想知道linux(ubuntu)上是否有可用的工具,看看我的程序的哪一部分占用了最多的时间?这样我就可以对其进行一些更改。

When doing performance analysis on CPU-intensive work, I generally use sudo perf record -a -s -e cpu-clock -g <executable>. But that doesn't show how much time is spent on context-switch, how much time is spent in network stack, which I think is not super helpful to a network-IO-bounded task.

My specific case:
I have a program which load data from gcs, deserialize it.

I have verified the peak throughput could be >200MBps, but initialization time takes 4.5 seconds, of which 1 second is spent on authentication, the other 3.5 seconds is really loading the data.

The data initialization reads metadata for ~300 files, but each file only read 1.25MB.

This is the abstract context for my specific case. I want to know if there's any tools available in linux(ubuntu), to see which part of my program takes the most of the time? So that I could make some changes to it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文