[HPC/Debug]Aggregate-Driven Trac
论文题目:Aggregate-Driven Trace Visualizations for Performance Debugging
文章时间:2020年
会议/期刊:Arxiv
作者背景: The University of British Columbia,Max Planck Institute for Software Systems
笔记时间:2021年10月10日周日
论文地址:https://arxiv.org/abs/2010.13681
Dapper很好的一个翻译版本:https://bigbully.github.io/Dapper-translation/
先花了一点时间把Dapper看了看
Abstract
云系统的性能问题很难debug。分布式tracing是一个广泛使用的方法。现有的方法聚焦于单次请求的正确性而没有考虑到它的性能情况。高效解决这个问题需要面临三个挑战,识别出诊断需要的正确的数据,可视化数据,高效收集存储和处理数据。
本文提出一个工具,在现有的工具上做了扩充。
Intro
当下流行的云服务系统设计中,如微服务,无服务,增加了系统的复杂性,因为他们一个请求的执行过程设计多个机器。这个阻碍了诊断问题的操作。现有若干的分布式tracing系统,如OpenTelemetry,Jaeger,Zipkin等。
分布式追踪工具起源于对单个请求的行为的理解,识别出唤起的服务,诊断出问题请求,debug。诊断系统级别的云服务性能问题还是一个人为驱动的任务,因为需要聚合比较不同的数据才能找出性能的异常。只有对比才能发现问题。
聚合分析已经发挥了很大的作用,相关的聚合分析任务被视作先验知识。比如建模wirkloads和资源使用率,预测检测。然而,寻找异常需要用户对问题做出假设,不同的假设需要对tracing数据做不同的聚合操作。
找到一个通用的聚合操作不太容易,因为聚合数据需要被视为先验知识,设计一个能够高效支撑研究的可视化工具也不容易,设计一个高效收集存储和处理tracing的系统也很不容易。现有的工作,比如Canopy(2017,sosp,J.Mace)聚焦于第三点,目前可以做到每天处理十亿级别的traces数据。
然而如何聚合数据,并为之设计合理的可视化工具还是一个挑战。
我们设计了一个可视化的工具,基于gantt图,将数据限制在metric,temporal和结构化聚合上。
第二章 背景和motivation
先简要介绍一下分布式tracing的背景,介绍构建分布式tracing的三个挑战。
Tracing structure
一条trace是一个span的DAG。一个span可以被认为是系统执行一个request的特殊任务。任务的粒度是用户定义和控制的。一个span可以表示任意的事情,包括单个函数执行,单个thread的执行,或者一个单个操作系统的进程包含多个进程。在span中,用户通常会加入events,通常是非结构化的日志信息。span的annotation和event是开发者定义的,且利用edges联系在一起,代表发生关系。在不同span之间的edges代表网络通讯。每个span记录自己的时间和持续时间,以及任意用户定义的kv annotation,比如span的参数日志。任意一个trace可以变得非常庞大,包含上千个span和event,而生产系统每天需要记录百万条请求的trace数据。
大多数分布式tracing框架用span来展示trace(opencensus,jaeger,dapper),但是一些框架只基于event(x-trace)。本文的task概念包含这两者。
Gantt图可视化。
2.1 聚合分析的挑战
聚合分析常常用来解答诸如系统是否正确运行,为什么trace有如此高的延迟问题/
2.1.1选择聚合数据。
trace数据是图结构化的数据。Pintrace用聚合数据比较不同组的数据,但是粒度太粗了,只能定位high-level的问题。早期的工作只关注于比较延迟的分布,要求数据的同构性,但是这在实际环境中也是比较困难的事情。
2.1.2 可视化数据
构建高效的可视化工具很难,特别是trace数据是高纬数据。Gantt图很流行,但是Gantt图只聚焦于单个trace,而且很难用于聚合分析。Uber最近将他们的数据可视化为directed graph。Canopy可以展示trace数据的metrics。但是还没有把这几个方面的内容整合起来。如何设计整合的可视化方案还是很难的。
2.1.3 数据处理
第三章 TraVista的设计
3.1 聚合类型
metric信息,不同的系统有不同的性能metric,比如request的延迟,内存利用率吧,吞吐量,还有一些系统自定义的应用级别的数据。聚合统计数据意味着要计算统计数据或存储整个分布。性能metrics需要使用各类的过滤器来构建数据
时序聚合
同一时间内故障可能是concurrent work,但是现有的trace分析工具无法显示出这一点。TraVjsta通过使用时序数据来识别出资源竞争。
结构化聚合
这里没能理解
第四章 TraVista 接口设计
前端是有NodeJS组成,后端服务器存储和查询trace数据。为了帮助用户找出可能的问题root,TraVista使用了是哪个视觉原则,