You're running into the same problem I had with 2009.06 as they have
"corrected" a bug where the iSCSI target prior to 2009.06 didn't honor
completely SCSI sync commands issued by the initiator.
Some background :
Discussion:
http://opensolaris.org/jive/thread.jspa?messageID=388492
"corrected bug"
http://bugs.opensolaris.org/view_bug.do?bug_id=6770534
The upshot is that unless you have an SSD (or other high speed
dedicated device) attached as a ZIL (or slog) on 2009.06 you won't see
anywhere near the local speed performance that the storage is capable
of since you're forcing individual transactions all the way down to
disk and back up before moving onto the next SCSI block command.
This iSCSI performance profile is currently specific to 2009.06 and
does not occur on 2008.11. As a stopgap (since I don't have a budget
for SSDs right now) I'm keeping my production servers on 2008.11
(taking into account the additional potential risk, but these are
machines with battery backed SAS cards in a conditioned data center).
These machines are serving up iSCSI to ESX 3.5 and ESX 4 servers.
For my freewheeling home use where everything gets tried, crashed,
patched and put back together with baling twine (and is backed up
elsewhere...) I've mounted a RAM disk of 1Gb which is attached to the
pool as a ZIL and you see the performance run in cycles where the ZIL
loads up to saturation, flushes out to disk and keeps going. I did
write a script to regularly dd the ram disk device out to a file so
that I can recreate with the appropriate signature if I have to reboot
the osol box. This is used with the GlobalSAN initiator on OS X as
well as various Windows and Linux machines, physical and VM.
Assuming this is a test system that you're playing with and you can
destroy the pool with inpunity, and you don't have an SSD lying around
to test with, try the following :
ramdiskadm -a slog 2g (or whatever size you can manage reasonably with
the available physical RAM - try "vmstat 1 2" to determine available
memory)
zpool add <poolname> log /dev/ramdisk/slog
If you want to perhaps reuse the slog later (ram disks are not
preserved over reboot) write the slog volume out to disk and dump it
back in after restarting.
dd if=/dev/ramdisk/slog of=/root/slog.dd
All of the above assumes that you are not doing this stuff against
rpool. I think that attaching a volatile log device to your boot pool
would result in a machine that can't mount the root zfs volume.
It's easiest to monitor from the Mac (I find) so try your test again
with the Activity Monitor showing network traffic and you'll see that
it goes to a wire speed ceiling while it's filling up the ZIL and once
it's saturated your traffic will drop to near nothing, and then pick
up again after a few seconds. If you don't saturate the ZIL you'll see
continuous speed data transfer.
Cheers,
Erik
On 4 août 09, at 15:57, Charles Baker wrote:
My testing has shown some serious problems with the
iSCSI implementation for OpenSolaris.
I setup a VMware vSphere 4 box with RAID 10
direct-attached storage and 3 virtual machines:
- OpenSolaris 2009.06 (snv_111b) running 64-bit
- CentOS 5.3 x64 (ran yum update)
- Ubuntu Server 9.04 x64 (ran apt-get upgrade)
I gave each virtual 2 GB of RAM, a 32 GB drive and
setup a 16 GB iSCSI target on each (the two Linux vms
used iSCSI Enterprise Target 0.4.16 with blockio).
VMware Tools was installed on each. No tuning was
done on any of the operating systems.
I ran two tests for write performance - one one the
server itself and one from my Mac connected via
Gigabit (mtu of 1500) iSCSI connection using
globalSAN’s latest initiator.
Here’s what I used on the servers:
time dd if=/dev/zero of=/root/testfile bs=1048576k
count=4
and the Mac OS with the iSCSI connected drive
(formatted with GPT / Mac OS Extended journaled):
time dd if=/dev/zero of=/Volumes/test/testfile
bs=1048576k count=4
The results were very interesting (all calculations
using 1 MB = 1,084,756 bytes)
For OpenSolaris, the local write performance averaged
86 MB/s. I turned on lzjb compression for rpool (zfs
set compression=lzjb rpool) and it went up to 414
MB/s since I’m writing zeros). The average
performance via iSCSI was an abysmal 16 MB/s (even
with compression turned on - with it off, 13 MB/s).
For CentOS (ext3), local write performance averaged
141 MB/s. iSCSI performance was 78 MB/s (almost as
fast as local ZFS performance on the OpenSolaris
server when compression was turned off).
Ubuntu Server (ext4) had 150 MB/s for the local
write. iSCSI performance averaged 80 MB/s.
One of the main differences between the three virtual
machines was that the iSCSI target on the Linux
machines used partitions with no file system. On
OpenSolaris, the iSCSI target created sits on top of
ZFS. That creates a lot of overhead (although you do
get some great features).
Since all the virtual machines were connected to the
same switch (with the same MTU), had the same amount
of RAM, used default configurations for the operating
systems, and sat on the same RAID 10 storage, I’d say
it was a pretty level playing field.
While jumbo frames will help iSCSI performance, it
won’t overcome inherit limitations of the iSCSI
target’s implementation.
cross-posting with zfs discuss.
--
This message posted from opensolaris.org
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss