迅雷X的“快速申请磁盘空间”是什么原理?

2019年08月06日 19:05| 43,594 次浏览| 发布者 强伊文| 56 评论

针对许多用户反馈创建文件较大的下载任务时,可能出现磁盘繁忙的问题。迅雷X10.1.16版本提供了“快速申请磁盘空间”的新方式,可以避免因为申请磁盘空间造成的“磁盘繁忙”。

这个功能推出后,引起了部分用户的好奇,想要更深入的了解这个功能。那我们得从微软推出Windows Vista引起的一个“问题”说起。

问题起因:

2006年11月,Windows Vista 发布,随之带来了“用户帐户控制功能(User Account Control,简称UAC)”

UAC功能对磁盘的权限控制给当时的迅雷带来了一个大麻烦。

没有管理员权限的情况下,申请磁盘空间并进行随机写入时,会触发Windows对所申请的磁盘空间进行初始化操作。

Windows之所以作出这个限制,可能是因为Windows的文件系统在删除文件时,并没有真的将磁盘上的文件数据擦除,而是给数据加上“已删除”标记了事。

但是Windows担心未经用户授权的程序访问到磁盘上被标记为“已删除”的内容,所以增加了初始化环节,其实就是擦除磁盘上标记为“已删除”的数据。

这个擦除过程就是把磁盘上对应的区块给写成零。写零这个过程就跟往磁盘里写数据一样,磁盘的写入性能决定了写零的速度。

比如迅雷要下载一个1000MB的文件,那么Windows就会初始化1000MB的磁盘空间,磁盘的写入性能是100MB/s,那么可知Windows对磁盘完成初始化需要10秒。

这10秒内,磁盘的写入性能将会100%被占用,导致磁盘繁忙,电脑卡顿。而且此时迅雷是无法向磁盘的这个区块写入任何数据的,也就导致迅雷没有任何下载速度。

解决这个问题的关键点,就是要找出一种方法,让迅雷申请磁盘空间时具有管理员权限。

解决方案A:

迅雷为了解决这个问题,首先想到的解决方案是每次启动迅雷都申请管理员权限。

UAC提示框

但是,让用户每次启动迅雷都弹一个UAC的提示框,体验实在太差。何况很多用户启动迅雷只是为了打开下载好的文件,并不进行下载。这种死板的做法就被否了。

解决方案B:

这时,我们有个比较熟悉Windows的开发想到,Windows的系统服务是可以直接获得管理员权限的,迅雷创建一个系统服务,专门用来帮忙申请磁盘空间不就好了吗?

于是迅雷就开发了“XLServicePlatform”服务,当迅雷需要申请大于100MB的磁盘空间时,就通过这个服务进行申请。

这样一来,就在不弹出UAC提示框的前提下,把问题解决了。

问题再现:

但是最近这段时间,我们发现越来越多的用户反映,用迅雷下载大文件的时候“电脑很卡、没速度、磁盘繁忙”等问题。

经过跟许多用户远程协助发现,他们的“XLServicePlatform”服务都被停止了。于是迅雷无法通过服务申请磁盘空间,导致下载大文件时,需要等待Windows初始化磁盘。

奇怪的是,用户都说自己没有手动停止过这个服务。

后来我们发现,这些用户都安装了“系统安全优化”类软件,经过我们测试发现,部分软件的“一键加速”功能会建议用户关闭“迅雷基础服务”,其实就是把“XLServicePlatform”服务停止了。。。

解决方案C:

既然很多用户的XLServicePlatform服务会被停止,那么迅雷就需要一个服务不能正常运行时的备份方案。

这个方案就是10.1.16版本上新增的“快速申请磁盘空间助手”功能,它的原理很简单,就是个独立的进程,在迅雷需要时启动它申请管理员权限,然后帮迅雷申请磁盘空间。

迅雷启动时,检测到自身不具有管理员权限,且XLServicePlatform服务没有正常运行,即判断当前需要“快速申请磁盘空间助手”帮助申请磁盘空间。但是此时并不会立刻弹出UAC提示框。

而是当迅雷需要下载大于100MB的文件时,先询问用户选择哪种申请磁盘空间的方式。

如果用户选择“快速方式”,这时才会拉起“快速申请磁盘空间助手”进程申请管理员权限(此时会弹一次UAC提示框),然后再由它帮迅雷申请磁盘空间。

这个方式虽然要弹一次UAC提示框,但是总好过方案A那种每次启动迅雷都弹,而且作为方案B的备用方案,用户体验也不算太糟糕。

要想下载速度快,请避免使用国外的公共DNS服务!

2019年06月19日 16:31| 20,222 次浏览| 发布者 强伊文| 9 评论

关注迅雷更新信息的雷友应该知道,迅雷X 10.1.15版本提供了“下载诊断工具”,通过这个工具,能够全面的诊断用户当前网络环境内,存在哪些影响迅雷正常工作的问题。

image

在我们发布这个工具一周多以来,已经收到了很多下载速度慢,无法下载任何文件的用户反馈。

从诊断结果来看,大部分的用户都是因为“普通任务信息、BT任务信息、eMule任务信息”查询失败造成的。

为此伊文联系了多个反馈此类问题的用户,通过远程协助的手段,找到了问题的共同原因:

“国外的公共DNS服务会把迅雷的任务信息查询请求,统一指向迅雷的中国联通机房”

例如:

GoogleDNS:8.8.8.8 · 8.8.4.4

OpenDNS:208.67.222.222 · 208.67.220.220

(其实伊文之前对这些国外的公共DNS也是很有好感的。他们的速度虽然不是最快的,但是至少不用担心他们搞DNS劫持之类的小动作)

为什么会导致迅雷下载速度慢,甚至无法下载任何文件呢?

我们目前了解到的情况是这样的:

1、用户使用中国移动的宽带,由于中国移动的宽带,跨网访问迅雷的中国联通机房的可靠性比较糟糕,导致任务信息查询失败。。。任务信息查询失败,就无法通过镜像资源进行下载加速。

2、用户使用中国电信的宽带,虽然电信和联通之间的跨网访问可靠性问题不大,但是通过迅雷的中国联通机房查询到的镜像资源,都是联通网络内的镜像资源。。。电信网络的用户很难连上联通网络内的镜像资源,就算连上了速度也慢很多。因此通过镜像资源进行下载加速的效果很差。

所以伊文建议各位正在使用“中国移动、中国电信”以及其它“非中国联通”宽带网络的雷友,要想下载速度快,请避免使用国外的公共DNS服务。

伊文也测试了多个国内的公共DNS服务,发现阿里公共DNS:223.5.5.5 · 223.6.6.6的可靠性和响应速度都是很不错的。推荐喜欢手动设置DNS服务的用户使用。

“下载速度变慢、卡99%、电脑变卡”竟然是因为它!

2019年01月11日 10:26| 2,774,981 次浏览| 发布者 强伊文| 940 评论

前言:

随着我国民用光纤宽带的普及,大家使用的网络带宽也越来越大。曾经以为家里有100M的宽带已经快上天了!但是现在许多雷友家里用上了500M~1000M的宽带也并不稀奇。

可是在更大的带宽给我们带来更快下载速度的同时,也给下载带来了新的问题:许多电脑的”磁盘读写性能”跟不上了,尤其是使用机械硬盘的电脑!

当下载速度非常快的时候,使用机械硬盘的电脑更容易因为磁盘过于繁忙发生下列问题:

  • 下载速度突然变慢
  • 电脑响应变慢
  • 下载进度卡在99.9%

当这些问题发生时,您只需要耐心等待磁盘完成数据写入即可。

但是这到底是怎么回事呢?

下载速度突然变慢:

当迅雷在下载文件时,为了避免频繁的往磁盘中写入数据,引发磁盘读写性能下降。因此迅雷的下载引擎会先将下载得到的数据保存到电脑的内存里。待积攒到足够多的数据后,再一起写入磁盘。这就是迅雷下载引擎的”磁盘缓存”功能。

“磁盘缓存”就像一个水池,下载数据就是在向池内注水,而将数据写入磁盘则是把水池内的水放掉。

一直以来,由于通过网络下载数据的速度比数据写入磁盘的速度慢,所以可以确保这个池子里的水不会溢出。但是假如池水溢出了,就会造成问题。体现在迅雷的下载引擎上,就会造成程序崩溃等异常。

近年来随着网络带宽的增加,已经开始出现下载数据的速度比数据写入磁盘速度更快的情况。

此时如果不对下载数据的速度做任何限制,水池里的水是注定要溢出的。

我们都不希望迅雷的下载引擎发生崩溃,因此当迅雷的下载引擎发现,磁盘缓存已经快要满出来的时候,就会自动降低下载数据的速度。让已下载的数据尽快写入磁盘,等腾出足够的缓存空间后,再恢复原来的下载速度。

如果你的电脑正在使用机械硬盘,并且在高速下载时,出现下载速度突然变慢的情况。很可能就是这个原因。

电脑响应变慢:

要深入了解这个问题,我们必须从”机械硬盘”的”先天缺陷”说起。让我们先看一张机械硬盘拆解图。

“机械硬盘”在进行数据读写操作时,上图中的”音圈马达”会转动”磁头摆臂”,使位于摆臂尖端的”磁头”在距离”磁盘”表面约1纳米的高度高速飞行,从而在”磁盘”上读写数据。

看似光洁如镜的磁盘表面,实际上是由环环相扣的”磁道”所组成的。当需要读写的数据存放在磁盘的不同”磁道”时,磁头摆臂会在磁盘上来回摆动,使”磁头”飞到存放对应数据的磁道上空,这个动作被称为”寻道”。

由于磁头摆臂是由音圈马达控制的纯机械结构,从发出指令,到摆臂完成寻道的响应时间约10毫秒。相比之下机械硬盘的磁头读写当前位置数据的时间,仅为寻道时间0.1%!因此频繁的寻道操作将会拖慢机械硬盘的响应速度。

这个”先天缺陷”造就了机械硬盘的一大特点【“随机读写”“顺序读写”慢很多】

比如顺序读写时,速度可能达到100MB/s,但是随机读写时,可能只有500KB/s,仅为顺序读写时的0.5%!

理想状态下,当迅雷正在高速下载数据时,机械硬盘会全力工作,努力将迅雷下载的数据写入磁盘中。但实际上电脑中并非只有迅雷一个软件在运行。包括操作系统在内的其它软件也会产生读写磁盘的需求。而其它软件要读写的磁盘数据,往往处于其它磁道上,这就会频繁的触发机械硬盘的”寻道”操作。

如此一来,机械硬盘就掉进了“随机读写”的泥潭中,不但会使迅雷写入数据的速度变慢,也会造成用户在操作电脑上的其他软件时,整体响应速度变慢。

下载进度卡在99.9%

许多雷友并不知道,迅雷其实会在下载数据的过程中,实时对下载到的数据进行校验,避免下载到错误数据。而校验数据的过程是需要一定时间才能完成的,好在大多数情况下,下载数据的速度比校验数据的速度慢。所以当数据下载完成时,校验数据的过程也能同时完成。下载任务就能顺利完成。

但是当网络下载数据的速度比校验数据的速度更快时,等待校验的数据就会产生积压。下载的文件越大,下载速度越快,积压的待校验数据就会越多。

此时如果再叠加上前面两个问题,校验积压数据的速度就会变得更慢了。

当一个下载任务的文件数据已经下载完成,但还积压了大量未经校验的数据时,迅雷的下载引擎就会让任务进度停留在99.9%,直至所有下载到的数据都校验通过后,才让任务下载完成。

所以当你观察到迅雷原本有很快的下载速度,却在任务进度达到99.9%时突然没了速度,同时迅雷上出现”磁盘繁忙”的提示,那么很可能就是这个原因。

不过需要说明的是,可能导致下载进度卡在99.9%的原因还有很多,这只是其中的一种原因。

结语:

大家了解到这些问题的成因之后,应该不难发现”机械硬盘”已经成为电脑整体性能的瓶颈。纵使你的电脑CPU再快,内存再大,网速再高。最终都会被”机械硬盘”所拖累。

好在近期固态硬盘的价格一直在下降,正在逐渐接近1元/G,性价比越来越突出,希望各位仍在使用机械硬盘的雷友,能够早日换上固态硬盘,就能大幅降低“磁盘繁忙”发生的几率!

补充说明:

注意到部分雷友将新版迅雷X上出现的“磁盘繁忙”提示,误解为新版本迅雷X做了某种限制,特此加以说明:

迅雷X是通过Windows的任务管理器获取的“磁盘活动时间”,通过这个参数可以准确的衡量磁盘的繁忙程度。

连续3秒磁盘活动时间超过90%,迅雷X就会提示磁盘繁忙。

您在使用以往版本的过程中也会遇到磁盘繁忙导致的问题,由于以往版本中缺乏说明,使您不一定能够察觉到问题发生。

迅雷X出现的“磁盘繁忙”提示,只是如实反映了磁盘的当前状态,并对可能发生的问题加以说明,并非新版迅雷X做了某种限制。

2019-4-19更新补充说明:

看了许多用户的评论,都提出了同一个问题“为什么迅雷比其它下载工具的磁盘性能占用更高?”

这是个很好的问题,尽管解释起来可能会稍微有点复杂。

首先,我们要知道,所有的数据传输过程都是不一定可靠的,为了确保数据接收方得到准确的数据,都会设计“数据校验”的机制。

因此所有的下载协议,包括但不限于“迅雷P2SP、BT、电驴”等等都有“数据校验”机制。

这些下载协议的数据校验过程都差不多,都是把每个文件分为N个文件块,然后计算出每块文件的特征值进行比较,每块文件的特征值一致,就认为接收到的数据是正确的,不一致就是错误的。读取文件计算特征值的过程就会占用磁盘性能。这是背景。

迅雷的下载速度之所以比其它下载工具更快,主要是因为迅雷实现了“多协议融合下载加速”,也就是说当你使用迅雷下载一个文件时,迅雷会同时通过“迅雷P2SP、BT、电驴”等多个下载协议,同时下载数据,从而获得比单一协议下载工具更快的下载速度。

这样做就相当于同时运行三个下载工具,去下载同一个文件。虽然下载速度更快了,但是也会因为需要同时校验三种下载协议的数据,使得磁盘性能占用大幅增加。

所以大家拿“浏览器下载、百度网盘、Steam、uTorrent”等等单一协议下载方式来跟迅雷做比较,是不合适的。

为什么迅雷限制不住上传速度?

2018年01月08日 19:04| 326,861 次浏览| 发布者 强伊文| 84 评论

自从伊文转行去做产品策划之后,好久没在阳台上写点什么了。恰逢临近年关手上的事情少了许多,就寻思着回到阳台再给大家写点有价值的东西。

就在刚才,伊文在微博上看到这么一条吐槽。

这位雷友将迅雷的上传速度限制为 33KB/s,但是左侧显示的“当前上传速度”为 213.44KB/s,于是他吐槽说“迅雷太坑人”。

Snipaste_2018-01-08_16-50-07

其实不少雷友,也对迅雷有着“限制不住上传”的传统印象,但实际上这是产品交互设计上的不足导致的误解。

为什么说是误解?

首先我们得从基础的下载原理说起。

我们都知道,下载是个接收信息的过程,而上传是个发送信息的过程。

如果做个拟人化的比喻,下载就是用耳朵听,上传则是用嘴巴说。

现在,假设A要给B念一句诗“苟利国家生死以”。

我们把A给B念这句诗的过程,想象成下载一个文件,这个过程是这样的。。。

A:“我要念诗了,你听到了吗?”

B:“我听到了,这句诗有几个字?”

A:“有7个字,你听到了吗?”

B:“我听到了,你念吧”

A:“第1个字 苟 你听到了吗?”

B:“我听到第1个字了”

A:“第2个字 利 你听到了吗?”

B:“我听到第2个字了”

A:“第3个字 国 你听到了吗?”

B:“我听到第3个字了”

A:“第4个字 家 你听到了吗?”

B:“我听到第4个字了”

A:“第5个字 生 你听到了吗?”

B:“我听到第5个字了”

A:“第6个字 死 你听到了吗?”

B:“我听到第6个字了”

A:“第7个字 以 你听到了吗?”

(A等了5秒还没收到B的回应,于是重复了一遍)

A:“第7个字 以 你听到了吗?”

B:“我听到第7个字了”

(你一定在想,为什么要这么麻烦呢?这是因为网络的可靠性并不总是很好,偶尔会发生A说了某句话,B没有听到的情况。这样虽然麻烦,却能避免信息在传输过程中丢失。)

由此可见,下载一个文件的过程,实际上是个对话过程。B在听到一个字之后,必须要说“我听到了”,A才会说出下一个字,并非简单的A说B听。

在这个对话过程中,“苟利国家生死以”这7个字是要传输的“文件数据”,除此以外的对话内容,我们可以称为“协议通讯”。

当你了解基本原理之后,你应该能够理解。下载文件数据的过程,必然会产生用于“协议通讯”的上传流量。下载速度越快,协议通讯产生的上传速度也越快。

这一原理,对于所有下载行为都是适用的。包括我们通过局域网复制文件时,也会观察到大量的上传。

Snipaste_2018-01-09_13-28-45

现在我们回头来看看吐槽的这位雷友,他虽然限制上传速度为 33KB/s,但是他同时在以5.55MB/s的高速进行下载,协议通讯肯定会产生不小的上传速度。

50d148f9gy1fms54cwjg5j21kw16o7wm

还记得我前面说过“这是产品交互设计上的不足导致的误解”吗?

这个不足就在于迅雷显示的“当前上传速度”是包含了“协议通讯”产生的上传速度的。

而限制上传速度的选项,只限制了上传“文件数据”的速度,不限制“协议通讯”的上传速度。

因为限制了“协议通讯”的上传速度,就会严重拖慢下载速度。

这才造成了“迅雷限制不住上传速度”的问题。

所以,在未来的迅雷版本中,我们会将协议通讯产生的上传速度单独展示并加以说明。

希望各位雷友能够理解,迅雷真的不是要坑你。。。

磁链解析好像有点不对劲!

2016年11月24日 18:44| 151,933 次浏览| 发布者 强伊文| 31 评论

  不知道最近大家使用迅雷下载磁力链接时,有没有注意到磁链解析的“速度”和“成功率”都高了许多?这是因为某些同学对磁链解析的代码进行重构优化。不能说更多,大家闷声体验就好。

image