- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种自动推断复杂系统层次结构任务模型的方法
高崇南1,余宏亮1,郑纬民1
(清华大学 计算机系,北京市,100084)
摘 要: 支撑Internet服务的复杂系统难于调试与分析。理解系统运行时行为是调试与分析这些复杂系统的关键。现有的技术将系统动态运行时行为用因果执行路径抽象描述,并在此基础上分析系统的行为。但是这些方法或者需要手动标注系统代码,或者需要使用者描述系统的执行结构,都需要使用者很多人工辅助。
本文描述了一种自动推断复杂系统层次结构任务模型的方法。通过使用插装技术动态观察系统执行过程,本文的方法能够根据一组启发自动推断出系统运行时的任务模型,包括任务的边界和任务之间的因果依赖关系。通过使用聚类方法,能够进一步推断出任务模型的层次结构。通过在实际系统(Apache和PacificA)上应用推断方法,可以看出,使用得到的模型,能够帮助理解系统的动态运行过程,并帮助分析解决系统的性能问题。
关键词: 任务模型 系统分析 性能调试
中图法分类号: **** 文献标识码: A
引言
Internet服务越来越影响着人们生产生活的各个方面,它们的可靠性也变的越来越重要。系统设计与实现上的缺陷一直伴随着这些服务而生,导致服务性能下降,甚至彻底中断运行。在诸多的软件缺陷(bug)中,最难找到和解决的是让系统仍然运行,但是却偏离了期望行为的缺陷。这些缺陷的根本原因,隐藏在复杂甚至是混乱的应用逻辑中,寻找并分析这些缺陷变的异常困难。
支撑Internet服务的系统本质上非常复杂,这增加了分析理解系统异常行为的难度。这些系统通常使用了分层的体系结构,将其功能抽象表达为不同的层次结构。其运行时具有高度的并发性。系统在运行时,处理着许多用户层次的任务,例如用户请求,任务被分成许多阶段执行,不同的阶段被分布在多个机器、进程和线程上执行,使用事件或者异步消息作为通知机制。验证单独每个任务的行为,是一件具有挑战性的问题,因为开发人员需要重构出任务的执行流,将任务执行过程中的各个阶段重新连接起来。
从概念上说,开发人员可以把任务执行过程用层次结构的任务模型表示,这与系统的分层体系结构设计一致。任务模型中的任务表示在系统不同函数抽象层次的执行过程。高层任务的执行被分为若干低层子任务。以PacificA[1]为例,PacificA是一个类似BigTable[2]的分布式存储系统。图 1显示了用户向PacificA提交数据任务的执行层次。数据提交任务被分为两步(图的右边),分别处理本地数据提交和远程数据提交。每个任务分别由若干叶子任务构成,叶子任务的边界由同步点确定。基于任务模型,开发人员可以更好的理解系统层次模块间的结构,以及不同模块间的依赖关系,并验证处于不同层次任务的行为。
然而,目前的工具需要开发人员手动标注任务模型。例如,Pip[3]要求开发人员将系统预期行为,用“期望(expectations)”的形式表达,“期望”表达了系统正确执行时的任务模型,包括任务的执行顺序与对执行时资源使用的约束。通过对比期望与实际执行的区别,可以验证系统运行时行为。写出一个全面表达系统高层设计与底层实现的期望是非常困难的并容易出错的事情,特别对那些正在快速演变中的系统。基于执行路径的工具,例如Magpie[4],可以从包含运行时事件的trace推断每个请求的执行路径,但是它仅可以处理的一组事前确定的事件,并且需要开发人员指定任务的边界与关联条件。
图 1 PacificA的层次结构任务模型。包含三个高层任务。图上的节点表示叶子任务,边表示叶子任务之间的因果依赖关系
本文的目的是研究不需要人工帮助,自动推断层次结构任务模型的方法。开发人员不需要手动标注源代码来指定任务边界,并且任务的层次结构也应该能够自动推断得到。这是完成自动分析与诊断复杂系统目标的必要条件。开发人员和系统管理员可以利用得到的任务模型,以可视化的形式表现系统设计和实现,也可以将任务模型作为输入,使用其它工具调试或验证系统设计。
设计一个自动推断任务模型的工具面临如下几个挑战性问题。首先,应该能够确认合理的任务边界,这一过程应该只基于对系统执行过程的监视,而不需要开发人员显式的标注。其次,必须能够正确的关联任务之间依赖关系。特别是,必须能够辨别任务之间因为共享资源(例如,共享队列、锁等)而产生的依赖关系。最后,应该能够自动恢复任务的层次结构。任务由许多或者顺序或者并行的子任务构成。考虑到复杂系统中任务执行的并行性与非确定性,确定它们的依赖关系与层次结构并不容易。
在本文中,我们描述了如何自动推断复杂系统层次结构任务模型的方法,并实现了一个推断工具Scalpel。我们通过使用插装(instrument)技术来透明的观测系统运行,获取系统运行过程的trace,包括应用层函数和系统同步函数的调
文档评论(0)