Guest User

Untitled

a guest
Jan 14th, 2015
227
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18.  
  19. package org.apache.cassandra.test.microbench;
  20.  
  21.  
  22. import org.apache.cassandra.utils.CRC32Factory.CRC32Ex;
  23. import org.apache.cassandra.utils.PureJavaCrc32;
  24. import org.openjdk.jmh.annotations.*;
  25.  
  26. import java.io.IOException;
  27. import java.nio.ByteBuffer;
  28. import java.util.concurrent.ThreadLocalRandom;
  29. import java.util.concurrent.TimeUnit;
  30. import java.util.zip.Adler32;
  31. import java.util.zip.CRC32;
  32.  
  33. @BenchmarkMode(Mode.Throughput)
  34. @OutputTimeUnit(TimeUnit.SECONDS)
  35. @Warmup(iterations = 2, time = 2, timeUnit = TimeUnit.SECONDS)
  36. @Measurement(iterations = 2, time = 2, timeUnit = TimeUnit.SECONDS)
  37. @Fork(value = 3)
  38. @Threads(1)
  39. @State(Scope.Benchmark)
  40. public class Sample
  41. {
  42.     @Param({"128", "512", "1024", "1048576"})
  43.     //@Param({"1048576"})
  44.     public int byteSize;
  45.    
  46.     public byte bytes[];
  47.    
  48.     public ByteBuffer bufferArray;
  49.    
  50.     public ByteBuffer bufferDirect;
  51.    
  52.     public long expected;
  53.     public long expectedAdler;
  54.  
  55.     public void check(long val) {
  56.         if (val != expected) {
  57.             System.out.println("oh snap");
  58.             System.exit(-1);
  59.         }
  60.     }
  61.    
  62.     public void checkAdler(long val) {
  63.         if (val != expectedAdler) {
  64.             System.out.println("oh snap");
  65.             System.exit(-1);
  66.         }
  67.     }
  68.    
  69.     @Setup(Level.Iteration)
  70.     public void setup() {
  71.         bytes = new byte[byteSize];
  72.         bufferArray = ByteBuffer.wrap(bytes);
  73.         bufferDirect = ByteBuffer.allocateDirect(byteSize);
  74.         bufferDirect.put(bytes).clear();
  75.         CRC32 crc = new CRC32();
  76.         crc.update(bytes);
  77.         expected = crc.getValue();
  78.         Adler32 a32 = new Adler32();
  79.         a32.update(bytes);
  80.         expectedAdler = a32.getValue();
  81.     }
  82.        
  83.     @Benchmark
  84.     public long CRC32OriginalArray()
  85.     {
  86.         CRC32 crc = new CRC32();
  87.         crc.update(bytes, 0, bytes.length);
  88.         check(crc.getValue());
  89.         return crc.getValue();
  90.     }
  91.    
  92.     @Benchmark
  93.     public long PureJavaCrc32Array() {
  94.         PureJavaCrc32 crc = new PureJavaCrc32();
  95.         crc.update(bytes, 0, bytes.length);
  96.         check(crc.getValue());
  97.         return crc.getValue();
  98.     }
  99.    
  100.     @Benchmark
  101.     public long Adler32Array()
  102.     {
  103.         Adler32 crc = new Adler32();
  104.         crc.update(bytes, 0, bytes.length);
  105.         checkAdler(crc.getValue());
  106.         return crc.getValue();
  107.     }
  108.    
  109. //    @Benchmark
  110. //    public long CRC32Array()
  111. //    {
  112. //        CRC32Ex crc = new CRC32Ex();
  113. //        crc.update(bytes, 0, bytes.length);
  114. //        check(crc.getValue());
  115. //        return crc.getValue();
  116. //    }
  117. //    
  118. //    @Benchmark
  119. //    public long CRC32ByteBuffer()
  120. //    {
  121. //        bufferArray.clear();
  122. //        CRC32Ex crc = new CRC32Ex();
  123. //        crc.update(bufferArray);
  124. //        return crc.getValue();
  125. //    }
  126. //    
  127. //    @Benchmark
  128. //    public long CRC32ByteBufferDirect()
  129. //    {
  130. //        bufferDirect.clear();
  131. //        CRC32Ex crc = new CRC32Ex();
  132. //        crc.update(bufferDirect);
  133. //        return crc.getValue();
  134. //    }
  135. //    
  136. //    @Benchmark
  137. //    public long CRC32ByteBufferWrapped()
  138. //    {
  139. //        bufferArray.clear();
  140. //        CRC32Ex crc = new CRC32Ex();
  141. //        crc.update(bufferArray, 0, bytes.length);
  142. //        check(crc.getValue());
  143. //        return crc.getValue();
  144. //    }
  145. //    
  146. //    @Benchmark
  147. //    public long CRC32ByteBufferDirectWrapped()
  148. //    {
  149. //        bufferDirect.clear();
  150. //        CRC32Ex crc = new CRC32Ex();
  151. //        crc.update(bufferDirect, 0, bytes.length);
  152. //        check(crc.getValue());
  153. //        return crc.getValue();
  154. //    }    
  155. //    @Benchmark
  156. //    public long PureJavaCrc32ByteBuffer() {
  157. //        bufferArray.clear();
  158. //        PureJavaCrc32 crc = new PureJavaCrc32();
  159. //        crc.update(bufferArray, 0, bytes.length);
  160. //        check(crc.getValue());
  161. //        return crc.getValue();
  162. //    }
  163. //    
  164. //    @Benchmark
  165. //    public long PureJavaCrc32ByteBufferDirect() {
  166. //        bufferDirect.clear();
  167. //        PureJavaCrc32 crc = new PureJavaCrc32();
  168. //        crc.update(bufferDirect, 0, bytes.length);
  169. //        check(crc.getValue());
  170. //        return crc.getValue();
  171. //    }
  172. }
RAW Paste Data