IHAC who is seeing very slow NFS transactions over ZFS. rfs3_write(), 
rfs3_create() and others are taking in the order of 17-20 seconds to 
complete. Profiling these transactions showing most of the time is spent 
in txg_wait_open() - waiting for transaction group to open.

We tried "zfs_nocacheflush: but it did n't help. iostat showing good 
service time (<10ms).

System is running Solaris 10 - 137137-09

00000301b616ec00      3000813e168      3017b9e3798   2  59      6002296f966
   PC: cv_wait+0x38    CMD:
   mv camshot_081118_000029.jpg camshot_081118_000059.jpg 
camshot_081118_000129.j
   p
   stack pointer for thread 301b616ec00: 2a104a9ceb1
   [ 000002a104a9ceb1 cv_wait+0x38() ]
     txg_wait_open+0x54()
     zfs_write+0x34c()
     fop_write+0x20()
     write+0x268()
     syscall_trap32+0xcc()

Timing txg_wait_open() shows:

txg_wait_open delay
   DELAY
            value  ------------- Distribution ------------- count
       4294967296 |                                         0
       8589934592 |@                                        1
      17179869184 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  33
      34359738368 |                                         0

txg_wait_open delay
   DELAY
            value  ------------- Distribution ------------- count
        134217728 |                                         0
        268435456 |@@                                       2
        536870912 |                                         0
       1073741824 |                                         0
       2147483648 |@                                        1
       4294967296 |                                         0
       8589934592 |@@@@@@@                                  7
      17179869184 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@           29
      34359738368 |                                         0

DTrace script:
#!/usr/sbin/dtrace -qs
fbt::txg_wait_open:entry
{
  self->t = timestamp;
}
fbt::txg_wait_open:return
/self->t/
{
   @a["DELAY"] = quantize(timestamp - self->t);
}
tick-5sec {
       printf("\ntxg_wait_open delay");
       printa(@a);
       trunc(@a);
}


I have also profiled rfs3_write(), rfs3_create() and other using DTrace 
and taken time delta and stack at each frame on all functions called by 
rfs3_* and see txg_wait_open() is the one taking majority of the time.

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

Reply via email to