2个不稳定版本

0.2.2 2021年8月9日
0.2.1 2021年8月9日
0.2.0 2021年8月9日
0.1.1 2021年6月10日

#625 in 调试


用于 2 crates

MIT/Apache

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