From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mgw.gov.kz (mgw.gov.kz [89.218.88.242]) by dpdk.org (Postfix) with ESMTP id 22BCF683D for ; Wed, 25 Feb 2015 13:38:23 +0100 (CET) Received: from mgw.gov.kz (mx.ctsat.kz [178.89.4.95]) by mgw.gov.kz with ESMTP id t1PCcKIo022743-t1PCcKIp022743; Wed, 25 Feb 2015 18:38:20 +0600 Received: from EXCASHUB1.rgp.local (192.168.40.51) by EdgeForefront.rgp.local (192.168.40.59) with Microsoft SMTP Server (TLS) id 14.2.247.3; Wed, 25 Feb 2015 18:36:46 +0600 Received: from [192.168.35.15] (192.168.35.15) by excashub1.rgp.local (192.168.40.48) with Microsoft SMTP Server (TLS) id 14.2.247.3; Wed, 25 Feb 2015 18:38:21 +0600 Message-ID: <54EDC1D3.8000603@sts.kz> Date: Wed, 25 Feb 2015 18:36:35 +0600 From: Yerden Zhumabekov User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Bruce Richardson References: <1424781388-7485-1-git-send-email-e_zhumabekov@sts.kz> <1424837312-23029-1-git-send-email-e_zhumabekov@sts.kz> <20150225113431.GA9512@bricha3-MOBL3> In-Reply-To: <20150225113431.GA9512@bricha3-MOBL3> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [192.168.35.15] X-FEAS-SYSTEM-WL: e_zhumabekov@sts.kz Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH v2] app/test: add crc32 algorithms equivalence check X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Feb 2015 12:38:23 -0000 All notes taken into account. v3 posted. 25.02.2015 17:34, Bruce Richardson пишет: > On Wed, Feb 25, 2015 at 10:08:32AM +0600, Yerden Zhumabekov wrote: >> New function test_crc32_hash_alg_equiv() checks whether software, >> 4-byte operand and 8-byte operand versions of CRC32 hash function >> implementations return the same result value. >> >> Signed-off-by: Yerden Zhumabekov > Two small notes below for improving output on error. > > Acked-by: Bruce Richardson > >> --- >> app/test/test_hash.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 63 insertions(+) >> >> diff --git a/app/test/test_hash.c b/app/test/test_hash.c >> index 76b1b8f..3e94af1 100644 >> --- a/app/test/test_hash.c >> +++ b/app/test/test_hash.c >> @@ -177,6 +177,66 @@ static struct rte_hash_parameters ut_params = { >> .socket_id = 0, >> }; >> >> +#define CRC32_ITERATIONS (1U << 20) >> +#define CRC32_DWORDS (1U << 6) >> +/* >> + * Test if all CRC32 implementations yield the same hash value >> + */ >> +static int >> +test_crc32_hash_alg_equiv(void) >> +{ >> + uint32_t hash_val; >> + uint32_t init_val; >> + uint64_t data64[CRC32_DWORDS]; >> + unsigned i, j; >> + size_t data_len; >> + >> + printf("# CRC32 implementations equivalence test\n"); >> + for (i = 0; i < CRC32_ITERATIONS; i++) { >> + /* Randomizing data_len of data set */ >> + data_len = (size_t) ((rte_rand() % sizeof(data64)) + 1); >> + init_val = (uint32_t) rte_rand(); >> + >> + /* Fill the data set */ >> + for (j = 0; j < CRC32_DWORDS; j++) >> + data64[j] = rte_rand(); >> + >> + /* Calculate software CRC32 */ >> + rte_hash_crc_set_alg(CRC32_SW); >> + hash_val = rte_hash_crc(data64, data_len, init_val); >> + >> + /* Check against 4-byte-operand sse4.2 CRC32 if available */ >> + rte_hash_crc_set_alg(CRC32_SSE42); >> + if (hash_val != rte_hash_crc(data64, data_len, init_val)) { >> + printf("Failed checking CRC32_SW against CRC32_SSE42\n"); >> + break; >> + } >> + >> + /* Check against 8-byte-operand sse4.2 CRC32 if available */ >> + rte_hash_crc_set_alg(CRC32_SSE42_x64); >> + if (hash_val != rte_hash_crc(data64, data_len, init_val)) { >> + printf("Failed checking CRC32_SW against CRC32_SSE42_x64\n"); >> + break; >> + } >> + } >> + >> + /* Resetting to best available algorithm */ >> + rte_hash_crc_set_alg(CRC32_SSE42_x64); >> + >> + if (i == CRC32_ITERATIONS) >> + return 0; >> + >> + printf("Failed test data (hex):\n"); >> + >> + for (j = 0; j < data_len; j++) { >> + printf("%02X", ((uint8_t *)data64)[j]); > Put in a space after each hex character, otherwise it comes out like: > > Failed test data (hex): > AAD292776348010C7A18D3080DB3A300 > FD > Test Failed > > [I forced a failure by changing a != to == to test it, don't worry, the > hash calculations are fine! :-)] > >> + if ((j+1) % 16 == 0 || j == data_len - 1) >> + printf("\n"); >> + } > Maybe also print out here, or before the hex digits, the length of the data > that was tested. e.g. "printf("%u bytes total\n", data_len);" or similar. >> + >> + return -1; >> +} >> + >> /* >> * Test a hash function. >> */ >> @@ -1356,6 +1416,9 @@ test_hash(void) >> >> run_hash_func_tests(); >> >> + if (test_crc32_hash_alg_equiv() < 0) >> + return -1; >> + >> return 0; >> } >> >> -- >> 1.7.9.5 >> -- Sincerely, Yerden Zhumabekov State Technical Service Astana, KZ