NFS 挂载后续读取速度比挂载后慢

NFS 挂载后续读取速度比挂载后慢

让我先解释一下这个场景。我知道这种设置听起来可能很荒谬,但是一旦我解释了我看到的情况,如果有人知道得更多,可以解释为什么会发生这种情况,我将不胜感激。

我有 2 个站点。它们都位于美国大陆的两端。这些服务器通过 10Gb 点对点链路连接,延迟大约为 ~67ms。我在一端有一个 NFS 共享,在另一端有一个需要挂载此 NFS 共享的服务器。在初始挂载时,运行时间树会给出如下输出:

[root@server01 ~]# time tree /usr/local/ftppub/production/biz_12345
/usr/local/ftppub/production/biz_12345
└── incoming
    ├── inbound
....
    ├── test
    │   └── OVR_DS_MASTER.csv
    ├── test1.csv
    ├── test2.csv
    └── to_be_deleted
        └── payments.csv

23 directories, 2229 files

real    0m9.636s
user    0m0.013s
sys 0m0.047s
[root@server01 ~]#

注意真实的时间大概是10秒左右。

但是,当我第二次以及随后的任何时间运行相同的查询时,时间是原来的 12 倍:

[root@server01 ~]# time tree /usr/local/ftppub/production/biz_12345
/usr/local/ftppub/production/biz_12345
└── incoming
    ├── inbound
....
    ├── test
    │   └── OVR_DS_MASTER.csv
    ├── test1.csv
    ├── test2.csv
    └── to_be_deleted
        └── payments.csv

23 directories, 2229 files

real    1m55.544s
user    0m0.026s
sys 0m0.137s
[root@server01 ~]#

cat /pro/mounts 为该挂载提供以下设置:

1.2.3.4:/FTP /usr/local/ftppub nfs rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=1.2.3.4,mountvers=3,mountport=2049,mountproto=udp,local_lock=none,addr=1.2.3.4 0 0

这些是服务器在挂载此 NFS 共享时生成的默认挂载。我尝试过调整这些参数,但情况并没有好转,反而影响了对此 NFS 共享的访问。无法理解的是,为什么第一次读取此文件夹结构的速度比所有后续读取都快 12 倍?我原以为问题出在,但测试相同的给出相同的结果。第一个 du 命令的读取时间约为 10 秒,所有后续命令到同一目录会产生将近 2 分钟的输出。在我挂载 NFS 后第一次尝试读取任何新目录时都会发生这种情况,从同一目录的任何后续读取都会减慢约 12 倍。

相关内容