Cache performance for LOCAL mode + setIndexedTypes

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Cache performance for LOCAL mode + setIndexedTypes

AndreyVel
Hello, I have created simple test for testing performance put operations
on single computer,
can anybody explain why performance for LOCAL mode different for Indexed
and non Indexed mode?


      Cache performance put(Integer, String)/sec: one client and 2
      remote servers.

CacheMode TRANSACTIONAL TRANSACTIONAL
setIndexedTypes(Integer, String) ATOMIC ATOMIC
setIndexedTypes(Integer, String)
LOCAL 45154 107306 340627 581250
REPLICATED 3270 2865 7272 5694
PARTITIONED 6773 5403 8558 6714


VM options -Xms1g -Xmx1g
Topology snapshot [ver=5, servers=2, clients=1, CPUs=8, heap=3.0GB]


public class CachePerformance {

     private static int CACHE_SIZE =100 * 1000;
     private static StringCACHE_NAME ="cachePerf";

     public static void main(String[] args) {
         try {
             Ignition.setClientMode(true);
             IgniteConfiguration igniteCfg =new IgniteConfiguration();
             igniteCfg.setPeerClassLoadingEnabled(true);

             Ignite ignite = Ignition.start(igniteCfg);
             CachePerformance.execute(ignite);
         }catch (Throwable ex) {
             ex.printStackTrace();
         }
     }

public static void execute(Ignite ignite)throws Exception {

     Random rand =new Random();

     for (CacheMode cacheMode : CacheMode.values()) {

         for (CacheAtomicityMode atomMode : CacheAtomicityMode.values()) {
             for (int indexMode =0; indexMode <=1; indexMode++) {

                 CacheConfiguration<Integer, String> cacheCfg =new CacheConfiguration<>(CACHE_NAME);
                 if (indexMode ==1)
                     cacheCfg.setIndexedTypes(Integer.class, String.class);

                 cacheCfg.setAtomicityMode(atomMode);
                 cacheCfg.setCacheMode(cacheMode);

                 ignite.destroyCache(CACHE_NAME);
                 IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheCfg);
                 String cacheDesc ="cacheMode=" + cacheMode +", atomMode=" + atomMode +", indexMode=" + indexMode;

                 long time = System.nanoTime();
                 for (int ind =0; ind <CACHE_SIZE; ind++) {
                        Integer key = rand.nextInt();
                        cache.put(key,"=" + ind);
                 }

                 long deltaMs = (System.nanoTime() - time) /1000000;
                 long perfSec = (deltaMs ==0) ?0 :1000 *CACHE_SIZE / deltaMs;
                 System.out.println(cacheDesc +", Perf/Sec = " + perfSec);
             }
         }
     }
Reply | Threaded
Open this post in threaded view
|

Re: Cache performance for LOCAL mode + setIndexedTypes

Sergi
I guess updating indexes is not free.

Sergi

On Mon, Jul 11, 2016 at 11:48 PM, AndreyVel <[hidden email]> wrote:

> Hello, I have created simple test for testing performance put operations
> on single computer,
> can anybody explain why performance for LOCAL mode different for Indexed
> and non Indexed mode?
>
>
>      Cache performance put(Integer, String)/sec: one client and 2
>      remote servers.
>
> CacheMode       TRANSACTIONAL   TRANSACTIONAL
> setIndexedTypes(Integer, String)        ATOMIC  ATOMIC
> setIndexedTypes(Integer, String)
> LOCAL   45154   107306  340627  581250
> REPLICATED      3270    2865    7272    5694
> PARTITIONED     6773    5403    8558    6714
>
>
> VM options -Xms1g -Xmx1g
> Topology snapshot [ver=5, servers=2, clients=1, CPUs=8, heap=3.0GB]
>
>
> public class CachePerformance {
>
>     private static int CACHE_SIZE =100 * 1000;
>     private static StringCACHE_NAME ="cachePerf";
>
>     public static void main(String[] args) {
>         try {
>             Ignition.setClientMode(true);
>             IgniteConfiguration igniteCfg =new IgniteConfiguration();
>             igniteCfg.setPeerClassLoadingEnabled(true);
>
>             Ignite ignite = Ignition.start(igniteCfg);
>             CachePerformance.execute(ignite);
>         }catch (Throwable ex) {
>             ex.printStackTrace();
>         }
>     }
>
> public static void execute(Ignite ignite)throws Exception {
>
>     Random rand =new Random();
>
>     for (CacheMode cacheMode : CacheMode.values()) {
>
>         for (CacheAtomicityMode atomMode : CacheAtomicityMode.values()) {
>             for (int indexMode =0; indexMode <=1; indexMode++) {
>
>                 CacheConfiguration<Integer, String> cacheCfg =new
> CacheConfiguration<>(CACHE_NAME);
>                 if (indexMode ==1)
>                     cacheCfg.setIndexedTypes(Integer.class, String.class);
>
>                 cacheCfg.setAtomicityMode(atomMode);
>                 cacheCfg.setCacheMode(cacheMode);
>
>                 ignite.destroyCache(CACHE_NAME);
>                 IgniteCache<Integer, String> cache =
> ignite.getOrCreateCache(cacheCfg);
>                 String cacheDesc ="cacheMode=" + cacheMode +", atomMode="
> + atomMode +", indexMode=" + indexMode;
>
>                 long time = System.nanoTime();
>                 for (int ind =0; ind <CACHE_SIZE; ind++) {
>                         Integer key = rand.nextInt();
>                         cache.put(key,"=" + ind);
>                 }
>
>                 long deltaMs = (System.nanoTime() - time) /1000000;
>                 long perfSec = (deltaMs ==0) ?0 :1000 *CACHE_SIZE /
> deltaMs;
>                 System.out.println(cacheDesc +", Perf/Sec = " + perfSec);
>             }
>         }
>     }
>
Reply | Threaded
Open this post in threaded view
|

Re: Cache performance for LOCAL mode + setIndexedTypes

AndreyVel
Agree, indexes consume CPU, but as shown in the table,
performance for index and  CacheMode=LOCAL more then 2x.

CacheMode.CacheMode + TRANSACTIONAL     = 45 K op./sec
CacheMode.CacheMode + TRANSACTIONAL + setIndexedTypes = 107 K op./sec

CacheMode.CacheMode + ATOMIC    = 340 K op./sec
CacheMode.CacheMode + ATOMIC+ setIndexedTypes = 581 K op./sec


12.07.2016 0:15, Sergi Vladykin пишет:

> I guess updating indexes is not free.
>
> Sergi
>
> On Mon, Jul 11, 2016 at 11:48 PM, AndreyVel <[hidden email]> wrote:
>
>> Hello, I have created simple test for testing performance put operations
>> on single computer,
>> can anybody explain why performance for LOCAL mode different for Indexed
>> and non Indexed mode?
>>
>>
>>       Cache performance put(Integer, String)/sec: one client and 2
>>       remote servers.
>>
>> CacheMode       TRANSACTIONAL   TRANSACTIONAL
>> setIndexedTypes(Integer, String)        ATOMIC  ATOMIC
>> setIndexedTypes(Integer, String)
>> LOCAL   45154   107306  340627  581250
>> REPLICATED      3270    2865    7272    5694
>> PARTITIONED     6773    5403    8558    6714
>>
>>
>> VM options -Xms1g -Xmx1g
>> Topology snapshot [ver=5, servers=2, clients=1, CPUs=8, heap=3.0GB]
>>
>>
>> public class CachePerformance {
>>
>>      private static int CACHE_SIZE =100 * 1000;
>>      private static StringCACHE_NAME ="cachePerf";
>>
>>      public static void main(String[] args) {
>>          try {
>>              Ignition.setClientMode(true);
>>              IgniteConfiguration igniteCfg =new IgniteConfiguration();
>>              igniteCfg.setPeerClassLoadingEnabled(true);
>>
>>              Ignite ignite = Ignition.start(igniteCfg);
>>              CachePerformance.execute(ignite);
>>          }catch (Throwable ex) {
>>              ex.printStackTrace();
>>          }
>>      }
>>
>> public static void execute(Ignite ignite)throws Exception {
>>
>>      Random rand =new Random();
>>
>>      for (CacheMode cacheMode : CacheMode.values()) {
>>
>>          for (CacheAtomicityMode atomMode : CacheAtomicityMode.values()) {
>>              for (int indexMode =0; indexMode <=1; indexMode++) {
>>
>>                  CacheConfiguration<Integer, String> cacheCfg =new
>> CacheConfiguration<>(CACHE_NAME);
>>                  if (indexMode ==1)
>>                      cacheCfg.setIndexedTypes(Integer.class, String.class);
>>
>>                  cacheCfg.setAtomicityMode(atomMode);
>>                  cacheCfg.setCacheMode(cacheMode);
>>
>>                  ignite.destroyCache(CACHE_NAME);
>>                  IgniteCache<Integer, String> cache =
>> ignite.getOrCreateCache(cacheCfg);
>>                  String cacheDesc ="cacheMode=" + cacheMode +", atomMode="
>> + atomMode +", indexMode=" + indexMode;
>>
>>                  long time = System.nanoTime();
>>                  for (int ind =0; ind <CACHE_SIZE; ind++) {
>>                          Integer key = rand.nextInt();
>>                          cache.put(key,"=" + ind);
>>                  }
>>
>>                  long deltaMs = (System.nanoTime() - time) /1000000;
>>                  long perfSec = (deltaMs ==0) ?0 :1000 *CACHE_SIZE /
>> deltaMs;
>>                  System.out.println(cacheDesc +", Perf/Sec = " + perfSec);
>>              }
>>          }
>>      }
>>

Reply | Threaded
Open this post in threaded view
|

Re: Cache performance for LOCAL mode + setIndexedTypes

dsetrakyan
Andrey, the values clearly don’t make sense, which means that the test was
conducted incorrectly. I would rerun it.


On Tue, Jul 12, 2016 at 10:38 AM, Andrey Velichko <[hidden email]>
wrote:

> Agree, indexes consume CPU, but as shown in the table,
> performance for index and  CacheMode=LOCAL more then 2x.
>
> CacheMode.CacheMode + TRANSACTIONAL     = 45 K op./sec
> CacheMode.CacheMode + TRANSACTIONAL + setIndexedTypes = 107 K op./sec
>
> CacheMode.CacheMode + ATOMIC    = 340 K op./sec
> CacheMode.CacheMode + ATOMIC+ setIndexedTypes = 581 K op./sec
>
>
> 12.07.2016 0:15, Sergi Vladykin пишет:
>
> I guess updating indexes is not free.
>>
>> Sergi
>>
>> On Mon, Jul 11, 2016 at 11:48 PM, AndreyVel <[hidden email]> wrote:
>>
>> Hello, I have created simple test for testing performance put operations
>>> on single computer,
>>> can anybody explain why performance for LOCAL mode different for Indexed
>>> and non Indexed mode?
>>>
>>>
>>>       Cache performance put(Integer, String)/sec: one client and 2
>>>       remote servers.
>>>
>>> CacheMode       TRANSACTIONAL   TRANSACTIONAL
>>> setIndexedTypes(Integer, String)        ATOMIC  ATOMIC
>>> setIndexedTypes(Integer, String)
>>> LOCAL   45154   107306  340627  581250
>>> REPLICATED      3270    2865    7272    5694
>>> PARTITIONED     6773    5403    8558    6714
>>>
>>>
>>> VM options -Xms1g -Xmx1g
>>> Topology snapshot [ver=5, servers=2, clients=1, CPUs=8, heap=3.0GB]
>>>
>>>
>>> public class CachePerformance {
>>>
>>>      private static int CACHE_SIZE =100 * 1000;
>>>      private static StringCACHE_NAME ="cachePerf";
>>>
>>>      public static void main(String[] args) {
>>>          try {
>>>              Ignition.setClientMode(true);
>>>              IgniteConfiguration igniteCfg =new IgniteConfiguration();
>>>              igniteCfg.setPeerClassLoadingEnabled(true);
>>>
>>>              Ignite ignite = Ignition.start(igniteCfg);
>>>              CachePerformance.execute(ignite);
>>>          }catch (Throwable ex) {
>>>              ex.printStackTrace();
>>>          }
>>>      }
>>>
>>> public static void execute(Ignite ignite)throws Exception {
>>>
>>>      Random rand =new Random();
>>>
>>>      for (CacheMode cacheMode : CacheMode.values()) {
>>>
>>>          for (CacheAtomicityMode atomMode : CacheAtomicityMode.values())
>>> {
>>>              for (int indexMode =0; indexMode <=1; indexMode++) {
>>>
>>>                  CacheConfiguration<Integer, String> cacheCfg =new
>>> CacheConfiguration<>(CACHE_NAME);
>>>                  if (indexMode ==1)
>>>                      cacheCfg.setIndexedTypes(Integer.class,
>>> String.class);
>>>
>>>                  cacheCfg.setAtomicityMode(atomMode);
>>>                  cacheCfg.setCacheMode(cacheMode);
>>>
>>>                  ignite.destroyCache(CACHE_NAME);
>>>                  IgniteCache<Integer, String> cache =
>>> ignite.getOrCreateCache(cacheCfg);
>>>                  String cacheDesc ="cacheMode=" + cacheMode +",
>>> atomMode="
>>> + atomMode +", indexMode=" + indexMode;
>>>
>>>                  long time = System.nanoTime();
>>>                  for (int ind =0; ind <CACHE_SIZE; ind++) {
>>>                          Integer key = rand.nextInt();
>>>                          cache.put(key,"=" + ind);
>>>                  }
>>>
>>>                  long deltaMs = (System.nanoTime() - time) /1000000;
>>>                  long perfSec = (deltaMs ==0) ?0 :1000 *CACHE_SIZE /
>>> deltaMs;
>>>                  System.out.println(cacheDesc +", Perf/Sec = " +
>>> perfSec);
>>>              }
>>>          }
>>>      }
>>>
>>>
>