I'm running into a performance issue as well. I have 10 - 750 GB SATA hard drives @7200 RPM and 4GB RAM in this one system. I used ZFS as my file system and created a Raidz2. So I have 7 active drives with 2 parity drives leaving my 10th drive marked as a spare. When I copy files from a Windows machine to my configured NAS I am only getting speeds of 2.5MB - 5MB/s. I have prefetching disabled and I have tried to set the ARC as best as I could compared to other systems that people have related to mine but it seems that I'm stuck at those terrible speeds.
The hardware I'm using is about 5 years old, standard motherboard with an Intel Processor that is 64bit. So it's not the greatest of systems but in my opinion the hardware should be able to at least produce writing at 30MB/s. Maybe ZFS was the wrong choice for this kind of setup but I'd like to hear back from some people first before I blow away the raid and try again with some different settings such as using UFS instead.
Any ideas to increase this performance would be greatly appreciated.
1.) When you say 5 years old, what are the specifics? With many drives CPU's can become the limit with ZFS at higher speeds, but at the 2.5-5MB/s level this seems unlikely to be your issue. Just in case though, have you measured CPU load during reads and writes?
2.) Your RAM is on the low side. From what I have read for ZFS the rule of thumb is about a gig per TB, but more is better. I would go with at least 8GB for this system.
3.) If deduplication or compression are on, turn them off. Especially with an older CPU, and lower RAM amount you have, these will have HUGE performance impacts.
4.) What network card are you using? Having this low speeds due to network issues is uncommon, but it is still recommended to use a dedicated Intel NIC for NAS boxes, as they are so much more reliable and perform better than that Realtek garbage that comes on board on most systems.
5.) How is your windows box networked to the NAS box? Is it wireless, or does it use unusual networking at any point (powerline, ethernet over coax?). The speeds you are getting seem pretty typical for Wifi. They advertise up to 600Mbit/s, but between devices not always having multiband capability, multiple antennas, signal interference, signal strength, and overhead, I have never seen one come anywhere close to this advertised figure. More typical is 65Mbit/s on 802.11N devices (54MBit/s on 802.11G devices) less about half for signal issues and overhead, which places you right about in the speed range you are experiencing. (remember, there are 8 bits in a byte, so divide by 8 to go from Mbit/s (or Mb/s) to Mbyte/s (or MB/s).
Wired Ethernet is more reliable.
Gigabit ethernet is good for about 125MB/s less overhead, so ~100MB/s.
100Mbit ethernet is good for about 12.5MB/s less overhead, so ~10MB/s
Old 10Mbit ethernet will only give you ~1MB/s
More exotic solutions like powerline networking and Ethernet over Coax are sometimes good, sometimes bad, depending on the solution, the power of the lines, interference on the power grid, etc. etc. When I once had a powerline networking system it would work well, but randomly drop out. Took me a while to figure out that it dropped out whenever my ex used the vacuum cleaner anywhere in the house.
Also remember that the max speed between two systems is going to be the slowest component between them. If your server and Windows box both have gigabit ethernet adapters, but the ports oin your router/switch are only 100Mbit (common with many routers provided by ISP's), guess what? Your max speed is going to be 100Mbit, or ~10MB/s
You can determine if the problem is networking related or local to the box by doing a local drive speed test.
a.) Go to console on freenas. Press the number for the shell and hit enter
b.) change to ZFS Volume folder (typically cd/mnt/volume-name, note, unix uses the opposite slash as compared to DOS/Windows)
c.) do a write speed test by writing a large file full of zeroes from /dev/zero to a test file (dd if=/dev/zero of=testfile bs=2048k count=200)
d.) do a read speed test by reading the file you just wrote to /dev/null (dd if=testfile of=/dev/null bs=2048k count=200)
e.) Delete the test file so that it doesn't take up space (rm testfile)
Be patient, these read and write tests may take a while, but it is important that they write large files, or you will see a disproportionate impact from drive cache and ARC over-inflating your speeds and ruining your diagnosis.
Now that you have read and write speeds, you can compare them to what you are actually getting when transferring data from your windows box. (they will be in bytes per second, so divide by 1024 twice to get comparable numbers to Windows MB/s readings.)
If the local speed figures are much larger than your actual speeds, then something in the network (server NIC, cabling, switch/router (wifi) or windows NIC) is likely (but not necessarily) the problem.