c – 优化对磁盘的大量写入

前端之家收集整理的这篇文章主要介绍了c – 优化对磁盘的大量写入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个C应用程序(VStudio 2010,win7 64位)在具有双xeon芯片的机器上运行,这意味着12个物理核心和24个逻辑核心,以及192 gig的ram.
编辑:操作系统是win7(即 Windows 7,64位).

该应用程序有24个线程(每个线程都有自己的逻辑核心)进行计算并填充大规模C结构的不同部分.当所有线程都完成(并且线程完全平衡以便它们同时完成)时,结构大约为60千兆字节.

(我可以控制硬件设置,因此我将使用运行RAID 0的6个2tb驱动器,这意味着写入的物理限制大约是平均顺序写入速度的6倍,或大约2千兆位/秒.)

将此问题转移到磁盘的最有效方法是什么?显然,i / o时间会使计算时间相形见绌.从我对这个主题的研究来看,似乎是write()(而不是fwrite())是要走的路.但是,在设置缓冲区大小等方面,我可以在软件方面进行哪些其他优化?mmap会更有效吗?

解决方法

很难根据你的情况来判断最好的事情.

要做的第一个优化是预分配文件.这样,您的文件系统不需要继续扩展其大小.这应该优化一些磁盘操作.但是,请避免将实际零写入磁盘.只需设定长度即可.

然后你可以在mmap和write之间做出选择.这还取决于您使用的操作系统.在Unix上我会尝试mmap和pwrite. pwrite很有用,因为你的每个线程都可以在所需的文件位置写入文件,而不会争夺文件偏移量.

mmap可能很好,因为您的线程不是将副本复制到文件缓存中,而是直接写入文件缓存. 60 GB可能太大而无法对整个文件进行mmap,因此每个线程可能需要将自己的mmap窗口放在可以移动的文件上.

在Windows中,您可能希望尝试使用重叠的异步IO.这只能通过Win32 API调用来完成.

原文链接:https://www.f2er.com/c/119779.html

猜你在找的C&C++相关文章