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


2008/4/24, Emmanuel Cecchet <[EMAIL PROTECTED]>:

    Hi Danilo,

    If it's a read-only test, the group communication is never used.
    There is an obvious wrong setting:

          <VirtualDatabase name="myDB"
                  maxNbOfConnections="15"
                  minNbOfThreads="10"
                  maxNbOfThreads="10">

    You are limiting Sequoia to 10 threads (so that's a maximum of 10
    connections since it uses 1 thread per connection).
    For sure performance cannot scale with such settings.
    You also limit the connection pools to 15 connections which is
    unlikely to scale with 200 clients.

    I would recommend to use the default settings first before trying
    to alter the configuration.

    Keep us posted with your results,
    Emmanuel

        I did not mention, but I also tried to use the controllor and
        the DB on the same machine.
        With respect to JDBCBench, I use only a read test with simple
        queries. The clients vary from 5 to 200 and the reads from 100
        to 10000. All the test brought to the same performances (the
        number of txn/s depends where the controller is located, but
        in all cases it has a 100% load).
        I also played a bit with the maximum number of clients
        allowed, and the controller becomes not overloaded only with 3
        parallel clients...

        >From the console, with "show backend *", I can see the queries
        are dispatched among the backends.
        Only using the Dual-Xeon host as controller and two notebook
        (slow hard disks) as backends, I can see that the backends are
        saturated.

        The bad performance still persists with only one controller in
        the network (in that case I assume - but I think I am wrong -
        the group communications protocol does not play an important
        role). For the communication protocol, I always used the
        default configuration files shipped with the Sequoia archive.

        If it can be useful, following you can find my configuration.

        Thanks,
        Danilo Levantesi

        myDB-raidb1.xml:

        <SEQUOIA>
               <VirtualDatabase name="myDB"
                       maxNbOfConnections="15"
                       minNbOfThreads="10"
                       maxNbOfThreads="10">

               <Distribution
        hederaPropertiesFile="/hedera_appia.properties">
                   <MessageTimeouts/>
               </Distribution>

              <Backup>
                  <Backuper backuperName="pgdump"
        
className="org.continuent.sequoia.controller.backup.backupers.PostgreSQLBinaryBackuper"
        />
             </Backup>

             <AuthenticationManager>
                 <Admin>
                     <User username="admin" password=""/>
                </Admin>
                <VirtualUsers>
                     <VirtualLogin vLogin="sequoia" vPassword="sequoia"/>
                </VirtualUsers>
            </AuthenticationManager>

               <DatabaseBackend name="backend1"
        driver="org.postgresql.Driver"
                   url="jdbc:postgresql://10.0.0.101:5432/sequoia
        <http://10.0.0.101:5432/sequoia>"
                   connectionTestStatement="select now()">
                   <DatabaseSchema dynamicPrecision="table" />
<ConnectionManager vLogin="sequoia" rLogin="sequoia"
                                                     rPassword="sequoia">
                       <VariablePoolConnectionManager
                             initPoolSize="10"
                             minPoolSize="5"
                             maxPoolSize="15"
                             idleTimeout="30"
                             waitTimeout="10" />
                  </ConnectionManager>
              </DatabaseBackend>

               <DatabaseBackend name="backend2"
        driver="org.postgresql.Driver"
                   url="jdbc:postgresql://10.0.0.102:5432/sequoia
        <http://10.0.0.102:5432/sequoia>"
                   connectionTestStatement="select now()">
                   <DatabaseSchema dynamicPrecision="table" />
<ConnectionManager vLogin="sequoia" rLogin="sequoia"
                                                     rPassword="sequoia">
                       <VariablePoolConnectionManager
                             initPoolSize="10"
                             minPoolSize="5"
                             maxPoolSize="15"
                             idleTimeout="30"
                             waitTimeout="10" />
                  </ConnectionManager>
              </DatabaseBackend>

            <RequestManager>
               <RequestScheduler>
                  <RAIDb-1Scheduler level="passThrough"/>
               </RequestScheduler>

              <RequestCache>
                  <MetadataCache/>
                  <ParsingCache/>
                 <ResultCache granularity="table"/>
              </RequestCache>

             <LoadBalancer>
                <RAIDb-1>
                   <WaitForCompletion policy="first"/>
                   <RAIDb-1-LeastPendingRequestsFirst/>
                </RAIDb-1>
             </LoadBalancer>

            <RecoveryLog driver="org.postgresql.Driver"
url="jdbc:postgresql://127.0.0.1:5432/sequoia_recovery
        <http://127.0.0.1:5432/sequoia_recovery>"
                     login="sequoia"              password="sequoia">
<RecoveryLogTable tableName="RECOVERY" logIdColumnType="BIGINT NOT NULL"
                 vloginColumnType="VARCHAR NOT NULL"
        sqlColumnType="VARCHAR NOT NULL"
                 extraStatementDefinition=",PRIMARY KEY (log_id)"/>
               <CheckpointTable tableName="CHECKPOINT"
                 checkpointNameColumnType="VARCHAR NOT NULL"/>
               <BackendTable tableName="BACKEND"
                 databaseNameColumnType="VARCHAR NOT NULL"
                 backendNameColumnType="VARCHAR NOT NULL"
                 checkpointNameColumnType="VARCHAR NOT NULL"/>
               <DumpTable tableName="DUMP" dumpNameColumnType="VARCHAR
        NOT NULL"
                 dumpDateColumnType="TIMESTAMP"
                 dumpPathColumnType="VARCHAR NOT NULL"
                 dumpFormatColumnType="VARCHAR NOT NULL"
                 checkpointNameColumnType="VARCHAR NOT NULL"
                 backendNameColumnType="VARCHAR NOT NULL"
                 tablesColumnType="VARCHAR NOT NULL"/>
             </RecoveryLog>

           </RequestManager>

         </VirtualDatabase>

        </SEQUOIA>
        Il Thursday 24 April 2008 18:54:40 hai scritto:
            Hi Danilo,

            You should avoid using Sequoia 3, it is not supported
            anymore. Use the
            latest 2.10 branch code until 2.10.10 is released.
            What is the workload generated by JDBCBench?
            How many reads? How many writes? How much concurrency (how
            many clients
            in parallel)?
            Given the throughput you obtain with a single database
            (3500/sec), I
            guess the queries are extremely simple. The fact that your
            backends are
            not doing much with Sequoia is probably because you have a
            lot of writes
            that need to be serialized and it is expected that writes
            don't scale
            with Sequoia (we have to eliminate the indeterminism of
            the workload by
            total ordering).
            The high cpu load on the controller is likely due to a bad
            group
            communication configuration. Other possibilities are a bug
            or another
            misconfiguration (avoid caching if you have a lot of writes).
            Also if a single node is not saturated by the workload you
            won't see any
            improvement by adding nodes.
            Using dedicated nodes add network latency so that can also
            have a
            significant impact especially if you workload has a
            limited parallelism.

            Don't hesitate to give us more details about your
            JDBCBench workload.
            Thanks for your feedback,
            Emmanuel

                I am trying a RAIDb-1 Sequoia cluster. My
                configuration consists of:
                - one or two dedicated controllers
                - each controller supported by 2 PostgreSQL or MySQL
                hosts as backends
                Each controller was tested with different operating
                systems:
                - Slackware 12.0 (with kernel 2.6.21.5-smp SMP)
                - Debian 4 (2.6.18-4-686 SMP)
                - Gentoo (2.6.24)
                - RedHat Enterprise 4 (2.6.9-5.ELsmp  SMP)
                - Windows XP Professional SP 2
                with different Java VMs:
                - J2RE 1.4.2
                - JDK 1.5.0_15
                - JDK 1.6
                and with different hardware:
                - 2 [EMAIL PROTECTED],  2Gb Ram
                - Pentium 4 [EMAIL PROTECTED], 2 Gb Ram
                - Pentium 4 @3GHz, 512 Mb Ram
                - Virtual Machine

                With all the configurations, using the tool JDBCBench
                (executed from a
                dedicated host), I noticed a big cpu load on the
                controller and very poor
                performance.
                For example, with a direct access to a single
                PostgreSQL node I can reach
                3500 transactions/sec, instead of a 800txn/s obtained
                by a controller
                with 2 PostgreSQL hosts.
                In the latter case, the DB hosts are not overloaded:
                PostgreSQL (and
                MySql) uses about 5% CPU and generate only 150Kbyte/s
                network traffic.

                I tried to use both JGroups and Appia (both SEQ and
                TOKEN, UDP and TCP)
                with the same results (only few differences, but
                always with high cpu
                load).

                I also tried Sequoia 2.10.9, 3.0-beta2 and 3.0-beta3
                (I can't use cvs
                version because I get a null pointer exception in
                Controller.java:185, in
                function sendJmxNotification(), with respect to
                notificationBroadcasterSupport).

                I used the last available JDBC drivers for PostgreSQL
                (postgresql-8.2-508.jdbc3.jar) and for MySQL
                (mysql-connector-java-5.1.5-bin.jar).

                I also enabled cache and disabled SQL monitoring,
                without big
                improvements. Also tried different schedulers
                (RoundRobin and
                LeastPendingRequestsFirst), with both
                WaitForCompletion policy "all" and
                "first".

                >From the published presentations, I can read that the
                performance with
                    Sequoia
                should increase, whereas in my case they decrease (I
                need about 3
                controllers, each one with 2 backends, to reach the
                same performance of a
                single PostgreSQL host). Searching in the mailing list
                I read some users
                with the same problems, but I could not find a solution.

                Any help is very appreciated.

                Yours faithfully,
                Danilo Levantesi


_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia

Reply via email to