慢速硬盘如何处理快速下载工作负载

how can slow hard drive handle fast download workloads

我从未尝试过这个,但这是我想知道的事情。 如果我使用非常快的 links(1 Gbps 甚至 10 Gbps)下载一个非常大的文件(比如 200 GB),那么 SO(或任何执行此操作的人)如何同时将下载的文件写入磁盘,因为与我的 link 速度相比,磁盘的写入速度非常慢? 在这种情况下,硬盘驱动器会成为瓶颈吗? 如果我在我的 PC 中 运行 iostat,它显示 1027 KBps ~ 1 MBps 写入速度,与之前所述的 link 相比非常慢。

是的,根据您的硬件,从传入 link 到您的硬盘驱动器,几乎任何硬件链的部分都可能成为瓶颈。

如果您实际上保持下载速度快于硬盘的线性写入速度,它当然可以成为瓶颈。

但是请注意,即使是当今大多数廉价硬盘驱动器1 的线性写入速度至少为 50 MB/s,即 400 Mbps,而且通常更接近到 100 MB/s(即 800 Mbps)。在 800 Mbps 的有效写入速度下,您的驱动器应该能够跟上 saturated 1 Gbps link2,在至少大约,但肯定会落后于 10 Gbps link.

现在,您使用 iostat 测量的不是任何有用的基准 - 它告诉您在某个时间间隔内您的活动请求主机的整个正常运行时间的实际吞吐量:除非正在做在间隔期间进行大量传输,那里报告的速度与您的实际磁盘写入速度关系不大。有很多基准测试工具可以直接测量您的读写速度。

最后要记住的是,大多数现代操作系统都使用 "write-back" 存储写入策略 - 写入首先发送到 RAM(即 Windows 上的文件缓存或Linux 上的页面缓存),然后异步流出到磁盘。这有助于为相对较短的突发写入隐藏实际磁盘的吞吐量。例如,如果写入是几百 MB 或几 GB3,您的磁盘可能看起来具有 5 GB/s 或更高的吞吐量,但随后将接近随着它们变大,真正的磁盘速度,因为 OS 磁盘缓存的缓冲能力将耗尽。显然对于 200 GB 的传输,磁盘缓存将无法隐藏磁盘速度,除非您有 100 GB 的 RAM。

综上所述,是的,您的硬盘肯定会成为瓶颈, 但可能比您使用 iostat.

测量的吞吐量更高

1 这种 线性 读写速度的增加主要是增加 areal density 存储的产物,这直接转化为在相同 RPM 下增加的 线性 read/write 速度。然而,Randomread/write没有这样的关系。合理容量的 SSD 通常会增加另一个数量级,达到大约 1 GB/s (8 Gbps) 或更多。

2 主要是因为这些网络 links 有开销,对于快速 links 通常会将实际负载减少到理论负载的 80% 以下link速度。

3 具体值取决于您的总 RAM、可用 RAM 和 OS 配置。