[ 
https://issues.apache.org/jira/browse/CASSANDRA-21564?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18109416#comment-18109416
 ] 

Dmitry Konstantinov edited comment on CASSANDRA-21564 at 8/29/26 1:51 PM:
--------------------------------------------------------------------------

comparison of lz4-java versions

*chunk_length = 4 KiB* 
{code:java}
4096 → 1810 bytes, ratio 0.442

┌──────────┬───────────────────────────┬──────────┬─────────────────────────────┬──────────┐
│ lz4-java │         compress          │ vs 1.8.0 │         uncompress          
│ vs 1.8.0 │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.8.0    │ 330,256 ops/s (1.35 GB/s) │ —        │ 1,735,346 ops/s (7.11 GB/s) 
│ —        │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.10.1   │ 336,876 (1.38 GB/s)       │ +2.00%   │ 1,578,772 (6.47 GB/s)       
│ −9.02%   │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.10.4   │ 338,481 (1.39 GB/s)       │ +2.49%   │ 1,599,656 (6.55 GB/s)       
│ −7.82%   │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.11.2   │ 337,092 (1.38 GB/s)       │ +2.07%   │ 1,625,789 (6.66 GB/s)       
│ −6.31%   │
└──────────┴───────────────────────────┴──────────┴─────────────────────────────┴──────────┘
{code}
*chunk_length = 16 KiB (Cassandra default)*
{code:java}
16384 → 4884 bytes, ratio 0.298

┌──────────┬──────────────────────────┬──────────┬───────────────────────────┬──────────┐
│ lz4-java │         compress         │ vs 1.8.0 │        uncompress         │ 
vs 1.8.0 │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.8.0    │ 85,829 ops/s (1.41 GB/s) │ —        │ 365,692 ops/s (5.99 GB/s) │ 
—        │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.10.1   │ 85,603 (1.40 GB/s)       │ −0.26%   │ 327,834 (5.37 GB/s)       │ 
−10.35%  │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.10.4   │ 85,822 (1.41 GB/s)       │ −0.01%   │ 333,356 (5.46 GB/s)       │ 
−8.84%   │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.11.2   │ 85,780 (1.41 GB/s)       │ −0.06%   │ 337,470 (5.53 GB/s)       │ 
−7.72%   │
└──────────┴──────────────────────────┴──────────┴───────────────────────────┴──────────┘
{code}
 * JDK 21
 * Two 5-fork passes each, within-version spread across the two passes was 
0.004–0.07%, so these gaps are outside noise
 * compression ratio 0.298
 * direct buffer 

Where the CPU goes — 1.11.2 @ 4 KiB block size
Decompress:
{code:java}
┌───────┬────────────────────────────────────────────┐
│ share │                    what                    │
├───────┼────────────────────────────────────────────┤
│ 91.8% │ LZ4_decompress_safe — the native library   │
├───────┼────────────────────────────────────────────┤
│ 5.1%  │ JNI boundary                               │
├───────┼────────────────────────────────────────────┤
│ 1.4%  │ lz4-java Java wrapper                      │
├───────┼────────────────────────────────────────────┤
│ 0.4%  │ java.nio.Buffer position/limit bookkeeping │
├───────┼────────────────────────────────────────────┤
│ 0.3%  │ Cassandra's LZ4Compressor.uncompress       │
└───────┴────────────────────────────────────────────┘
 {code}
Compress:
{code:java}
┌───────┬────────────────────────────────┐
│ share │              what              │
├───────┼────────────────────────────────┤
│ 95.4% │ LZ4_compress_fast_extState     │
├───────┼────────────────────────────────┤
│ 2.1%  │ __memset_avx512_unaligned_erms │
├───────┼────────────────────────────────┤
│ 1.2%  │ JNI boundary                   │
└───────┴────────────────────────────────┘
{code}
Decompress @ 4 KiB block size, perfnorm:
{code:java}
┌─────────┬───────────┬───────────┬─────────────────┬───────┬────────────────┐
│ version │   ops/s   │ cycles/op │ instructions/op │  IPC  │ branch-miss/op │
├─────────┼───────────┼───────────┼─────────────────┼───────┼────────────────┤
│ 1.8.0   │ 1,723,900 │ 2,293.9   │ 10,625          │ 4.632 │ 1.14           │
├─────────┼───────────┼───────────┼─────────────────┼───────┼────────────────┤
│ 1.10.1  │ 1,584,536 │ 2,494.8   │ 10,910          │ 4.373 │ 5.48           │
├─────────┼───────────┼───────────┼─────────────────┼───────┼────────────────┤
│ 1.11.2  │ 1,628,221 │ 2,429.1   │ 10,619          │ 4.371 │ 2.47           │
└─────────┴───────────┴───────────┴─────────────────┴───────┴────────────────┘
{code}


was (Author: dnk):
comparison of lz4-java versions
{code}
chunk_length = 4 KiB
4096 → 1810 bytes, ratio 0.442

┌──────────┬───────────────────────────┬──────────┬─────────────────────────────┬──────────┐
│ lz4-java │         compress          │ vs 1.8.0 │         uncompress          
│ vs 1.8.0 │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.8.0    │ 330,256 ops/s (1.35 GB/s) │ —        │ 1,735,346 ops/s (7.11 GB/s) 
│ —        │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.10.1   │ 336,876 (1.38 GB/s)       │ +2.00%   │ 1,578,772 (6.47 GB/s)       
│ −9.02%   │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.10.4   │ 338,481 (1.39 GB/s)       │ +2.49%   │ 1,599,656 (6.55 GB/s)       
│ −7.82%   │
├──────────┼───────────────────────────┼──────────┼─────────────────────────────┼──────────┤
│ 1.11.2   │ 337,092 (1.38 GB/s)       │ +2.07%   │ 1,625,789 (6.66 GB/s)       
│ −6.31%   │
└──────────┴───────────────────────────┴──────────┴─────────────────────────────┴──────────┘
{code}
{code}
chunk_length = 16 KiB (Cassandra default)

16384 → 4884 bytes, ratio 0.298

┌──────────┬──────────────────────────┬──────────┬───────────────────────────┬──────────┐
│ lz4-java │         compress         │ vs 1.8.0 │        uncompress         │ 
vs 1.8.0 │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.8.0    │ 85,829 ops/s (1.41 GB/s) │ —        │ 365,692 ops/s (5.99 GB/s) │ 
—        │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.10.1   │ 85,603 (1.40 GB/s)       │ −0.26%   │ 327,834 (5.37 GB/s)       │ 
−10.35%  │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.10.4   │ 85,822 (1.41 GB/s)       │ −0.01%   │ 333,356 (5.46 GB/s)       │ 
−8.84%   │
├──────────┼──────────────────────────┼──────────┼───────────────────────────┼──────────┤
│ 1.11.2   │ 85,780 (1.41 GB/s)       │ −0.06%   │ 337,470 (5.53 GB/s)       │ 
−7.72%   │
└──────────┴──────────────────────────┴──────────┴───────────────────────────┴──────────┘
{code}
 * JDK 21
 * Two 5-fork passes each, within-version spread across the two passes was 
0.004–0.07%, so these gaps are outside noise
 * compression ratio 0.298
 * direct buffer 

Where the CPU goes — 1.11.2 @ 4 KiB block size
Decompress:
{code:java}
┌───────┬────────────────────────────────────────────┐
│ share │                    what                    │
├───────┼────────────────────────────────────────────┤
│ 91.8% │ LZ4_decompress_safe — the native library   │
├───────┼────────────────────────────────────────────┤
│ 5.1%  │ JNI boundary                               │
├───────┼────────────────────────────────────────────┤
│ 1.4%  │ lz4-java Java wrapper                      │
├───────┼────────────────────────────────────────────┤
│ 0.4%  │ java.nio.Buffer position/limit bookkeeping │
├───────┼────────────────────────────────────────────┤
│ 0.3%  │ Cassandra's LZ4Compressor.uncompress       │
└───────┴────────────────────────────────────────────┘
 {code}
Compress:
{code:java}
┌───────┬────────────────────────────────┐
│ share │              what              │
├───────┼────────────────────────────────┤
│ 95.4% │ LZ4_compress_fast_extState     │
├───────┼────────────────────────────────┤
│ 2.1%  │ __memset_avx512_unaligned_erms │
├───────┼────────────────────────────────┤
│ 1.2%  │ JNI boundary                   │
└───────┴────────────────────────────────┘
{code}
Decompress @ 4 KiB block size, perfnorm:
{code:java}
┌─────────┬───────────┬───────────┬─────────────────┬───────┬────────────────┐
│ version │   ops/s   │ cycles/op │ instructions/op │  IPC  │ branch-miss/op │
├─────────┼───────────┼───────────┼─────────────────┼───────┼────────────────┤
│ 1.8.0   │ 1,723,900 │ 2,293.9   │ 10,625          │ 4.632 │ 1.14           │
├─────────┼───────────┼───────────┼─────────────────┼───────┼────────────────┤
│ 1.10.1  │ 1,584,536 │ 2,494.8   │ 10,910          │ 4.373 │ 5.48           │
├─────────┼───────────┼───────────┼─────────────────┼───────┼────────────────┤
│ 1.11.2  │ 1,628,221 │ 2,429.1   │ 10,619          │ 4.371 │ 2.47           │
└─────────┴───────────┴───────────┴─────────────────┴───────┴────────────────┘
{code}

> Upgrade lz4-java to v1.11.2 
> ----------------------------
>
>                 Key: CASSANDRA-21564
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21564
>             Project: Apache Cassandra
>          Issue Type: Improvement
>          Components: Local/SSTable
>            Reporter: Dmitry Konstantinov
>            Assignee: Dmitry Konstantinov
>            Priority: Normal
>             Fix For: 7.x
>
>
> Currently we use: 1.10.1. It has a performance regression issue related to 
> native build configuration and fixed since 1.10.4
>  * [https://github.com/yawkat/lz4-java/pull/41]
>  * [https://github.com/yawkat/lz4-java/issues/30] 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to