【问题标题】:Create Large File in /dev/shm in parallel: performance在 /dev/shm 中并行创建大文件:性能
【发布时间】:2013-06-03 18:54:03
【问题描述】:

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

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

【问题讨论】:

    标签: c filesystems ramdisk


    【解决方案1】:

    执行此操作的最快方法是调用truncate()ftruncate() 将文件扩展至您想要的大小。

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

    【讨论】:

    • 我试过这个,它可能会奏效。但是我能够“创建”比包含它们的文件系统更大的文件。不知何故,这似乎不对。
    • 所以基本思路是这样的:首先使用 truncate 创建大文件,然后每个线程使用 lseek() 向前移动到文件中的位置,然后该线程将数据写入那里?对吗?
    • 好的。映射()。没想到这个。
    • truncate 不需要。 lseek 一个人就可以完成这项工作。
    • 嗯,truncatemmap 方法所需要的,但 write 不需要。
    【解决方案2】:

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

    如果您想提前确保有可用空间并为整个最终文件保留,posix_fallocate 应该能够为您处理这些问题。

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 1970-01-01
      • 2021-04-10
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      相关资源
      最近更新 更多