网络现在比磁盘快吗?


126

这是一个软件设计问题

我曾经为速度制定以下规则

cache memory > memory > disk > network

每个步骤是上一步的5到10倍(例如,高速缓存比主内存快10倍)。

现在,似乎千兆以太网的延迟小于本地磁盘。因此,也许读取大型远程内存数据库的操作要比本地磁盘读取的速度更快。对于像我这样的老计时器来说,这感觉像是异端。(我只是花了一些时间在磁盘上建立本地缓存,以避免必须进行网络往返-因此是我的问题)

在这个领域有人有经验/数字/建议吗?

是的,我知道找出答案的唯一真正方法是构建和衡量,但是我想知道一般规则。

编辑

这是来自最佳答案的有趣数据:

  • 同一数据中心内的往返行程500,000 ns

  • 磁盘搜寻10,000,000 ns

这让我震惊。我的思维模型是网络往返本来就很慢。而且它不是-它比磁盘“往返”快10倍。

杰夫·阿特伍德(Jeff attwood)在主题http://blog.codinghorror.com/the-infinite-space-between-words/上发布了此v好博客


11
有时是,有时不是。什么网络?什么磁盘?
约翰·加迪尼尔

1
最佳答案中的其他有趣数据:从网络与磁盘顺序读取1 MB。我怀疑“往返”时间会忽略任何重要的数据传输。
保罗

保罗:可以,取决于您的MTU。(1MB MTU?太棒了!)
Matt Simmons

考虑到10Gbps网络设备的广泛普及,我希望重新考虑其中的一些答案。
小鸡

千兆网络与突袭5?
SoilSciGuy

Answers:


137

以下是Google研究员Jeff Dean引用的您可能正在寻找的一些数字:

每个人都应该知道的数字

L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                            100 ns (25)
Main memory reference                        100 ns
Compress 1K bytes with Zippy              10,000 ns (3,000)
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from network   10,000,000 ns
Read 1 MB sequentially from disk      30,000,000 ns (20,000,000)
Send packet CA->Netherlands->CA      150,000,000 ns

摘自他的演讲,题为《构建大型分布式系统的设计,教训和建议》,您可以在这里获得:

该演讲是在2009年大型分布式系统和中间件(LADIS)上进行的

其他资讯


据说 gcc -O4将您的代码通过电子邮件发送给Jeff Dean进行重写。



+1非常有趣!
2011年

1
某些演示文稿的括号中显示了不同的值。我认为括号中的错误,他更新了值。
David d C e Freitas

1
这是所有前SSD时代吗?有关更多最新数字,请参见此处
马特

我实际上是使用这些数字来构建演示文稿,以显示SSD驱动器为何要自己付费,以说服我们的办公室经理,是的,我们需要更快的机器来工作。包括了技术信息的编号,但尽可能将其用于非技术管理。
brichins

19

当涉及网络与磁盘时,有很多变量,但是通常,磁盘速度更快。

SATA 3.0和SAS总线为6 Gbps,而网络为1 Gbps减去协议开销。借助RAID-10 15k SAS,网络似乎变得很慢。此外,您还具有磁盘高速缓存以及固态硬盘驱动器的可能性,根据情况,这也可以提高速度。随机数据访问与顺序数据访问以及传输数据的块大小均是一个因素。所有这些都取决于用于访问磁盘的应用程序。

现在,我什至还没有碰到这样一个事实,无论您通过网络传输的是什么,无论如何都会去到磁盘或来自磁盘...如此……再一次,磁盘速度更快。


1
提及RAID的要点是可以并行读取,这是您不太可能很快在网络上获得的。当然,如果我们谈论的是本地笔记本电脑硬盘驱动器,那么快速SAN和快速网络的结合可能会更快。特别是该SAN中的SSD。
迈克尔·狄龙

10
网络本质上是可并行化的-您在说什么?汇总读取网络上的多个系统非常简单。这就是Hadoop和MPI等系统背后的全部要点,更不用说显而易见的BitTorrent了。
jgoldschrafe 2011年

2
使用SONET / SDH,您可以拥有比SAS还要快的38Gbps。网络聚合可以通过en.wikipedia.org/wiki/Link_aggregation之
Mircea Vutcovici 2011年

10
@Jake在谈论6 Gbps时,您可能希望在接口带宽和磁盘实际提供数据的速率之间进行明确区分。
NPE

4
我确实在说我的问题时说的是,与本地磁盘缓存相比,我所说的是内存数据库中的远程数据库
pm100 2011年

10

好吧,这取决于网络资源是否具有您所请求的随时可用的数据(在内存中或类似数据中),或者仅仅是从磁盘读取数据。

无论如何,在某些情况下吞吐量可能会更高,但我相信延迟会更高。


您的意思是磁盘上的寻道时间大于10Gbit / s的请求?
Mircea Vutcovici

1
@Mircea,他的意思是10Gbit网络必须从某处获取数据,因此它将仅限于该源的延迟以及网络的延迟。
克里斯·S


2

IMX磁盘仍然更快。网络的理论传输速率很高,但实际上您与之接近。

大约两年前,我在笔记本电脑上遇到了硬盘故障,DMA失灵了。这使硬盘驱动器显着变慢,尤其是比网络变慢。但是当我切换到另一台计算机时,我回到Internet的原始状态的速度比Internet更快。


2

我在千兆位网络上的经验是,如果配备了正确的服务器,就吞吐量和延迟而言,您可以击败本地性能。请参阅网络测试:我们正在获得千兆位性能吗?

出于所有实际目的,我建议将网络和本地存储视为等效存储,仅使用内存缓存。

您提到的标准警告是正确的,因为没有通用规则;实际上,大多数时候应该使用配置良好的服务器,并使用指标来评估最佳的数据传输方法。

如果您使用的硬盘驱动器速度较慢的低端计算机,那么几乎可以肯定的是,使用千兆网络连接到具有快速存储阵列的服务器会更快。

同样,如果您正在使用两台硬件几乎相同的机器,那么延迟和网络开销将使本地存储更快。这是常识。


2

这取决于。如果您的I / O主要是随机访问,那么与可用的网络带宽相比,其固定吞吐量可能不会那么大。但是,大多数网络流量最终都是由涉及I / O的进程生成的。如果正在生成网络流量的任何进程的工作集都适合高速缓存,那么它将不受磁盘带宽的限制。如果它破坏了缓存,则磁盘将成为瓶颈。

我在数据仓库系统上工作,规范的DW查询是表扫描。如果查询命中事实表(或分区)中百分之几的行,那么使用顺序I / O进行表或分区扫描将比使用索引查找和查找的随机访问查询计划更为有效。

除非进行适当调整,否则网络存储(SAN)在流工作负载上的性能往往不佳。如果将SAN用于通用合并环境,则几乎可以肯定地将其优化为针对数据仓库等流媒体,尖峰负载的最佳状态。我见过一个供应商白皮书建议,您需要大约3倍的磁盘数量才能在未针对流I / O进行调整的SAN上获得相同的吞吐量。

我的经验与此相吻合。实际上,我从未将数据仓库部署到无法在台式PC上显着加快运行相同ETL流程的整合环境中 我还曾有一家主要的SAN设备供应商的销售代表说,由于SAN的速度不够快,他们的许多客户都将直接附加存储用于DW系统,这是有记录的。

与用于随机访问工作负载的直接连接存储相比,网络存储的每个IOPS至少昂贵至少一个数量级,而流式传输的昂贵至少接近两个数量级。


1

我的经验是,当您使用1Gbit连接并且尝试下载文件时,硬盘通常是瓶颈。不过,您要记住的一件事是,您必须首先建立连接,这也需要时间。因此,用于发送大块数据的网络实际上可能比磁盘快。


1
除非磁盘也是网络连接另一端的瓶颈……

@Argote:是的,但是如果服务器软件编写正确,它将在写入磁盘之前缓冲到内存中。
amphetamachine

1

是的,总的来说,网络现在比硬盘驱动器更快,但是随着时间的流逝,它可能会发生变化。

我思故我在

当应用程序正在运行时,这意味着主机正在工作,而通过网络工作时则需要一个通用协议,检查对等方可用性,通道安全性……如果对等方使用不同的平台,则很难在网络上实现您的工作。单机。

我宁愿从权衡的角度来看这个问题,而不是谁是最强的...


4
我怀疑,因此我可能会。
约翰·加迪尼尔

1

您必须为这种比较描述一个确切的用例。硬盘具有寻道时间+传输速率和缓存。网络具有延迟,传输速率和协议开销...

我认为您的原始缓存>内存>磁盘>网络在总体上仍然正确


0

磁盘通过SCSI,SAS或IDE总线与CPU连接。这是运行特定协议(SCSI或ATAPI)的内部网络。以太网旨在在更长的距离上工作,并且可能比SAS / SCSI / IDE慢得多。因此,哪一种更快,取决于您所比较的技术。如果将拥有20年历史的便携式HDD与10Gbps RAM存储进行比较,赢家将永远是网络。购买存储时,您必须将其与价格和可管理性进行比较。


0

好吧,Light Peak的目标是100GBps的网络速度,已经接近RAM速度。当然,网络只能传送与发送方生成数据一样快的数据,即,如果发送方正在从硬盘读取数据,则接收方将仅以与读取磁盘相同的速度获取数据,即使超快速的网络。


0

要记住的一件事是,它取决于网络。举例来说,您要负责网站的性能。该网站当然通过局域网连接到数据库服务器,并且也通过互联网(也是一种网络)连接到网上冲浪者。

在许多情况下,可以通过静态IP和交叉电缆或automdx在Web服务器和数据库服务器之间建立专用链接,以降低延迟并为流量提供专用链接,因为您希望它非常快。数据库服务器会进行各种工作,以将尽可能多的db保留在内存中,并且在许多情况下,通常会成功获取全部内容以及一些索引。对这个数据库的查询将与对磁盘的查询一样快甚至更快。

另一方面,某些Web技术(asp.net Webforms viewstate,我正在查看您)喜欢将大量信息作为(某种)缓存与客户端Web浏览器之间来回推送。如果这是本地局域网连接(在asp.net Webform的辩护中,多数时间是正确的),那还不算很坏,但是在公共Internet上这绝对可以破坏性能,因此您通常最好不要这样做。改为数据库或本地磁盘。


0

我个人认为有几个因素需要考虑。例如,本地访问的内存或磁盘与通过网络访问的内存或磁盘有多快?如果远程数据位于非常快的SSD上,并且比端到端安装的千兆网络快,那么远程处理大型流文件可能会更快。

但是,如果您随机访问少量数据,并且网络不是完美无瑕或跳数很多,而不仅仅是访问它,那么我敢打赌,即使是在高速机械磁盘驱动器上,本地缓存的速度也要快100倍% 的时间。但是,您提出了一个有趣的观点,如果网络速度持续增长,本地存储任何内容将需要多长时间?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.