Hi Emmanuel,
As you suggested, I played a little with networking options. First of all I
did some more tests disabling group communication (no <Distribution> element
in virtualdatabase config file, am I right?) , without any changes in
results: [EMAIL PROTECTED] and receive0 with predominant cost.
After this test I wrote a simple Java multithreaded TCP client/server
application: the client has many parallel threads (>100), each one doing
serial connection to the multithreaded server to send many data: I noticed no
CPU consumption at all (<10%, 10MByte/s transfer rate).
Then I tried to check PostgreSQL JDBC driver performance: I can obtain >4000
simple SELECTs per seconds, without CPU load (<10%).
I also did some tests with Fedora 8 (the controller), runnning on a virtual
machine, connecting to 2 PostgreSQL backends, obtaining 100% cpu load and
only 150kbyte/s network traffic.
I noticed the receive0 with high cpu load should be, from hprof trace, related
to org.continuent.sequoia.controller.core.PingResponder.run:
TRACE 340693: (thread=200024)
java.net.PlainDatagramSocketImpl.receive
(PlainDatagramSocketImpl.java:Unknown line)
java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
java.net.DatagramSocket.receive(DatagramSocket.java:712)
org.continuent.sequoia.controller.core.PingResponder.run(PingResponder.java:83)
May you suggest me other tests?
Many thanks in advance
Danilo Levantesi
Il Monday 28 April 2008 11:31:37 Emmanuel Cecchet ha scritto:
> Hi Danilo,
>
> The time accounted in java.lang.Object.wait and
> java.net.PlainSocketImpl.socketAccept is just waiting time, so this one
> does not consume cpu. The profiler does not account for active cpu time
> but just for time spent in a method (which is likely to be long if you
> wait and there is no activity).
> From the second trace, it looks like
> java.net.PlainDatagramSocketImpl.receive0 has a predominant cost. I
> don't know why your cpu usage is so high for networking. If you remove
> the time accounted in the methods just waiting, you spend all the time
> in network I/O. So there might be a problem with your network driver
> configuration that does not offload anything and keeps the cpu busy.
> Another explanation would be a group communication misconfiguration (try
> a config without group communication to see if the numbers change
> drastically). Otherwise, it does not look like you have any hotspot in
> the controller code (which is a good news for me :-) ).
>
> Best regards,
> Emmanuel
>
> > I did some tests with HPROF, and I noticed different results using
> > cpu=times and cpu=samples. In the former case 17.81% is
> > java.lang.Object.wait, in the latter 24.14% is
> > java.net.PlainSocketImpl.socketAccept.
> > Hope those results can help (I found them little confusing...)
> >
> > Danilo Levantesi
> >
> >
> > ------------------------------------------
> > Configuration
> > ------------------------------------------
> > 1 Dedicated controller, 2 PostgreSQL backends
> > 100Mb dedicated LAN
> >
> > Controller:
> > Slackware 12, 2.6.21.5-smp, 2Gb RAM, JVM 1.5.0_15
> >
> > JDBCBench (read-only queries):
> > Clients: 10
> > Transactions per client: 250
> >
> > ------------------------------------------
> > HPROF options:
> > heap=all
> > cpu=times
> > monitor=y
> > format=a
> > depth=5
> > interval=10
> > cutoff=0.0001
> > lineno=y
> > thread=n
> > doe=y
> > msa=n
> > force=y
> > verbose=y
> >
> > CPU TIME (ms) BEGIN (total = 42353256) Mon Apr 28 10:49:33 2008
> > rank self accum count trace method
> > 1 17.81% 17.81% 17 355483 java.lang.Object.wait
> > 2 4.91% 22.72% 9 325458 java.net.PlainSocketImpl.accept
> > 3 4.77% 27.49% 467 350536
> > java.net.PlainDatagramSocketImpl.receive 4 4.61% 32.10% 2 360904
> > java.lang.Object.wait
> > 5 4.45% 36.56% 4 355482 java.lang.Object.wait
> > 6 4.44% 41.00% 2 366671
> > org.continuent.sequoia.common.locks.DeadlockDetectionThread.run
> > 7 4.41% 45.41% 2 366670
> > org.continuent.sequoia.controller.connection.VariablePoolConnectionManage
> >r$RemoveIdleConnectionsThread.run 8 2.47% 47.88% 1 387344
> > java.lang.ref.ReferenceQueue.remove 9 2.42% 50.30% 8501 305696
> > java.lang.ref.ReferenceQueue.remove 10 2.39% 52.68% 202 352582
> > java.net.PlainSocketImpl.accept 11 2.38% 55.06% 188 305685
> > java.lang.Object.wait
> > 12 2.35% 57.41% 12 358500 java.net.PlainSocketImpl.accept
> > 13 2.31% 59.72% 1 367902 java.lang.Object.wait
> > 14 2.31% 62.03% 1 367904 java.lang.Object.wait
> > 15 2.30% 64.33% 16 351203 java.lang.Object.wait
> > 16 2.30% 66.62% 1476 348085
> > org.continuent.appia.core.TimerManager.goToSleep
> > 17 2.29% 68.91% 1 365236 java.lang.Object.wait
> > 18 2.25% 71.17% 21 354809 java.lang.Object.wait
> > 19 2.11% 73.27% 817 358521
> > java.net.PlainDatagramSocketImpl.receive 20 2.05% 75.32% 7520 359053
> > java.net.SocketInputStream.read 21 2.03% 77.35% 6 330056
> > java.lang.ref.ReferenceQueue.remove 22 1.62% 78.98% 1733522 359723
> > java.util.regex.Pattern$Bound.check 23 1.25% 80.22% 11 366896
> > org.continuent.sequoia.controller.virtualdatabase.VirtualDatabaseWorkerTh
> >read.run 24 1.03% 81.25% 3384549 359720
> > java.lang.CharacterDataLatin1.getType 25 1.00% 82.25% 1733522 359718
> > java.lang.Character.codePointAt [cut below 1%]
> >
> > ------------------------------------------
> > Clients: 10
> > Transactions per client: 250
> >
> > HPROF options:
> > heap=all
> > cpu=samples
> > monitor=y
> > format=a
> > depth=5
> > interval=10
> > cutoff=0.0001
> > lineno=y
> > thread=n
> > doe=y
> > msa=n
> > force=y
> > verbose=y
> >
> > CPU SAMPLES BEGIN (total = 188764) Mon Apr 28 11:03:58 2008
> > rank self accum count trace method
> > 1 24.14% 24.14% 45561 305806 java.net.PlainSocketImpl.socketAccept
> > 2 23.63% 47.76% 44599 312013
> > java.net.PlainDatagramSocketImpl.receive0 3 11.81% 59.58% 22301 311638
> > java.net.PlainSocketImpl.socketAccept 4 11.67% 71.25% 22030 313674
> > java.net.PlainSocketImpl.socketAccept 5 11.67% 82.92% 22029 313675
> > java.net.PlainDatagramSocketImpl.receive0 6 2.54% 85.46% 4798 306656
> > java.net.SocketInputStream.socketRead0 7 2.51% 87.97% 4735 313799
> > java.net.SocketInputStream.socketRead0 8 0.65% 88.62% 1232 312093
> > java.net.SocketInputStream.socketRead0 9 0.57% 89.19% 1079 309857
> > org.postgresql.core.v3.QueryExecutorImpl.receiveFields
> > 10 0.53% 89.72% 999 313806 java.lang.Object.<init>
> > 11 0.30% 90.02% 569 302519 java.lang.Object.<init>
> > 12 0.24% 90.26% 446 314038 java.lang.Object.<init>
> > 13 0.21% 90.47% 405 300213 java.lang.Object.<init>
> > 14 0.21% 90.68% 396 314041 java.nio.HeapByteBuffer.<init>
> > 15 0.18% 90.87% 342 314066 java.lang.Object.<init>
> > 16 0.15% 91.02% 287 309330 java.lang.StringCoding.trim
> > 17 0.14% 91.15% 255 314065 java.lang.Object.<init>
> > 18 0.11% 91.26% 205 309643 java.lang.StringCoding$CharsetSE.encode
> > 19 0.10% 91.36% 188 314087 java.lang.Object.<init>
> > 20 0.09% 91.45% 178 313038 java.lang.Thread.yield
> > 21 0.09% 91.55% 177 314052 java.lang.Object.<init>
> > 22 0.09% 91.64% 174 300185 java.lang.StringCoding.trim
> > 23 0.09% 91.73% 173 313747 java.lang.String.<init>
> > 24 0.09% 91.82% 172 313909 java.lang.Object.<init>
> > 25 0.09% 91.91% 171 314073 java.lang.Object.<init>
> > 26 0.09% 92.00% 169 314074 java.lang.Object.<init>
> > 27 0.09% 92.09% 166 313536 java.lang.Object.<init>
> > 28 0.09% 92.18% 163 312213 java.lang.Object.<init>
> > 29 0.09% 92.26% 163 314067 java.lang.Object.<init>
> > 30 0.08% 92.35% 159 314083 java.lang.Object.<init>
> > 31 0.08% 92.43% 158 314078 java.lang.Object.<init>
> > 32 0.08% 92.52% 157 314090 java.lang.Object.<init>
> > 33 0.08% 92.60% 156 314091 java.lang.Object.<init>
> > 34 0.08% 92.68% 155 313835 java.lang.Object.<init>
> > 35 0.08% 92.76% 152 309273 java.lang.Object.<init>
> > [cut]
> >
> > Il Friday 25 April 2008 16:02:31 Emmanuel Cecchet ha scritto:
> >> Hi,
> >>
> >>> Your observation is completely true: this piece of configuration is
> >>> part of one of the many tests I did and I forgot it in the
> >>> configuration file. By the way, I've just thrown it away, but no
> >>> changes in results: high cpu utilization still exists...
> >>>
> >>> May it depend on some operating system settings? But in this case, I
> >>> have high load under Windows too, and it sounds strange.
> >>> Or some JVM setting? I tried to increase heap size (-Xmx1024m
> >>> -Xms1024m) without results.
> >>> Is there a "certified" platform/configuration to run Sequoia on?
> >>
> >> I have not been running performance tests on Windows for quite a long
> >> time so I can't tell.
> >> Most Linux distributions work fine. Continuent certifies its products on
> >> RedHat, I personally use Fedora on my workstation.
> >>
> >> It would be interesting to use hprof
> >> (http://java.sun.com/developer/technicalArticles/Programming/HPROF.html)
> >> to see where this cpu consumption comes from. This might help finding
> >> out something obviously wrong.
> >>
> >> Your feedback is much appreciated,
> >> Emmanuel
> >
> > _______________________________________________
> > Sequoia mailing list
> > [email protected]
> > https://forge.continuent.org/mailman/listinfo/sequoia
_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia