这个问题的原因是因为在2.4.20内核里面将打开到关闭的缓存一致性特性(open to close cache consistency feature)默认关闭导致的。这个特性是为了保证多个客户端之间的缓存的一致性。当一个NFS客户端上的应用打开服务器上的一个文件时,客户端会调用GETATTR函数来检测该文件是否存在以及它的访问权限。当该文件被关闭时,对文件的修改会写入到服务器中,这样下一个客户端就可以读到文件的更新数据。打开到关闭的缓存一致性特性是通过比较关闭文件之后与打开同一个文件之前的GETATTR值,如果结果一致,则说明客户端的cache是有效的,否则会重新读数据来刷新该缓存。
GETATTR调用降低性能,因为它会产生大量网络流量。可以在加载时给mount命令传递一个nocto参数来避免,但是这是以数据完整性为代价的,因为如果如果有多个客户端同时访问一个文件,会影响缓存一致性。在RHEL4上使用的是全新的设计来保证数据完整性,因此在RHEL4上就不会有这个问题。