Marko Milisavljevic wrote:
I was trying to simply test bandwidth that Solaris/ZFS (Nevada b63) can
deliver from a drive, and doing this: dd if=(raw disk) of=/dev/null gives
me around 80MB/s, while dd if=(file on ZFS) of=/dev/null gives me only
35MB/s!?.

Our experience is that ZFS gets very close to raw performance for streaming reads (assuming that there is adequate CPU and memory available).

When doing reads, prefetching (and thus caching) is a critical component of performance. It may be that ZFS's prefetching or caching is misbehaving somehow.

Your machine is 32-bit, right? This could be causing some caching pain... How much memory do you have? While you're running the test on ZFS, can you send the output of:

echo ::memstat | mdb -k
echo ::arc | mdb -k

Next, try running your test with prefetch disabled, by putting
set zfs:zfs_prefetch_disable=1
in /etc/system and rebooting before running your test. Send the 'iostat -xnpcz' output while this test is running.

Finally, on modern drive the streaming performance can vary by up to 2x when reading the outside vs. the inside of the disk. If your pool had been used before you created your test file, it could be laid out on the inside part of the disk. Then you would be comparing raw reads of the outside of the disk vs. zfs reads of the inside of the disk. When the pool is empty, ZFS will start allocating from the outside, so you can try destroying and recreating your pool and creating the file on the fresh pool. Alternatively, create a small partition (say, 10% of the disk size) and do your tests on that to ensure that the file is not far from where your raw reads are going.

Let us know how that goes.

--matt
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to