use*_*361 5 linux filesystems operating-system
我知道读取块大小是文件系统块大小倍数的文件会更好。
1)为什么会这样?我的意思是说块大小是 8kb,我读了 9kb。这意味着它必须先获取 12kb,然后再删除其他额外的 3kb。是的,它确实做了一些额外的工作,但是除非你的块大小真的很大,否则这会产生很大的不同吗?
我的意思是,如果我正在阅读 1tb 文件,那么这肯定会有所不同。
我能想到的另一个原因是块大小是指硬盘上的一组扇区(请纠正我)。所以它可能指向 8、16 或 32 或只是一个扇区。所以如果块指向更多的扇区,你的硬盘将不得不做更多的工作?我对吗?
2) 假设块大小为 8kb。我现在一次读取 16kb 吗?1MB?1GB?我应该使用什么作为块大小?我知道可用内存是一个限制,但除此之外还有哪些其他因素会影响我的选择?
非常感谢所有的答案。
从理论上讲,当缓冲区是页对齐的并且其大小是系统块大小的倍数时,可能会发生最快的 I/O。
如果文件连续存储在硬盘上,则通过逐柱读取可以获得最快的 I/O 吞吐量。(那时甚至可能没有任何延迟,因为当您阅读整首曲目时,您不需要从头开始,您可以从中间开始,然后循环播放)。不幸的是,现在几乎不可能做到这一点,因为硬盘固件隐藏了扇区的物理布局,并且可能会在读取单个磁道时使用甚至需要寻道的替换扇区。OS 文件系统也可能会尝试将文件块分布在整个磁盘(或至少分布在整个柱面组中),以避免在访问小文件时必须对大文件进行长时间搜索。
因此,您可以尝试考虑硬盘缓冲区大小,而不是考虑物理磁道。大多数硬盘的缓冲区大小为 8 MB,有些为 16 MB。因此,以高达 1 MB 或 2 MB 的块读取文件应该让硬盘固件优化吞吐量,而不会停止其缓冲区。
但是,如果上面有很多层,例如 RAID,则所有赌注都将取消。
实际上,您能做的最好的事情就是对您的特定情况进行基准测试。
| 归档时间: |
|
| 查看次数: |
2783 次 |
| 最近记录: |