btrfs-progs: hash-speedtest: benchmark the configured backend

Change what hash-speedtest benchmarks according to the
--with-crypto=backend option. Until now it would run the same version
under different names inherited from the builting.

At configure time detect availability of all backends and define all
macros.

Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
David Sterba 2023-03-01 15:27:52 +01:00
parent 4fc291a465
commit bbcd599062
2 changed files with 36 additions and 11 deletions

View File

@ -236,29 +236,38 @@ AC_ARG_WITH([crypto],
cryptoprovider= cryptoprovider=
cryptoproviderversion= cryptoproviderversion=
CRYPTOPROVIDER_BUILTIN=0 CRYPTOPROVIDER_BUILTIN=0
CRYPTOPROVIDER_LIBGCRYPT=0
CRYPTOPROVIDER_LIBSODIUM=0
CRYPTOPROVIDER_LIBKCAPI=0
if test "$with_crypto" = "builtin"; then if test "$with_crypto" = "builtin"; then
cryptoprovider="builtin" cryptoprovider="builtin"
CRYPTOPROVIDER_BUILTIN=1 CRYPTOPROVIDER_BUILTIN=1
AC_DEFINE([CRYPTOPROVIDER_BUILTIN],[1],[Use builtin implementation])
elif test "$with_crypto" = "libgcrypt"; then elif test "$with_crypto" = "libgcrypt"; then
cryptoprovider="libgcrypt" cryptoprovider="libgcrypt"
PKG_CHECK_MODULES(GCRYPT, [libgcrypt >= 1.8.0]) PKG_CHECK_MODULES(GCRYPT, [libgcrypt >= 1.8.0])
AC_DEFINE([CRYPTOPROVIDER_LIBGCRYPT],[1],[Use libcrypt]) CRYPTOPROVIDER_LIBGCRYPT=1
cryptoproviderversion=`${PKG_CONFIG} libgcrypt --version` cryptoproviderversion=`${PKG_CONFIG} libgcrypt --version`
elif test "$with_crypto" = "libsodium"; then elif test "$with_crypto" = "libsodium"; then
cryptoprovider="libsodium" cryptoprovider="libsodium"
PKG_CHECK_MODULES(SODIUM, [libsodium >= 1.0.4]) PKG_CHECK_MODULES(SODIUM, [libsodium >= 1.0.4])
AC_DEFINE([CRYPTOPROVIDER_LIBSODIUM],[1],[Use libsodium]) CRYPTOPROVIDER_LIBSODIUM=1
cryptoproviderversion=`${PKG_CONFIG} libsodium --version` cryptoproviderversion=`${PKG_CONFIG} libsodium --version`
elif test "$with_crypto" = "libkcapi"; then elif test "$with_crypto" = "libkcapi"; then
cryptoprovider="libkcapi" cryptoprovider="libkcapi"
PKG_CHECK_MODULES(KCAPI, [libkcapi >= 1.0.0]) PKG_CHECK_MODULES(KCAPI, [libkcapi >= 1.0.0])
AC_DEFINE([CRYPTOPROVIDER_LIBKCAPI],[1],[Use libkcapi]) CRYPTOPROVIDER_LIBKCAPI=1
cryptoproviderversion=`${PKG_CONFIG} libkcapi --version` cryptoproviderversion=`${PKG_CONFIG} libkcapi --version`
else else
AC_MSG_ERROR([unrecognized crypto provider: $with_crypto]) AC_MSG_ERROR([unrecognized crypto provider: $with_crypto])
fi fi
AC_SUBST([CRYPTOPROVIDER_BUILTIN]) AC_SUBST([CRYPTOPROVIDER_BUILTIN])
AC_DEFINE_UNQUOTED([CRYPTOPROVIDER_BUILTIN],[$CRYPTOPROVIDER_BUILTIN],[Use builtin implementation])
AC_SUBST([CRYPTOPROVIDER_LIBGCRYPT])
AC_DEFINE_UNQUOTED([CRYPTOPROVIDER_LIBGCRYPT],[$CRYPTOPROVIDER_LIBGCRYPT],[Use libcrypt])
AC_SUBST([CRYPTOPROVIDER_LIBSODIUM])
AC_DEFINE_UNQUOTED([CRYPTOPROVIDER_LIBSODIUM],[$CRYPTOPROVIDER_LIBSODIUM],[Use libsodium])
AC_SUBST([CRYPTOPROVIDER_LIBKCAPI])
AC_DEFINE_UNQUOTED([CRYPTOPROVIDER_LIBKCAPI],[$CRYPTOPROVIDER_LIBKCAPI],[Use libkcapi])
AC_DEFINE_UNQUOTED([CRYPTOPROVIDER],["$cryptoprovider"],[Crypto implementation source name]) AC_DEFINE_UNQUOTED([CRYPTOPROVIDER],["$cryptoprovider"],[Crypto implementation source name])
AX_CHECK_DEFINE([linux/fiemap.h], [FIEMAP_EXTENT_SHARED], [], AX_CHECK_DEFINE([linux/fiemap.h], [FIEMAP_EXTENT_SHARED], [],

View File

@ -183,6 +183,7 @@ int main(int argc, char **argv) {
u64 cycles; u64 cycles;
u64 time; u64 time;
unsigned long cpu_flag; unsigned long cpu_flag;
int backend;
} contestants[] = { } contestants[] = {
{ .name = "NULL-NOP", .digest = hash_null_nop, .digest_size = 32 }, { .name = "NULL-NOP", .digest = hash_null_nop, .digest_size = 32 },
{ .name = "NULL-MEMCPY", .digest = hash_null_memcpy, .digest_size = 32 }, { .name = "NULL-MEMCPY", .digest = hash_null_memcpy, .digest_size = 32 },
@ -192,17 +193,29 @@ int main(int argc, char **argv) {
.cpu_flag = CPU_FLAG_SSE42 }, .cpu_flag = CPU_FLAG_SSE42 },
{ .name = "XXHASH", .digest = hash_xxhash, .digest_size = 8 }, { .name = "XXHASH", .digest = hash_xxhash, .digest_size = 8 },
{ .name = "SHA256-ref", .digest = hash_sha256, .digest_size = 32, { .name = "SHA256-ref", .digest = hash_sha256, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE }, .cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_BUILTIN + 1 },
{ .name = "SHA256-gcrypt", .digest = hash_sha256, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_LIBGCRYPT + 1 },
{ .name = "SHA256-sodium", .digest = hash_sha256, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_LIBSODIUM + 1 },
{ .name = "SHA256-kcapi", .digest = hash_sha256, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_LIBKCAPI + 1 },
{ .name = "SHA256-NI", .digest = hash_sha256, .digest_size = 32, { .name = "SHA256-NI", .digest = hash_sha256, .digest_size = 32,
.cpu_flag = CPU_FLAG_SHA }, .cpu_flag = CPU_FLAG_SHA, .backend = CRYPTOPROVIDER_BUILTIN + 1 },
{ .name = "BLAKE2-ref", .digest = hash_blake2b, .digest_size = 32, { .name = "BLAKE2-ref", .digest = hash_blake2b, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE }, .cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_BUILTIN + 1 },
{ .name = "BLAKE2-gcrypt", .digest = hash_blake2b, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_LIBGCRYPT + 1 },
{ .name = "BLAKE2-sodium", .digest = hash_blake2b, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_LIBSODIUM + 1 },
{ .name = "BLAKE2-kcapi", .digest = hash_blake2b, .digest_size = 32,
.cpu_flag = CPU_FLAG_NONE, .backend = CRYPTOPROVIDER_LIBKCAPI + 1 },
{ .name = "BLAKE2-SSE2", .digest = hash_blake2b, .digest_size = 32, { .name = "BLAKE2-SSE2", .digest = hash_blake2b, .digest_size = 32,
.cpu_flag = CPU_FLAG_SSE2 }, .cpu_flag = CPU_FLAG_SSE2, .backend = CRYPTOPROVIDER_BUILTIN + 1 },
{ .name = "BLAKE2-SSE41", .digest = hash_blake2b, .digest_size = 32, { .name = "BLAKE2-SSE41", .digest = hash_blake2b, .digest_size = 32,
.cpu_flag = CPU_FLAG_SSE41 }, .cpu_flag = CPU_FLAG_SSE41, .backend = CRYPTOPROVIDER_BUILTIN + 1 },
{ .name = "BLAKE2-AVX2", .digest = hash_blake2b, .digest_size = 32, { .name = "BLAKE2-AVX2", .digest = hash_blake2b, .digest_size = 32,
.cpu_flag = CPU_FLAG_AVX2 }, .cpu_flag = CPU_FLAG_AVX2, .backend = CRYPTOPROVIDER_BUILTIN + 1 },
}; };
int units = UNITS_CYCLES; int units = UNITS_CYCLES;
@ -272,7 +285,10 @@ int main(int argc, char **argv) {
printf("%12s: no CPU support\n", c->name); printf("%12s: no CPU support\n", c->name);
continue; continue;
} }
printf("%12s: ", c->name); /* Backend not compiled in */
if (c->backend == 1)
continue;
printf("%14s: ", c->name);
fflush(stdout); fflush(stdout);
if (c->cpu_flag) { if (c->cpu_flag) {