diff options
author | Keith Bostic <keith.bostic@mongodb.com> | 2016-09-08 02:46:05 -0400 |
---|---|---|
committer | Michael Cahill <michael.cahill@mongodb.com> | 2016-09-08 16:46:05 +1000 |
commit | 881a37eea1668d47c5d5fb38001a2850ca117495 (patch) | |
tree | 898db838171a0920fc0b29ac900ecdcf7ec6ee6a /test | |
parent | 5f07ab685f2b1e978cfda354dd52a5fc52f8f8ab (diff) | |
download | mongo-881a37eea1668d47c5d5fb38001a2850ca117495.tar.gz |
WT-2873 Refactor CRC32 code (#3000)
* Add --enable-crc32-hardware configuration option (configured on by default), which allows CRC32 hardware support to be turned off.
* Move the CRC32 implementation in software from the x86-specific code to software/checksum.c, leave the x86-specific code in x86/crc32-x86.c.
* Move the pointer to the checksum function from a file static to the WT_PROCESS.cksum field, change the __wt_cksum_init() function to set that field.
* WT-2882 Create CRC32 Hardware implementation for ARM8
* Change "cksum" to "checksum" everywhere (hopefully) no semantic changes.
Diffstat (limited to 'test')
-rw-r--r-- | test/csuite/Makefile.am | 5 | ||||
-rw-r--r-- | test/csuite/wt2695_checksum/main.c | 45 | ||||
-rw-r--r-- | test/csuite/wt2695_checksum/sw.c | 49 | ||||
-rw-r--r-- | test/salvage/salvage.c | 4 |
4 files changed, 30 insertions, 73 deletions
diff --git a/test/csuite/Makefile.am b/test/csuite/Makefile.am index b8a62b69612..15db2fbcf46 100644 --- a/test/csuite/Makefile.am +++ b/test/csuite/Makefile.am @@ -1,6 +1,5 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)/src/include \ - -I$(top_srcdir)/test/utility \ - -DCRC_PATH="\"$(top_srcdir)/src/checksum/x86/checksum.c\"" + -I$(top_srcdir)/test/utility LDADD = $(top_builddir)/test/utility/libtest_util.la \ $(top_builddir)/libwiredtiger.la AM_LDFLAGS = -static @@ -20,7 +19,7 @@ noinst_PROGRAMS += test_wt2535_insert_race test_wt2447_join_main_table_SOURCES = wt2447_join_main_table/main.c noinst_PROGRAMS += test_wt2447_join_main_table -test_wt2695_checksum_SOURCES = wt2695_checksum/main.c wt2695_checksum/sw.c +test_wt2695_checksum_SOURCES = wt2695_checksum/main.c noinst_PROGRAMS += test_wt2695_checksum test_wt2592_join_schema_SOURCES = wt2592_join_schema/main.c diff --git a/test/csuite/wt2695_checksum/main.c b/test/csuite/wt2695_checksum/main.c index dc6f5b5cd87..df6f562f719 100644 --- a/test/csuite/wt2695_checksum/main.c +++ b/test/csuite/wt2695_checksum/main.c @@ -34,8 +34,6 @@ void (*custom_die)(void) = NULL; -uint32_t cksum_sw(const void *, size_t); - static inline void check(uint32_t hw, uint32_t sw, size_t len, const char *msg) { @@ -61,57 +59,66 @@ main(void) testutil_check(__wt_random_init_seed(NULL, &rnd)); /* Initialize the WiredTiger library checksum functions. */ - __wt_cksum_init(); + __wt_checksum_init(); /* * Some simple known checksums. */ len = 1; - hw = __wt_cksum(data, len); + hw = __wt_checksum(data, len); check(hw, (uint32_t)0x527d5351, len, "nul x1: hardware"); - sw = cksum_sw(data, len); + sw = __wt_checksum_sw(data, len); check(sw, (uint32_t)0x527d5351, len, "nul x1: software"); len = 2; - hw = __wt_cksum(data, len); + hw = __wt_checksum(data, len); check(hw, (uint32_t)0xf16177d2, len, "nul x2: hardware"); - sw = cksum_sw(data, len); + sw = __wt_checksum_sw(data, len); check(sw, (uint32_t)0xf16177d2, len, "nul x2: software"); len = 3; - hw = __wt_cksum(data, len); + hw = __wt_checksum(data, len); check(hw, (uint32_t)0x6064a37a, len, "nul x3: hardware"); - sw = cksum_sw(data, len); + sw = __wt_checksum_sw(data, len); check(sw, (uint32_t)0x6064a37a, len, "nul x3: software"); len = 4; - hw = __wt_cksum(data, len); + hw = __wt_checksum(data, len); check(hw, (uint32_t)0x48674bc7, len, "nul x4: hardware"); - sw = cksum_sw(data, len); + sw = __wt_checksum_sw(data, len); check(sw, (uint32_t)0x48674bc7, len, "nul x4: software"); len = strlen("123456789"); memcpy(data, "123456789", len); - hw = __wt_cksum(data, len); + hw = __wt_checksum(data, len); check(hw, (uint32_t)0xe3069283, len, "known string #1: hardware"); - sw = cksum_sw(data, len); + sw = __wt_checksum_sw(data, len); check(sw, (uint32_t)0xe3069283, len, "known string #1: software"); len = strlen("The quick brown fox jumps over the lazy dog"); memcpy(data, "The quick brown fox jumps over the lazy dog", len); - hw = __wt_cksum(data, len); + hw = __wt_checksum(data, len); check(hw, (uint32_t)0x22620404, len, "known string #2: hardware"); - sw = cksum_sw(data, len); + sw = __wt_checksum_sw(data, len); check(sw, (uint32_t)0x22620404, len, "known string #2: software"); /* + * Offset the string by 1 to ensure the hardware code handles unaligned + * reads. + */ + hw = __wt_checksum(data + 1, len - 1); + check(hw, (uint32_t)0xae11f7f5, len, "known string #2: hardware"); + sw = __wt_checksum_sw(data + 1, len - 1); + check(sw, (uint32_t)0xae11f7f5, len, "known string #2: software"); + + /* * Checksums of power-of-two data chunks. */ for (i = 0, len = 512; i < 1000; ++i) { for (j = 0; j < len; ++j) data[j] = __wt_random(&rnd) & 0xff; - hw = __wt_cksum(data, len); - sw = cksum_sw(data, len); + hw = __wt_checksum(data, len); + sw = __wt_checksum_sw(data, len); check(hw, sw, len, "random power-of-two"); len *= 2; @@ -126,8 +133,8 @@ main(void) len = __wt_random(&rnd) % DATASIZE; for (j = 0; j < len; ++j) data[j] = __wt_random(&rnd) & 0xff; - hw = __wt_cksum(data, len); - sw = cksum_sw(data, len); + hw = __wt_checksum(data, len); + sw = __wt_checksum_sw(data, len); check(hw, sw, len, "random"); } diff --git a/test/csuite/wt2695_checksum/sw.c b/test/csuite/wt2695_checksum/sw.c deleted file mode 100644 index 892d9480bf3..00000000000 --- a/test/csuite/wt2695_checksum/sw.c +++ /dev/null @@ -1,49 +0,0 @@ -/*- - * Public Domain 2014-2016 MongoDB, Inc. - * Public Domain 2008-2014 WiredTiger, Inc. - * - * This is free and unencumbered software released into the public domain. - * - * Anyone is free to copy, modify, publish, use, compile, sell, or - * distribute this software, either in source code form or as a compiled - * binary, for any purpose, commercial or non-commercial, and by any - * means. - * - * In jurisdictions that recognize copyright laws, the author or authors - * of this software dedicate any and all copyright interest in the - * software to the public domain. We make this dedication for the benefit - * of the public at large and to the detriment of our heirs and - * successors. We intend this dedication to be an overt act of - * relinquishment in perpetuity of all present and future rights to this - * software under copyright law. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#include "test_util.h" - -/* - * Build the software version of the CRC code. - */ -#define __wt_cksum __wt_cksum_notused -uint32_t __wt_cksum_notused(const void *, size_t); -#define __wt_cksum_init __wt_cksum_init_notused -void __wt_cksum_init_notused(void); - -#include CRC_PATH - -/* - * cksum_sw -- - * Checksum in software. - */ -uint32_t cksum_sw(const void *, size_t); -uint32_t -cksum_sw(const void *chunk, size_t len) -{ - return (__wt_cksum_sw(chunk, len)); -} diff --git a/test/salvage/salvage.c b/test/salvage/salvage.c index c3349188623..bad0167ca8e 100644 --- a/test/salvage/salvage.c +++ b/test/salvage/salvage.c @@ -602,8 +602,8 @@ copy(u_int gen, u_int recno) dsk->recno = recno; dsk->write_gen = gen; blk = WT_BLOCK_HEADER_REF(buf); - blk->cksum = 0; - blk->cksum = __wt_cksum(dsk, PSIZE); + blk->checksum = 0; + blk->checksum = __wt_checksum(dsk, PSIZE); CHECK(fwrite(buf, 1, PSIZE, ofp) == PSIZE); } |