As SSE4.2 provides CRC32 instructions with either 32 and 64 bit operands, new rte_hash_crc_8byte() call assisted with _mm_crc32_u64 intrinsic may be useful.
Then, rte_hash_crc() function is redesigned to take advantage of both 32 and 64 bit operands. This improves the function's performance significantly. Results of my test run on a single CPU core are below. CPU: Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz Number of iterations/chunks: 52428800 Chunk size: 24 rte_hash_crc: 0.379 sec, hash: 0x14c64e11 rte_hash_crc_new: 0.253 sec, hash: 0x14c64e11 Chunk size: 25 rte_hash_crc: 0.442 sec, hash: 0xa9afc779 rte_hash_crc_new: 0.316 sec, hash: 0xa9afc779 Chunk size: 26 rte_hash_crc: 0.442 sec, hash: 0x92f2284b rte_hash_crc_new: 0.316 sec, hash: 0x92f2284b Chunk size: 27 rte_hash_crc: 0.442 sec, hash: 0x7c4655ff rte_hash_crc_new: 0.316 sec, hash: 0x7c4655ff Chunk size: 28 rte_hash_crc: 0.442 sec, hash: 0xf577c6b4 rte_hash_crc_new: 0.316 sec, hash: 0xf577c6b4 Chunk size: 29 rte_hash_crc: 0.505 sec, hash: 0x6e18ba55 rte_hash_crc_new: 0.337 sec, hash: 0x6e18ba55 Chunk size: 30 rte_hash_crc: 0.505 sec, hash: 0x35f07dbb rte_hash_crc_new: 0.337 sec, hash: 0x35f07dbb Chunk size: 31 rte_hash_crc: 0.505 sec, hash: 0x1bf2ee8c rte_hash_crc_new: 0.337 sec, hash: 0x1bf2ee8c Yerden Zhumabekov (2): hash: add new rte_hash_crc_8byte call hash: rte_hash_crc uses 8- and 4-byte CRC32 intrinsics lib/librte_hash/rte_hash_crc.h | 47 +++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) -- 1.7.9.5