Hi there,

I am trying to diagnose a performance problem on a Sun T5120 running
Solaris 10. I see general poor performance using Java and, in
particular, loading classes. I have developed a simple java test that
loads all of the classes in a Crystal Reports JAR file (around 7000
classes) which takes much longer on the T5120 (40 secs) than on a Core
2 Duo windows PC (5 secs). I recognise that this time difference may
be down to hardware specification but if that is the case, I wish to
fully understand which aspect of the hardware (CPU, memory, disk etc.)
is limiting the performance of the T5120.

In order to try to explain this time difference, I the test on Solaris
using the dtrace toolkit. Running procsystime gives the following
results (I've condensed them to keep the email short):


Elapsed Times:

        SYSCALL          TIME (ns)
     ...
           stat           18498184
        fstat64           18720808
           open           21688773
         open64           41127563
         stat64           67024580
    resolvepath          104326254
          yield          514242236
           read          608379863
lwp_mutex_timedlock         1541179345
        pollsys        37961554776
       lwp_park        38822747920
  lwp_cond_wait      1530739381685
         TOTAL:      1610584447807

CPU Times

        SYSCALL          TIME (ns)
     ...
           stat           14066206
         munmap           14522555
         open64           22698725
        pollsys           24852893
  lwp_cond_wait           26192803
lwp_mutex_timedlock           30490184
         stat64           53125558
           read           55471522
    resolvepath           80374974
          yield          224775263
         TOTAL:          634822857

Syscall Counts

        SYSCALL              COUNT
     ...
         open64                613
          fcntl                635
        pollsys                647
           stat                704
  lwp_cond_wait                794
          close                834
lwp_mutex_timedlock                845
            brk                848
         llseek               1403
           read               1515
        fstat64               1593
    resolvepath               1700
         stat64               1778
          yield              27285
         TOTAL:              43946


I'm not an expert in dtrace, but what I take from this is that of the
total execution time (measured at 40 seconds), only 0.63 seconds is
spent actually executing on the CPU.

Q1: Is this a correct interpretation?

Suspecting that perhaps this 'missing' time was spent in I/O, I
executed iosnoop while the program ran, with the following results:

STRTIME              DEVICE  MAJ MIN   UID   PID D    BLOCK   SIZE
               PATHNAME ARGS
2010 Mar 18 09:22:55 sd1      32  13 10054 20116 R 32569904   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:22:55 sd1      32  13 10054 20116 R 32569920   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:22:56 sd1      32   8 10054 20116 R 42673424   8192
/usr/j2sdk-1.5.0_14/jdk1.5.0_14/jre/lib/rt.jar
2010 Mar 18 09:23:02 sd1      32  13 10054 20116 R 32569888   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:23:10 sd1      32  13 10054 20116 R 32564784   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:23:10 sd1      32  13 10054 20116 R 32564816   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:23:12 sd1      32   8 10054 20116 R  6395504   8192
/usr/lib/libfontconfig.so.1
2010 Mar 18 09:23:12 sd1      32   8 10054 20116 R  6395488   8192
/usr/lib/libfontconfig.so.1
2010 Mar 18 09:23:13 sd1      32   8 10054 20116 R  1823458   7168
/usr/openwin/lib/locale/iso_8859_4/X11/fonts/Type1/LucidaSansLat4.pfb
2010 Mar 18 09:23:14 sd1      32   8 10054 20116 R 42698368   8192
/usr/j2sdk-1.5.0_14/jdk1.5.0_14/jre/lib/charsets.jar
2010 Mar 18 09:23:14 sd1      32   8 10054 20116 R 42698464  73728
/usr/j2sdk-1.5.0_14/jdk1.5.0_14/jre/lib/charsets.jar
2010 Mar 18 09:23:18 sd1      32  13 10054 20116 R 32560384   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:23:20 sd1      32  13 10054 20116 R 32566144   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:23:23 sd1      32   8 10054 20116 R 42673584  32768
/usr/j2sdk-1.5.0_14/jdk1.5.0_14/jre/lib/rt.jar
2010 Mar 18 09:23:24 sd1      32  13 10054 20116 R 32549104   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar
2010 Mar 18 09:23:25 sd1      32  13 10054 20116 R 32556848   8192
/var/tmp/test-crystal/lib/cr/CrystalReportsRuntime.jar

My interpretation is that this is very little I/O which should not be
holding up the CPU.

Q2: Am I correct in saying that this is very little I/O?


I have looked at various dtrace tutorials online and it always seems
obvious from procsystime where the CPU time is going missing but here
I don't see anything so obvious.

Q3: Does anyone have any ideas as to how I could continue this
investigation to determine where the bulk of the execution time is
going?


Thanks in advance for any help.

Cheers,

Kevin.
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to