[ https://issues.apache.org/jira/browse/TINKERPOP-2445?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17240445#comment-17240445 ]
Divij Vaidya commented on TINKERPOP-2445: ----------------------------------------- *Benchmark results* || ||3.4.8||3.4.9|| |setup and close 100 connections|2116 ms|35 ms| |setup and close 32 connections|2081 ms|13 ms| |setup and close 1 connection|2046 ms|2 ms| *Benchmark setup (uses JMH for micro benchmarking)* Machine: MacBook Pro (16-inch, 2019) Memory: 16 GB 2667 MHz DDR4 Processor: 2.6 GHz 6-Core Intel Core i7 Benchmark uses standard gremlin-server with default configuration for testing. Benchmark code: {code:java} {code} *package com.diviv.test; import groovy.util.logging.Slf4j; import org.apache.tinkerpop.gremlin.driver.Client; import org.apache.tinkerpop.gremlin.driver.Cluster; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.TimeUnit; @Slf4j public class TestAppUsingClient \{ private static Logger log = LoggerFactory.getLogger(TestAppUsingClient.class); @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) public void initClient() { Cluster cluster = null; try { log.info("Setup:Start Init the cluster."); Cluster.Builder builder = Cluster.build(); builder.addContactPoint("localhost"); builder.port(8182); builder.maxConnectionPoolSize(1); builder.minConnectionPoolSize(1); cluster = builder.create(); Client client = cluster.connect(); client.init(); } finally \{ cluster.close(); } } public static void main(String[] args) throws RunnerException \{ Options opt = new OptionsBuilder() .include(TestAppUsingClient.class.getSimpleName()) .forks(1) .build(); new Runner(opt).run(); } }* > Speed up client initialization > ------------------------------ > > Key: TINKERPOP-2445 > URL: https://issues.apache.org/jira/browse/TINKERPOP-2445 > Project: TinkerPop > Issue Type: Improvement > Components: driver > Affects Versions: 3.5.0, 3.4.8 > Reporter: Divij Vaidya > Priority: Minor > Labels: breaking > Attachments: screenshot-1.png > > > The current Java client has a lot of initialization overhead. Some of the > things we could do to trim the fat are: > 1. Parallelize the connection creation inside a connection pool, i.e. make > [this for > loop|https://github.com/apache/tinkerpop/blob/3.4-dev/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ConnectionPool.java] > parallel. > 2. Do not create a bootstrap [for every > connection|https://github.com/apache/tinkerpop/blob/3.4-dev/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java#L111]. > A single bootstrap could be reused. > 3. Remove SASL Handler from the pipeline after negotiation is complete for a > connection. > 4. Do not initialize SASL Handler if not required. > As part of this task, we should profile the start-up time and identify other > places where we could optimize the start-up time. -- This message was sent by Atlassian Jira (v8.3.4#803005)