Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XxHash3_64 performance degrades when jumping from 240 to 241 bytes of input. #106

Open
parthpatel opened this issue Dec 18, 2024 · 1 comment

Comments

@parthpatel
Copy link

parthpatel commented Dec 18, 2024

I ran following test as shown in [0]. The results are in [1]. You can see that the xxhash algorithm takes constant 45ms time until 240 byte input, and then for 241 byte input, it jumps to 572ms. This looks odd, may be I am doing something wrong?

[0]

Cargo.toml

[dependencies]
twox-hash = "2.0.1"
rand = "0.8.5"
criterion = "0.5.1"

[dependencies.xxhash-rust]
version = "0.8.12"
features = ["xxh3", "const_xxh3"]

[profile.dev]
opt-level = 3

rustc features

 % rustc --print=cfg                                                                             
debug_assertions
panic="unwind"
target_abi=""
target_arch="x86_64"
target_endian="little"
target_env="gnu"
target_family="unix"
target_feature="fxsr"
target_feature="sse"
target_feature="sse2"
target_has_atomic="16"
target_has_atomic="32"
target_has_atomic="64"
target_has_atomic="8"
target_has_atomic="ptr"
target_os="linux"
target_pointer_width="64"
target_vendor="unknown"
unix

Code

#[test]
fn test_hash_speeds() {
    { 1..256 }.for_each(|x| {
        test_hash_speeds_per_size(x);
    });

    [512, 1024, 2048].iter().for_each(|x| {
        test_hash_speeds_per_size(*x);
    });
}

fn test_hash_speeds_per_size(size: i32) {
    let repetitions = 10000000;
    // < 128 bytes
    let mut samples127: Vec<Vec<u8>> = Vec::new();
    { 1..11 }.for_each(|_| {
        let mut temp: Vec<u8> = Vec::new();
        { 1..size }.into_iter().for_each(|_| {
            temp.push(rand::random());
        });
        samples127.push(temp);
    });

    test_hash_speed(samples127, repetitions);
}

fn test_hash_speed(data: Vec<Vec<u8>>, total: usize) {
    let seed = 12897;
    let seed2 = 13297;
    let mut xxh3_hasher: Xxh3 = Xxh3::with_seed(seed);
    let mut sip_hasher = std::hash::SipHasher::new_with_keys(seed, seed2);

    let data_len = data[0].len();
    let mut new_data: Vec<&[u8]> = Vec::new();
    data.iter().for_each(|x| {
        new_data.push(x.as_slice());
    });

    let mut a: u64 = 0;

    use std::time::SystemTime;
    // siphasher
    let mut now = SystemTime::now();
    for _i in 1..total {
        sip_hasher.write(new_data[_i % new_data.len()]);
        a = a.wrapping_add(sip_hasher.finish());
    }
    let siphasher_then = now.elapsed().unwrap().as_millis();

    // xxh3_64 oneshot
    now = SystemTime::now();

    for _i in 1..total {
        a = a.wrapping_add(xxh3_64_with_seed(new_data[_i % new_data.len()], seed));
    }
    let xxh3_64_oneshot_then = now.elapsed().unwrap().as_millis();

    // xxh3_64 streaming
    now = SystemTime::now();
    for _i in 1..total {
        xxh3_hasher.write(new_data[_i % new_data.len()]);
        a = a.wrapping_add(xxh3_hasher.finish());
    }
    let xxh3_64_streaming_then = now.elapsed().unwrap().as_millis();

    // twox_hash oneshot
    now = SystemTime::now();
    for _i in 1..total {
        a = a.wrapping_add(twox_hash::XxHash3_64::oneshot_with_seed(
            seed,
            new_data[_i % new_data.len()],
        ));
    }
    let twox_oneshot_then = now.elapsed().unwrap().as_millis();

    println!("For {} datalen and {} iterations: \n sip_hasher {}ms \n xxhash3-rust oneshot {}ms \n xxhash3-rust streaming {}ms \n twoxhash oneshot {}ms ", data_len, total, siphasher_then, xxh3_64_oneshot_then, xxh3_64_streaming_then, twox_oneshot_then);
}

[1]

For 0 datalen and 10000000 iterations: 
 sip_hasher 48ms 
 xxhash3-rust oneshot 107ms 
 xxhash3-rust streaming 193ms 
 twoxhash oneshot 45ms 
For 1 datalen and 10000000 iterations: 
 sip_hasher 49ms 
 xxhash3-rust oneshot 111ms 
 xxhash3-rust streaming 694ms 
 twoxhash oneshot 45ms 
For 2 datalen and 10000000 iterations: 
 sip_hasher 57ms 
 xxhash3-rust oneshot 111ms 
 xxhash3-rust streaming 703ms 
 twoxhash oneshot 45ms 
For 3 datalen and 10000000 iterations: 
 sip_hasher 60ms 
 xxhash3-rust oneshot 111ms 
 xxhash3-rust streaming 710ms 
 twoxhash oneshot 45ms 
For 4 datalen and 10000000 iterations: 
 sip_hasher 67ms 
 xxhash3-rust oneshot 143ms 
 xxhash3-rust streaming 710ms 
 twoxhash oneshot 45ms 
For 5 datalen and 10000000 iterations: 
 sip_hasher 69ms 
 xxhash3-rust oneshot 143ms 
 xxhash3-rust streaming 721ms 
 twoxhash oneshot 45ms 
For 6 datalen and 10000000 iterations: 
 sip_hasher 80ms 
 xxhash3-rust oneshot 143ms 
 xxhash3-rust streaming 722ms 
 twoxhash oneshot 45ms 
For 7 datalen and 10000000 iterations: 
 sip_hasher 83ms 
 xxhash3-rust oneshot 143ms 
 xxhash3-rust streaming 730ms 
 twoxhash oneshot 45ms 
For 8 datalen and 10000000 iterations: 
 sip_hasher 67ms 
 xxhash3-rust oneshot 143ms 
 xxhash3-rust streaming 718ms 
 twoxhash oneshot 45ms 
For 9 datalen and 10000000 iterations: 
 sip_hasher 90ms 
 xxhash3-rust oneshot 160ms 
 xxhash3-rust streaming 732ms 
 twoxhash oneshot 45ms 
For 10 datalen and 10000000 iterations: 
 sip_hasher 95ms 
 xxhash3-rust oneshot 159ms 
 xxhash3-rust streaming 729ms 
 twoxhash oneshot 45ms 
For 11 datalen and 10000000 iterations: 
 sip_hasher 98ms 
 xxhash3-rust oneshot 161ms 
 xxhash3-rust streaming 728ms 
 twoxhash oneshot 45ms 
For 12 datalen and 10000000 iterations: 
 sip_hasher 96ms 
 xxhash3-rust oneshot 160ms 
 xxhash3-rust streaming 727ms 
 twoxhash oneshot 45ms 
For 13 datalen and 10000000 iterations: 
 sip_hasher 103ms 
 xxhash3-rust oneshot 161ms 
 xxhash3-rust streaming 741ms 
 twoxhash oneshot 45ms 
For 14 datalen and 10000000 iterations: 
 sip_hasher 105ms 
 xxhash3-rust oneshot 160ms 
 xxhash3-rust streaming 739ms 
 twoxhash oneshot 45ms 
For 15 datalen and 10000000 iterations: 
 sip_hasher 107ms 
 xxhash3-rust oneshot 160ms 
 xxhash3-rust streaming 741ms 
 twoxhash oneshot 45ms 
For 16 datalen and 10000000 iterations: 
 sip_hasher 83ms 
 xxhash3-rust oneshot 160ms 
 xxhash3-rust streaming 741ms 
 twoxhash oneshot 45ms 
For 17 datalen and 10000000 iterations: 
 sip_hasher 112ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 749ms 
 twoxhash oneshot 45ms 
For 18 datalen and 10000000 iterations: 
 sip_hasher 111ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 749ms 
 twoxhash oneshot 45ms 
For 19 datalen and 10000000 iterations: 
 sip_hasher 114ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 752ms 
 twoxhash oneshot 45ms 
For 20 datalen and 10000000 iterations: 
 sip_hasher 104ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 747ms 
 twoxhash oneshot 45ms 
For 21 datalen and 10000000 iterations: 
 sip_hasher 122ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 753ms 
 twoxhash oneshot 45ms 
For 22 datalen and 10000000 iterations: 
 sip_hasher 119ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 755ms 
 twoxhash oneshot 45ms 
For 23 datalen and 10000000 iterations: 
 sip_hasher 124ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 759ms 
 twoxhash oneshot 45ms 
For 24 datalen and 10000000 iterations: 
 sip_hasher 100ms 
 xxhash3-rust oneshot 187ms 
 xxhash3-rust streaming 755ms 
 twoxhash oneshot 45ms 
For 25 datalen and 10000000 iterations: 
 sip_hasher 136ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 771ms 
 twoxhash oneshot 45ms 
For 26 datalen and 10000000 iterations: 
 sip_hasher 133ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 774ms 
 twoxhash oneshot 45ms 
For 27 datalen and 10000000 iterations: 
 sip_hasher 139ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 780ms 
 twoxhash oneshot 45ms 
For 28 datalen and 10000000 iterations: 
 sip_hasher 119ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 774ms 
 twoxhash oneshot 45ms 
For 29 datalen and 10000000 iterations: 
 sip_hasher 142ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 779ms 
 twoxhash oneshot 45ms 
For 30 datalen and 10000000 iterations: 
 sip_hasher 148ms 
 xxhash3-rust oneshot 188ms 
 xxhash3-rust streaming 780ms 
 twoxhash oneshot 45ms 
For 31 datalen and 10000000 iterations: 
 sip_hasher 154ms 
 xxhash3-rust oneshot 187ms 
 xxhash3-rust streaming 781ms 
 twoxhash oneshot 45ms 
For 32 datalen and 10000000 iterations: 
 sip_hasher 113ms 
 xxhash3-rust oneshot 187ms 
 xxhash3-rust streaming 767ms 
 twoxhash oneshot 45ms 
For 33 datalen and 10000000 iterations: 
 sip_hasher 151ms 
 xxhash3-rust oneshot 297ms 
 xxhash3-rust streaming 783ms 
 twoxhash oneshot 45ms 
For 34 datalen and 10000000 iterations: 
 sip_hasher 157ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 787ms 
 twoxhash oneshot 45ms 
For 35 datalen and 10000000 iterations: 
 sip_hasher 160ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 794ms 
 twoxhash oneshot 45ms 
For 36 datalen and 10000000 iterations: 
 sip_hasher 142ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 792ms 
 twoxhash oneshot 45ms 
For 37 datalen and 10000000 iterations: 
 sip_hasher 162ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 804ms 
 twoxhash oneshot 45ms 
For 38 datalen and 10000000 iterations: 
 sip_hasher 164ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 807ms 
 twoxhash oneshot 45ms 
For 39 datalen and 10000000 iterations: 
 sip_hasher 166ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 805ms 
 twoxhash oneshot 45ms 
For 40 datalen and 10000000 iterations: 
 sip_hasher 135ms 
 xxhash3-rust oneshot 297ms 
 xxhash3-rust streaming 798ms 
 twoxhash oneshot 45ms 
For 41 datalen and 10000000 iterations: 
 sip_hasher 168ms 
 xxhash3-rust oneshot 295ms 
 xxhash3-rust streaming 807ms 
 twoxhash oneshot 45ms 
For 42 datalen and 10000000 iterations: 
 sip_hasher 169ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 809ms 
 twoxhash oneshot 45ms 
For 43 datalen and 10000000 iterations: 
 sip_hasher 170ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 817ms 
 twoxhash oneshot 45ms 
For 44 datalen and 10000000 iterations: 
 sip_hasher 164ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 816ms 
 twoxhash oneshot 45ms 
For 45 datalen and 10000000 iterations: 
 sip_hasher 173ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 817ms 
 twoxhash oneshot 45ms 
For 46 datalen and 10000000 iterations: 
 sip_hasher 173ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 820ms 
 twoxhash oneshot 45ms 
For 47 datalen and 10000000 iterations: 
 sip_hasher 174ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 825ms 
 twoxhash oneshot 45ms 
For 48 datalen and 10000000 iterations: 
 sip_hasher 161ms 
 xxhash3-rust oneshot 295ms 
 xxhash3-rust streaming 813ms 
 twoxhash oneshot 45ms 
For 49 datalen and 10000000 iterations: 
 sip_hasher 177ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 825ms 
 twoxhash oneshot 45ms 
For 50 datalen and 10000000 iterations: 
 sip_hasher 178ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 829ms 
 twoxhash oneshot 45ms 
For 51 datalen and 10000000 iterations: 
 sip_hasher 179ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 839ms 
 twoxhash oneshot 45ms 
For 52 datalen and 10000000 iterations: 
 sip_hasher 174ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 834ms 
 twoxhash oneshot 45ms 
For 53 datalen and 10000000 iterations: 
 sip_hasher 182ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 843ms 
 twoxhash oneshot 45ms 
For 54 datalen and 10000000 iterations: 
 sip_hasher 181ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 846ms 
 twoxhash oneshot 45ms 
For 55 datalen and 10000000 iterations: 
 sip_hasher 186ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 848ms 
 twoxhash oneshot 45ms 
For 56 datalen and 10000000 iterations: 
 sip_hasher 171ms 
 xxhash3-rust oneshot 295ms 
 xxhash3-rust streaming 840ms 
 twoxhash oneshot 45ms 
For 57 datalen and 10000000 iterations: 
 sip_hasher 189ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 851ms 
 twoxhash oneshot 45ms 
For 58 datalen and 10000000 iterations: 
 sip_hasher 188ms 
 xxhash3-rust oneshot 295ms 
 xxhash3-rust streaming 857ms 
 twoxhash oneshot 45ms 
For 59 datalen and 10000000 iterations: 
 sip_hasher 191ms 
 xxhash3-rust oneshot 295ms 
 xxhash3-rust streaming 861ms 
 twoxhash oneshot 45ms 
For 60 datalen and 10000000 iterations: 
 sip_hasher 183ms 
 xxhash3-rust oneshot 297ms 
 xxhash3-rust streaming 857ms 
 twoxhash oneshot 45ms 
For 61 datalen and 10000000 iterations: 
 sip_hasher 193ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 866ms 
 twoxhash oneshot 45ms 
For 62 datalen and 10000000 iterations: 
 sip_hasher 196ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 864ms 
 twoxhash oneshot 45ms 
For 63 datalen and 10000000 iterations: 
 sip_hasher 197ms 
 xxhash3-rust oneshot 296ms 
 xxhash3-rust streaming 865ms 
 twoxhash oneshot 45ms 
For 64 datalen and 10000000 iterations: 
 sip_hasher 180ms 
 xxhash3-rust oneshot 295ms 
 xxhash3-rust streaming 862ms 
 twoxhash oneshot 45ms 
For 65 datalen and 10000000 iterations: 
 sip_hasher 200ms 
 xxhash3-rust oneshot 400ms 
 xxhash3-rust streaming 886ms 
 twoxhash oneshot 45ms 
For 66 datalen and 10000000 iterations: 
 sip_hasher 204ms 
 xxhash3-rust oneshot 400ms 
 xxhash3-rust streaming 889ms 
 twoxhash oneshot 45ms 
For 67 datalen and 10000000 iterations: 
 sip_hasher 205ms 
 xxhash3-rust oneshot 400ms 
 xxhash3-rust streaming 894ms 
 twoxhash oneshot 45ms 
For 68 datalen and 10000000 iterations: 
 sip_hasher 198ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 895ms 
 twoxhash oneshot 45ms 
For 69 datalen and 10000000 iterations: 
 sip_hasher 208ms 
 xxhash3-rust oneshot 400ms 
 xxhash3-rust streaming 898ms 
 twoxhash oneshot 45ms 
For 70 datalen and 10000000 iterations: 
 sip_hasher 209ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 903ms 
 twoxhash oneshot 45ms 
For 71 datalen and 10000000 iterations: 
 sip_hasher 213ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 909ms 
 twoxhash oneshot 45ms 
For 72 datalen and 10000000 iterations: 
 sip_hasher 196ms 
 xxhash3-rust oneshot 397ms 
 xxhash3-rust streaming 897ms 
 twoxhash oneshot 45ms 
For 73 datalen and 10000000 iterations: 
 sip_hasher 215ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 916ms 
 twoxhash oneshot 45ms 
For 74 datalen and 10000000 iterations: 
 sip_hasher 218ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 912ms 
 twoxhash oneshot 45ms 
For 75 datalen and 10000000 iterations: 
 sip_hasher 220ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 913ms 
 twoxhash oneshot 45ms 
For 76 datalen and 10000000 iterations: 
 sip_hasher 213ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 917ms 
 twoxhash oneshot 45ms 
For 77 datalen and 10000000 iterations: 
 sip_hasher 225ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 926ms 
 twoxhash oneshot 45ms 
For 78 datalen and 10000000 iterations: 
 sip_hasher 226ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 930ms 
 twoxhash oneshot 45ms 
For 79 datalen and 10000000 iterations: 
 sip_hasher 230ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 930ms 
 twoxhash oneshot 45ms 
For 80 datalen and 10000000 iterations: 
 sip_hasher 210ms 
 xxhash3-rust oneshot 397ms 
 xxhash3-rust streaming 916ms 
 twoxhash oneshot 45ms 
For 81 datalen and 10000000 iterations: 
 sip_hasher 233ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 933ms 
 twoxhash oneshot 45ms 
For 82 datalen and 10000000 iterations: 
 sip_hasher 234ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 937ms 
 twoxhash oneshot 45ms 
For 83 datalen and 10000000 iterations: 
 sip_hasher 238ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 938ms 
 twoxhash oneshot 45ms 
For 84 datalen and 10000000 iterations: 
 sip_hasher 229ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 940ms 
 twoxhash oneshot 45ms 
For 85 datalen and 10000000 iterations: 
 sip_hasher 241ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 938ms 
 twoxhash oneshot 45ms 
For 86 datalen and 10000000 iterations: 
 sip_hasher 242ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 943ms 
 twoxhash oneshot 45ms 
For 87 datalen and 10000000 iterations: 
 sip_hasher 246ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 950ms 
 twoxhash oneshot 45ms 
For 88 datalen and 10000000 iterations: 
 sip_hasher 226ms 
 xxhash3-rust oneshot 398ms 
 xxhash3-rust streaming 942ms 
 twoxhash oneshot 45ms 
For 89 datalen and 10000000 iterations: 
 sip_hasher 248ms 
 xxhash3-rust oneshot 398ms 
 xxhash3-rust streaming 956ms 
 twoxhash oneshot 45ms 
For 90 datalen and 10000000 iterations: 
 sip_hasher 250ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 957ms 
 twoxhash oneshot 45ms 
For 91 datalen and 10000000 iterations: 
 sip_hasher 253ms 
 xxhash3-rust oneshot 398ms 
 xxhash3-rust streaming 961ms 
 twoxhash oneshot 45ms 
For 92 datalen and 10000000 iterations: 
 sip_hasher 246ms 
 xxhash3-rust oneshot 398ms 
 xxhash3-rust streaming 960ms 
 twoxhash oneshot 45ms 
For 93 datalen and 10000000 iterations: 
 sip_hasher 260ms 
 xxhash3-rust oneshot 398ms 
 xxhash3-rust streaming 968ms 
 twoxhash oneshot 45ms 
For 94 datalen and 10000000 iterations: 
 sip_hasher 259ms 
 xxhash3-rust oneshot 398ms 
 xxhash3-rust streaming 972ms 
 twoxhash oneshot 45ms 
For 95 datalen and 10000000 iterations: 
 sip_hasher 261ms 
 xxhash3-rust oneshot 399ms 
 xxhash3-rust streaming 972ms 
 twoxhash oneshot 45ms 
For 96 datalen and 10000000 iterations: 
 sip_hasher 243ms 
 xxhash3-rust oneshot 398ms 
 xxhash3-rust streaming 961ms 
 twoxhash oneshot 45ms 
For 97 datalen and 10000000 iterations: 
 sip_hasher 266ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 976ms 
 twoxhash oneshot 45ms 
For 98 datalen and 10000000 iterations: 
 sip_hasher 268ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 982ms 
 twoxhash oneshot 45ms 
For 99 datalen and 10000000 iterations: 
 sip_hasher 271ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 986ms 
 twoxhash oneshot 45ms 
For 100 datalen and 10000000 iterations: 
 sip_hasher 263ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 984ms 
 twoxhash oneshot 45ms 
For 101 datalen and 10000000 iterations: 
 sip_hasher 275ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 989ms 
 twoxhash oneshot 45ms 
For 102 datalen and 10000000 iterations: 
 sip_hasher 274ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 996ms 
 twoxhash oneshot 45ms 
For 103 datalen and 10000000 iterations: 
 sip_hasher 279ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 998ms 
 twoxhash oneshot 45ms 
For 104 datalen and 10000000 iterations: 
 sip_hasher 260ms 
 xxhash3-rust oneshot 496ms 
 xxhash3-rust streaming 993ms 
 twoxhash oneshot 45ms 
For 105 datalen and 10000000 iterations: 
 sip_hasher 283ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1001ms 
 twoxhash oneshot 45ms 
For 106 datalen and 10000000 iterations: 
 sip_hasher 284ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1002ms 
 twoxhash oneshot 45ms 
For 107 datalen and 10000000 iterations: 
 sip_hasher 288ms 
 xxhash3-rust oneshot 496ms 
 xxhash3-rust streaming 1007ms 
 twoxhash oneshot 45ms 
For 108 datalen and 10000000 iterations: 
 sip_hasher 278ms 
 xxhash3-rust oneshot 496ms 
 xxhash3-rust streaming 1013ms 
 twoxhash oneshot 45ms 
For 109 datalen and 10000000 iterations: 
 sip_hasher 292ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1019ms 
 twoxhash oneshot 45ms 
For 110 datalen and 10000000 iterations: 
 sip_hasher 292ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1017ms 
 twoxhash oneshot 45ms 
For 111 datalen and 10000000 iterations: 
 sip_hasher 295ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1021ms 
 twoxhash oneshot 45ms 
For 112 datalen and 10000000 iterations: 
 sip_hasher 276ms 
 xxhash3-rust oneshot 496ms 
 xxhash3-rust streaming 1010ms 
 twoxhash oneshot 45ms 
For 113 datalen and 10000000 iterations: 
 sip_hasher 301ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1027ms 
 twoxhash oneshot 45ms 
For 114 datalen and 10000000 iterations: 
 sip_hasher 298ms 
 xxhash3-rust oneshot 498ms 
 xxhash3-rust streaming 1029ms 
 twoxhash oneshot 45ms 
For 115 datalen and 10000000 iterations: 
 sip_hasher 305ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1038ms 
 twoxhash oneshot 45ms 
For 116 datalen and 10000000 iterations: 
 sip_hasher 294ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1034ms 
 twoxhash oneshot 45ms 
For 117 datalen and 10000000 iterations: 
 sip_hasher 307ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1036ms 
 twoxhash oneshot 45ms 
For 118 datalen and 10000000 iterations: 
 sip_hasher 307ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1041ms 
 twoxhash oneshot 45ms 
For 119 datalen and 10000000 iterations: 
 sip_hasher 311ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1043ms 
 twoxhash oneshot 45ms 
For 120 datalen and 10000000 iterations: 
 sip_hasher 292ms 
 xxhash3-rust oneshot 496ms 
 xxhash3-rust streaming 1045ms 
 twoxhash oneshot 45ms 
For 121 datalen and 10000000 iterations: 
 sip_hasher 315ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1051ms 
 twoxhash oneshot 45ms 
For 122 datalen and 10000000 iterations: 
 sip_hasher 316ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1052ms 
 twoxhash oneshot 45ms 
For 123 datalen and 10000000 iterations: 
 sip_hasher 319ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1055ms 
 twoxhash oneshot 45ms 
For 124 datalen and 10000000 iterations: 
 sip_hasher 311ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1055ms 
 twoxhash oneshot 45ms 
For 125 datalen and 10000000 iterations: 
 sip_hasher 324ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1057ms 
 twoxhash oneshot 45ms 
For 126 datalen and 10000000 iterations: 
 sip_hasher 325ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1058ms 
 twoxhash oneshot 45ms 
For 127 datalen and 10000000 iterations: 
 sip_hasher 328ms 
 xxhash3-rust oneshot 497ms 
 xxhash3-rust streaming 1061ms 
 twoxhash oneshot 45ms 
For 128 datalen and 10000000 iterations: 
 sip_hasher 307ms 
 xxhash3-rust oneshot 496ms 
 xxhash3-rust streaming 1143ms 
 twoxhash oneshot 45ms 
For 129 datalen and 10000000 iterations: 
 sip_hasher 331ms 
 xxhash3-rust oneshot 544ms 
 xxhash3-rust streaming 1065ms 
 twoxhash oneshot 45ms 
For 130 datalen and 10000000 iterations: 
 sip_hasher 333ms 
 xxhash3-rust oneshot 544ms 
 xxhash3-rust streaming 1070ms 
 twoxhash oneshot 45ms 
For 131 datalen and 10000000 iterations: 
 sip_hasher 338ms 
 xxhash3-rust oneshot 544ms 
 xxhash3-rust streaming 1076ms 
 twoxhash oneshot 45ms 
For 132 datalen and 10000000 iterations: 
 sip_hasher 326ms 
 xxhash3-rust oneshot 544ms 
 xxhash3-rust streaming 1077ms 
 twoxhash oneshot 45ms 
For 133 datalen and 10000000 iterations: 
 sip_hasher 339ms 
 xxhash3-rust oneshot 544ms 
 xxhash3-rust streaming 1084ms 
 twoxhash oneshot 45ms 
For 134 datalen and 10000000 iterations: 
 sip_hasher 341ms 
 xxhash3-rust oneshot 544ms 
 xxhash3-rust streaming 1086ms 
 twoxhash oneshot 45ms 
For 135 datalen and 10000000 iterations: 
 sip_hasher 344ms 
 xxhash3-rust oneshot 544ms 
 xxhash3-rust streaming 1088ms 
 twoxhash oneshot 45ms 
For 136 datalen and 10000000 iterations: 
 sip_hasher 324ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1086ms 
 twoxhash oneshot 45ms 
For 137 datalen and 10000000 iterations: 
 sip_hasher 348ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1097ms 
 twoxhash oneshot 45ms 
For 138 datalen and 10000000 iterations: 
 sip_hasher 350ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1101ms 
 twoxhash oneshot 45ms 
For 139 datalen and 10000000 iterations: 
 sip_hasher 354ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1104ms 
 twoxhash oneshot 45ms 
For 140 datalen and 10000000 iterations: 
 sip_hasher 343ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1105ms 
 twoxhash oneshot 45ms 
For 141 datalen and 10000000 iterations: 
 sip_hasher 355ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1112ms 
 twoxhash oneshot 45ms 
For 142 datalen and 10000000 iterations: 
 sip_hasher 355ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1111ms 
 twoxhash oneshot 45ms 
For 143 datalen and 10000000 iterations: 
 sip_hasher 361ms 
 xxhash3-rust oneshot 543ms 
 xxhash3-rust streaming 1118ms 
 twoxhash oneshot 45ms 
For 144 datalen and 10000000 iterations: 
 sip_hasher 339ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1099ms 
 twoxhash oneshot 45ms 
For 145 datalen and 10000000 iterations: 
 sip_hasher 369ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1119ms 
 twoxhash oneshot 45ms 
For 146 datalen and 10000000 iterations: 
 sip_hasher 365ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1121ms 
 twoxhash oneshot 45ms 
For 147 datalen and 10000000 iterations: 
 sip_hasher 368ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1127ms 
 twoxhash oneshot 45ms 
For 148 datalen and 10000000 iterations: 
 sip_hasher 359ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1129ms 
 twoxhash oneshot 45ms 
For 149 datalen and 10000000 iterations: 
 sip_hasher 372ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1129ms 
 twoxhash oneshot 45ms 
For 150 datalen and 10000000 iterations: 
 sip_hasher 378ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1132ms 
 twoxhash oneshot 45ms 
For 151 datalen and 10000000 iterations: 
 sip_hasher 376ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1146ms 
 twoxhash oneshot 45ms 
For 152 datalen and 10000000 iterations: 
 sip_hasher 355ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1130ms 
 twoxhash oneshot 45ms 
For 153 datalen and 10000000 iterations: 
 sip_hasher 378ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1144ms 
 twoxhash oneshot 45ms 
For 154 datalen and 10000000 iterations: 
 sip_hasher 380ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1145ms 
 twoxhash oneshot 45ms 
For 155 datalen and 10000000 iterations: 
 sip_hasher 392ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1147ms 
 twoxhash oneshot 45ms 
For 156 datalen and 10000000 iterations: 
 sip_hasher 376ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1146ms 
 twoxhash oneshot 45ms 
For 157 datalen and 10000000 iterations: 
 sip_hasher 389ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1155ms 
 twoxhash oneshot 45ms 
For 158 datalen and 10000000 iterations: 
 sip_hasher 390ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1155ms 
 twoxhash oneshot 45ms 
For 159 datalen and 10000000 iterations: 
 sip_hasher 393ms 
 xxhash3-rust oneshot 599ms 
 xxhash3-rust streaming 1156ms 
 twoxhash oneshot 45ms 
For 160 datalen and 10000000 iterations: 
 sip_hasher 372ms 
 xxhash3-rust oneshot 649ms 
 xxhash3-rust streaming 1139ms 
 twoxhash oneshot 45ms 
For 161 datalen and 10000000 iterations: 
 sip_hasher 395ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1162ms 
 twoxhash oneshot 45ms 
For 162 datalen and 10000000 iterations: 
 sip_hasher 397ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1164ms 
 twoxhash oneshot 45ms 
For 163 datalen and 10000000 iterations: 
 sip_hasher 400ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1172ms 
 twoxhash oneshot 45ms 
For 164 datalen and 10000000 iterations: 
 sip_hasher 392ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1169ms 
 twoxhash oneshot 45ms 
For 165 datalen and 10000000 iterations: 
 sip_hasher 404ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1174ms 
 twoxhash oneshot 45ms 
For 166 datalen and 10000000 iterations: 
 sip_hasher 406ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1178ms 
 twoxhash oneshot 45ms 
For 167 datalen and 10000000 iterations: 
 sip_hasher 410ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1180ms 
 twoxhash oneshot 45ms 
For 168 datalen and 10000000 iterations: 
 sip_hasher 388ms 
 xxhash3-rust oneshot 649ms 
 xxhash3-rust streaming 1175ms 
 twoxhash oneshot 45ms 
For 169 datalen and 10000000 iterations: 
 sip_hasher 413ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1186ms 
 twoxhash oneshot 45ms 
For 170 datalen and 10000000 iterations: 
 sip_hasher 412ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1187ms 
 twoxhash oneshot 45ms 
For 171 datalen and 10000000 iterations: 
 sip_hasher 417ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1189ms 
 twoxhash oneshot 45ms 
For 172 datalen and 10000000 iterations: 
 sip_hasher 408ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1197ms 
 twoxhash oneshot 45ms 
For 173 datalen and 10000000 iterations: 
 sip_hasher 419ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1199ms 
 twoxhash oneshot 45ms 
For 174 datalen and 10000000 iterations: 
 sip_hasher 423ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1200ms 
 twoxhash oneshot 45ms 
For 175 datalen and 10000000 iterations: 
 sip_hasher 427ms 
 xxhash3-rust oneshot 650ms 
 xxhash3-rust streaming 1202ms 
 twoxhash oneshot 45ms 
For 176 datalen and 10000000 iterations: 
 sip_hasher 405ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1185ms 
 twoxhash oneshot 45ms 
For 177 datalen and 10000000 iterations: 
 sip_hasher 427ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1207ms 
 twoxhash oneshot 45ms 
For 178 datalen and 10000000 iterations: 
 sip_hasher 429ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1215ms 
 twoxhash oneshot 45ms 
For 179 datalen and 10000000 iterations: 
 sip_hasher 431ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1222ms 
 twoxhash oneshot 45ms 
For 180 datalen and 10000000 iterations: 
 sip_hasher 424ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1221ms 
 twoxhash oneshot 45ms 
For 181 datalen and 10000000 iterations: 
 sip_hasher 435ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1227ms 
 twoxhash oneshot 45ms 
For 182 datalen and 10000000 iterations: 
 sip_hasher 437ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1229ms 
 twoxhash oneshot 45ms 
For 183 datalen and 10000000 iterations: 
 sip_hasher 456ms 
 xxhash3-rust oneshot 703ms 
 xxhash3-rust streaming 1232ms 
 twoxhash oneshot 45ms 
For 184 datalen and 10000000 iterations: 
 sip_hasher 421ms 
 xxhash3-rust oneshot 700ms 
 xxhash3-rust streaming 1234ms 
 twoxhash oneshot 45ms 
For 185 datalen and 10000000 iterations: 
 sip_hasher 444ms 
 xxhash3-rust oneshot 701ms 
 xxhash3-rust streaming 1241ms 
 twoxhash oneshot 45ms 
For 186 datalen and 10000000 iterations: 
 sip_hasher 445ms 
 xxhash3-rust oneshot 701ms 
 xxhash3-rust streaming 1243ms 
 twoxhash oneshot 45ms 
For 187 datalen and 10000000 iterations: 
 sip_hasher 449ms 
 xxhash3-rust oneshot 701ms 
 xxhash3-rust streaming 1247ms 
 twoxhash oneshot 45ms 
For 188 datalen and 10000000 iterations: 
 sip_hasher 441ms 
 xxhash3-rust oneshot 701ms 
 xxhash3-rust streaming 1244ms 
 twoxhash oneshot 45ms 
For 189 datalen and 10000000 iterations: 
 sip_hasher 454ms 
 xxhash3-rust oneshot 701ms 
 xxhash3-rust streaming 1252ms 
 twoxhash oneshot 45ms 
For 190 datalen and 10000000 iterations: 
 sip_hasher 455ms 
 xxhash3-rust oneshot 701ms 
 xxhash3-rust streaming 1254ms 
 twoxhash oneshot 45ms 
For 191 datalen and 10000000 iterations: 
 sip_hasher 461ms 
 xxhash3-rust oneshot 701ms 
 xxhash3-rust streaming 1259ms 
 twoxhash oneshot 45ms 
For 192 datalen and 10000000 iterations: 
 sip_hasher 439ms 
 xxhash3-rust oneshot 753ms 
 xxhash3-rust streaming 1231ms 
 twoxhash oneshot 45ms 
For 193 datalen and 10000000 iterations: 
 sip_hasher 462ms 
 xxhash3-rust oneshot 754ms 
 xxhash3-rust streaming 1261ms 
 twoxhash oneshot 45ms 
For 194 datalen and 10000000 iterations: 
 sip_hasher 464ms 
 xxhash3-rust oneshot 753ms 
 xxhash3-rust streaming 1262ms 
 twoxhash oneshot 45ms 
For 195 datalen and 10000000 iterations: 
 sip_hasher 468ms 
 xxhash3-rust oneshot 754ms 
 xxhash3-rust streaming 1261ms 
 twoxhash oneshot 45ms 
For 196 datalen and 10000000 iterations: 
 sip_hasher 457ms 
 xxhash3-rust oneshot 753ms 
 xxhash3-rust streaming 1264ms 
 twoxhash oneshot 45ms 
For 197 datalen and 10000000 iterations: 
 sip_hasher 471ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1271ms 
 twoxhash oneshot 45ms 
For 198 datalen and 10000000 iterations: 
 sip_hasher 469ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1271ms 
 twoxhash oneshot 45ms 
For 199 datalen and 10000000 iterations: 
 sip_hasher 472ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1274ms 
 twoxhash oneshot 45ms 
For 200 datalen and 10000000 iterations: 
 sip_hasher 452ms 
 xxhash3-rust oneshot 751ms 
 xxhash3-rust streaming 1270ms 
 twoxhash oneshot 45ms 
For 201 datalen and 10000000 iterations: 
 sip_hasher 480ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1283ms 
 twoxhash oneshot 45ms 
For 202 datalen and 10000000 iterations: 
 sip_hasher 477ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1286ms 
 twoxhash oneshot 45ms 
For 203 datalen and 10000000 iterations: 
 sip_hasher 481ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1291ms 
 twoxhash oneshot 45ms 
For 204 datalen and 10000000 iterations: 
 sip_hasher 472ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1287ms 
 twoxhash oneshot 45ms 
For 205 datalen and 10000000 iterations: 
 sip_hasher 484ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1288ms 
 twoxhash oneshot 45ms 
For 206 datalen and 10000000 iterations: 
 sip_hasher 487ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1291ms 
 twoxhash oneshot 45ms 
For 207 datalen and 10000000 iterations: 
 sip_hasher 491ms 
 xxhash3-rust oneshot 752ms 
 xxhash3-rust streaming 1295ms 
 twoxhash oneshot 45ms 
For 208 datalen and 10000000 iterations: 
 sip_hasher 469ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1285ms 
 twoxhash oneshot 45ms 
For 209 datalen and 10000000 iterations: 
 sip_hasher 495ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1302ms 
 twoxhash oneshot 45ms 
For 210 datalen and 10000000 iterations: 
 sip_hasher 495ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1309ms 
 twoxhash oneshot 45ms 
For 211 datalen and 10000000 iterations: 
 sip_hasher 500ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1316ms 
 twoxhash oneshot 45ms 
For 212 datalen and 10000000 iterations: 
 sip_hasher 488ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1313ms 
 twoxhash oneshot 45ms 
For 213 datalen and 10000000 iterations: 
 sip_hasher 502ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1319ms 
 twoxhash oneshot 45ms 
For 214 datalen and 10000000 iterations: 
 sip_hasher 500ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1321ms 
 twoxhash oneshot 45ms 
For 215 datalen and 10000000 iterations: 
 sip_hasher 508ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1324ms 
 twoxhash oneshot 45ms 
For 216 datalen and 10000000 iterations: 
 sip_hasher 485ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1325ms 
 twoxhash oneshot 45ms 
For 217 datalen and 10000000 iterations: 
 sip_hasher 510ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1328ms 
 twoxhash oneshot 45ms 
For 218 datalen and 10000000 iterations: 
 sip_hasher 525ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1330ms 
 twoxhash oneshot 45ms 
For 219 datalen and 10000000 iterations: 
 sip_hasher 512ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1334ms 
 twoxhash oneshot 45ms 
For 220 datalen and 10000000 iterations: 
 sip_hasher 505ms 
 xxhash3-rust oneshot 807ms 
 xxhash3-rust streaming 1325ms 
 twoxhash oneshot 45ms 
For 221 datalen and 10000000 iterations: 
 sip_hasher 517ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1333ms 
 twoxhash oneshot 45ms 
For 222 datalen and 10000000 iterations: 
 sip_hasher 516ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1330ms 
 twoxhash oneshot 45ms 
For 223 datalen and 10000000 iterations: 
 sip_hasher 522ms 
 xxhash3-rust oneshot 806ms 
 xxhash3-rust streaming 1334ms 
 twoxhash oneshot 45ms 
For 224 datalen and 10000000 iterations: 
 sip_hasher 503ms 
 xxhash3-rust oneshot 856ms 
 xxhash3-rust streaming 1319ms 
 twoxhash oneshot 45ms 
For 225 datalen and 10000000 iterations: 
 sip_hasher 524ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1341ms 
 twoxhash oneshot 45ms 
For 226 datalen and 10000000 iterations: 
 sip_hasher 526ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1343ms 
 twoxhash oneshot 45ms 
For 227 datalen and 10000000 iterations: 
 sip_hasher 529ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1352ms 
 twoxhash oneshot 45ms 
For 228 datalen and 10000000 iterations: 
 sip_hasher 521ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1349ms 
 twoxhash oneshot 45ms 
For 229 datalen and 10000000 iterations: 
 sip_hasher 536ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1362ms 
 twoxhash oneshot 45ms 
For 230 datalen and 10000000 iterations: 
 sip_hasher 534ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1366ms 
 twoxhash oneshot 45ms 
For 231 datalen and 10000000 iterations: 
 sip_hasher 539ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1366ms 
 twoxhash oneshot 45ms 
For 232 datalen and 10000000 iterations: 
 sip_hasher 517ms 
 xxhash3-rust oneshot 856ms 
 xxhash3-rust streaming 1367ms 
 twoxhash oneshot 45ms 
For 233 datalen and 10000000 iterations: 
 sip_hasher 542ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1374ms 
 twoxhash oneshot 45ms 
For 234 datalen and 10000000 iterations: 
 sip_hasher 541ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1384ms 
 twoxhash oneshot 45ms 
For 235 datalen and 10000000 iterations: 
 sip_hasher 551ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1384ms 
 twoxhash oneshot 45ms 
For 236 datalen and 10000000 iterations: 
 sip_hasher 537ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1386ms 
 twoxhash oneshot 45ms 
For 237 datalen and 10000000 iterations: 
 sip_hasher 550ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1387ms 
 twoxhash oneshot 45ms 
For 238 datalen and 10000000 iterations: 
 sip_hasher 550ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1389ms 
 twoxhash oneshot 45ms 
For 239 datalen and 10000000 iterations: 
 sip_hasher 556ms 
 xxhash3-rust oneshot 857ms 
 xxhash3-rust streaming 1389ms 
 twoxhash oneshot 45ms 
For 240 datalen and 10000000 iterations: 
 sip_hasher 534ms 
 xxhash3-rust oneshot 907ms 
 xxhash3-rust streaming 1378ms 
 twoxhash oneshot 45ms 
For 241 datalen and 10000000 iterations: 
 sip_hasher 557ms 
 xxhash3-rust oneshot 1464ms 
 xxhash3-rust streaming 1380ms 
 twoxhash oneshot 572ms 
For 242 datalen and 10000000 iterations: 
 sip_hasher 561ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1394ms 
 twoxhash oneshot 572ms 
For 243 datalen and 10000000 iterations: 
 sip_hasher 561ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1400ms 
 twoxhash oneshot 572ms 
For 244 datalen and 10000000 iterations: 
 sip_hasher 553ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1400ms 
 twoxhash oneshot 572ms 
For 245 datalen and 10000000 iterations: 
 sip_hasher 564ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1408ms 
 twoxhash oneshot 572ms 
For 246 datalen and 10000000 iterations: 
 sip_hasher 565ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1406ms 
 twoxhash oneshot 573ms 
For 247 datalen and 10000000 iterations: 
 sip_hasher 570ms 
 xxhash3-rust oneshot 1464ms 
 xxhash3-rust streaming 1406ms 
 twoxhash oneshot 572ms 
For 248 datalen and 10000000 iterations: 
 sip_hasher 550ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1398ms 
 twoxhash oneshot 572ms 
For 249 datalen and 10000000 iterations: 
 sip_hasher 575ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1409ms 
 twoxhash oneshot 572ms 
For 250 datalen and 10000000 iterations: 
 sip_hasher 576ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1411ms 
 twoxhash oneshot 572ms 
For 251 datalen and 10000000 iterations: 
 sip_hasher 577ms 
 xxhash3-rust oneshot 1464ms 
 xxhash3-rust streaming 1416ms 
 twoxhash oneshot 572ms 
For 252 datalen and 10000000 iterations: 
 sip_hasher 569ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1409ms 
 twoxhash oneshot 572ms 
For 253 datalen and 10000000 iterations: 
 sip_hasher 581ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1418ms 
 twoxhash oneshot 572ms 
For 254 datalen and 10000000 iterations: 
 sip_hasher 584ms 
 xxhash3-rust oneshot 1463ms 
 xxhash3-rust streaming 1418ms 
 twoxhash oneshot 572ms 
@shepmaster shepmaster changed the title Performance degrades when jumping from 240 to 241 bytes of input. XxHash3_64 performance degrades when jumping from 240 to 241 bytes of input. Dec 18, 2024
@shepmaster
Copy link
Owner

Tweaking our own performance tests to focus on 240 / 241 bytes shows a similar jump:

240 241 Percentage
impl-c 12.422 ns 12.622 ns 101.61004669135405
impl-c-scalar 12.389 ns 17.970 ns 145.04802647509887
impl-c-neon 12.240 ns 12.679 ns 103.58660130718955
impl-rust 12.539 ns 15.998 ns 127.5859318924954

I don't currently have any strong hunches as to why this could be the case. I also probably won't have much time to try and track this down.

If I were forced to make a guess, one thing I saw some point when profiling was that sometimes the stack size of the function was larger than it needed to be because SIMD registers were allocated unconditionally, which caused a hit when saving / restoring the stack space.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants