同步或顺序写入操作 - 在速度方面是否重要?
使用多核处理器,使用多线程并行化所有文件写入操作是否有意义,只是为了提高速度?当然,所有这些写操作都是独立的。
答案 0 :(得分:3)
一般来说,没有。
到目前为止,对磁盘的物理写入是瓶颈的一些数量级,并且在大多数情况下是相当顺序的。通过并行化写入,您可以通过招致来充分机会<强>恶化绩效。在大多数情况下,顺序读取和写入在很大程度上优于交错。
每磁盘并行化(TCQ和NCQ)主要通过减少当不同客户端同时请求来自磁盘的不同部分的数据时自然需要的搜索来工作。如果你可以首先避免这些寻求,你会更好。
我在某些情况下 - RAID 1,JBOD或当不同的数据流到达时相当缓慢 - 正确的调度可以提高您的吞吐量,但这需要对手头的硬件有深入了解,而其他过程不会损害您的乐趣。
充其量,您可以将其作为决定留给最终用户(例如,提供关闭它的选项),并提供指导他的性能指标。 (你甚至可能证明我错了;))
答案 1 :(得分:2)
这取决于磁盘及其控制器。他们有TCQ / NCQ吗?是RAID吗? 如果是这样可能会有所帮助。使用一个没有NCQ的常规SATA磁盘,它不会。
答案 2 :(得分:2)
首先编写最简单的代码,然后查看与目标环境的表现是否足够好。 (不同的磁盘,操作系统版本,CPU,驱动程序等可能会显着影响结果。)
如果最简单的正确代码不够快,那么尝试更快地执行IO的方法是有意义的。在 guess 中,如果您要写入不同的磁盘,并行写入操作可能是有意义的,但可能不是这样。这只是一个完整的猜测。
纯粹巧合的是,我计划尽快对相关情况进行基准测试。我有一个blog post来描述我打算执行的测试,并且当我有一些时,它会更新带有结果链接的条目。它与您所描述的内容并不完全相同,但足够接近可能会引起人们的兴趣。
答案 3 :(得分:0)
从技术上讲,你可以mmap一个文件,并有多个线程写入它,但磁盘可能仍会造成瓶颈。
如果您需要最大化I / O吞吐量,那么首先要研究您的环境支持的异步I / O.
答案 4 :(得分:0)
这是一个简单的问题,但答案真的很复杂。 Les试图通过一些假设来缩小场景:操作系统是Windows,你有相对大量的写入是真正独立的。
最糟糕的情况是,这并不比平行ATA控制器上的每天普通磁盘慢得多:它会很慢。
最好的情况是,操作系统可以非常有效地安排写入。对于具有大量主轴的存储系统或支持NCQ的磁盘,情况确实如此。
这里需要记住的关键是磁盘I / O(一般情况下)不受CPU限制,因此不使用多核对您无能为力;它会让生活变得复杂。
请注意,如果您订购了这些内容,那么您可以通过按顺序对它们进行顺序排序,从而对文件(整体)或顺序进行排序。
答案 5 :(得分:-1)
如果您正在谈论写一个文件,答案是否定的。您无法并行写入一个文件,因为每个进程或线程都必须从操作系统获取文件锁以进行写入。
此外,这必须依赖于硬件控制器和存储类型,操作系统内核和文件系统实现。