2个不稳定版本
0.2.2 | 2021年8月9日 |
---|---|
0.1.1 | 2021年6月10日 |
#370 in 调试
2MB
15K SLoC
DDShow
Timely数据流和Differential数据流程序的可视化
开始使用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
,并且为ddshow连接到的地址设置--address
参数。注意,--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
对于基本用法
展示
调试技巧
如果输出为空而本不应该为空,请确保您没有使用Worker::log_register()
覆盖Timely和DDflow设置的默认日志记录器,该实现不转发日志事件。
另一个常见问题是Timely版本不匹配。由于abomonation
(用于发送事件)的工作方式,事件的结构在Timely版本之间(甚至不同的rustc
调用)不一致,这可能导致错误、不兼容和静默失败。为此,唯一的已知解决方案是确保ddshow和目标程序使用相同的Timely和DDflow版本,或者使用具有稳定和FFI安全版本的时间日志类型的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);
}
}
}
依赖项
~22–32MB
~430K SLoC