微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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调用来完成.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐