Last active
August 27, 2017 11:58
-
-
Save niwinz/03d232d684a86e810091d18ee74cb332 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env boot | |
;; BOOT_CLOJURE_NAME=org.clojure/clojure | |
;; BOOT_CLOJURE_VERSION=1.8.0 | |
;; BOOT_VERSION=2.5.5 | |
;; BOOT_JVM_OPTIONS="-Xms1g -Xmx1g -XX:+UseG1GC -XX:+AggressiveOpts -server -Dclojure.compiler.direct-linking=true" | |
(set-env! :repositories #(conj % ["bintray" {:url "http://dl.bintray.com/nitram509/jbrotli"}])) | |
(set-env! :dependencies '[[criterium "0.4.4"] | |
[org.xerial.snappy/snappy-java "1.1.2.6"] | |
[com.github.luben/zstd-jni "1.1.0"] | |
[net.jpountz.lz4/lz4 "1.3.0"]]) | |
(set! *warn-on-reflection* true) | |
(import 'java.util.Random) | |
(import 'org.xerial.snappy.Snappy) | |
(import 'net.jpountz.lz4.LZ4Factory) | |
(import 'net.jpountz.lz4.LZ4Compressor) | |
(import 'net.jpountz.lz4.LZ4FastDecompressor) | |
(import 'com.github.luben.zstd.Zstd) | |
(require '[criterium.core :refer [bench quick-bench with-progress-reporting]]) | |
;; --- Helpers | |
(def data " | |
Lorem ipsum dolor sit amet, consectetur adipiscing | |
elit. Pellentesque bibendum neque ut feugiat vulputate. Donec non mi | |
maximus, fermentum mi vitae, egestas orci. Aliquam lobortis, nunc sit | |
amet aliquet auctor, eros lorem euismod ante, eu aliquet felis libero | |
eget neque. Phasellus blandit, lacus ac rhoncus condimentum, nulla | |
risus ultrices ex, et venenatis enim dolor nec velit. Nunc dapibus nec | |
sapien eu tristique. Donec vel suscipit purus. Pellentesque mollis | |
eros in hendrerit faucibus. Vestibulum ante ipsum primis in faucibus | |
orci luctus et ultrices posuere cubilia Curae; Donec a eleifend | |
odio. Morbi nec elementum quam. Donec gravida metus vel sem aliquam | |
pellentesque. Donec hendrerit nisl in mauris dapibus, nec auctor | |
mauris dignissim. Mauris ante mi, pretium nec interdum quis, maximus | |
quis tortor. Lorem ipsum dolor sit amet, consectetur adipiscing | |
elit. Curabitur non nibh bibendum, viverra enim luctus, commodo dolor. | |
Proin aliquet, risus at convallis imperdiet, sem ligula facilisis | |
ante, vitae consectetur justo massa quis velit. Fusce eu urna porta, | |
pharetra felis in, malesuada augue. Quisque sit amet arcu a turpis | |
blandit molestie. In ac lacus eu odio pulvinar faucibus. In vulputate | |
at libero a tempor. Etiam eget neque aliquet, accumsan est quis, | |
convallis tortor. Cum sociis natoque penatibus et magnis dis | |
parturient montes, nascetur ridiculus mus. Nullam hendrerit erat quam, | |
sed imperdiet dui efficitur eget. Sed elementum, eros sed dapibus | |
lacinia, elit augue iaculis leo, at gravida tortor elit non | |
mi. Praesent volutpat lacus molestie risus convallis | |
malesuada. Curabitur sed ex eu felis venenatis auctor. Fusce convallis | |
turpis ac nibh commodo luctus. Sed commodo dui non arcu mattis | |
sagittis. Ut at porta nulla, in sagittis sapien. Duis lectus ligula, | |
dignissim id dolor id, porttitor posuere tellus. | |
Nulla sit amet venenatis tellus. Donec non enim mi. Vestibulum purus | |
leo, dictum sed ligula quis, lacinia vehicula urna. Aenean at libero | |
varius, semper urna at, placerat sem. Suspendisse feugiat, diam vel | |
porttitor hendrerit, lectus arcu varius ipsum, non eleifend sem dui | |
sit amet ligula. Ut consectetur diam ante, eget varius justo finibus | |
vel. Phasellus at porttitor nisl, ac hendrerit dui. Nullam egestas | |
malesuada arcu quis efficitur. Nulla consectetur, tellus ut fringilla | |
rhoncus, sapien purus accumsan nisl, quis dictum odio nunc sed | |
lacus. Integer fringilla maximus consectetur. Praesent eu diam sed | |
justo blandit scelerisque. Nam vel mollis sapien, tempus ullamcorper | |
odio. Phasellus in lacus at odio euismod convallis. Integer sed | |
condimentum eros, eu rhoncus quam. Praesent rutrum sem ante. Curabitur | |
a ornare quam. | |
Lorem ipsum dolor sit amet, consectetur adipiscing | |
elit. Pellentesque bibendum neque ut feugiat vulputate. Donec non mi | |
maximus, fermentum mi vitae, egestas orci. Aliquam lobortis, nunc sit | |
amet aliquet auctor, eros lorem euismod ante, eu aliquet felis libero | |
eget neque. Phasellus blandit, lacus ac rhoncus condimentum, nulla | |
risus ultrices ex, et venenatis enim dolor nec velit. Nunc dapibus nec | |
sapien eu tristique. Donec vel suscipit purus. Pellentesque mollis | |
eros in hendrerit faucibus. Vestibulum ante ipsum primis in faucibus | |
orci luctus et ultrices posuere cubilia Curae; Donec a eleifend | |
odio. Morbi nec elementum quam. Donec gravida metus vel sem aliquam | |
pellentesque. Donec hendrerit nisl in mauris dapibus, nec auctor | |
mauris dignissim. Mauris ante mi, pretium nec interdum quis, maximus | |
quis tortor. Lorem ipsum dolor sit amet, consectetur adipiscing | |
elit. Curabitur non nibh bibendum, viverra enim luctus, commodo dolor. | |
Proin aliquet, risus at convallis imperdiet, sem ligula facilisis | |
ante, vitae consectetur justo massa quis velit. Fusce eu urna porta, | |
pharetra felis in, malesuada augue. Quisque sit amet arcu a turpis | |
blandit molestie. In ac lacus eu odio pulvinar faucibus. In vulputate | |
at libero a tempor. Etiam eget neque aliquet, accumsan est quis, | |
convallis tortor. Cum sociis natoque penatibus et magnis dis | |
parturient montes, nascetur ridiculus mus. Nullam hendrerit erat quam, | |
sed imperdiet dui efficitur eget. Sed elementum, eros sed dapibus | |
lacinia, elit augue iaculis leo, at gravida tortor elit non | |
mi. Praesent volutpat lacus molestie risus convallis | |
malesuada. Curabitur sed ex eu felis venenatis auctor. Fusce convallis | |
turpis ac nibh commodo luctus. Sed commodo dui non arcu mattis | |
sagittis. Ut at porta nulla, in sagittis sapien. Duis lectus ligula, | |
dignissim id dolor id, porttitor posuere tellus. | |
Nulla sit amet venenatis tellus. Donec non enim mi. Vestibulum purus | |
leo, dictum sed ligula quis, lacinia vehicula urna. Aenean at libero | |
varius, semper urna at, placerat sem. Suspendisse feugiat, diam vel | |
porttitor hendrerit, lectus arcu varius ipsum, non eleifend sem dui | |
sit amet ligula. Ut consectetur diam ante, eget varius justo finibus | |
vel. Phasellus at porttitor nisl, ac hendrerit dui. Nullam egestas | |
malesuada arcu quis efficitur. Nulla consectetur, tellus ut fringilla | |
rhoncus, sapien purus accumsan nisl, quis dictum odio nunc sed | |
lacus. Integer fringilla maximus consectetur. Praesent eu diam sed | |
justo blandit scelerisque. Nam vel mollis sapien, tempus ullamcorper | |
odio. Phasellus in lacus at odio euismod convallis. Integer sed | |
condimentum eros, eu rhoncus quam. Praesent rutrum sem ante. Curabitur | |
a ornare quam. | |
") | |
(defn generate-data | |
[] | |
(.getBytes ^String data "UTF-8")) | |
;; --- Initialization | |
(def ^LZ4Factory lz4-factory (LZ4Factory/fastestInstance)) | |
(def ^LZ4Compressor lz4-compressor (.fastCompressor lz4-factory)) | |
(def ^LZ4FastDecompressor lz4-decompressor (.fastDecompressor lz4-factory)) | |
(def zstd-level 1) | |
;; --- Benchmark Data | |
(def uncompressed-data (generate-data)) | |
(def original-size (count uncompressed-data)) | |
(def snappy-compressed-data (Snappy/compress uncompressed-data)) | |
(def lz4-compressed-data (.compress lz4-compressor uncompressed-data)) | |
(def zstd-compressed-data (Zstd/compress uncompressed-data ^long zstd-level)) | |
;; --- Benchmark Functions | |
(defn bench-snappy-compression | |
[] | |
(Snappy/compress ^bytes uncompressed-data)) | |
(defn bench-snappy-uncompression | |
[] | |
(Snappy/uncompress ^bytes snappy-compressed-data)) | |
(defn bench-lz4-compression | |
[] | |
(.compress lz4-compressor ^bytes uncompressed-data)) | |
(defn bench-lz4-uncompression | |
[] | |
(.decompress lz4-decompressor | |
^bytes lz4-compressed-data | |
^int original-size)) | |
(defn bench-zstd-compression | |
[] | |
(Zstd/compress ^bytes uncompressed-data ^long zstd-level)) | |
(defn bench-zstd-uncompression | |
[] | |
(Zstd/decompress ^bytes zstd-compressed-data ^int original-size)) | |
(defn -main | |
[& args] | |
(println "\nSize comparison:") | |
(println "Original: " (count uncompressed-data) "bytes") | |
(println "Snappy: " (count snappy-compressed-data) "bytes") | |
(println "LZ4: " (count lz4-compressed-data) "bytes") | |
(println "Zstd: " (count zstd-compressed-data) "bytes") | |
(do | |
(println "\nsnappy:compression") | |
(quick-bench (bench-snappy-compression) :verbose) | |
(println "\nsnappy:uncompression") | |
(quick-bench (bench-snappy-uncompression) :verbose) | |
(println "\nlz4:compression") | |
(quick-bench (bench-lz4-compression) :verbose) | |
(println "\nlz4:uncompression") | |
(quick-bench (bench-lz4-uncompression) :verbose) | |
(println "\nzstd:compression") | |
(quick-bench (bench-zstd-compression) :verbose) | |
(println "\nzstd:uncompression") | |
(quick-bench (bench-zstd-uncompression) :verbose) | |
) | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Size comparison: | |
Original: 5500 bytes | |
Snappy: 1888 bytes | |
LZ4: 1871 bytes | |
Zstd: 1239 bytes | |
snappy:compression | |
amd64 Linux 4.4.22-1-lts 4 cpu(s) | |
OpenJDK 64-Bit Server VM 25.102-b14 | |
Runtime arguments: -Xms1g -Xmx1g -XX:+UseG1GC -XX:+AggressiveOpts -Dclojure.compiler.direct-linking=true -Dboot.app.path=/home/niwi/bin/boot | |
Evaluation count : 38148 in 6 samples of 6358 calls. | |
Execution time sample mean : 15.939866 µs | |
Execution time mean : 15.940166 µs | |
Execution time sample std-deviation : 169.443316 ns | |
Execution time std-deviation : 177.073406 ns | |
Execution time lower quantile : 15.733521 µs ( 2.5%) | |
Execution time upper quantile : 16.134124 µs (97.5%) | |
Overhead used : 8.128448 ns | |
snappy:uncompression | |
amd64 Linux 4.4.22-1-lts 4 cpu(s) | |
OpenJDK 64-Bit Server VM 25.102-b14 | |
Runtime arguments: -Xms1g -Xmx1g -XX:+UseG1GC -XX:+AggressiveOpts -Dclojure.compiler.direct-linking=true -Dboot.app.path=/home/niwi/bin/boot | |
Evaluation count : 215526 in 6 samples of 35921 calls. | |
Execution time sample mean : 2.789171 µs | |
Execution time mean : 2.789251 µs | |
Execution time sample std-deviation : 43.668779 ns | |
Execution time std-deviation : 47.591622 ns | |
Execution time lower quantile : 2.741830 µs ( 2.5%) | |
Execution time upper quantile : 2.842026 µs (97.5%) | |
Overhead used : 8.128448 ns | |
lz4:compression | |
amd64 Linux 4.4.22-1-lts 4 cpu(s) | |
OpenJDK 64-Bit Server VM 25.102-b14 | |
Runtime arguments: -Xms1g -Xmx1g -XX:+UseG1GC -XX:+AggressiveOpts -Dclojure.compiler.direct-linking=true -Dboot.app.path=/home/niwi/bin/boot | |
Evaluation count : 64470 in 6 samples of 10745 calls. | |
Execution time sample mean : 9.387533 µs | |
Execution time mean : 9.387533 µs | |
Execution time sample std-deviation : 120.745726 ns | |
Execution time std-deviation : 121.575286 ns | |
Execution time lower quantile : 9.297546 µs ( 2.5%) | |
Execution time upper quantile : 9.581689 µs (97.5%) | |
Overhead used : 8.128448 ns | |
Found 1 outliers in 6 samples (16.6667 %) | |
low-severe 1 (16.6667 %) | |
Variance from outliers : 13.8889 % Variance is moderately inflated by outliers | |
lz4:uncompression | |
amd64 Linux 4.4.22-1-lts 4 cpu(s) | |
OpenJDK 64-Bit Server VM 25.102-b14 | |
Runtime arguments: -Xms1g -Xmx1g -XX:+UseG1GC -XX:+AggressiveOpts -Dclojure.compiler.direct-linking=true -Dboot.app.path=/home/niwi/bin/boot | |
Evaluation count : 131106 in 6 samples of 21851 calls. | |
Execution time sample mean : 4.622484 µs | |
Execution time mean : 4.622318 µs | |
Execution time sample std-deviation : 62.585152 ns | |
Execution time std-deviation : 67.411418 ns | |
Execution time lower quantile : 4.543771 µs ( 2.5%) | |
Execution time upper quantile : 4.713306 µs (97.5%) | |
Overhead used : 8.128448 ns | |
zstd:compression | |
amd64 Linux 4.4.22-1-lts 4 cpu(s) | |
OpenJDK 64-Bit Server VM 25.102-b14 | |
Runtime arguments: -Xms1g -Xmx1g -XX:+UseG1GC -XX:+AggressiveOpts -Dclojure.compiler.direct-linking=true -Dboot.app.path=/home/niwi/bin/boot | |
Evaluation count : 33018 in 6 samples of 5503 calls. | |
Execution time sample mean : 18.310950 µs | |
Execution time mean : 18.310950 µs | |
Execution time sample std-deviation : 203.716216 ns | |
Execution time std-deviation : 215.136814 ns | |
Execution time lower quantile : 18.020925 µs ( 2.5%) | |
Execution time upper quantile : 18.562508 µs (97.5%) | |
Overhead used : 8.128448 ns | |
zstd:uncompression | |
amd64 Linux 4.4.22-1-lts 4 cpu(s) | |
OpenJDK 64-Bit Server VM 25.102-b14 | |
Runtime arguments: -Xms1g -Xmx1g -XX:+UseG1GC -XX:+AggressiveOpts -Dclojure.compiler.direct-linking=true -Dboot.app.path=/home/niwi/bin/boot | |
Evaluation count : 73530 in 6 samples of 12255 calls. | |
Execution time sample mean : 8.244839 µs | |
Execution time mean : 8.244839 µs | |
Execution time sample std-deviation : 129.557439 ns | |
Execution time std-deviation : 131.562930 ns | |
Execution time lower quantile : 8.134237 µs ( 2.5%) | |
Execution time upper quantile : 8.444877 µs (97.5%) | |
Overhead used : 8.128448 ns |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment