AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 474571
Accepted
Banjer
Banjer
Asked: 2013-02-02 07:15:41 +0800 CST2013-02-02 07:15:41 +0800 CST 2013-02-02 07:15:41 +0800 CST

NFS 客户端读写速度不平衡

  • 772

我有一台 NetApp 作为我的 nfs 服务器,还有两台 Linux 服务器作为 nfs 客户端。问题是两台服务器中较新的一台在同时对 nfs 服务器进行读取和写入时,读取和写入速度差异很大。另外,对于这个新服务器来说,读取和写入看起来都很棒。旧服务器没有这个问题。

旧主人:鲤鱼

Sun Fire x4150,带 8 个内核,32 GB RAM

SLES 9 SP4

网络驱动:e1000

me@carp:~> uname -a
Linux carp 2.6.5-7.308-smp #1 SMP Mon Dec 10 11:36:40 UTC 2007 x86_64 x86_64 x86_64 GNU/Linux

新宿主:胡椒

HP ProLiant Dl360P Gen8 带 8 核,64 GB 内存

中央操作系统 6.3

网络驱动:tg3

me@pepper:~> uname -a
Linux pepper 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

我将跳到一些说明读/写测试的图表。这是胡椒及其不平衡的读/写:

胡椒吞吐量

这是鲤鱼,看起来不错:

鲤鱼吞吐量

测试

这是我正在运行的读/写测试。我已经分别运行了它们,它们在 pepper 上看起来很棒,但是当一起运行时(使用&),写入性能仍然稳定,而读取性能却受到很大影响。测试文件是 RAM 大小的两倍(胡椒为 128 GB,鲤鱼为 64 GB)。

# write
time dd if=/dev/zero of=/mnt/peppershare/testfile bs=65536 count=2100000 &
# read 
time dd if=/mnt/peppershare/testfile2 of=/dev/null bs=65536 &

NFS 服务器主机名是 nfsc。Linux 客户端在子网上有一个专用的 NIC,它与其他任何东西都是分开的(即与主 IP 不同的子网)。每个 Linux 客户端从服务器 nfsc 挂载一个 nfs 共享到 /mnt/hostnameshare。

非甾体抗炎药

这是 Pepper 的同步 r/w 测试期间的 1 分钟示例:

me@pepper:~> nfsiostat 60

nfsc:/vol/pg003 mounted on /mnt/peppershare:

   op/s         rpc bklog
1742.37            0.00
read:             ops/s            kB/s           kB/op         retrans         avg RTT (ms)    avg exe (ms)
                 49.750         3196.632         64.254        0 (0.0%)           9.304          26.406
write:            ops/s            kB/s           kB/op         retrans         avg RTT (ms)    avg exe (ms)
                1642.933        105628.395       64.293        0 (0.0%)           3.189         86559.380

我还没有在旧主机 carp 上安装 nfsiostat,但正在努力。

/过程/坐骑

me@pepper:~> cat /proc/mounts | grep peppershare 
nfsc:/vol/pg003 /mnt/peppershare nfs rw,noatime,nodiratime,vers=3,rsize=65536,wsize=65536,namlen=255,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.x.x.x,mountvers=3,mountport=4046,mountproto=tcp,local_lock=none,addr=172.x.x.x 0 0

me@carp:~> cat /proc/mounts | grep carpshare 
nfsc:/vol/pg008 /mnt/carpshare nfs rw,v3,rsize=32768,wsize=32768,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,timeo=60000,retrans=3,hard,tcp,lock,addr=nfsc 0 0

网卡设置

me@pepper:~> sudo ethtool eth3
Settings for eth3:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 4
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off
        Supports Wake-on: g
        Wake-on: g
        Current message level: 0x000000ff (255)
        Link detected: yes

me@carp:~> sudo ethtool eth1
Settings for eth1:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: umbg
        Wake-on: g
        Current message level: 0x00000007 (7)
        Link detected: yes

卸载设置:

me@pepper:~> sudo ethtool -k eth3
Offload parameters for eth3:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off

me@carp:~> # sudo ethtool -k eth1
Offload parameters for eth1:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on

它全部在 LAN 上,在 nfs 客户端和 nfs 服务器之间有一个全双工的千兆交换机。另一方面,我看到在 CPU 上等待 pepper 的 IO 比 carp 多得多,正如预期的那样,因为我怀疑它在等待 nfs 操作。

我已经用 Wireshark/Ethereal 捕获了数据包,但我在这方面并不强,所以不确定要寻找什么。我没有在 Wireshark 中看到一堆以红色/黑色突出显示的数据包,所以这就是我要查找的所有内容:)。这种糟糕的 nfs 性能已经体现在我们的 Postgres 环境中。

任何进一步的想法或故障排除技巧?如果我可以提供更多信息,请告诉我。

更新

根据@ewwhite 的评论,我尝试了两种不同的 tuned-adm 配置文件,但没有任何变化。

在我的红色标记的右边还有两个测试。第一座山是与,throughput-performance第二座山是与enterprise-storage。

胡椒广告调整

企业存储配置文件的 nfsiostat 60

nfsc:/vol/pg003 mounted on /mnt/peppershare:

   op/s         rpc bklog
1758.65            0.00
read:             ops/s            kB/s           kB/op         retrans         avg RTT (ms)    avg exe (ms)
                 51.750         3325.140         64.254        0 (0.0%)           8.645          24.816
write:            ops/s            kB/s           kB/op         retrans         avg RTT (ms)    avg exe (ms)
                1655.183        106416.517       64.293        0 (0.0%)           3.141         159500.441

更新 2

sysctl -a 用于胡椒

linux
  • 1 1 个回答
  • 9863 Views

1 个回答

  • Voted
  1. Best Answer
    Banjer
    2013-02-08T12:01:29+08:002013-02-08T12:01:29+08:00

    在 fstab 中添加noacnfs 挂载选项是灵丹妙药。总吞吐量没有变化,仍然在 100 MB/s 左右,但我的读写现在更加平衡,我不得不想象这对 Postgres 和其他应用程序来说是个好兆头。

    在此处输入图像描述

    你可以看到我标记了我在测试时使用的各种“块”大小,即 rsize/wsize 缓冲区大小挂载选项。令人惊讶的是,我发现 8k 大小的 dd 测试具有最佳吞吐量。

    这些是我现在使用的 nfs 挂载选项,每个/proc/mounts:

    nfsc:/vol/pg003 /mnt/peppershare nfs rw,sync,noatime,nodiratime,vers=3,rsize=8192,wsize=8192,namlen=255,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,hard,noac,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.x.x.x,mountvers=3,mountport=4046,mountproto=tcp,local_lock=none,addr=172.x.x.x 0 0
    

    仅供参考,noac选项 man 条目:

    空调/无空调

    选择客户端是否可以缓存文件属性。如果未指定任何选项(或指定了 ac),则客户端缓存文件属性。

    为了提高性能,NFS 客户端缓存文件属性。每隔几秒钟,NFS 客户端就会检查每个文件属性的服务器版本以进行更新。在客户端再次检查服务器之前,在这些小间隔内发生在服务器上的更改不会被检测到。noac 选项阻止客户端缓存文件属性,以便应用程序可以更快地检测服务器上的文件更改。

    除了防止客户端缓存文件属性外,noac 选项还强制应用程序写入变为同步,以便对文件的本地更改立即在服务器上可见。这样,其他客户端在检查文件属性时可以快速检测到最近的写入。

    使用 noac 选项可在访问相同文件的 NFS 客户端之间提供更高的缓存一致性,但它会带来显着的性能损失。因此,鼓励明智地使用文件锁定。数据和元数据一致性部分包含对这些权衡的详细讨论。

    我在网络上阅读了关于属性缓存的不同意见,所以我唯一的想法是它是一个必要的选项,或者可以很好地与 NetApp NFS 服务器和/或具有较新内核 (>2.6.5) 的 Linux 客户端一起使用。我们在具有 2.6.5 内核的 SLES 9 上没有看到此问题。

    我还阅读了关于 rsize/wise 的不同意见,通常你采用默认值,目前我的系统是 65536,但 8192 给了我最好的测试结果。我们也会用 postgres 做一些基准测试,所以我们会看看这些不同的缓冲区大小如何。

    • 6

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve