为什么wget挂钟时间比下载时间长得多?

时间:2019-06-17 20:51:24

标签: linux performance shell wget

wget --page-requisites --span-hosts --convert-links --adjust-extension --execute robots=off --user-agent Mozilla --random-wait https://www.invisionapp.com/inside-design/essential-steps-designing-empathy/

上面的命令提供以下时间统计信息:

Total wall clock time: 35s
Downloaded: 248 files, 39M in 4.2s (9.36 MB/s)

此网站大约需要5秒钟来下载并显示所有文件,并通过浏览器进行强制刷新。

为什么挂钟时间比下载时间长得多,并且有办法使其更快?

我希望运行wget command的时间与浏览器请求文件的时间大致相同。如果total_download_time代表下载文件所花费的总时间,那么这与浏览器的速度理想相匹配,但是wall_clock - total_download_time = 35s - 4.2s = 30.8s似乎花了太多时间将累积大小为248 files的{​​{1}}写入磁盘。我也尝试过删除39M并将w --convert-links添加到wget命令中,并在终端中运行--no-clobber(或您想要的流程实例数量wget_command & wget_command)来生成多个并行处理下载的过程,这将更紧密地模拟浏览器如何请求文件,但不会成功。

1 个答案:

答案 0 :(得分:1)

wget的源镜像在github上。

printfhere

wall_clock使用ptimer_*库,该库由wget实现。向下滚动宏,我猜想在Linux系统上它使用clock_gettimeCLOCK_MONOTONIC来测量时间。然后计算差异start_timeend_timewall_timeCLOCK_MONOTONIC是一个单调时钟,因此它表示作业实际花费了多少时间。

total_download_time按协议递增,例如。对于ftp是here。然后,我们转到fd_read_body,并使用double *elapsed库再次here更新ptimer_*,在该库中,在函数条目here附近初始化了计时器。猜测函数does是什么,total_download_time可能仅表示下载文件所花费的时间,即。等待I / O操作完成。

您的浏览器速度更快,因为它同时下载数据并且不会(那么多)写入磁盘。 wget当前不支持并行下载。