【问题标题】:How To Align Filesystem I/O?如何对齐文件系统 I/O?
【发布时间】:2012-06-09 09:56:38
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java c performance io filesystems


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我认为这与程序内存的对齐有关。 JVM 隐含地处理了这一点。我的问题是关于文件系统 I/O,而不是内存操作。
    • 是的,你是对的,对不起。如果您想在将字节放入文件系统时控制偶数地址,我认为您需要调用一些本机操作系统库。我认为您需要非常低的系统调用来执行此类操作。 Java 肯定支持本机执行。
    • 这是文件对齐的另一个链接。 File Buffering
    • 这绝对是一个关于文件缓冲的有趣链接。似乎是在说如果您将某些本机 API 用于无缓冲 I/O 那么您必须遵循某些对齐规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 2017-02-11
    • 2016-06-19
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多