CPU 密集型任务写入磁盘的需求分析

CPU 密集型任务写入磁盘的需求分析

我有一个数据分析应用程序,它是 CPU 密集型的,每个执行线程产生约 35 MB/s 的数据。

我正在尝试计算出可以同时运行多少个线程,并且能够写入磁盘而不会导致每个线程无休止地等待 I/O。

我发现这个答案关于如何计算写入性能,我已经在我的 2 个本地磁盘(一个 SSD 和 7200 RPM HD)上执行了此操作。

结果是:

固态硬盘:

$ time sh -c "dd if=/dev/zero of=testfile bs=1000k count=1k && sync"
1024+0 records in
1024+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.668421 s, 1.6 GB/s

real    0m3.549s
user    0m0.000s
sys     0m0.456s

同步后,速度为 281 MB/s

高清:

$ time sh -c "dd if=/dev/zero of=testfile bs=1000k count=1k && sync"
1024+0 records in
1024+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 8.79985 s, 119 MB/s

real    0m10.122s
user    0m0.004s
sys     0m0.549s

同步后就是 98 MB/s。


我能得出以下结论吗?

将结果写入SSD:

  • 磁盘写入速度达 281 MB/s
  • 每个线程产生 35 MB/s

因此,我可以同时运行 8 个线程。(281/35 = 8)

将结果写入硬盘:

  • 磁盘写入速度达 98 MB/s
  • 每个线程产生 35 MB/s

因此,我可以同时运行 2 个线程。(281/35 = 2.8)


  • 我需要考虑其他因素吗,例如互连速度等?(我的驱动器使用 SATA 3 连接)

  • 如果上述分析正确,我是否可以添加其他驱动器以允许运行更多线程? 如果是这样,它们是否会共享互连,并因此引入上限,如果是这样,我该如何计算?)

答案1

您需要考虑 HDD 的寻道时间。实际上,由于 HDD 必须不断寻道,因此并发写入 HDD 的速度可能会非常慢。

总的来说,用这种方法来估计程序的可能容量是错误的。影响性能的因素太多了,用这种方法可能无法得到任何实际的性能数据。

正确的方法是使用科学的方法,在系统上运行它们,测量性能。如果性能不够高,就把它放在新硬件上,重复这个过程,直到性能足够好。

问题有关于使用科学方法的更多细节。

相关内容