zenoh perf 火焰图使用简单说明
默认zenoh 的构建是release的进行了一些优化,但是有些时候我们希望使用火焰图进行profile,以下是一些说明
项目配置调整
- cargo 项目 .cargo/config.toml
[target.x86_64-unknown-linux-musl]
rustflags =" -Ctarget-feature=-crt-static"
[target.aarch64-unknown-linux-musl]
rustflags = " -Ctarget-feature=-crt-static"
Cargo.toml
[profile.release]
debug = true # If you want debug symbol in release mode, set the env variable: RUSTFLAGS=-g
lto = false
codegen-units = 256
opt-level = 1
panic = "abort"
构建应用
推荐基于docker,可以使用rust:1.75.0-alpine3.19 确保rust 版本一致
- 构建命令
cargo build --release --bins --lib --target x86_64-unknown-linux-musl
- docker 镜像
因为一些兼容问题addr2line 这个perf 依赖的,会有兼容问题,推荐基于rust 构建,然后拷贝到容器中
addr2line 构建
cargo install addr2line --features="bin"
PATH=$HOME/.cargo/bin:$PATH
dockerfile
FROM eclipse/zenoh:1.0.2
RUN apk add perf musl-dev
COPY libzenoh_plugin_rest.so /libzenoh_plugin_rest.so
COPY libzenoh_plugin_storage_manager.so /libzenoh_plugin_storage_manager.so
COPY addr2line /usr/bin/addr2line
COPY cargo-flamegraph /usr/bin/cargo-flamegraph
COPY flamegraph /usr/bin/flamegraph
COPY zenohd /zenohd
RUN chmod +x /zenohd
perf 使用
perf record -ag -F 99 --call-graph dwarf -p 1
perf script --header > my-zh-v3.perf
查看信息
可以通过flame-scope 可视化ui 服务
- 一个效果
说明
以上是一个简单构建以及使用说明,有利于更好的学习zenoh 内部的一些工作机制,当然这个属于代码调用,实际对于网络请求的可以结合zenoh-dissector
参考资料
https://datafusion.apache.org/library-user-guide/profiling.html
https://nnethercote.github.io/perf-book/profiling.html
https://doc.rust-lang.org/cargo/reference/profiles.html
https://github.com/gimli-rs/addr2line
https://github.com/flamegraph-rs/flamegraph
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2024-01-13 dremio dbt + nessie 集成profile 简单说明
2024-01-13 openresty 1.25.3.1 发布了
2023-01-13 sysend.js 跨浏览器tabs 同步类库
2023-01-13 maven java.lang.IllegalArgumentException: Malformed \uxxxx encoding 问题解决
2023-01-13 dremio FragmentExecutor 的执行顺序简单说明
2023-01-13 dremio ConduitServer 简单说明
2022-01-13 使用网络classloader 实现业务功能动态修改加载