From: Tony Finch Date: Wed, 21 Sep 2022 12:38:08 +0000 (+0100) Subject: A simple siphash benchmark X-Git-Tag: v9.19.6~14^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de10d697ab6fd5c8c3a017cee6359182a1d56348;p=thirdparty%2Fbind9.git A simple siphash benchmark To see the effect of adding a case-insentitive option. --- diff --git a/tests/bench/.gitignore b/tests/bench/.gitignore index c9c3825ad18..fb6b5a462af 100644 --- a/tests/bench/.gitignore +++ b/tests/bench/.gitignore @@ -1 +1,2 @@ ascii +siphash diff --git a/tests/bench/Makefile.am b/tests/bench/Makefile.am index 171db37b390..c53e6ea51d5 100644 --- a/tests/bench/Makefile.am +++ b/tests/bench/Makefile.am @@ -7,4 +7,5 @@ LDADD += \ $(LIBISC_LIBS) noinst_PROGRAMS = \ - ascii + ascii \ + siphash diff --git a/tests/bench/siphash.c b/tests/bench/siphash.c new file mode 100644 index 00000000000..c696da2f02f --- /dev/null +++ b/tests/bench/siphash.c @@ -0,0 +1,131 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#define SIZE (1024 * 1024) + +int +main(void) { + static uint8_t bytes[SIZE]; + static uint8_t key[16]; + + isc_random_buf(bytes, SIZE); + isc_random_buf(key, sizeof(key)); + + for (size_t len = 256; len > 0; len = len * 4 / 5) { + isc_time_t start; + isc_time_now_hires(&start); + + uint64_t count = 0; + uint64_t sum = 0; + for (size_t end = len; end < SIZE; end += len) { + uint64_t hash; + uint8_t lower[1024]; + isc_ascii_lowercopy(lower, bytes + end - len, len); + isc_siphash24(key, lower, len, (void *)&hash); + sum += hash; + count++; + } + + isc_time_t finish; + isc_time_now_hires(&finish); + + uint64_t us = isc_time_microdiff(&finish, &start); + printf("%f us wide-lower len %3zu, %7llu kh/s (%llx)\n", + (double)us / 1000000.0, len, + (unsigned long long)(count * 1000 / us), + (unsigned long long)sum); + } + + for (size_t len = 256; len > 0; len = len * 4 / 5) { + isc_time_t start; + isc_time_now_hires(&start); + + uint64_t count = 0; + uint64_t sum = 0; + for (size_t end = len; end < SIZE; end += len) { + uint64_t hash; + isc_siphash24(key, bytes + end - len, len, + (void *)&hash); + sum += hash; + count++; + } + + isc_time_t finish; + isc_time_now_hires(&finish); + + uint64_t us = isc_time_microdiff(&finish, &start); + printf("%f us wide-bytes len %3zu, %7llu kh/s (%llx)\n", + (double)us / 1000000.0, len, + (unsigned long long)(count * 1000 / us), + (unsigned long long)sum); + } + + for (size_t len = 256; len > 0; len = len * 4 / 5) { + isc_time_t start; + isc_time_now_hires(&start); + + uint64_t count = 0; + uint32_t sum = 0; + for (size_t end = len; end < SIZE; end += len) { + uint32_t hash; + uint8_t lower[1024]; + isc_ascii_lowercopy(lower, bytes + end - len, len); + isc_halfsiphash24(key, lower, len, (void *)&hash); + sum += hash; + count++; + } + + isc_time_t finish; + isc_time_now_hires(&finish); + + uint64_t us = isc_time_microdiff(&finish, &start); + printf("%f us half-lower len %3zu, %7llu kh/s (%llx)\n", + (double)us / 1000000.0, len, + (unsigned long long)(count * 1000 / us), + (unsigned long long)sum); + } + + for (size_t len = 256; len > 0; len = len * 4 / 5) { + isc_time_t start; + isc_time_now_hires(&start); + + uint64_t count = 0; + uint32_t sum = 0; + for (size_t end = len; end < SIZE; end += len) { + uint32_t hash; + isc_halfsiphash24(key, bytes + end - len, len, + (void *)&hash); + sum += hash; + count++; + } + + isc_time_t finish; + isc_time_now_hires(&finish); + + uint64_t us = isc_time_microdiff(&finish, &start); + printf("%f us half-bytes len %3zu, %7llu kh/s (%llx)\n", + (double)us / 1000000.0, len, + (unsigned long long)(count * 1000 / us), + (unsigned long long)sum); + } +}