前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows开机过程和测试方法探索

Windows开机过程和测试方法探索

作者头像
腾讯移动品质中心TMQ
发布2018-02-06 17:37:55
2.3K0
发布2018-02-06 17:37:55
举报

用户会经常抱怨自从安装自己的应用后,电脑开机变慢,到底是系统的原因还是应用的原因,为了了解这里的问题,探秘了下windows的开机过程和测试方法。

一、开机过程是怎样的

查看MSDN,微软将开机过程分为四个阶段

1BIOS初始化阶段

按上电源后,BIOS先进行硬件自检(POST),当检测到合法的操作系统分区,则完成硬件自检。读取MBR(主引导记录 Master boot record),启动Bootmgr.exe(Windows Bootmgr),并调用WinLoad.exe(Windows operating system loader),进入到osloader阶段。

其中Bootmgr.exe winload.exe是win7之后操作系统定义系统启动过程的组件。

2OSLoader阶段

WinLoad.exe加载必要的系统驱动,当windows内核可执行时,则完成系统驱动的加载。这个阶段的驱动都是BOOT_START类型的(驱动的starttype是0)

3MainPathBoot阶段

系统启动大部分工作集中在这个阶段。又将其细分为PreSMSS SMSSInit WinLogonInit Explorerinit 四个子阶段

  • PreSMSS

WinLoad.exe调用内核,初始化内核,启动 PnP 管理器检查设备,加载并初始化设备驱动程序

  • SMSSInit

这个阶段是控制权从内核阶段移交给Smss.exe(session manager 进程),主要初始化视频驱动并启动子系统的Smss.exe, Csrss.exe, Wininit.exe, Winlogon.exe。

  • WinLogonInit

SCM启动自启动服务的工作在此阶段,登录界面出现,WinlogonInit结束后,桌面进程(Explorer)启动。

  • Explorerinit

创建桌面窗口管理器,初始化桌面,桌面首次出现,服务和应用程序都在这个阶段启动,是 CPU密集型阶段。

4PostBoot阶段

用户可以与桌面进行交互,但系统仍然可能在启动服务,如托盘图标或应用程序在后台的代码等。这个阶段终止于系统合理的idle时间。其中Xbootmgr 它会每隔 100ms 去检测系统,如果系统 80%以上的时间是空闲的,则认为系统启动完成,并且该阶段会累积10秒的空闲时间才会结束(这就是为什么开机到完成时间需要调整减 10s)。

二、如何获取开机过程的数据

使用微软提供Xbootmgr来trace获取开机过程的数据。

1安装工具

直接到微软MSDN去查找WPT,下载和安装。

2环境的准备

不同的环境会影响开机时间,其中受影响主要以下几个方面:

  • bootprefetcher(开机预取)

见后面的预取说明,建议机器硬件配置是2G以上内存的,开启预取

  • networkconnections(网络的连接)

建议断网测试,屏蔽网络连接

  • log-onprocess(登录过程)

建议使用admin账号,不要用域账号,自动登录

  • user interactions(用户的交互)

trace数据过程中不要进行操作

3基准版本

为了对比开机过程,基准系统是很重要,所以测试影响开机启动时间时,先跑干净环境,获取基准数据。如下图:微软不同硬件配置开机时间。线下自己验证基准系统的时间是20S

配置同下面表中第三个。

4使用并抓取开机过程数据

1)使用UI界面抓取,如下图,选择boot,勾选事件,点击start即可

2)使用命令行

xbootmgr-trace boot -numRuns 3 -resultPath %systemdrive%\traces -postBootDelay 180-traceFlags latency+dispatcher -stackWalk Profile+CSwitch+ReadyThread–prepsystem

  • 其中-numRuns 测试次数,-resultPath 结果etl保存路径;
  • –postBootDelay每次测试时间间隔(微软建议时间间隔是180S);
  • -prepsystem使用预取功能(重启6次后,完成开机的预取之后的数据才稳定)。
  • 预取功能是优化预读文件,提高系统开关机速度。默认win7之后的OS预取都是开启的,查看注册表system下EnableSuperfetch 和EnablePrefetcher ,如果设置为"0",不使用预读功能;设置为"1",系统将只预读应用程序; 设置为"2",系统将只预读Windows系统文件;设置为"3",系统将预读Windows系统文件和应用程序(默认值)。这些预取文件保存在C:\Windows\Prefetch。
  • 对比使用预取和未使用数据有差别

三、分析开机过程

1将抓取的etl转成xml格式

可明确看到各个阶段的耗时

xperf -i boot_1.etl -o Summary.xml -a boot

1)其中-i对应etl的名字,-o输出xml的名字

2打开对应的xml,大致分析各个阶段的耗时

1)所有时间单位是msec(毫秒)

2)字段解析

  • bootDoneViaExplorer:开机到桌面的时间
  • bootDoneViaPostBoot:开机完成的时间,需要减去10S(见上面的说明)
  • osLoaderDuration:osLoader阶段的耗时
  • <interval>下是各个阶段的耗时,例如preSMSS的durantion是3672ms。其中TraceTail是开机完成后,trace数据的时间,一般忽略。
  • 如果觉得哪个阶段的耗时增加,可展开对应的节点。
  • 大家可能疑问这里为什么没有BIOS初始化阶段,主要由于这个阶段xbootmgr是从osloader阶段获取相应的etw事件,所以bios阶段时间无法获取。

3分阶段分析开机过程的时间消耗是否合理

1)osLoader阶段影响点:

这个阶段可能导致的性能瓶颈是驱动签名的验证。驱动有两个签名的方式(catalog signing 和 embeddedsigning),而catalogsiging的方式,经过验证delay osLoader阶段1到3S,所以建议这个阶段的系统驱动都是embedded signing。验证方法如下:

  • xperf -i trace.etl -o trace.txt-a dumper

findstr /C:"I-DCStart" trace.txt 如下就是在osloader阶段的驱动

  • 使用微软的签名工具验证signtool verify /v driver.sys

2)PreSMSS阶段影响点

这个阶段主要影响点是PNP设备,因实际的产品没有新增PNP,无案例。可参考看PNP各个阶段的耗时

3)SMSSInit阶段的影响点

此阶段受视频驱动的影响,所以将视频驱动更新到最新版本。可提高开机速度。实际产品也没有涉及到这个点,无案例。

4)WinLogonInit阶段的影响点

此阶段CPU和IO都是需求很大,主要查看自启动服务的耗时是否影响。其中totalTransitionTimeDelta服务的延时时间

5)Explorerinit和PostBoot阶段的影响点

此阶段会受自启动有应用和服务的影响,可配合WPA工具查看

  • 用wpa工具打开etl,如下图。配合BootPhases可查看各个阶段启动的exe和服务的耗时、CPU、IO等。具体见以后案例

四、开机性能测试建议

1方法

1)一般判断应用是否影响到开机时间,可先跑无应用系统与有应用的系统

2)对比两者数据的差别,判断出问题的阶段

3)针对有问题的阶段配合WPA工具查看具体驱动或服务是否合理,开机完成后

应用程序自启动的逻辑是否影响到开机后的操作。

2微软开机性能tips,结合日常设计驱动、服务、应用程序注意点

1)服务

【开发设计原则】:

除非有必要,尽量不要设计开机启动服务,服务尽量按需启动或触发启动;

服务不要设计加载顺序;

服务运行时尽可能及时报告当前状态;

服务启动代码避免用托管代码(CLR);

【性能点】:

是否开机启动服务,评估开机服务会增加多少开机时间

2)驱动

【开发设计原则】:

驱动尽量用WDF编写;

开机启动驱动签名是Embedded_sign;

除非有必要,尽量不要设计开机启动驱动;

非内核驱动,初始化IRPs,返回STATUS_PENDING;

驱动的配置信息放在注册表的system下,会比放在software下节省开机时间

控制驱动文件的大小

【性能点】:

是否是开机驱动,会增加多少开机时间

3)应用程序

【开发设计原则】:

自启动应用,应减少对开机资源的消耗(规范其启动后对于DISK和CPU的占用);

应用程序的启动代码避免用托管代码(CLR);

自启动注册表不要用RunOnce;

【性能点】:

是否开机启动应用,开机启动应用增加多少开机时间

参考的文档:http://www.microsoft.com/whdc/system/pnppwr/powermgmt/OnOffTrans.mspx

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯移动品质中心TMQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档