在/ dev / shm中并行创建大文件:性能

时间:2013-06-07 12:47:46

标签: c filesystems ramdisk

我需要在/ dev / shm中创建一个大文件(几千字节)。这是Linux机器上的RAMdisk。这必须尽可能快。我目前在C中使用5个单独的POSIX线程来创建连续的100 MB字节段,然后我有另一个线程将它们连接到主输出文件。

这很快,但我想要更快。我可以消除连接线程吗?有没有办法打开文件,并让每个线程将它的100 MB字节写入最终输出文件中的正确位置?

2 个答案:

答案 0 :(得分:3)

最快的方法是拨打truncate()ftruncate()将文件扩展到您想要的尺寸。

然后,您可以mmap()将文件放入进程的内存空间,并让每个线程将其部分写入映射区域。

答案 1 :(得分:2)

只需为每个线程打开一次文件,lseek到线程假定开始的位置,并write正常。或者,您可以使用pwrite指定写入的位置;在这种情况下,所有线程都可以共享一个open,因为它们不需要使用当前文件位置。

如果您想提前确保可用空间并为整个最终文件保留,posix_fallocate应该可以为您处理。