2

一些基准测试(尤其是 SSD)对(4k-)对齐和非对齐读/写进行了区分。我理解为什么对齐可以更快,但我不明白如何在我的程序中确保读/写将与实际介质正确对齐。

我不认为它像确保不寻找不能被 4096 整除的文件中的任何地址一样简单?毕竟,系统不保证文件的开头会正确对齐(或者是吗?)

像 IOMeter 这样的程序如何对齐它们的 I/O?有没有办法在Java中做到这一点?(或者更一般地说,在 VM 中运行的程序)。

我的另一个问题是 IOMeter 如何只有一个线程/进程(以及我自己如何做到这一点)的队列深度> 1 - 但我不确定这是否与对齐的 I/O 相关,或者是否要就此提出一个新问题。

4

2 回答 2

1

我怀疑你绝对可以做到,但你可以大大增加你的机会。

  • 确保文件系统与物理介质对齐。有关 Linux 中的注意事项(仅作为示例),请参见此处
  • 如果您按顺序访问数据,请确保使用的缓冲区大小是块大小的整数倍。4096 或 8192 通常是安全的选择。
  • 如果您正在寻找或进行随机访问,正如您所说,您需要寻找块大小的倍数并填充缓冲区。同样,您通常使用 4096 或 8192 都是安全的。
于 2012-06-05T11:58:55.080 回答
0

此链接可能很有用,但您说您对数据对齐有足够的了解。我认为Java不支持它。我认为你必须自己实现它。 数据对齐

于 2012-06-05T11:29:51.813 回答