Hello Everyone,
I have been investigating issues with my Unraid server and poor write performance for some time, and after many searches through the forum decided I would make a thread to see if anyone else has any other ideas.
Issue
From a variety of clients write performance is at best 50% of what I would expect it to be, regardless of client (Windows/Linux) or Protocol (SMB/NFS).
Environment
Unraid
- i3 - 9100
- 64 GB DDR4 ECC
- Array: A mix of 8 - 16tb HDDs from a mix of vendors
- ArrayCache (writecache): A single 3TB SAS HDD just for saving on parity overhead when writing
- NVME Cache (apppool): WD Blue SN570 500GB (just for Plex, but have been using for testing throughput)
- Connected by 10Gb DAC to Switch
MyPC
- Connected by 2.5Gb (Realtek) to Switch
- I can provide specs if relevant
Linux Client 1
- Dell 3630
- OS: Proxmox
- Connected by 10Gb DAC to Switch
Linux Client 2
- Lenovo M720Q
- OS: Proxmox
- Connected by 1Gb NIC to Switch
Switch
-QSW-M2116P-2T2S-US
Troubleshooting
For the sake of ruling out the Array and ArrayCache I am just looking at Performance over the network to the NVME Cache which should be capable of some reasonable perf, I don't have screenshots from my earlier testing of the Array and ArrayCache and currently I have a script running thats keeping those disks busy so I will circle back around to those.
I started by doing some FIO Checks to see the local disk speed on Unraid with the mayadata/fio app. Using this command to write to the cache directly : fio --name=fiotest --filename=/mnt/apppool/writetest --size=1Gb --rw=randread --bs=8K --direct=1 --numjobs=2 --io
engine=libaio --iodepth=32 --group_reporting --runtime=60
NVME Cache:
IPerf3 from the 3 Clients:
LinuxClient1:
LinuxClient2:
WindowsClient:
This is the one that confuses me. Despite a 2.5Gb NIC the perf to Unraid (and to the other two clients) is all over the place and quite low, however only in one direction, which I have read is an issue with Realtek NICs. But this is obviously a network issue. So I have taken this client out of the testing, as the other two clients are at least connecting to each other and to Unraid at full link speed via Iperf.
So what I would expect from here is that since the Disk is capable of 976MiB/s to 1178 MiB/s that I should be able to fully saturate a 1GB write, or at least get 2-3Gbps of write performance if I write to this disk via NFS from the client with the 10Gb NIC.
So I used NFS to mount the NVMe drive with the following in /etc/fstab
10.10.100.10:/mnt/user/Plex /plex nfs defaults,nofail 0 0
and just to verify that the share /mnt/user/Plex is using only the cache:
So from the NFS Mount on LinuxClient1 I do an ls in the directory /plex and it takes quite a while to return anything the first time, which I find sort of odd as there isn't much in the directory. Then I use the following command to test write perf:
time dd if=/dev/zero of=/plex/testfile bs=16k count=128k
and I'm seeing an output of 60MB/s (ish) from both Linux Clients.
This does not feel like anywhere what we should expect from this based on iPerf and FIO. Is there something that I am missing or am I just ignorant of the expected perf via NFS/SMB?
Thanks in advance for any help.
EDIT:
Decided to also run a FIO from the Linux Clients. The Perf seems to jump all over the place. On Client 2 one run had 50MB/s and another time it was in the Kbps range. Client 1 had 1 good run at 300MB/s and then followed up with the screenshot below. Is this maybe the SSD cache or something?
From Client 1:
From Client 2: