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

    xiaoxiao2021-08-29  113

    用户会经常抱怨自从安装自己的应用后,电脑开机变慢,到底是系统的原因还是应用的原因,为了了解这里的问题,探秘了下windows的开机过程和测试方法。 一、开机过程是怎样的 查看MSDN,微软将开机过程分为四个阶段:

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

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

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

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

    1)PreSMSS

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

    2)SMSSInit

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

    3)WinLogonInit

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

    4)Explorerinit

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

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

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

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

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

    1)bootprefetcher(开机预取)

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

    2)networkconnections(网络的连接)

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

    3)log-onprocess(登录过程)

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

    4)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阶段的耗时 下是各个阶段的耗时,例如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

    原文链接:http://tmq.qq.com/2016/11/windows_boot_explore/

    关注我们的微信公众号查看完整内容哦~~~~

    想知道更多测试相关干货 请关注我们的微信公众号:腾讯移动品质中心TMQ 二维码:

    版权声明:腾讯TMQ拥有内容的全部版权,任何人或单位对本贴内容进行复制、转载时请申明原创腾讯tmq,否则将追究法律责任。

    转载请注明原文地址: https://ju.6miu.com/read-677318.html

    最新回复(0)