Situação: Temos um servidor Ubuntu que hospeda três VMs usando o KVM. Todos os convidados, assim como o host, precisam acessar os mesmos arquivos em uma determinada subpasta de / var. Assim, a subpasta é exportada via NFS. Nosso problema é que o convidado pode ler / escrever no diretório com apenas metade da velocidade do host. A tabela de exportação é semelhante a esta
alice@host:~$ cat /etc/exports
/home/videos 192.168.10.0/24(rw,sync,no_root_squash)
em que o host tem o IP 192.168.10.2 e as VMs 192.168.10.1 {1..3}. / home / videos é um link simbólico para essa determinada subpasta em / var. Em particular, é / var / videos / genvids.
Esta é a linha relevante do fstab da VM:
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=4096,wsize=4096 0 0
O disco rígido tem uma taxa de dados sustentada de ~ 155 MB / s, que é verificada pelas saídas do hdparm -tT, bem como pelo dd:
alice@host:~$ dd if=/home/videos/4987_1359358478.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 2.04579 s, 154 MB/s
De dentro de uma VM, as coisas parecem diferentes:
bob@guest:~$ dd if=/mnt/nfs/4959_3184629068.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 4.60858 s, 68.3 MB/
Ajustar o tamanho do bloco ao tamanho da página do sistema de arquivos não teve um efeito satisfatório:
bob@guest:~$ dd if=/mnt/nfs/4925_1385624470.mp4 of=/dev/null bs=4096 count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 5.77247 s, 71.0 MB/s
Eu consultei várias páginas sobre o desempenho do NFS, mais relevantes as FAQs do NFS Parte B, e as respectivas Sintonização de desempenho Howto. A maioria das dicas não se aplica. Os outros não melhoraram os resultados. Há são tópicos aqui que lidam com desempenho de disco e KVM. No entanto, eles não cobrem o aspecto NFS. Esse segmento, mas a velocidade da rede não parece ser o fator limitante no nosso caso.
Para dar uma visão completa, este é o conteúdo das exportações etab com links simbólicos resolvidos e todas as opções de exportação ativas mostradas:
alice@host:~$ cat /var/lib/nfs/etab
/var/videos/genvids 192.168.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,
no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,
anonuid=65534,anongid=65534)
O que também me incomoda neste contexto - e o que não entendo - é a saída do procfile do nfsd:
alice@host:~$ cat /proc/net/rpc/nfsd
...
th 8 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
...
Para a terceira coluna e além, eu teria esperado valores diferentes de zeros após a leitura do disco dentro das VMs. No entanto, o nfsstat me diz que realmente havia operações de leitura:
alice@host:~$ nfsstat
...
Server nfs v3:
null getattr ...
9 0% 15106 3% ...
read write ...
411971 95% 118 0% ...
...
Então, o tópico é bastante complexo e eu gostaria de saber onde mais procurar ou se há uma solução fácil para isso.