Eu tenho um NetApp como meu servidor nfs e dois servidores Linux como clientes nfs. O problema é que o mais recente dos dois servidores tem extremamente diferentes velocidades de leitura e gravação sempre que está fazendo leituras e gravações simultaneamente para o servidor nfs. Separadamente, as leituras e gravações ficam ótimas para esse novo servidor. O servidor mais antigo não tem esse problema.
Anfitrião antigo: carpa
Sun Fire x4150 com 8 núcleos, 32 GB de RAM
SLES 9 SP4
Driver de rede: 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
Novo host: Pepper
HP ProLiant Dl360P Gen8 com 8 núcleos, 64 GB de RAM
CentOS 6.3
Driver de rede: 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
Vou pular para alguns gráficos que ilustram os testes de leitura / gravação. Heres pimenta e sua leitura / escrita desequilibrada:
eaquiestáacarpa,boaaparência:
Os testes
Aqui estão os testes de leitura / gravação que estou executando. Eu os executei separadamente e eles ficam ótimos em pimenta, mas quando executados juntos (usando o &
), o desempenho da gravação permanece sólido enquanto o desempenho de leitura sofre muito. O arquivo de teste tem o dobro do tamanho da RAM (128 GB para pimenta e 64 GB para carpas).
# 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 &
O nome do host do servidor NFS é nfsc. Os clientes Linux têm uma NIC dedicada em uma sub-rede separada de qualquer outra coisa (ou seja, sub-rede diferente do IP primário). Cada cliente Linux monta um compartilhamento nfs do servidor nfsc para / mnt / hostnameshare.
nfsiostat
Aqui está uma amostra de 1 minuto durante o teste de simuladores de pimenta:
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
Ainda não tenho nfsiostat na velha carpa hospedeira, mas estou trabalhando nisso.
/ proc / mounts
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
Configurações da placa de rede
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
Configurações de descarregamento:
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
Tudo isso em uma LAN com um comutador gigabit em full duplex entre os clientes nfs e o servidor nfs. Em outra nota, vejo um pouco mais de IO esperar na CPU por pimenta do que carpa, como esperado, já que suspeito que está esperando por operações do nfs.
Eu capturei pacotes com o Wireshark / Ethereal, mas não sou strong nessa área, então não tenho certeza do que procurar. Eu não vejo um monte de pacotes no Wireshark que estão destacados em vermelho / preto, então isso é tudo que eu procurei :). Este fraco desempenho do nfs se manifestou em nossos ambientes Postgres.
Quaisquer outras ideias ou dicas para solução de problemas? Deixe-me saber se posso fornecer mais informações.
UPDATE
Com o comentário do @ ehhite, experimentei dois perfis tuned-adm diferentes, mas sem alterações.
À direita da minha marca vermelha, há mais dois testes. A primeira colina é com o throughput-performance
e a segunda é com enterprise-storage
.
nfsiostat60doperfildearmazenamentocorporativo
nfsc:/vol/pg003mountedon/mnt/peppershare:op/srpcbklog1758.650.00read:ops/skB/skB/opretransavgRTT(ms)avgexe(ms)51.7503325.14064.2540(0.0%)8.64524.816write:ops/skB/skB/opretransavgRTT(ms)avgexe(ms)1655.183106416.51764.2930(0.0%)3.141159500.441
Atualização2
sysctl -a para pimenta