2个不稳定版本
0.2.2 | 2021年8月9日 |
---|---|
0.2.1 |
|
0.2.0 |
|
0.1.1 | 2021年6月10日 |
#625 in 调试
用于 2 crates
66KB
2K SLoC
DDShow
Timely Dataflow和Differential Dataflow程序的可视化
开始使用ddshow
首先,使用cargo
安装ddshow
。目前,ddshow尚未发布到crates.io,但将来会发布。在此之前,建议使用--git
选项与cargo install
安装ddshow。
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
参数设置为目标计算启动的timely工作进程的数量,默认为1
,如果未指定,则默认为--address
参数,用于设置ddshow应连接到的地址。请注意,--address
应与您设置的TIMELY_WORKER_LOG_ADDR
变量相同,否则ddshow将无法连接。
ddshow --connections 1 --address 127.0.0.1:51317
这将创建包含ddshow UI所需的全部内容的dataflow-graph/
目录。在浏览器中打开dataflow-graph/graph.html
将允许查看图表化数据流。
运行以下命令可以获取ddshow支持的完整参数列表及其选项:
ddshow --help
基本用法
示例
调试技巧
如果输出为空,而实际上不应该为空,请确保您没有使用不转发日志事件的 Logger
实现覆盖 Timely 和 DDflow 设置的默认日志记录器,请使用 Worker::log_register()
。
另一个常见问题是 timely 版本的匹配不正确。由于 abomonation
(用于发送事件)的工作方式,不同 timely 版本(甚至不同的 rustc
调用)的事件结构不保持一致,这可能导致错误、不兼容和静默失败。已知解决方案是确保 ddshow 和目标程序使用相同的 timely 和 ddflow 版本,或者使用具有稳定和 FFI 安全的 timely 日志类型的 ddshow-sink
crate。
在寻找微分数据流洞察时,请确保您的代码中存在此(或等效)片段,以便转发微分数据流日志。
// `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);
}
}
}
依赖项
~2.6–4.5MB
~74K SLoC