2 个不稳定版本
0.2.0 | 2019年7月31日 |
---|---|
0.1.0 | 2019年5月28日 |
#14 in #inspect
36KB
517 行
Timely Diagnostics
用于 timely dataflow 计算的诊断工具。Timely dataflows 是数据并行,可以从笔记本电脑上的单线程执行扩展到计算机集群的分布式执行。每个执行线程被称为 worker。
此存储库中的工具具有共同的目标,即为任何规模的 timely dataflows 提供见解,以便理解数据流的结构和资源使用情况。
每个 timely worker 可以通过设置 TIMELY_WORKER_LOG_ADDR
环境变量来指示发布低级事件流到 TCP 套接字。为了处理这些日志流的巨大数量,此存储库中的诊断工具本身也是可扩展的 timely 计算。为了避免混淆,我们将被分析的 dataflow 的 worker 称为 source peers
。我们将诊断计算的 worker 称为 inspector peers
。
此存储库包含一个库 tdiag-connect
和一个用于诊断工具的命令行界面 tdiag
。
tdiag-connect
(在 /connect
) 是一个库,用于由 inspector peers 从 source peers 获取事件流。
tdiag
(在 /tdiag) 是所有诊断工具的统一命令行界面(目前只提供了一个,更多即将到来)。
开始使用 tdiag
tdiag
是所有诊断工具的 CLI。通过 cargo 安装它
cargo install tdiag
所有诊断计算都需要您通过 source-peers
参数指定在源计算中运行的 worker 数量。这是为了知道何时所有源事件流都已连接。
graph
- 可视化源数据流
为了更好地理解数据流计算内部发生的事情,可视化数据流的结构非常有价值。开始 graph
诊断
tdiag --source-peers 2 graph --out graph.html
您应该会看到一个通知,告知您 tdiag
正在等待通过 --source-peers
(在本例中为两个)指定的连接数量。
在另一个shell中,启动您的源计算。在本例中,我们将分析 Timely PageRank 示例。在 timely-dataflow/timely
子目录内部,运行
env TIMELY_WORKER_LOG_ADDR="127.0.0.1:51317" cargo run --example pagerank 1000 1000000 -w 2
最重要的是,env TIMELY_WORKER_LOG_ADDR="127.0.0.1:51317"
将使源工作者连接到我们的诊断计算。参数 -w
指定了我们想要用多少工作者运行 PageRank 示例。因此,我们在这里指定的内容必须与启动 tdiag
时使用的 --source-peers
参数相匹配。
计算开始后,回到诊断shell,您现在应该会看到以下内容
$ tdiag --source-peers 2 graph --out graph.html
Listening for 2 connections on 127.0.0.1:51317
Trace sources connected
Press enter to generate graph (this will crash the source computation if it hasn't terminated).
在任何时候,按指示按回车键。这将生成一个完整的、包含指定路径的 HTML 文件(在本例中为 graph.html
)。在任何现代浏览器中打开该文件,您应该会看到您按回车键时的数据流图的渲染。对于 PageRank 计算,渲染应该类似于以下内容
您可以使用鼠标或触摸板来移动图表,并放大和缩小。
profile
- 对源数据流进行性能分析
子命令 profile
报告每个作用域/操作符的总体运行时间。
tdiag --source-peers 2 profile
您应该会看到一个通知,告知您 tdiag
正在等待通过 --source-peers
(在本例中为两个)指定的连接数量。
在另一个shell中,启动您的源计算。在本例中,我们将分析 Timely PageRank 示例。在 timely-dataflow/timely
子目录内部,运行
env TIMELY_WORKER_LOG_ADDR="127.0.0.1:51317" cargo run --example pagerank 1000 1000000 -w 2
最重要的是,env TIMELY_WORKER_LOG_ADDR="127.0.0.1:51317"
将使源工作者连接到我们的诊断计算。参数 -w
指定了我们想要用多少工作者运行 PageRank 示例。因此,我们在这里指定的内容必须与启动 tdiag
时使用的 --source-peers
参数相匹配。
计算开始后,回到诊断shell,您现在应该会看到以下内容
$ tdiag --source-peers 2 profile
Listening for 2 connections on 127.0.0.1:51317
Trace sources connected
Press enter to stop collecting profile data (this will crash the source computation if it hasn't terminated).
在任何时候,按指示按回车键。这将生成每个作用域/操作符的运行时间汇总。请注意,作用域的汇总(用 [scope]
表示)包括所有包含操作符的时间。
[scope] Dataflow (id=0, addr=[0]): 1.17870668e-1 s
PageRank (id=3, addr=[0, 3]): 1.17197194e-1 s
Feedback (id=2, addr=[0, 2]): 3.56249e-4 s
Probe (id=6, addr=[0, 4]): 7.86e-6 s
Input (id=1, addr=[0, 1]): 3.408e-6 s
诊断微分数据流
子命令 differential
将诊断工具分组,这些工具仅适用于使用 微分数据流 的及时数据流。要启用您自己的计算中的微分日志记录,请将以下片段添加到您的代码中
if let Ok(addr) = ::std::env::var("DIFFERENTIAL_LOG_ADDR") {
if let Ok(stream) = ::std::net::TcpStream::connect(&addr) {
differential_dataflow::logging::enable(worker, stream);
info!("enabled DIFFERENTIAL logging to {}", addr);
} else {
panic!("Could not connect to differential log address: {:?}", addr);
}
}
在您的可执行文件中包含此片段后,您可以使用以下工具来分析您计算中的微分特定方面。
differential arrangements
- 跟踪微分安排的大小
有状态微分数据流操作符通常维护称为 arrangements
的索引输入跟踪。您将想要了解这些跟踪如何随着新输入的累积而增长(通过压缩)以及如何缩小(通过压缩)大小,因为您的计算执行。
tdiag --source-peers differential arrangements
您应该会看到一个通知,告知您 tdiag
正在等待通过 --source-peers
(在本例中为两个)指定的连接数量。
在另一个shell中,启动您的源计算。在本例中,我们将分析 Differential BFS 示例。在微分数据流存储库内部运行
export TIMELY_WORKER_LOG_ADDR="127.0.0.1:51317"
export DIFFERENTIAL_LOG_ADDR="127.0.0.1:51318"
cargo run --example bfs 1000 10000 100 20 false -w 2
在分析微分数据流(与纯及时计算相比)时,必须同时设置 TIMELY_WORKER_LOG_ADDR
和 DIFFERENTIAL_LOG_ADDR
,以便源工作者连接到我们的诊断计算。参数 -w
指定了我们想要用多少工作者运行 PageRank 示例。因此,我们在这里指定的内容必须与启动 tdiag
时使用的 --source-peers
参数相匹配。
计算开始后,回到诊断shell,您现在应该会看到以下内容
$ tdiag --source-peers 2 differential arrangements
Listening for 2 Timely connections on 127.0.0.1:51317
Listening for 2 Differential connections on 127.0.0.1:51319
Will report every 1000ms
Trace sources connected
ms Worker Op. Id Name # of tuples
1000 0 18 Arrange ([0, 4, 6]) 654
1000 0 20 Arrange ([0, 4, 7]) 5944
1000 0 28 Arrange ([0, 4, 10]) 3790
1000 0 30 Reduce ([0, 4, 11]) 654
1000 1 18 Arrange ([0, 4, 6]) 679
1000 1 20 Arrange ([0, 4, 7]) 6006
1000 1 28 Arrange ([0, 4, 10]) 3913
1000 1 30 Reduce ([0, 4, 11]) 678
2000 0 18 Arrange ([0, 4, 6]) 654
2000 0 18 Arrange ([0, 4, 6]) 950
2000 0 20 Arrange ([0, 4, 7]) 5944
2000 0 20 Arrange ([0, 4, 7]) 6937
2000 0 28 Arrange ([0, 4, 10]) 3790
输出中的每一行指定了测量的时间、工人和操作员ID、排列的名称以及它维护的元组数量。默认情况下,每秒更新一次大小,这可以通过output-interval
参数进行控制。
tdiag-connect
库
tdiag-connect
(在 /connect
) 是一个库,用于由 inspector peers 从 source peers 获取事件流。
lib.rs
:
用于检查及时数据流计算的工具。
依赖关系
~6.5MB
~53K SLoC