From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:37419) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UGVzm-00031r-9v for qemu-devel@nongnu.org; Fri, 15 Mar 2013 10:52:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UGVzh-0005Ke-Ep for qemu-devel@nongnu.org; Fri, 15 Mar 2013 10:52:34 -0400 Received: from nodalink.pck.nerim.net ([62.212.105.220]:59650 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UGVzg-0005KH-SZ for qemu-devel@nongnu.org; Fri, 15 Mar 2013 10:52:29 -0400 From: =?UTF-8?q?Beno=C3=AEt=20Canet?= Date: Fri, 15 Mar 2013 15:49:42 +0100 Message-Id: <1363358986-8360-29-git-send-email-benoit@irqsave.net> In-Reply-To: <1363358986-8360-1-git-send-email-benoit@irqsave.net> References: <1363358986-8360-1-git-send-email-benoit@irqsave.net> Subject: [Qemu-devel] [RFC V7 28/32] qcow2: Integrate SKEIN hash algorithm in deduplication. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, =?UTF-8?q?Beno=C3=AEt=20Canet?= , stefanha@redhat.com Signed-off-by: Benoit Canet --- block/qcow2-dedup.c | 15 +++++++++++++++ block/qcow2.c | 5 +++++ configure | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c index cd47e2c..6ad9d0c 100644 --- a/block/qcow2-dedup.c +++ b/block/qcow2-dedup.c @@ -33,6 +33,10 @@ #include #endif +#ifdef CONFIG_SKEIN_DEDUP +#include +#endif + static int qcow2_dedup_read_write_hash(BlockDriverState *bs, QCowHash *hash, uint64_t *first_logical_sect, @@ -272,6 +276,17 @@ static int qcow2_compute_cluster_hash(BlockDriverState *bs, return gnutls_hash_fast(GNUTLS_DIG_SHA256, data, s->cluster_size, hash->data); #endif +#if defined(CONFIG_SKEIN_DEDUP) + case QCOW_HASH_SKEIN: + { + SkeinCtx_t ctx; + skeinCtxPrepare(&ctx, Skein256); + skeinInit(&ctx, Skein256); + skeinUpdate(&ctx, data, s->cluster_size); + skeinFinal(&ctx, hash->data); + } + return 0; +#endif default: error_report("Invalid deduplication hash algorithm %i", s->dedup_hash_algo); diff --git a/block/qcow2.c b/block/qcow2.c index 9c613e5..17b2fcb 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -1540,6 +1540,11 @@ static int8_t qcow2_get_dedup_hash_algo(char *value) if (!value || !strcmp(value, "sha256")) { return QCOW_HASH_SHA256; } +#if defined(CONFIG_SKEIN_DEDUP) + if (!strcmp(value, "skein")) { + return QCOW_HASH_SKEIN; + } +#endif error_printf("Unsupported deduplication hash algorithm.\n"); return -EINVAL; diff --git a/configure b/configure index 0b8c92e..6631173 100755 --- a/configure +++ b/configure @@ -229,6 +229,7 @@ virtio_blk_data_plane="" gtk="" gtkabi="2.0" sha256_dedup="yes" +skein_dedup="no" # parse CC options first for opt do @@ -910,6 +911,10 @@ for opt do ;; --enable-sha256-dedup) sha256_dedup="yes" ;; + --disable-skein-dedup) skein_dedup="no" + ;; + --enable-skein-dedup) skein_dedup="yes" + ;; *) echo "ERROR: unknown option $opt"; show_help="yes" ;; esac @@ -1167,6 +1172,7 @@ echo " --disable-sha256-dedup disable sha256 dedup" echo " --enable-sha256-dedup enables sha256 dedup" echo " --enable-gcov enable test coverage analysis with gcov" echo " --gcov=GCOV use specified gcov [$gcov_tool]" +echo " --enable-skein-dedup enable computing dedup hashes with SKEIN" echo "" echo "NOTE: The object files are built at the place where configure is launched" exit 1 @@ -2509,6 +2515,30 @@ EOF fi fi +########################################## +# SKEIN dedup hash function probe +if test "$skein_dedup" != "no" ; then + cat > $TMPC < +int main(void) { + SkeinCtx_t ctx; + skeinCtxPrepare(&ctx, 512); + return 0; +} +EOF + skein_libs="-lskein3fish" + if compile_prog "" "$skein_libs" ; then + skein_dedup=yes + libs_tools="$skein_libs $libs_tools" + libs_softmmu="$skein_libs $libs_softmmu" + else + if test "$skein_dedup" = "yes" ; then + feature_not_found "libskein3fish not found" + fi + skein_dedup=no + fi +fi + # # Check for xxxat() functions when we are building linux-user # emulator. This is done because older glibc versions don't @@ -3456,6 +3486,7 @@ echo "virtio-blk-data-plane $virtio_blk_data_plane" echo "sha256-dedup $sha256_dedup" echo "gcov $gcov_tool" echo "gcov enabled $gcov" +echo "SKEIN support $skein_dedup" if test "$sdl_too_old" = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" @@ -3826,6 +3857,10 @@ if test "$sha256_dedup" = "yes" ; then echo "CONFIG_SHA256_DEDUP=y" >> $config_host_mak fi +if test "$skein_dedup" = "yes" ; then + echo "CONFIG_SKEIN_DEDUP=y" >> $config_host_mak +fi + # USB host support case "$usb" in linux) -- 1.7.10.4