taxa de transferência lenta NFS

1

Eu experimentei alguns problemas com taxa de transferência menor que o esperado com o NFS. Depois de examinar várias opções (googling sem fim), incluindo configuração de raid, interfaces de rede, etc., eu queria testar uma configuração básica, exportar um ramdisk montado em / media / ramdisk e acessá-lo através de localhost.

Os testes com o ramdisk mostram o mesmo padrão de problemas de desempenho que a minha exportação NFS SSD RAID0, com um grande impacto no desempenho ao acessar via NFS, e tanto o ataque SSD quanto o ramdisk atingem o máximo em aprox. 13K IOPS lidos e 4K IOPS escrevem.

Servidor:

Ubuntu 18.04, totalmente atualizado. VM com 5 GB de RAM e 8 processadores. (CPU do host: Intel (R) Core (TM) i7-4800)

Conteúdo de / etc / exports:

/media/ramdisk       *(rw,async,no_subtree_check,fsid=1)

Montado via:

sudo mount 127.0.0.1:/media/ramdisk /mnt/ramdisk -o async

Saída do comando mount:

127.0.0.1:/media/ramdisk on /mnt/ramdisk type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)

Usando o fio para testar a velocidade do ramdisk sem o NFS com o seguinte comando:

sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Eu recebo:

read: IOPS=283k, BW=1107MiB/s (1160MB/s)(3070MiB/2774msec)
write: IOPS=94.7k, BW=370MiB/s (388MB/s)(1026MiB/2774msec)
cpu          : usr=21.89%, sys=78.07%, ctx=5, majf=0, minf=7

Muito rápido, como esperado

Teste via NFS com o seguinte comando:

sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test2 --filename=/mnt/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Eu recebo:

read: IOPS=12.7k, BW=49.6MiB/s (51.0MB/s)(3070MiB/61951msec)
write: IOPS=4239, BW=16.6MiB/s (17.4MB/s)(1026MiB/61951msec)
cpu          : usr=5.24%, sys=21.16%, ctx=786004, majf=0, minf=5

Estou monitorando o sistema no topo durante o teste, e nem a CPU nem a rede estão particularmente estressadas durante o teste.

Usando dd diretamente no ramdisk com:

sudo dd if=/media/ramdisk/test of=/dev/null bs=1M iflag=nocache status=progress

Eu recebo:

4294967296 bytes (4.3 GB, 4.0 GiB) copied, 0.691044 s, 6.2 GB/s

Fazendo o mesmo via NFS (/ mnt / ramdisk / test), eu recebo:

4294967296 bytes (4.3 GB, 4.0 GiB) copied, 2.58302 s, 1.7 GB/s

Eu aumentei RPCNFSDCOUNT para 64

Rodando iperf no localhost, recebo

[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  64.6 GBytes  55.5 Gbits/sec

Portanto, aparentemente, o rendimento da rede é bom.

Então, o que pode estar atrasando o desempenho do NFS?

    
por Mikkel Nielsen 22.10.2018 / 21:45

1 resposta

3

sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Oh não :-(, você está usando --iodepth=64 com libaio ioengine e direct=0 , então este comando provavelmente não se comportará como você está esperando! Veja o warning no fio help / manual sobre não usar direct=1 ao usar libaio ioengine :

libaio

Linux native asynchronous I/O. Note that Linux may only support queued behavior with non-buffered I/O (set direct=1 or buffered=0). This engine defines engine specific options. [emphasis added]

então libaio provavelmente está agindo como se iodepth=1 ... (veja link para uma explicação mais detalhada)

So what can be holding back the NFS performance?

Eu tenho medo que o trabalho de comando de fio que você criou esteja atrasando você - talvez você precise usar opções diferentes e / ou um mecanismo de E / S diferente?

PS: É muito improvável que você esteja empurrando E / S suficiente para que --gtod_reduce=1 faça alguma diferença para você ...

    
por 04.11.2018 / 09:46