本帖最后由 sairen139 于 2022-11-17 08:08 编辑
关于神奇的wimboot技术为什么不会降低性能的一个大神的阐述
WIMBOOT是 Windows8.1 Update新引进的特性。它让你的系统盘的大部分系统文件都指向一个经过特别处理的WIM文件。当系统要读取相关文件时,会直接从WIM文件读取。
Wimboot
- 中文名
映像文件启动 - 外文名
WIMBoot(Windows image file boot) - 支持的系统
Windows 8.1 Update及以上
术语解释WIMBoot是Windows image file boot的简称,其工作原理就是通过系统直接读取某个WIM映像完成整个启动过程,也就是WIM映像等同现有的系统盘,而且其体积大幅压缩。
最近一个月老在研究微软的wimboot技术,目前已知从各种网友的实验中比起正常系统来,得知vhd会降低性能,而微软神奇的wimboot技术却不会降低性能反而会提升速度。
下面是一个ramos群里的大神对wimboot这种神奇技术不会造成性能下降的原因的推断,大家可以验证辨析一下。
下面的阐述来自Ramos群的群友@monitor20:
能确定的一点是,wimboot是不需要挂载的,而是通过特定的驱动直接把访问转移到了wim文件本身,根据偏移量得到文件的访问地址。
如果wimboot的wim是在内存,就是内存的速度,如果读取的是硬盘的,就是硬盘的速度。即wimboot.wim所在介质本身决定了性能速度。
程序执行的时候,只有代码到了CPU那会儿才是一致的。程序访问,甚至推广到任何数据访问,本身都是部分读取的,而不需要先有一个完整的文件。对于CPU而言,送来啥指令,就执行啥功能,不会关心是硬盘读的,还是网络上的,硬盘上的程序只是持久化的代码合集,中间是从wim读取的,还是网络传输的,还是ntfs压缩的,这些对cpu而言是无差别的。就算硬盘直接读取的文件,也得是windows送过来的,部分解压,而不是全部解压后执行,那么对速度就没什么影响。
目前结论:wimboot不是挂载wim包里的文件出来。而且monitor20大神亲自在电脑上做了对比实验,实验发现wimboot系统的线程数和普通正常硬盘系统的线程数是几乎一致的。
现在可以找到wimboot技术是从wim包里读取数据的证据了,据ramos群友@黑中见白 提供的一款名叫龙腾缓存的工具,可以看出p驱内存盘上wimboot.wim里系统读取数据的大小。
终极原理解释:通过哈夫曼算法(一种不牺牲性能,却明显减少体积是压缩算法)的wimboot技术可以在不牺牲性能的前提下实现用占用体积更小的wimboot.wim包来取得和正常硬盘系统一样的效能!通过wimboot压缩技术以wim文件的形式存在并被读取,这是一种特殊的文件索引方式,而其他普通的文件的索引方式可以称之为指针索引方式,这是两种不一样的文件索引方式。被“wimboot.wim化”的文件,读取的时候不存在“解压缩”的过程,这种文件压缩方式跟文件被压缩成rar跟zip之类的是不一样的。因此在文件读取效率上不存在中间过程,因此可以放心地使用这一技术进行压缩。wimboot.wim包里的文件的使用是以指针分区映射到wim包里的方式运行,windows运行过程中没有解压的中间过程,而是直接读取使用wim包里的文件!
PS:关于哈夫曼编码压缩概念的基本思想?
哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。 Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。 以哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的。 例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
如果内存小而且硬盘上的系统分区要腾空间出来可用wimboot这个返璞归真的方法如下图dism++释放时☑️勾选wimboot项即可:
|