看到一份文档说:
NFS O_DIRECT …Available in RHEL 3 Update 2
可是自己明明记得这个 O_DIRECT 在 RHEL 3 就有的阿?!搜索到一篇白皮书 Red Hat Enterprise Linux version 3 Technical Summary,发现 NFS 的 O_DIRECT 支持的确是 RHEL 3 就已经提供的(而不是 Update 2),在另一白皮书上亦有提及:
当应用程序利用 O_DIRECT 标记打开文件时,RHEL 3.0 和 SuSE SLES 8 SP3 内核中的Linux NFS 客户端支持对 NFS 文件的直接 I/O 操作。直接 I/O 这一功能可以使管理自己数据缓存的数据库应用程序获益。启用该功能后,应用程序的读写系统调用会直接转换为 NFS 读写操作。在利用该标记打开文件时,Linux 内核不会对任何读写结果进行缓存,因此,应用程序总是可以准确获取服务器上的内容。
关于这个 O_DIRECT 有一些相关的 Bug 存在。Bug 1:Metalink 2448994:
# Platform Patch for : Linux Intel # Product Version # : 9.2.0.6 # Product Patched : RDBMS # # Bugs fixed by this patch # ------------------------ # 2448994: DIRECT IO SUPPORT OVER NFS
Bug 2:poor NFS performance when nfs_uncached_io set due to excessive FSSTAT messages
Platform: RHEL AS 2.1 Version : 2.1 Steps to reproduce: 1. enable NFS O_DIRECT (add "options nfs nfs_uncached_io=1" into /etc/modules.conf) 2. mount NFS filesystem 3. execute cp/dd command for NFS filesystem Actual Result =========== A lot of FSSTAT/FSINFO requests are generated, then cp/dd perfomance goes down.
Tip:Oracle 10g 内建支持 Direct IO 。但要注意上面提到的 RHEL AS 2.1 的Bug 。
参考信息:
- NFS client patches for Linux
- Note:225751.1
- NetApp TR3339