最佳性能:1TB与仅使用顺序读取/写入的应用程序中较大的驱动器

我有一个multithreading的自定义应用程序; 每个线程都运行在自己的逻辑核心上(工作站是一个双核,具有12个物理核心和24个逻辑核心)。 所以有24个线程同时运行。

在过去的两天里,我一直在研究众多的存储选项,而我的脑袋正在以大约15k rpm的速度旋转。

该应用程序有2种模式,它们是独占的:读取数据或写入数据; 通过这个我的意思是说,他们不会做交错读/写。 每个线程只会进行长时间的连续读取或写入操作。 我需要的总存储量是巨大的:超过50磅(如果你在2016年阅读这个数据,你现在可能对“巨大”这个词感到好笑)。

每个线程将读取或写入大约.8tb的文件

我打算使用jbod,因为如果一个驱动器出现故障,我只需要交换它,应用程序将在10分钟内重新创build数据。

我将使用SATA或SAS控制器将驱动器放入外部塔架或机架(还没有计算出这些的+/-值)。

所以,我的问题是:我正确地认为使用1tb驱动器的这个特定的应用程序会比使用驱动器的2倍,3倍或4倍更好的性能明智吗? 看起来,除非一个3 TB驱动器的连续读/写吞吐量是1 TB驱动器的3倍,否则较小的驱动器是要走的路。

显然,使用3 TB驱动器减less了我需要担心的驱动器数量的三分之一,但这只是一个考虑因素,如果我能达到与1 TB驱动器相同的性能。

最重要的是,为了获得最佳性能,您需要24个驱动器(或更多,请耐心等待),因为您有24个驱动器。 如果磁盘数量less于线程数量,则没有顺序操作。 考虑到单个磁盘上的两个线程,它会有一些search; 每个寻求都说10毫秒,所以损失了大概1MB的传输机会。 每秒只有10个search,您有90 MB / s(2 x 45),而不是1 x 100 MB / s。

我想你会更好48驱动器1 TB的每个。 驱动器将被配对,以获得24剥离(又名RAID0)组。 您可以假设在操作系统级别上执行的清除操作会产生不明显的影响,因此每个线程都有效地获得了1TB驱动器的双倍吞吐量。

我发现3TB驱动器在性能方面没有任何好处。

仍然最大的性能好处将是完全不同的东西。 只要确保应用程序能够有效地传输数据,就可以用这些I / O命令严格地硬盘上的队列提供数据。 如果写入方式笨拙地等待某个I / O在排队另一个I / O之前完成,那么吞吐量会非常严重。

  • 最好修复它在应用程序本身或…
  • 为了部分缓解这一点,您需要投入大量资金到具有巨大额外caching的磁盘arrays中。

PS。 喜欢关于2016年的评论,你好! 你有没有得到这些hover板?

考虑到这些操作是连续的和最小的争用,SATA和SAS之间的写入性能可能没有太大的差别。

阅读表演是另一回事。 我不认为你会发现许多econo SATA 15k驱动器。 SAS驱动器倾向于更高端,并且具有高转速,SASarrays控制器通常优于SATA,但是如果您使用的是非RAID hba,则可能没有太大区别。

在标准的非arrays控制器上,使用单个2TB SATA驱动器至less可以实现100 Mb / s的写入性能。 6 Gbps SATA可能更多。 为了便于比较,我使用了一个带有4x2TB(6 Gbps)SATA驱动器的RAID0,它具有500 MB /秒的连续写入性能。

那么,你的答案不应该基于驱动器的容量 ,而是基于盘片的数量和密度。 一个7200 RPM驱动器顺序读取由3个500 GB盘片组成的1.5 TB驱动器的100 GB将比读取由两个750 GB盘片组成的1.5 TB驱动器读取的相同的100 GB慢,因为后者的数据密度较高。

你真正需要做的是find所有驱动器的基准。

我猜测,在存储容量为50TB和容量为50TB的硬盘的18TB硬盘的情况下,一次读写一个文件时 3TB硬盘的速度会更快……但是,所有这些都取决于个人磁盘的性能。

我认为至less在这里尝试RAID有一些好处。 有一些开销,RAID重build,当它们发生时,可能最终成为一个表演停止,但有一些可能的好处。

  • 更简单的pipe理是显而易见的
  • 单磁盘性能将在整个硬盘上达到50-70MB /秒。 在外边缘(例如磁盘的起点)会更快,而内边缘的边缘会更慢(在我的testing中,通常是外边缘的一半)如果你正在写一个磁盘,这一直是限制。 如果你正在写一个磁盘集合(不过它是被pipe理的),你仍然会达到这个限制(4磁盘RAID0的持续性能只是单个磁盘内部性能的4倍),但是你会有更高的总吞吐量。
  • RAID集会增加争用(如果您正在进行多次写入/读取)。 他们也将增加可用带宽。 这对你来说可能并不重要,但值得一试
  • 这听起来像你的写作基本上是stream量批量数据到磁盘。 如果是这样的话,RAID5的开销是相当低的,因为如果你写出完整的RAID条带宽度的数据块到磁盘,不需要做读/奇偶校验重新计算/写周期 – 你的控制器只会写在一次打出新的条纹和平价。 (奇偶是便宜的,这是痛苦的读/写周期)

从每个线程写出800GB的数据大概需要2-3个小时。 假设你的磁盘在外边缘将维持在120MB / sec左右,内边缘约为60MB / sec。 在120MB /秒的速度下,800GB的数据大约需要111分钟,而在60MB /秒的速度下则是两倍。 写入性能的下降不是线性的,但是可以肯定的是,你将花费2到3个小时写出800GB的文件。 @ kubanczyk的build议大概是这个时间的一半,但是不要害怕进入更大的聚合(无论是RAID0,RAID5还是RAID5 + 0)

我对此并没有很好的感觉(我自己也没有做过testing),但是一般认为SAS驱动器的性能更好,即使转速相同(例如,希捷Constellation ES.2 SATA和希捷Constellation ES.2 SAS)。 其中一些好处包括SAS驱动器的全双工操作和更长的队列深度。 全双工与半双工的关系应该意味着并发读写操作的整体效果较差。 例如,您仍然会遇到驱动器查找的问题,但是您不会在等待读取操作时拖延写入磁盘。

我用16个磁盘arrays构build了很多系统。 两个RAID5集(硬件RAID控制器),Linux软件RAID在顶部。 我们在这里获得了相当不错的性能:根据所使用的磁盘型号,在整个磁盘arrays中维持在750到850MB /秒之间。 投掷多个作家确实增加了争用,并且降低了总体吞吐量,但是取决于你写出数据的频率与读取数据的频率有关,沿着这些线可能会有所帮助。

希望我没有在这里弄太多的水:)