#timely-dataflow #timely #dataflow #differential #ddshow

ddshow-sink

为及时数据流程序设置 ddshow 日志记录器的实用工具

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日

#816调试


用于 ddshow

MIT/Apache

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