【问题标题】:how to indicate to ext4 the size of a file before doing the write?如何在写入之前向 ext4 指示文件的大小?
【发布时间】:2012-07-06 04:59:30
【问题描述】:

我很好奇是否有办法做到这一点?我对 ext4 的理解有限,但我相信它有能力分配连续的磁盘空间范围

我正在从 RAM 中写入一个文件,并且在 open() 之前知道它的大小。有没有办法可以向文件系统表明这一点?有性能优势吗?

【问题讨论】:

  • 写入磁盘可能会在很久以后发生(例如,在程序退出之后),除非您执行 syncfsyncdata 系统调用。
  • 明白了,我最感兴趣的是推出“范围”。我相信 ext4 假设写入 8k 或更大(刷新期间缩短)。如果我的文件是 8k 但是可能会有一些性能提升的机会?

标签: linux filesystems ext4


【解决方案1】:

您似乎在寻找posix_fallocate

使用它允许文件系统预先分配块,这可以减少文件的碎片。特别是,这对于随机写入文件块的应用程序(想想 bittorrent 客户端)很重要。对于按顺序写入文件的应用程序,这可能不值得。

【讨论】:

  • 考虑到posifx_fallocate() 只是一个类似于fseek() 的系统调用,我认为应用程序应该在每次开始写入文件之前知道最终文件大小时调用它。这将允许内核优化磁盘处理和空间分配。
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2023-04-02
  • 2016-06-25
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多