如何在读取大文件时选择块大小?

时间:2018-04-16 07:48:32

标签: linux operating-system filesystems

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

1)为什么会这样?我的意思是让我们说块大小是8kb而我读的是9kb。这意味着它必须去12kb,然后摆脱额外的3kb。 是的它确实去做了一些额外的工作,但除非你的块大小真的很大,否则这会产生很大的影响?

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

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

2)所以我们说块大小是8kb。我现在一次读16kb吗? 1MB? 1GB?我应该将什么用作块大小? 我知道可用的记忆是一种限制,但除此之外还有其他因素会影响我的选择吗?

提前感谢所有答案。

1 个答案:

答案 0 :(得分:2)

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

如果文件连续存储在硬盘上,则速度最快的I / O. 通过逐缸读取可以获得吞吐量。 (那里 因为当你读完一首曲目时,甚至可能不会有任何延迟 你不需要从头开始,你可以从中间开始, 并循环)。不幸的是现在几乎不可能 这样做,因为硬盘固件隐藏了物理布局 部门,并可能使用甚至需要寻找的替代部门 阅读单曲。 OS文件系统也可能尝试传播 整个磁盘上的文件块(或者至少是整个磁盘上的文件块) 小组),以避免长时间寻找大文件 处理小文件。

因此,您可以尝试进入,而不是考虑物理轨道 帐户硬盘缓冲区大小。大多数硬盘的缓冲区大小为 8 MB,大约16 MB。因此,通过最多1 MB或2 MB的块读取文件 应该让硬盘固件优化吞吐量而不用 拖延它的缓冲区。

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

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

相关问题