我有一个数据分析应用程序,这是CPU绑定,并产生35 MB/s的数据每线程的执行。
我试图计算出我可以并发运行多少个线程,并且能够写入磁盘,而不会导致每个线程都无休止地等待I/O。
我找到了关于如何计算写性能的这个答案,这是我在我的两个本地磁盘SSD和7200 RPM HD上执行的。
研究结果如下:
SSD:
$ 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
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, 8.79985 s, 119 MB/s
real 0m10.122s
user 0m0.004s
sys 0m0.549s与同步,这是98 MB/s。
我能得出以下结论吗?
SSD的Writing结果:
因此,我可以同时运行8个线程。(281 / 35 = 8)
HD:的<#>Writing结果
因此,我可以同时运行两个线程。(281 / 35 = 2.8)
发布于 2018-10-01 21:09:11
您需要考虑使用HDD的搜索时间。实际上,同时写入HDD可能会非常缓慢,因为需要不断地寻找HDD。
一般来说,用这种方法来估计可能的程序容量是错误的。影响性能的因素太多,因此不可能以这种方式获得任何真实的性能数字。
正确的方法是用科学的方法,在一个系统上运行,衡量绩效。如果性能不够高,就把它放在新的硬件上,然后重复到性能足够好为止。
这个问题有更多关于使用科学方法的细节。
https://serverfault.com/questions/932850
复制相似问题