I'm seeing a performance anomaly where opening a large file (but doing *no* I/O to it) seems to cause (or correlates to) a significant performance hit on a mirrored ZFS filesystem. Unintuitively, if I disable zfs_prefetch_disable, I don't see the performance degradation. It doesn't make sense that this would help unless there is some cache/VM pollution resulting from the open(2).

The basic situation is that there are 8 SAS applications running a statistical procedure. The 8 applications read the same 26GB file but each writes its own unique 41GB output file (using vanilla read(2)/write(2) of 4K/8K/16K I/O sizes). All I/O going to the same mirrored ZFS filesystem. The performance problem occurs only if the 41 GB output files exist. In this situation, SAS will open the file to be overwritten for exclusive read/write so no one will mess with it, write the output file using a temp name, and then do a rename() of temp file to real name when done. I've verified with dtrace, that no I/O is done to the original file that is to be overwritten.

If the files don't exist (or if zfs_prefetch_disable is set to true), the times for each of the 8 jobs looks similar to this (all jobs run in less than 5 hours):
# ../get-times.sh
FSUSER1.log:4:50:31.21
FSUSER2.log:4:51:09.99
FSUSER3.log:4:49:35.22
FSUSER4.log:4:50:31.05
FSUSER5.log:4:50:30.11
FSUSER6.log:4:50:29.51
FSUSER7.log:4:49:35.22
FSUSER8.log:4:51:08.53


If the output files exist (and I don't touch zfs_prefetch_disable), the times look like this (3/8 jobs run in less than 5 hrs, the other 5 run in 5.5 hours(almost 50 minutes longer)):
# ../get-times.sh
FSUSER1.log:5:35:30.77
FSUSER2.log:5:36:23.41
FSUSER3.log:5:32:16.61
FSUSER4.log:5:33:53.25
FSUSER5.log:4:49:54.28
FSUSER6.log:5:35:42.93
FSUSER7.log:4:49:54.86
FSUSER8.log:4:50:38.42


Does this behavior make sense or does tweaking zfs_prefetch_disable just trigger some other effect? For this test, setting that flag(disabling prefetch) doesn't seem to hurt performance (at least for this test scenario.




System specs:
-S10,U7
-2 way Nehalem (Xeon X55500, 8 virtual processors), 2.67GHz
-24GB RAM
- J4400 for storage (JBOD)

# zpool status zpl1
  pool: zpl1
 state: ONLINE
 scrub: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        zpl1         ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c0t2d0   ONLINE       0     0     0
            c0t3d0   ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c0t4d0   ONLINE       0     0     0
            c0t5d0   ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c0t6d0   ONLINE       0     0     0
            c0t7d0   ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c0t8d0   ONLINE       0     0     0
            c0t9d0   ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c0t10d0  ONLINE       0     0     0
            c0t11d0  ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c0t12d0  ONLINE       0     0     0
            c0t13d0  ONLINE       0     0     0

errors: No known data errors

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

Reply via email to