(计算机系统结构专业论文)龙芯多核平台上性能分析工具的设计与实现.pdf_第1页
(计算机系统结构专业论文)龙芯多核平台上性能分析工具的设计与实现.pdf_第2页
(计算机系统结构专业论文)龙芯多核平台上性能分析工具的设计与实现.pdf_第3页
(计算机系统结构专业论文)龙芯多核平台上性能分析工具的设计与实现.pdf_第4页
(计算机系统结构专业论文)龙芯多核平台上性能分析工具的设计与实现.pdf_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要 i 摘 要摘 要 近年来,片上多核处理器成为主流,国产芯片龙芯也推出了四核处理器-龙 芯 3a。为了充分利用多核处理器的片上资源,使多核处理器的硬件资源转变为 程序性能的提升,并行程序设计变得越来越重要。并行程序一直是程序设计的难 点, 从串行程序到并行程序的改造主要依靠对程序算法的分析和对程序行为的理 解,同时也需要理解硬件的运行行为,因此需要一套性能分析工具来帮助程序员 分析程序和硬件的行为。 大多数现代处理器都集成了性能计数器(pmu),它能够收集应用程序、操作 系统以及处理器的性能信息, 这些信息可以帮助程序找到应用程序或者操作系统 的热点,分析程序的运行瓶颈。本文基于龙芯 3a 平台的性能计数器(pmu)实现 了一款性能分析工具 tprofiler。 本文在实现的过程中参考了已有的性能分析工具 vtune、oprofile 以及 perf 的实现原理,最终采用了单进程采样。主要的研究内容包括:(1)通过分析已有 的性能调优工具oprofile和perf的代码, 分析它们的实现原理以及各自的优缺点, 然后结合龙芯 3a 平台的硬件特性, 确定 tprofiler 的设计方案为单进程采样的方 式。(2)设计 tprofiler 的软件架构,将其实现分为两个模块:前端和后端。其中 前端运行于用户层,负责分析后端收集的性能信息,指导程序员优化代码;后端 运行于内核层, 负责控制性能计数器, 收集程序运行过程中产生的硬件事件信息。 (3)针对 tprofiler 的软件架构,分别实现前端和后端的功能。为了支持单进程采 样,在内核中进程相关部分添加支持单进程采样的代码,在进程描述符中添加支 持性能计数器上下文切换的数据结构,此外为了用户层和内核层的数据传递,还 添加了文件映射的功能。 最后借助编译技术并分析二进制文件将采样信息与程序 代码对应起来产生对程序员有用的信息。 本文基于龙芯 3a 平台的硬件性能计数器(pmu)实现了一个单进程采样的性 能分析工具 tprofiler,它实现了 oprofile 的大部分功能,通过与 oprofile 的对比 实验,可以看到 tprofiler 的采样数据更加精确,采样范围也更加广泛。最后本 文还提出了 tprofiler 需要改进的地方, 并针对龙芯平台, 提出其硬件计数器(pmu) 需要加强和完善的地方,并初步提出了改进的手段。 关键词:关键词:pmu 性能分析工具 单进程采样 多线程分析 abstract ii abstract in recent years, chip multi-core processors has become the mainstream, domestic chip loongson also launched a quad-core processor-loongson 3a. to take full advantage of multi-core processor resources, parallel programming has become more and more important. programming parallel program has been the difficulty. programmer changs the serial programs into parallel programs not only rely on analysis of algorithms and understanding program behavior, but also need to understand the operation of the hardware behavior. therefore, programmers need a performance analysis tool to analyze the behaviors of programs and hardware. most modern processors have performance counters (pmu), the performance information of applications, operating systems and processor they collect can help programmer to find hot spots and bottlenecks of applications.based on the performance counters (pmu) of loongson-3a platform we implemented a performance analysis tool tprofiler. we use the single process sampling method referring to the existing performance analysis tools vtune, oprofile and perfs principle.the main study contents include: (1) determine the design of tprofiler based on the advantages and disadvantages of oprofile and perf and combining the hardware features of loongson-3a. (2) design software architecture of tprofiler. we divide tprofiler into two modules: front-end and back-end. front-end which runs on the user layer, is responsible for analyzing the performance information collected by back-end; back-end running on the core layer, is responsible for controlling the performance counters (pmu), collecting the hardware event information of applications. (3) implement the functionalities of front-end and back-end.to support single process sampling, we add functions in process building and switch in kernel, and add data structueres in process descriptor for performance counters (pmu).we also add file map function for the data transfer between user and kernel.finally, using compiler technology and anslysize binary file, tprofiler get the useful information to programmer. this paper has implemented a performance analysis tool tprofiler based on the performance counters (pmu) on loongson-3a. it implements most functions of oprofile. comparing the experimental results of oprofile and tprofiler, we can see that tprofiler has more accurate and extensive range sampling data. finally, the paper abstract iii also proposed the improvements of tprofiler and performance counters (pmu)s shortcomings of loongson-3a , and proposed improved methods initially. key words: pmu, performance analysis tool, single process sapmling,analysis of multi-threading 图片目录 vii 图片目录 图片目录 图 1.1图 1.1 intel 处理器发展历史 .2 图 1.2图 1.2 基于时间的采样 .5 图 1.3图 1.3 基于时间的采样 .6 图 2.1 图 2.1 cause 寄存器 .14 图 2.2图 2.2 性能计数器 24 号 .15 图 2.3图 2.3 性能计数器 25 号 .16 图 2.4图 2.4 性能计数器的工作流程 .19 图 2.5 图 2.5 通用异常处理表 .20 图 2.6 图 2.6 单进程采样的执行流程 .23 图 3.1图 3.1 tprofiler 软件架构 .26 图 3.2 图 3.2 sys_perf_event_open 流程图 .29 图 3.3图 3.3 基本硬件事件数组 .31 图 3.4图 3.4 cache 相关的硬件事件数组 .31 图 3.5图 3.5 性能计数器的操作函数 .32 图 3.6图 3.6 内存文件映射 .33 图 3.7图 3.7 系统调用的文件操作集 .34 图 3.8图 3.8 内存操作函数集 .35 图 4.1 图 4.1 进程创建流程图 .37 图 4.2图 4.2 上下文初始化流程 .38 图 4.3图 4.3 进程创建中 perf_event_fork 流程图 .39 图 4.4图 4.4 系统启动时的调度初始化 .40 图 4.5 图 4.5 进程调度流程图 .41 图 4.6图 4.6 支持内存映射的内核函数流程图 .42 图 4.7图 4.7 进程描述符扩展 .43 图 4.8图 4.8 数据结构 perf_event_context .44 图 4.9图 4.9 tprofiler 主要数据结构关系图 .45 图 4.10图 4.10 perf_event 的主要变量 .46 图 4.11图 4.11 perf_event_attr 主要变量 .48 图 4.12图 4.12 perf_mmap_data 主要变量 .49 图 4.13图 4.13 溢出中断处理过程 .50 图 5.1图 5.1 tprofiler 测试用例 bad_cache .54 图 5.2图 5.2 tprofiler 主页面布局 .55 图 5.3 图 5.3 进程的采样结果 .55 图 5.4图 5.4 代码注释 .56 图 5.5图 5.5 函数调用图 .57 图 5.6图 5.6 多线程测试结果 .57 图 5.7图 5.7 实时显示系统采样 .58 图 5.8图 5.8 good_cache 代码 .59 图 5.9 图 5.9 tprofiler 与 oprofile 测试结果对比 .59 表目录 viii 表目录 表目录 表 2.1表 2.1 cause 寄存器域 .14 表 2.3表 2.3 控制域格式 .16 表 2.4 表 2.4 计数使能位定义 .16 表 2.5表 2.5 计数器 0 事件 .16 表 2.6 表 2.6 计数器 1 事件 .17 表 2.7 表 2.7 高优先级异常入口 .20 表 2.8表 2.8 cause 寄存器 ip 位对应中断 .21 表 5.1 表 5.1 tprofiler 与 vtune 功能对比 .53 中国科学技术大学学位论文原创性声明 本人声明所呈交的学位论文,是本人在导师指导下进行研究工作所取得的成 果。除已特别加以标注和致谢的地方外,论文中不包含任何他人已经发表或撰写 过的研究成果。 与我一同工作的同志对本研究所做的贡献均已在论文中作了明确 的说明。 作者签名:_ 签字日期:_ 中国科学技术大学学位论文授权使用声明 作为申请学位的条件之一, 学位论文著作权拥有者授权中国科学技术大学拥 有学位论文的部分使用权,即:学校有权按有关规定向国家有关部门或机构送交 论文的复印件和电子版,允许论文被查阅和借阅,可以将学位论文编入有关数据 库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。本人 提交的电子文档的内容和纸质论文的内容相一致。 保密的学位论文在解密后也遵守此规定。 公开 保密(_年) 作者签名:_ 导师签名:_ 签字日期:_ 签字日期:_ 第 1 章 绪论 1 第第1章 章 绪论 绪论 1.1 研究背景研究背景 近年来,片上多核(chip multiprocessor,cmp)处理器已经取代单核处理 器成为主流。为了最大限度的利用多核平台的计算资源,多线程程序的设计提上 日程。 多线程技术的出现已经有几十年的历史,但是在多核出现之前,它一直属于 比较深奥的理论。迄今为止,许多程序员都曾经在常见的多线程设计问题中经历 挫折,主要原因是多线程程序的运行行为并不像单线程那样容易理解。因此,我 们就需要一种工具来帮助程序员理解多线程程序的运行行为, 指导程序员设计出 高质量的代码。 1.1.1 多核处理器的发展 多核处理器的发展 在多核处理器出现之前的将近 30 年里,处理器的性能提升一直接近摩尔定 律,即每 18 个月提升一倍。一直以来微处理器性能的提升主要依靠两个方面: 更高的主频和更多的片上资源。主频的提升带来了处理器计算能力的提高,而片 上晶体管数目的增加则有力的推动了处理器结构的改进,如超标量结构,分支预 测技术,以及片上 cache。这些技术可以大量挖掘指令并行性和有效使用程序的 局部性原理。资料显示:二十世纪八十年代中期以来,微处理器频率的提升超过 了 100 倍,而片上集成晶体管的数量的增加则达到了惊人的 10000 倍。以微处理 器的霸主 intel 为例:1985 年 10 月 17 日 intel 推出划时代的产品 80386,其内部 包含了 27.5 万个晶体管,时钟频率为 12.5mhz,此后逐渐提高到 20mhz、 25mhz、33mhz、40mhz;1989 年推出的 80486 片上集成的晶体管数量就突破 了 100 万个,时钟频率达到了 50mhz;直至 3.4ghz 的奔腾 4(hinton, 2001)至尊 版处理器容纳的晶体管数量已经达到了 1.78 亿个。图 1.1 给出了单核时代 intel 处理器的发展历程。 在这段时间里,主频的提升和晶体管的增加给 intel 带来了巨大的成功。程 序员也习惯了由硬件的发展自然而然的获取程序性能的提高。 每当出现新一代的 体系结构平台, 原来的程序无需修改或者仅做少量改动就可以轻而易举的获得摩 尔定律带来的性能提升。但是两个主要因素使得这一趋势走到了尽头。首先,系 统设计者遇到了难以克服的物理障碍即巨大的发热量、过多的能耗以及能量泄 第 1 章 绪论 2 露,这些障碍阻止了通过提高主频来获得性能提升的道路;其次,单个芯片可以 集成的引脚数目和带宽限制都意味着处理器和主存之间的速度的剪刀差在越拉 越大。2006 年,intel 被迫放弃了 4g 主频的 tejas 奔腾 4 处理器的开发,这几乎 也标志着主频至上的理论走到了尽头,取而代之的是片上多核设计。 图 1.1图 1.1 intel 处理器发展历史 2006 年 7 月 23 日, intel 基于酷睿(core)架构的处理器正式发布。 同年 11 月, 又推出面向服务器、 工作站和高端个人电脑的至强(xeon)5300 和酷睿双核和四核 至尊版系列处理器, 这标志着多核时代的正式来临。 多核处理器实现了 “分治法” 战略。通过划分任务,线程应用能够充分利用多个执行内核,并可在特定的时间 内执行更多任务。 要想在现有的多核体系结构上获得充分的性能提升, 必须在原有的软件基础 上做出大幅度的修改,提高程序的整体吞吐量。在单核时代,程序员很少考虑多 线程编程的问题,因为就算是多线程的程序,在单核平台上也不能并行执行,单 线程的程序和多线程程序性能上的差别并不明显,相反,由于线程切换带来的开 销,多线程程序在许多情况下甚至不如单线程程序的性能。而在多核平台上,多 线程的威力就显现出来了。因此,程序员必须从以前的单线程设计思维中解放出 来,投入到多线程的设计中去。 1.1.2 龙芯处理器概述 龙芯处理器概述 处理器是决定电脑性能的核心部件,也是整个系统的核心。而在这个电脑核 心部件市场领域里,一直以来都是 intel 和 amd 两大公司占据主导地位。龙芯 第 1 章 绪论 3 处理器是中科院计算技术研究所自主研制的基于 mips 指令集的处理器芯片。主 要包含三个系列,龙芯一号处理器主要面向嵌入式应用,龙芯二号主要面向桌面 应用, 而龙芯三号多核处理器主要面向服务器和高性能的应用。 根据应用的需要, 龙芯二号也可以应用于高端嵌入式应用,龙芯 3 号应用于桌面应用。下边介绍一 下这三款龙芯处理器的核心技术。 (1) 龙芯一号(英文名称 loongson-1) 龙芯一号处理器是兼顾通用和嵌入式处理器特点的 32 位处理器。它采用与 mips iii 兼容的指令集,并使用用阻塞 cache 的单发射乱序执行七级流水线,实 现了静态分支预测,使用 32 位整数计算单元和 64 位的浮点计算单元。 龙芯一号 ip 核具有高度可配置性,用户可以根据自己的需要配置处理器,主 要的可配置模块包括:浮点部件、多媒体部件、内存管理、cache、协处理器接 口。其内存管理有三种模式:标准模式、直接映射和无映射,cache 则分为 4k 为一路的指令 cache 和数据 cache。 (2) 龙芯二号(英文名称 loongson-2) 龙芯二号实现了动态分支预测,采用先进的四发射超标量流水结构,片内一 级指令 cache 和数据 cache 各增大到 64k, 片外二级 cache 则最多可配置到 8m, 最高频率达到了 1ghz,相当于中等奔腾 4 的计算能力,并且功耗要远远低于奔 腾 4 处理器。 (3) 龙芯三号 龙芯 3a 处理器(龙芯 3a 用户手册)是第一款多核处理器,它的工作频率为 900mhz1ghz,采用 65 纳米 cmos 生产工艺,晶体管数目达 4.25 亿个,并且 集成了四个 64 位超标量处理器核、4mb 的二级 cache、两个 ddr2/3 内存控制 器、两个高性能 hypertransport 控制器。 1.1.3 实现 实现 tprofiler 的意义的意义 上一节已经提到,为了发展我国的芯片产业,缩短国产处理器与国际先进水 平之间的差距, 中科院计算所自主研发了国产龙芯处理器。 对于这个全新的架构, 支持的系统软件少之又少。 一个系列处理器产品的成功, 除了硬件性能指标本身, 往往取决于其配套的软件工具链的功能和易用性,因此开发一种 arch-specific 的系统软件可以帮助程序员更好的在龙芯平台上进行开发, 所以我们需要开发一 整套的系统工具链,来支持龙芯的发展。tprofiler 便是龙芯系统工具链中的一部 分。 对程序(算法)性能的实验分析是计算机科学的重要研究内容。但是由于在硬 件和软件之间有一些意料之外的交互,分析应用程序的代码可能是很困难的,改 第 1 章 绪论 4 进应用程序的性能更是一项非常耗时耗力的工作, 究竟程序中是哪些函数消耗掉 了大部分执行时间,这通常都不是非常明显。 传统的 linux/unix 上的系统观察工具和程序调试工具虽然理论上对几乎所 有的性能参数都可以探测,且它们中每个工具功能都很强大,但也都有各自的缺 点: (1) 操作上彼此脱节,每个工具只能固定地探测系统的特定部分。 (2) 很难将这些事件与触发其的特定程序准确关联起来。 (3) 以不同的方式表达数据,且使用不同的接口。 (4) 对于 linux 系统,由于内核本身并不区分线程和进程之间的概念,所以一直 以来没有可靠的线程分析工具。 以上这些不利因素导致这些工具对信息缺乏足够的综合能力, 使得观察和解 释系统范围内的行为特征实际上变得非常困难。此外,这些工具的信息显示方式 或者说用户界面也不太友好,影响应用程序开发者对性能信息的全局理解。 tprofiler 的主要功能就是通过对程序运行过程中产生的硬件事件采样, 和程 序代码对应,从而得到每行代码产生硬件事件的数量和百分比。除了对全系统的 硬件事件进行采样之外, tprofiler 还提供对单个进程或程序的采样和分析。 此外, tprofiler 在开发的过程也将串行程序并行化考虑其中, 为串行程序并行化提供数 据上的支持。 1.2 性能分析的几种技术性能分析的几种技术 性能分析一直是程序员编写高质量代码的重要手段,尤其是多核时代的到 来,对程序员多线程程序的编写能力要求越来越高,开发者需要深刻的理解线程 之间的交互行为和程序微体系性能事件的特征, 才能编写出正确且高效的多线程 程序,因此,程序的剖析和性能调优技术比以前显得更加重要。 在现有的工具,常用的性能分析技术有插桩(instrumentation)(huang,1978, hollingsworth,1994,1996)和采样(ahn,2002,duesterwald,2003, sweeney,2004)两 种。插桩技术是由 j.c.huang 教授首次提出,它使被测试程序在保持原有逻辑完 整性的基础上在程序中插入一些探针,通过探针的执行抛出程序的运行特征数 据。插桩分为静态插桩和动态插桩。采样技术利用统计抽样的思想在多个程序事 件中选取一定量的事件进行分析。 采样也有两种方式, 按时间采样和按事件采样。 下边将详细解释这两种技术。 第 1 章 绪论 5 1.2.1 插桩技术 插桩技术 (1) 静态插桩 这种类型的插桩是在源代码编译或链接时完成的, 它的唯一优势是我们能实 现复杂的功能并且对程序性能影响很小。但是,静态插桩却有很多限制,最主要 的一个限制是,如何执行程序中的代码和数据是混合放置的,静态插桩工具很难 获取足够的信息来分开它们;静态插桩工具也很难处理间接分支、共享库以及动 态产生的代码。静态插桩的最经典的工具便是 gcc 自带的 gprof(fsf,1998)。 (2) 动态插桩 与静态插桩相反,动态插桩在程序运行时实现。它克服了静态插桩所有的限 制。动态插桩不需要重新编译或链接程序,能够处理运行中的程序以及共享库, 也为程序优化提供了更多机会。动态插桩方面的代表性的工作包括 atom api(srivastava,1994)、dtrace(cantrill,2004)、pin(luk, 2005)等。 1.2.2 采样技术 采样技术 (1) 基于时间的采样 图 1.2图 1.2 基于时间的采样 基于时间的采样是借助操作系统时钟中断的机制, 每个时钟中断都会记录一 次(采一次样) 。引入的目的在于,提供对没有性能计数器的处理器的支持。其精 度相对于基于事件的采样要低,并且支持的采样事件也相对较少,只支持时钟周 期数,完成指令数等少数事件。因为要借助操作系统时钟中断的支持,对禁用中 断的代码不能对其进行基于时间的采样的分析。基于时间的采样的具体过程是: 用户首先注册操作系统的计时器函数, 让处理器以固定的周期触发处理器内部中 断控制器,中断处理器进行采样。图 1.2 说明了基于时间采样的过程。 第 1 章 绪论 6 (2) 基于事件的采样 性能计数器(hpcs)越来越多的用于分析性能以及确定性能瓶颈的原因。 大多 数现代处理器中都带有一定数量的性能计数器。例如:ibm power4 有 8 对性 能计数器、intel itanium 4 个、amd athlon 有 4 个。这些性能计数器的功能就是 记录硬件事件,通过性能调优工具的处理之后,产生对程序员有用的信息。 基于事件的采样是只记录特定的硬件事件(比如 l2 cache miss)的发生次 数,当达到用户设定的阈值时就记录一下(采一个样) 。具体的工作方式是:用 户选择需要记录的硬件事件(例如:l2 cache miss),该事件每发生一次就触发性 能计数器加 1,当性能计数器的值达到设置的阈值时,就向上溢出,触发处理器 的内部中断控制器,中断处理器进行采样,如图 1.3 所示是基于事件的采样的过 程: 图 1.3图 1.3 基于时间的采样 1.3 论文的研究目标和主要工作论文的研究目标和主要工作 本文的主要目标是针对国产芯片龙芯 3a 平台设计一个性能分析工具 tprofiler 来指导程序员更好的使用龙芯平台进行开发。 本文首先分析了现有的性 能分析工具的优点和不足, 了解了龙芯平台上集成的性能计数单元的编程方式及 其能够检测的硬件事件; 然后提出了单进程采样的分析方式并实现了龙芯平台的 性能分析工具。 该工具统计程序运行过程中产生的硬件事件如: 内存读/写、 cache 缺失、程序跳转等事件,然后对应到程序源代码,为程序员优化程序提供信息支 持;可以检测程序运行时的死锁,线程调度等,为多线程编程提供指导;此外, 还可以监测程序运行过程中操作系统的行为,查看内核代码的调用情况,监测系 统的性能。 第 1 章 绪论 7 本文的具体工作内容为: (1) 分析工业界和学术界常用的性能分析工具,并结合龙芯多核平台提供的硬件 支持,确定 tprofiler 最终的设计方案。 在 linux 平台上已有的工具主要是 gprof 和 oprofile。gprof 是 gcc 中自带的 性能分析工具,可以显示程序运行的“flat profile” ,包括每个函数的调用次数, 每个函数消耗的处理器时间;也可以显示“调用图” ,包括函数的调用关系,每 个函数调用花费了多少时间。gprof 主要采用 1.2.1 节介绍的静态插桩的方法来 统计程序员需要的信息,因此,它也就有 1.2.1 节列出的静态插桩的局限性。 oprofile 则是 linux 内核从 2002 年加入的一个功能强大的性能分析工具,它 主要采用全系统采样的方式来统计程序运行过程中产生的数据, 然后和源代码对 应。但是 oprofile 使用方法复杂,全系统采样得到的数据也不是十分准确。 龙芯 3a 作为一种新的多核处理器平台,很多关键技术与现有的平台有很大 差别。 就性能计数单元而说, 它的实现原理和编程方式与 mips 和 x86 的就有很 大差别(关于龙芯的性能计数单元会在 3.2 节详细说明)。龙芯的计数器总共包含 2 个,其中 24 号是一个配置寄存器,25 号是一个 64 位的计数器,分为前 32 位 和后 32 位,分别统计 16 种硬件事件。而 intel i7 共有 7 个核内性能计数器,9 个核外性能计数器,能统计 7 个结构相关事件、264 个结构无关事件和 175 个核 外事件。 (2) 设计 tprofiler 的软件架构。 根据对现有性能分析工具的理解,参考 oprofile 和 perf 的实现模式,本文将 tprofiler 分为位于用户层的前端和位于内核层的后端。其中,后端的实现只有一 个系统调用,对硬件事件和软件事件的采样都是由该系统调用完成的。前端通过 系统调用的参数将对性能计数器的配置传递给内核, 内核收集的原始数据通过系 统调用参数或者文件映射的方式传递给前端用户空间。 (3) 针对 tprofiler 的软件架构扩展 linux 内核。 tprofiler 采用单进程采样的原理来收集数据,因此需要在内核进程创建和调 度部分添加支持性能计数器的函数, 此外还要在进程描述符中添加支持性能计数 器的上下文数据结构。 本文主要工作是设计了内核层的后端。为了支持单进程采样,需要在内核中 添加新的数据结构,此外还需要添加管理性能计数器以及文件映射的数据结构。 而数据收集则需要溢出中断来处理。待数据传递到用户空间之后,则需要分析可 执行文件将采样的数据和源代码对应。 第 1 章 绪论 8 1.4 论文的结构论文的结构 本文的其余章节按照以下方式组织: 第二章通过分析经典的性能分析工具并结合龙芯多核平台的硬件特性来确定 tprofiler 的设计方案。 第三章从整体上说明 tprofiler 的软件架构、模块划分、控制流程、内核层和 用户层数据交换方式。 第四章主要说明为了支持 tprofiler 后端需要在内核中添加的数据结构和系统 调用以及溢出中断的处理过程。 第五章使用本文实现的 tprofiler 分析一些典型的测试用例,主要测试 tprofiler 的基本采样功能,针对多线程程序的分析以及系统的运行行为。 第六章总结本文的主要工作,展望未来工作的方向。 错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。tprofiler 设计方案 9 第第2章 章 tprofiler 设计方案设计方案 程序性能分析一直都是程序员编写高质量代码的重要手段。 特别在编写大型 软件或者对性能要求比较高的控制领域以及资源受限系统的软件时, 尤其依赖程 序性能分析工具。因此,学术界和工业界也一直致力于性能分析工具的设计与完 善。 在确定 tprofiler 的设计方案时, 我们参考了工业界和 linux 内核中的性能分 析工具的设计思想,同时也分析了龙芯多核平台的硬件特性,最终确定了 tprofiler 的设计方案。因此,本章首先分析现有性能分析工具的功能、实现原理 及其优缺点,然后给出龙芯 3a 平台与性能分析相关的硬件支持,最后给出我们 的设计方案。 2.1 相关工作相关工作 在处理器集成硬件性能计数器之前,性能分析工具主要使用插桩技术来实 现。 其中出现较早,也最常用的工具便是 gcc 中自带的工具 gprof (fsf,1998) , 它是通过静态插桩的方式实现的。brinkley sprunt 在 2002 年提出性能计数器 pmu(sprunt,2002)之后,工业界、学术界以及 linux 开源社区设计出了一批功 能强大的基于性能计数器的性能分析工具,例如:intel 公司的 vtune 工具集 (intel,2009a, intel,2009b, intel,2009c),linux 内核中集成的 oprofile(levon j. 2009),田纳西大学设计的 papi(philip j. mucci. 2009),以及 hp 公司基于 papi 开发的 perfmon2(eranian,2009)。本节将分析这些工具的功能、实现原理及优缺 点。 2.1.1 gprof gprof 是 gnu 自带的性能测试工具。它采用混合方法来收集程序的统计信 息。在编译过程中,gprof 在函数入口处插入计数器用于记录每个函数的被调用 情况和被调用次数;同时也使用采样方法,在程序运行时按一定间隔去读取程序 计数器并分析程序找出程序计数器对应的函数用以统计函数运行的时间。 gprof 可以打印出程序运行中各个函数消耗的时间,并能找出耗时最多的函 数。同时还可以打印函数调用图,以及分析程序的运行流程。对于几万行深圳几 十万代码量的工程,gprof 的功能能帮助程序员勾勒出程序的框架,使得大型工 程一目了然。 错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。tprofiler 设计方案 10 gprof 是典型的使用插桩方式实现的性能分析工具。在编译和链接应用程序 的时候(使用 -pg 编译和链接选项) ,gcc 在应用程序的每个函数中都加入了一 个名为 mcount ( 根据不同编译器或操作系统还可能使用“_mcount”或者 “_mcount”)的函数,也就是说应用程序里的每个函数都会调用 mcount, 而 mcount 会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函 数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间,调用次数 等所有信息。 gprof 同样也存在缺陷,首先使用 gprof 需要重新编译程序,在编译时加入 gprof 需要的编译选项,在编译大型工程时这是个相当耗时的工作,并且有时我 们可能只能得到可执行文件,此时 gprof 便无用武之地;其次,在统计多线程程 序时,gprof 只能统计主线程的信息,这是个致命的弱点;最后,gprof 通过插 桩实现,因此需要较大的性能开销,并且如果要分析内核,gprof 就无能为力了。 2.1.2 vtune vtune 是 intel 为在 intel 处理器和 microsoft windows 平台上开发高性能软件 而提供的集成性能优化调整环境。vtune 收集、分析与提供体系结构相关的性能 数据, 将这些数据与应用程序或操作系统例程相关联, 并图形化地显示分析结果。 它能够访问处理器的硬件计数器,在性能分析的基础上对 c、c+、java 或者 fortran 程序的优化提出建议。 vtune 工具集共包含三个主要的工具: performance analyzer、thread checker 和 thread profiler。 intel vtune performance analyzer 可以收集、分析并显示各种性能数据,包 括从系统总体性能到应用程序中某个特定函数的指令, 发现应用中消耗过多处理 器资源量的代码行,从而使得开发人员可以找到并消除潜在的性能瓶颈。同时, 无须对程序重新编译。 thread checker 用于分析多线程程序的正确性,可以发现多线程编程中诸如 死锁、数据竞争、线程阻塞等问题并且定位其潜在位置,进而提醒程序员进行改 进/改正。 thread profiler 可以记录线程活动状态,(1)在时间轴上显示多线程的执行流 (包括了活动状态)以及线程之间的交互事件。 (2)统计程序执行过程中的并发度及 其占整体执行时间的比例。3)系统处理器资源的利用情况统计。根据以上信息, 开发者可以发现线程负载不平衡、 同步等待延迟、 处理器资源利用不合理等问题, 从而改进代码。 vtune 使用全系统采样的数据收集方式, 在内核层使用模块的方式控制 x86 平台集成的性能计数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论