2 个不稳定版本
0.2.2 | 2021年8月9日 |
---|---|
0.2.1 |
|
0.2.0 |
|
0.1.1 | 2021年6月10日 |
#816 在 调试
用于 ddshow
83KB
2.5K SLoC
DDShow
及时数据流和微分数据流程序的可视化工具
开始使用 ddshow
首先,通过 cargo
安装 ddshow
。目前 ddshow 未发布到 crates.io,但将在未来某个时间点发布。在此之前,推荐使用 --git
选项与 cargo install
cargo install --git https://github.com/Kixiron/ddshow
接下来,您需要为目标程序设置 TIMELY_WORKER_LOG_ADDR
环境变量。该地址应设置为与 ddshow 默认指向的地址相同(默认为 127.0.0.1:51317
)以便它们可以通过 TCP 进行通信。
# Bash
set TIMELY_WORKER_LOG_ADDR=127.0.0.1:51317
# Powershell
$env:TIMELY_WORKER_LOG_ADDR = "127.0.0.1:51317"
:: CMD
set TIMELY_WORKER_LOG_ADDR=127.0.0.1:51317
设置环境变量后,现在可以运行 ddshow。应将 --connections
参数设置为目标计算启动的及时工作者数量,如果没有提供,默认为 1
。同时,设置 ddshow 应连接到的地址的 --address
参数。注意,--address
应与您设置的 TIMELY_WORKER_LOG_ADDR
变量相同,否则 ddshow 将无法连接。
ddshow --connections 1 --address 127.0.0.1:51317
这将在 dataflow-graph/
目录中创建所有 ddshow UI 需要的离线操作内容。在浏览器中打开 dataflow-graph/graph.html
将允许查看图化的数据流
运行以下命令可获取 ddshow 支持的完整参数列表及其选项:
ddshow --help
基本用法
展示
调试技巧
如果输出应该不为空但却是空的,请确保你没有使用 Worker::log_register()
覆盖 Timely 和 DDflow 默认设置的日志记录器,而使用一个不转发日志事件的 Logger
实现。
另一个常见的问题是 timely 版本的不匹配。由于 abomonation
(用于发送事件)的工作方式,不同版本的 timely(甚至不同的 rustc
调用)的事件结构不一致,这可能导致错误、不兼容和静默失败。解决这个问题的唯一已知方法是确保 ddshow 和目标程序使用相同版本的 timely 和 ddflow,或者使用具有稳定和 FFI-safe 版本的 timely 日志类型的 ddshow-sink
库。
当寻找微分数据流见解时,确保你在代码中某处有这个(或等效)片段,以便转发微分数据流的日志
// `worker` should be an `&mut Worker<A>`, generally acquired from the inner
// closure of `timely::execute()`
if let Ok(addr) = std::env::var("DIFFERENTIAL_LOG_ADDR") {
if !addr.is_empty() {
if let Ok(stream) = std::net::TcpStream::connect(&addr) {
differential_dataflow::logging::enable(worker, stream);
} else {
panic!("Could not connect to differential log address: {:?}", addr);
}
}
}
依赖项
~3.5–5.5MB
~93K SLoC