Win7启动速度研究,同样的PC配置,机械盘、固态盘、无盘网络启动速度为何不同? By 死性不改
一、环境:
一台台式机(映泰B85、i5-4590、16G内存、三星、Intel固态盘、Realtek网卡);
一台笔记本(T440P、8G内存、三星、Intel固态盘、Intel I217-LM网卡);
一个8口TP-LINK塑料外壳千兆交换机;
网维大师无盘2250版本;
二、起因:
1、系统问题反馈群里的凌风同学纠结本站提供的14Q4和15Q3启动速度有差别,14Q4的花瓣界面比15Q3的时间短大概2秒,我们很好奇为什么;
2、同样一台PC机,配置固定,BIOS版本及设置固定,为什么机械盘、固态盘、无盘启动的速度不同呢?
3、以上2个问题的延伸段,到底慢在哪里呢?
三、工具:
带着这些疑问,我在Windows ADK中找到了微软自家性能分析工具Windows性能分析器(Windows Performance Toolkit,简称WPT),之所以能知道这个工具,是因为做Win2012、Win10 GHOST系统时,需要使用Windows ADK……
Windows ADK下载器下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=30652
该ADK支持:Windows 7, Windows 8, Windows Server 2008 R2, Windows Server 2008 R2 SP1, Windows Server 2012, Windows Vista
由于微软没提供adk的ISO,所以只能用下载器下载,你安装时,可以只选择下图的工具下载安装,这样速度会快一点;
四、原理(知识有限,可能有误,欢迎大家指正):
以下中文内容主要来自以下2个网站,然后根据自己的理解又修改了一些,感谢分享这些内容的同学们;
http://blogs.technet.com/b/thoughts_on_platform/archive/2012/08/06/die-windows-startphasen.aspx
http://coregear.lofter.com/post/118e1a_2f1ecf
http://www.techsupportalert.com/content/windows-7-startup.htm(非常完整详细)
0、BIOS 阶段
按下开机按钮,BIOS进行自检并加载BIOS设置,这个引导过程结束时,会检测到一个有效的系统盘才能继续启动。
如果BIOS设置为有盘启动:BIOS嵌入式启动程序读取MBR主引导记录,DPT分区表,PBR分区引导记录,然后找到并启动Bootmgr启动管理器,Bootmgr读取BCD启动配置数据,然后根据BCD启动配置数据找到Winload.exe并启动它,然后由Winload.exe开始初始化并启动整个操作系统;
如果BIOS设置为无盘启动:PXE程序开始工作,初始化网卡,检测线路通断,DHCP获取客户机IP信息,TFTP传输无盘引导程序,然后由无盘引导程序加载Bootmgr.exe读取BCD启动配置数据,然后根据BCD启动配置数据找到 Winload.exe并启动它,然后由Winload.exe开始初始化并启动整个操作系统;
注1:不同的无盘实现原理略有差异,例如网维无盘是从服务器读取bootmgr,而其他无盘是读取img包里的bootmgr,这就是为什么其他无盘能换开机启动画面,但是网维无盘不能的原因,因为修改启动画面需要修改bootmgr……同时网维无盘的bootmgr是被修改过的,粗暴的替换可能导致无法启动……
注2:BIOS阶段的耗时WPT是捕获不到的;
微软把BIOS之后的系统启动过程分为以下5个阶段,使用Windows性能分析工具可以采集到这些信息,其实360之类的软件采集系统开机时间,也是通过这种方式实现的,根据一些资料,整理了一份启动阶段图标,从下面这张图,大概能看到启动时间消耗在什么地方;
五、WPT工具的使用:
结合以上原理,我们可以初步通过WPT性能分析工具来对比下系统启动耗时,大概慢在什么地方;
第一步:将Superfetch和计划任务服务设置为自动,cmd内运行以下代码,然后重启计算机:
Reg Add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SysMain /v Start /t REG_DWORD /d 2 /F Reg Add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Schedule /v Start /t REG_DWORD /d 2 /F
第二部:捕获系统性能日志,cmd逐行执行以下代码,代码执行完成后,系统会自动重启;
cd\ cd "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit" xbootmgr.exe -trace boot
第三步:获得etl性能日志;
系统重启开机后,会弹出一个提示,直接点Finished即可,然后按alt+f4关闭程序;
到C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit目录可以拿到捕获日志:boot_BASE+CSWITCH_1.etl文件,可以直接双击打开;
我把这个文件拷贝到桌面打开了,下图为打开后的效果:
System Activity:系统活动信息,各个启动阶段的性能信息等,非常丰富,我也只了解了一小部分;
Computation:cpu使用消耗;
Storage:磁盘使用消耗情况;
Memory:内存使用消耗情况;
六、案例分析:
当你大概会使用工具,初步了解原理后,你可以找一个快的和一个慢的系统对比原理部分将的5个环节耗时;
下面是我的笔记本作为客户机测试所得数据,左侧是SSD启动,右侧是无盘启动;
从启动的过程分解步骤来看,时间主要是消耗在了Pre Session Init和Session Init阶段,然后根据io吞吐数据来看,无盘的主要瓶颈还是在数据读取上;
ssd读取数据的峰值可以达到450M/BS以上,而千兆无盘只能在理论的125MB/S以内,同时根据无盘的网络读取性能差异,实际上也只有50MB/S左右的峰值;
当慢慢深入接触Windows之后,发现系统真的是极为复杂的一个东西,要想深入研究还是要花很多时间才行,所以这篇文章暂时就放在这里,作为一个“研究过”的记录吧!
本文作者:死性不改