Enterprise Just Builder

Solution for Enterprise Software Architecture

调优

Xperf 高手训练营 (1): NetTCPPortSharing 和 NLA Services 导致系统启动缓慢

本系列文章将通过一些现实生活中的例子来展示如何用 Xperf 工具来诊断一些常见的性能问题,并如何实现系统优化的。1

我们的第一个案例是某台笔记本花了2分钟才能显示出正常的桌面。要加速启动速度,我们必须先了解问题出在哪里。所以首先需要抓取系统痕迹(trace),xbootmgr 工具适用于系统开关机的场景,其命令如下:

xbootmgr -trace boot -traceFlags Latency+DISPATCHER -postBootDelay 120 -stackWalk Profile+ProcessCreate+CSwitch+ReadyThread+Mark+SyscallEnter+ThreadCreate

注意这里的 -stackwalk 开关。 stackwalking 使得我们可以在痕迹中查看模块以及函数调用。对于 64位机器,在收集痕迹文件之前,须先禁止执行换页以防部分内核被换出。你可以执行以下命令来达到这一目的。

Reg.exe add “HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management” -v DisablePagingExecutive -d 0x1 -t REG_DWORD -f

收集好痕迹文件,接着打开 Performance Analyzer。Performance Analyzer (又称 xperfview) 是用来分析 XPERF 痕迹的工具。它是 Windows 性能工具箱(Windows Performance Toolkit) 中的利器,该工具箱是 Windows SDK 的一部分。

 

, ,

优化Cyberlink PowerDVD 10* 以提高电池续航时间

电池续航时间不足是困扰移动设备和超级本(包括平板)用户的诸多严重问题之一。用户已经习惯从云端的内容服务器“按需”获取流媒体到移动设备当中。由于这些设备的电池容量有限,提高能源效率凸显重要。 Cyberlink PowerDVD 10* (PowerDVD*) 是业界顶尖的高清电影和 3D 电影播放软件之一。该应用也是 OEM 最经常预捆绑的软件之一。在本案例研究中,我们将展示英特尔是如何与 Cyberlink 合作,使 PowerDVD 在 Intel 设备上可以提供同类最佳的使用体验。1

首先,我们将讨论 Cyberlink 在 PowerDVD 中加入流媒体功能时遇到的挑战,以及 Intel 用来改善 PowerDVD 功耗所使用的工具。

接着,我们将讨论 Cyberlink PowerDVD 流媒体应用对电力消耗的影响概况以及对移动设备的电池续航时间的影响。我们还会对 PowerDVD 的行为进行分析以找出症结,如 CPU 解码、大量的上下文切换、 高中断频率等,这些都会导致功耗的增加。最后,我们会用数据来显示优化后所减少的电力消耗。

这次优化是一次巨大的成功。 Intel 团队在以下方面对 PowerDVD 进行了诸多改善:

  • 在播放媒体时 Package C0 从 100% 减少到 20%
  • 借助 Intel Power Gadget SoC 功耗从约 6 瓦减少到约 1.8 瓦
  • Intel VTune analyzer 所报告的 CPU 占用率从 70% 减少到 25%
  • Windows 性能分析工具显示 frequent wakeups (5 Msec) vs. 10 msec wake up frequency for local or streaming media playback frequency of 10%.

一些缩写

>>> 阅读全文

 

,

逻辑地址,线性地址及物理地址的区别

逻辑地址转线性地址

机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过 MMU (CPU中的内存管理单元)转换成物理地址才能够被访问到。

我们写个最简单的 hello world 程序,用 gcc 编译,再反汇编后会看到以下指令:

mov 0x80495b0, %eax

这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的 DS 数据段的基地址,才能构成线性地址。也就是说0x80495b0是当前任务的DS数据段内的偏移。

在x86保护模式下,段的信息(段基线性地址、长度、权限等)即段描述符占8个字节,段信息无法直接存放在段寄存器中(段寄存器只有2字节)。Intel 的设计是段描述符集中存放在GDT或LDT中,而段寄存器存放的是段描述符在GDT或LDT内的索引值(index)。

>>> 阅读全文

 

Windows事件追踪入门与使用方法

文章评价:
大多数 Windows 开发者或多或少都知道 Windows 事件追踪(Event Tracing for Windows,ETW),ETW 是由 Windows 操作系统提供的一种通用的,系统开销较低(与性能日志和警报相比)的事件追踪手段,用以监控具有负载的系统的性能, 它在内核中运行,可以追踪用户模式应用程序、操作系统内核和内核模式设备驱动引发的事件。此外,ETW 还能够动态地启用或者禁用日志记录,便于进行详细的追踪,而无需重新启动操作系统或者应用程序。
一些操作系统核心组件和第三方应用程序使用 Windows 事件追踪来提供事件日志记录和追踪。

ETW 是随着 Windows 2000 中第一次出现在其发布版本中的,对于后续的 Windows 来说, ETW 已经是内置工具。

ETW的架构
ETW 主要包含四种类型的组件,其核心体系架构如图1-1 所示:

  • 事件提供程序
  • 控制器
  • 使用者
  • 事件跟踪会话

事件跟踪会话(Session) 负责缓存和日志记录,会话接受事件并创建一个跟踪文件。ETW 会话可以使用多种日志记录模式。例如,可以对会话进行配置,直接向使用者应用程序传送事件,或在文件达到特定大小时通过回绕在某个文件中重写旧事件。为每个会话创建的单独写线程会将这些事件刷新到文件或实时使用者应用程序中。如果要实现高性能,还可以使用每服务器的缓冲区,这样无需在日志记录路径中设置锁定。

事件提供程序 (Provider)指的是一种可以将事件写入 ETW 会话的逻辑实体。任何可记录的重要活动均可作为事件,每个活动由记录到 ETW 中的一个事件表示。事件提供程序可以是用户模式应用程序、托管应用程序、驱动程序或任何其他软件实体。唯一的要求是,事件提供程序必须通过注册 API 向 ETW 注册一个提供程序 ID。提供程序首先向 ETW 注册,然后调用 ETW 日志记录 API 如EventWriteEx, EventWriteString 或者 EventWriteTransfer 写入来自代码内多个点的事件。

>>> 阅读全文

 

, , ,

XPerf — Windows Performance Toolkit 使用简介

文章评价:

从 Windows 2000 开始,Windows 中就带了事件跟踪机制。所谓事件跟踪,是一种从各种系统组件触发事件的基础设施,只为少量的内核模式下的实体所使用。在 Windows XP 中, MOF 文件 (与 WMI 提供程序的元数据类似)被用来描述事件。在 Windows Vista 和 Windows Server 2008 中,事件用 XML 装配清单来描述事件,这个设计使得 ETW 的使用更为普遍,成百上千的新的事件提供程序( Event Proivder ) 被添加到系统中。

这些提供程序会产生什么信息呢?首先, Windows事件日志(Windows Event Log) 使用这些 ETW 提供程序生成的一部分信息(但不是全部)。因此可以获得有关系统事件的各种诊断消息。另一个提供程序是性能监视器(Performance Monitor), 特点是能够查询成组的 ETW 事件。将这些不同源的信息组织在一起并不是件容易的事。尤其利用同样的跟踪,在对系统的整体的分析和对某些特定应用的分析中不断切换的时候。

这种整合的需求最终导致了 Windows 性能工具包(Windows Performance Toolkit, WPT) 的诞生,它致力于数据收集和集成,是正确地解释和利用 ETW 输出不可缺少的工具。特别的是,它能用一致的方式查看大量的信息,让你能够对系统内正发生的事情有一个整体印象。另外,通过利用内核采样中断,你可以使用全局的采样事件探查器 (包括调用堆栈分析)。更棒的是,它是完全免费的。

下面让我们来看看 WPT 的功能。从 Windows 7 开始,WPT 被包括在 Windows SDK 中,你需要下载 Windows SDK 并安装它。

>>> 阅读全文

 

, , , , , , , ,

GPUView 的使用

文章评价:
GPUView 是我(原文作者: Matt )和 Steve Pronovost 在微软实习期间开发的工具,该工具可以用来检查电脑上的图形应用程序、Windows 图形内核、 显卡驱动程序、 显卡和 CPU 内核间的交互。和一些标准分析工具 IceCap、Vtune 或图形 API 分析工具如 PIX 不同,该工具的视角别具一格,它密切关注 CPU 和 GPU 间的交互,从而判断应用程序的性能是受限于 CPU 、GPU 或者二者,进而了解需要对哪一部分进行调整才能提高资源利用率。

GPUView 可以帮助我们解决以下问题:1

  • 为什么会错过垂直同步刷新?
  • 在 GPU 渲染新的图形表面是否占住了 GPU 导致帧丢失?
  • 是应该优化 CPU 代码来改善性能,还是应该降低 GPU 负担?
  • 在显示帧之间 GPU 是否已经早早收到图形任务,还是 GPU 一直空闲在那里等待 CPU 代码?

在本文的第一部分我们会关注如何使用并了解 GPUView ,在文章的第二部分我们会看一些实际的例子,学习用 GPUView 来查看某些实际游戏的性能问题。

GPUView 是 Windows 7 SDK 的一部分。下载并安装好 SDK 之后,你可以到“ C:\\Program Files\\Microsoft SDKs\\Windows\\v7.0\\bin” 目录下执行 wpt_x64.msi 或者 wpt_x86.msi 来安装带有 GPUView 的 Windows Performance Toolkit。

要使用 GPUView,你需要用管理员权限打开命令行,然后运行 Log.cmd 来启动事件日志。再次运行 Log.cmd 就会停止日志记录。Log.cmd 会生成 Windows 的几个事件跟踪 (*.etl) 文件;这些不同事件流会被合并到单个文件中,即 Merged.etl,GPUView 会读取该文件。下面是一些示例事件:

>>> 阅读全文

 

, ,

使用 ETW 改善调试和性能优化

当下的软件系统正变得日益庞大复杂,随之对软件的开发和管理就成为了一项艰巨挑战。此外,不同的硬件组合和工作负载特征也增加了各种软件故障诊断的难度。因此,可靠性和可管理性本身成为重要功能也就不足为奇了。而正是这些功能催生了对软件检测的需求。

在软件执行过程中,针对某些关键错误状态添加智能检测手段可以极大地缩短故障调试时间。在其他某些方面,检测也是非常有用。如在企业环境中,需要对大量计算机的软硬件故障和资源冲突等不良情况进行监视并采取措施。此外,检测还非常有助于解决性能问题,因为性能问题对于外部的工作负载、配置参数以及底层硬件和软件状态都十分敏感,所以诊断起来比较困难。当性能下降时,有关人员可以根据实际工作环境的追踪文件(trace) 来确定性能不佳的组件或服务,或者发现开发阶段未预见到的性能瓶颈。最后,IT 专家可以使用各种管理工具从事务追踪中得出资源使用率的统计数据用于容量规划和趋势分析。

Windows® 事件追踪 (ETW) 是操作系统提供的一个追踪工具,具有高速通用的特点。它使用内核中的缓冲和日志记录机制,追踪用户模式应用程序和内核模式设备驱动程序所引发的事件。此外,你可以动态地启用和禁用 ETW 日志记录,从而轻松地在生产环境下进行详细追踪,而无需重新启动系统或重新启动应用程序。日志记录机制使用每处理器独立的缓冲区,通过异步写线程将这些缓冲区写入磁盘,从而将写入事件对大规模服务器应用程序的干扰降至最小。

最初引入 ETW 的操作系统是 Windows 2000。自此开始,各版本操作系统和服务器组件开始纷纷采用 ETW 对其活动进行检测。现在,ETW 已成为 Windows 平台中的主要检测技术之一。越来越多的第三方应用程序也开始采用 ETW 进行检测。ETW 还被提取到 Windows 预处理器 (WPP) 软件追踪技术中,为追踪类似“printf”样式的消息提供了一组简单易用的宏,以便用于开发过程中的调试。

在 Windows Vista™ 上,ETW 发生了改头换面的变化,其中最重大的变化之一就是引入了统一的事件提供者模型和 API。简而言之,新的统一 API 对追踪结果进行日志记录并将结果写至事件查看器,为事件提供程序提供了一种一致的、简单易用的机制。同时,还添加了一些用于改善开发人员和用户体验的新功能。在本文中,我们将介绍新的 ETW 提供程序模型,并为大家讲解开发人员应如何在基于 Windows Vista 的应用程序中采用这一新模型。

>>> 阅读全文

 

, ,

Windows 开/关转换性能分析

简介
Windows 开/关转换(即启动、休眠、关机过程)的性能对用户体验是至关重要的,因为它提高了用户对计算机的感受程度,并提供一致的开/关机体验。

对于以下的用户场景,开/关机转换性能非常重要:

  • 用户将硬件和操作系统的启动时间作为主要的性能指标。
  • 系统更新可以保护 Windows 用户并及时引入新功能,但用户对漫长的更新和重新启动周期感到沮丧。过长的关机时间会让用户感到烦躁,并增加了系统管理员的服务时间。较长的关机时间,也对移动系统的可靠性产生不利影响,例如增加了因电力不足而意外关机的风险。
  • 移动用户希望他们的计算机的能迅速转换到睡眠状态。睡眠性能对保持数据的完整性是非常重要的。如果从休眠状态恢复的时间太长,用户将忽略睡眠功能,而是直接关闭计算机。

本文会详细介绍 Windows 的开/关转换,重点介绍每个转换阶段的性能漏洞,并展示了如何通过使用 Windows 性能工具包(WPT)识别和分析这些问题。性能分析往往是必要的,因为诸如应用程序、驱动程序、服务和设备等这些系统扩展,如果没有经过优化,都会对开/关转换时间产生负面影响。优化不良的系统扩展通常由下面原因导致:

  • 延迟
  • 缺乏并行
  • 过多的资源消耗

本文可以帮助用户大大减少开/关转换时间。我们将这些性能优化应用到了实验室的许多系统上,在一些系统中,启动到桌面的时间减少了将近50%。某些系统上,开机时间减少到 40 到 50 秒。但是转换过程中的驱动程序,服务,或应用程序的影响是各不同的,因此你的测试结果也不尽相同。

表1是某四台真实机器的 Windows 7 的启动时间。这一数据显示了从BIOS POST 结束后到 Post Boot 阶段(系统空闲状态)所经过时间。启动阶段在本文后面的“引导转换”一节中会进一步说明。

>>> 阅读全文

 

, , , , ,

了解Linux操作系统 (一)进程管理

文章评分:

前言
Linux 是一种由全世界开发者共同开发的开源操作系统。其源代码可以自由获取并可以在 GNU GPL 授权下使用。有很多公司提供不同的系统发行版供用户使用,如Redhat和Novell SUSE。大部分桌面发行版都可以从网站上免费下载,但服务器版一般是需要购买的。

在过去的几年里,Linux 被世界上许多公司的数据中心所使用。如今 Linux 操作系统为科学领域和企业用户所认可。它已经成为一种多种用途的操作系统。你能在多种嵌入式设备中发现它,如:防火墙、手机或电脑主机。所以 Linux 的性能对于科学领域和企业用户来说已经成为一个热门议题。然而一个操作系统可能被用来计算全球的天气预报或者被用来运行数据库等多种用途,Linux 必须能够为各种可能的使用情境提供优良性能。大多数 Linux 发行版含有常规的调校参数来满足所有用户。

IBM 意识到作为一种操作系统,Linux 非常适合在 IBM 系统之上运行企业级应用。大多数企业应用现在都可以运行在 Linux 上,包括文件服务器、打印服务器、数据库服务器、Web服务器、以及沟通和邮件服务器。

在企业级服务器运行 Linux 时需要对其性能进行监控,在必要时需要对服务器进行调优以消除影响用户的性能瓶颈。本红皮书将介绍一些调优 Linux 的方法、监控分析服务器性能的工具、以及对于特定应用的关键性能参数。本文目的是说明怎样分析和调校 Linux 操作系统,从而为在系统上运行的各种不同应用提供优良的性能。

>>> 阅读全文

 

, , , , ,