您能帮我理解 GlusterFS 中的“direct-io-mode”吗?
我在禁用直接 I/O 模式的情况下获得了更好的读取结果——这是否意味着在禁用模式下它正在从缓存中写入/读取——它是系统缓存还是 GlusterFS 缓存?推荐的方法是什么?我正在使用具有分布式复制卷的 4 个节点进行 Web 服务:
Write: dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
echo 3 > /proc/sys/vm/drop_caches
Read: dd if=tempfile of=/dev/null bs=1M count=1024
Read-Read: dd if=tempfile of=/dev/null bs=1M count=1024
Write Read Re-Read
67.5 MB/s 94.9 MB/s 94.6 MB/s direct-io-mode=enabled
65.8 MB/s 230 MB/s 226 MB/s direct-io-mode=disabled
经过长时间的搜索,我找到了这篇文章。它不是 glusterfs 特定的,但它可能有助于更好地理解:简而言之,直接 i/o 模式禁用操作系统为该挂载点实现的文件缓冲区。
看完之后我得出了这样的结论:
启用或禁用可能会为您提供更好的传输速率,具体取决于哪个应用程序正在使用您的 glusterfs 卷:如果您使用的是自行处理缓存的应用程序或数据库,您将获得一些提升(因为缺少第二个缓冲区的开销)。如果您只是进行文件访问,则可能禁用它会提高您的性能,因为本地文件缓存导致网络访问减少。
您通过“mount -t glusterfs XXX:/testvol -o direct-io-mode=enable mountpoint”启用direct-io-mode??如果是这样,该文件没有缓存在GlusterFS客户端内核中,换句话说,缓存是系统缓存。但是,该文件被缓存在 GlusterFS 服务器内核中。