【问题标题】:how to choose chunk size when reading a large file?读取大文件时如何选择块大小?
【发布时间】:2018-09-25 21:11:54
【问题描述】:

我知道读取块大小是文件系统块大小倍数的文件会更好。

1) 为什么会这样?我的意思是说块大小是 8kb,我读的是 9kb。这意味着它必须先获取 12kb,然后再删除其他额外的 3kb。 是的,它确实做了一些额外的工作,但除非你的块大小真的很大,否则会有很大的不同吗?

我的意思是,如果我正在阅读 1tb 文件,那么这肯定会有所作为。

我能想到的另一个原因是块大小是指硬盘上的一组扇区(请纠正我)。所以它可能指向 8 或 16 或 32 或仅一个扇区。所以如果块指向更多的扇区,你的硬盘基本上必须做更多的工作?我说的对吗?

2) 假设块大小为 8kb。我现在一次读 16kb 吗? 1MB? 1GB?我应该使用什么作为块大小? 我知道可用内存是一个限制,但除此之外还有哪些其他因素会影响我的选择?

非常感谢您提供所有答案。

【问题讨论】:

    标签: linux operating-system filesystems


    【解决方案1】:

    理论上,最快的 I/O 可能发生在缓冲区 页面对齐,并且当它的大小是系统块的倍数时 大小。

    如果文件连续存储在硬盘上,最快的 I/O 吞吐量将通过逐缸读取来获得。 (那里 那时甚至可能没有任何延迟,因为当您阅读整首曲目时 你不需要从头开始,你可以从中间开始, 并循环)。不幸的是,现在几乎不可能 这样做,因为硬盘固件隐藏了物理布局 扇区,并且可以使用需要甚至寻找的替代扇区,而 读一首曲目。操作系统文件系统也可能会尝试传播 文件块遍布整个磁盘(或至少,整个柱面 组),以避免在大文件上进行长时间搜索 访问小文件。

    因此,您可以尝试考虑物理轨道,而不是考虑物理轨道 考虑硬盘缓冲区大小。大多数硬盘的缓冲区大小为 8 MB,一些 16 MB。因此,按最大 1 MB 或 2 MB 的块读取文件 应该让硬盘固件优化吞吐量而不 停止它的缓冲区。

    但是,如果上面有很多层,例如 RAID,所有的赌注都是 关闭。

    真的,您能做的最好的事情就是对您的特定产品进行基准测试 情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 2011-10-29
      相关资源
      最近更新 更多