背景

一直想了解windows启动时,执行了哪些操作,调用了哪些函数,好对系统启动进行优化工作。有什么好的方法或者工具可以帮助了解。这就是今天故事所要介绍的主角-Xperf。

Xperf是一个先进的故障调试工具,可深入调试各种性能问题,其高度是Perfmon无法企及的。它是产品套件Windows性能工具包(Windows Performance Toolkit ,WPT)的一部分,而WPT则属于微软软件开发包(Microsoft Software Development Kit ,SDK)。Xperf是Windows事件跟踪系统(Event Tracing for Windows,ETW)的补充。ETW则是服务器操作系统的一个内置组件,提供详细的系统性能和系统数据。

问题

了解操作系统启动慢的原因,加快系统启动速度。

Xperf工具还能够处理诸多问题,如系统响应问题、启动缓慢、高CPU和磁盘利用率、应用程序延迟及响应缓慢等。它支持在x86、x64和IA-64等平台上的跨平台使用时CPU占用低于2.5%,同时每秒能收集超过20000个系统事件。

依赖

  1. Microsoft .NET Framework 4
  2. Windows软件开发包

安装时选择Windows性能套件(Windows Performance Toolkit)和Windows调试工具(Debugging Tools for Windows)这两个选项,如图1所示。

图1:Windows SDK的安装选项

默认安装目录:C:\Program Files\Microsoft Windows Performance Toolkit

步骤

应用场景

关注系统启动速度,收集Boot阶段数据

启动程序,数集数据

用管理员模式启动 cmd.exe,然后进入 Microsoft Windows Performance Toolkit 安装目录,输入下面的命令:
xbootmgr.exe -trace boot

输入这个命令以后,xbootmgr 会自动重启系统,然后开始收集相关的启动信息数据。重启完成以后,xbootmgr 会等待 explorer 全部启动完成以后,生成一个日志文件(扩展名是:etl)到 Microsoft Windows Performance Toolkit 安装目录下面。

默认文件名为:boot_BASE+CSWITCH_1.etl

数据分析

1. 打开etl文件,输入命令:xperfview boot_BASE+CSWITCH_1.etl ,生成下方图片:

2. 找到 process lifetimes 分类(如上图),

3. 会发现到50多秒的时候,系统里面的第一个用户态进程smss.exe才启动(进程ID:748),之前的时间都花费在 system 上。换句话说,运行在内核态的各种驱动程序,包括 Windows 内核和执行体用了 50 多秒才完成启动子系统之前的初始化动作,这个时间花费的也太长了

由于初始化 Windows 内核和执行体等动作用了 50 多秒,这个非常的不正常,因为我们需要看看在这50秒内的详情。
在 Disk Utilization by process 里面,选择 0-50 秒这个时间段:

4. 然后点击鼠标右键,选择 Detail Graph,会出现下面的图:

5.在 Disk Utilization by process 里面,还是选择 0-50 秒这个时间段:点击鼠标右键,选择 Summary Table,xprefview 会显示如下图所示的报告,这个报告对于分析性能分析来说,会显得会更为直观一点。

这张图标给了我们一个非常详细的性能分析和解释数据。在 0-50 秒时间内,system 进程花费了 42445587.434 us 的时间,其中,花费最多的时间是在处理 MFT 表的时候,尽然用了近10秒的时间。

系统优化

根据上面的数据,我们已经找到了在启动最开始的50秒时间内,有10秒钟的时间花费在了出来MFT表上面,另外,读取一些字体文件的时间也非常的慢。 知道数值以后,后面就是优化过程了。根据 xperf 给出的数据初步判断:开机慢的原因和文件IO速度变慢是相关的。有人会问,而影响文件IO速度慢的原因有很多,但是请注意一点,在前50秒内,由于没有任何的用户态进程介入,因此IO速度慢的原因就很简单了,大部分原因是因为磁盘碎片导致的,也有可能是由于硬盘坏道导致的。根据 xperf 的数据,处理MFT表用了10秒钟时间,如果能够把MFT的处理时间加快,同时减小碎片数量,系统的启动速度就能加快不少了

引用:玩转微软官方性能分析工具xperf,追查Vista开机慢之根源

转载于:https://www.cnblogs.com/liuke209/archive/2011/08/02/2124931.html

用xperf查看系统启动过程相关推荐

  1. 系统启动过程Linux

    操作系统的启动分为两个阶段:引导boot和启动startup.引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行.启动阶段接管了剩余工作,直到操作系统进入可操作状态. 总 ...

  2. 根据centos系统启动过程定位故障位置

    根据Centos系统启动过程定位故障位置,按系统启动顺序执行,如果停在某个阶段不往下执行,就定位在这个阶段有故障,根据故障现象找原因直至解决问题. 按系统启动顺序可分为4个步骤,分别是BIOS自检.G ...

  3. 【Notes9】Linux系统启动过程,数据库,驱动,i2c-tools,shell

    文章目录 1.Linux系统启动过程:ukr,ubuntu开机引导文件/etc/default/grub 2.数据库:存储过程(PL/SQL代码集,像没有返回值的自定义函数)和函数需要用户显示调用才执 ...

  4. IBM AIX 5.3 系统管理 -- 系统启动过程详解

    一. 启动过程 启动过程包含下面的一些步骤: 1.1启动一个系统的初始步骤是上电自检(Power On Self Test,POST).其目的是验证基本硬件是否处于正常的工作状态.同时初始化内存.键盘 ...

  5. rhel系统启动过程_Linux系统启动过程分析

    [原创]Linux系统启动过程分析-wjlkoorey258-ChinaUnix博客 http://blog.chinaunix.net/uid-23069658-id-3142047.html 经过 ...

  6. rhel系统启动过程_Linux启动过程详解

    一.Linux系统开机启动过程 第一步:开机自检,加载BIOS 第二步:读取MBR 第三步:Boot Loader grub引导菜单 第四步:加载kernel内核 第五步:init进程依据initta ...

  7. 浅谈-LINUX 操作系统启动过程

    LINUX 操作系统启动过程 通过一段时间的学习已经对linux有了一定的了解,接下来就开始研究一下linux 操作系统的启动过程吧.当然这是为了让大家比较容易发现linux启动过程中容易发生问题的地 ...

  8. 如何调试系统启动过程中systemd的代码

    之前写过很多kernel的gdb debug, 其实用户态也是可以调试的, 只是在共享库的动态地址上不是很好处理, 最近同事有调试系统启动过程中systemd的需求, 简单研究了一下 其实qemu k ...

  9. Android系统启动过程详解

    转自:http://www.cloudchou.com/android/post-361.html 前言 一直想研究Android完整的启动过程,网上看了不少资料,也看了书上的一些说明,对这些观点有些 ...

最新文章

  1. NeurIPS 2020论文评审结果出炉,提前拒稿、作者审稿惹争议,网友:改投别家吧...
  2. 单片机定时器精准定时_PIC单片机的定时器精准计时的计算
  3. mybatis入门-新手注意问题
  4. KVM虚拟化查看虚拟机IP
  5. Mongdb中常用的数据清洗
  6. 【PostgreSQL-9.6.3】进程及体系结构
  7. 电子合同助力企业实现全程无纸化闭环
  8. Word2016如何插入公式?Word2016插入公式方法
  9. kali通过msf利用永恒之蓝攻击服务器
  10. 第一周挑战2:税后工资计算器
  11. oracle创建完成 sys密码怎么修改,如何重置密码 oracle sys和system
  12. 免费开源的工程师项目管理系统
  13. 微信小程序使用template标签实现五星评分
  14. 机器学习(四)——Adaboost算法
  15. Python在振动信号处理中的应用(五):振动加速度信号转换为速度或位移信号
  16. 上饶服务器租用 游戏服务器如何选择?
  17. 【Linux】快捷键
  18. 编写程序计算长方体的体积python_【自学编程】C语言编程简单的小程序,计算长方体体积!...
  19. Android 边边角角
  20. 苹果工具条_苹果提前推送首个 IOS 13 公测版| 附描述文件

热门文章

  1. python flask 实现电脑屏幕实时共享
  2. ignite php,apache ignite系列(九):ignite调优
  3. 圆锥形怎么画_圆锥展开图怎么画(多图)
  4. 72分落户!2019年上海研究生户口标准公布!
  5. 在线平台制作App要如何实现后台管理系统
  6. obj文件批量格式转换(glb/gltf)与压缩
  7. html中视频的封面+ueditor的视频封面
  8. linux只读文件修改无法退出
  9. 【MyBatis】分页插件pageHelper的简单使用
  10. pageHelper分页查询pageNo大于最大页数及小于一返回数据