1fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include <stdio.h> 2fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include <stdlib.h> 3fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include <string.h> 4fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 5fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../fio.h" 6fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../gettime.h" 79e52966eb7e2ba4a0b5cb2afda1aa4b8a48be831Danny Al-Gaaf#include "../fio_time.h" 8fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../verify.h" 9fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 10fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/md5.h" 11fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/crc64.h" 12fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/crc32.h" 13fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/crc32c.h" 14fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/crc16.h" 15fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/crc7.h" 16fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/sha1.h" 17fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/sha256.h" 18fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../crc/sha512.h" 19844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe#include "../crc/xxhash.h" 20fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 21ea1f1da3959dac74093013f4bb20320f97000219Jens Axboe#include "test.h" 22ea1f1da3959dac74093013f4bb20320f97000219Jens Axboe 23f754086950c511d48af21aee5c49e9d7985d3d32Jens Axboe#define CHUNK 131072U 24f754086950c511d48af21aee5c49e9d7985d3d32Jens Axboe#define NR_CHUNKS 2048U 25fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 26fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestruct test_type { 27fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe const char *name; 28fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe unsigned int mask; 29fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t (*fn)(void); 30fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe}; 31fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 32fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboeenum { 33fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_MD5 = 1U << 0, 34fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC64 = 1U << 1, 35fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC32 = 1U << 2, 36fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC32C = 1U << 3, 37fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC16 = 1U << 4, 38fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC7 = 1U << 5, 39fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_SHA1 = 1U << 6, 40fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_SHA256 = 1U << 7, 41fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_SHA512 = 1U << 8, 42844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe T_XXHASH = 1U << 9, 43fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe}; 44fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 45fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic void randomize_buf(void *buf, unsigned int size, int seed) 46fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 47fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct frand_state state; 48fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 49fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe init_rand_seed(&state, seed); 50fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fill_random_buf(&state, buf, size); 51fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 52fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 53fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_md5(void) 54fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 55fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint32_t digest[4]; 56fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_md5_ctx ctx = { .hash = digest }; 57fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 58fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 59fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 60fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 61fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 62fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_md5_init(&ctx); 63fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 64fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 65fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 66fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 67fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 68fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 69fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_md5_update(&ctx, buf, CHUNK); 70fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 71fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 72fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 73fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 74fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 75fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 76fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc64(void) 77fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 78fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 79fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 80fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 81fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 82fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 83fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 84fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 85fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 86fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 87fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 88fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc64(buf, CHUNK); 89fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 90fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 91fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 92fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 93fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 94fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 95fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc32(void) 96fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 97fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 98fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 99fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 100fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 101fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 102fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 103fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 104fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 105fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 106fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 107fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc32(buf, CHUNK); 108fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 109fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 110fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 111fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 112fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 113fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 114fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc32c(void) 115fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 116fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 117fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 118fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 119fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 120fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 121fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 122fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 123fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 124fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 125fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 126fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc32c(buf, CHUNK); 127fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 128fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 129fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 130fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 131fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 132fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 133fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc16(void) 134fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 135fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 136fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 137fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 138fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 139fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 140fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 141fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 142fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 143fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 144fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 145fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc16(buf, CHUNK); 146fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 147fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 148fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 149fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 150fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 151fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 152fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc7(void) 153fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 154fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 155fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 156fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 157fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 158fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 159fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 160fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 161fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 162fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 163fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 164fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc7(buf, CHUNK); 165fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 166fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 167fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 168fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 169fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 170fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 171fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_sha1(void) 172fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 173fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint32_t sha[5]; 174fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_sha1_ctx ctx = { .H = sha }; 175fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 176fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 177fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 178fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 179fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 180fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha1_init(&ctx); 181fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 182fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 183fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 184fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 185fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 186fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 187fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha1_update(&ctx, buf, CHUNK); 188fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 189fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 190fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 191fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 192fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 193fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 194fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_sha256(void) 195fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 196fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint8_t sha[64]; 197fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_sha256_ctx ctx = { .buf = sha }; 198fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 199fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 200fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 201fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 202fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 203fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha256_init(&ctx); 204fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 205fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 206fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 207fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 208fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 209fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 210fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha256_update(&ctx, buf, CHUNK); 211fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 212fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 213fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 214fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 215fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 216fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 217fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_sha512(void) 218fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 219fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint8_t sha[128]; 220fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_sha512_ctx ctx = { .buf = sha }; 221fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 222fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 223fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 224fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 225fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 226fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha512_init(&ctx); 227fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 228fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 229fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 230fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 231fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 232fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 233fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha512_update(&ctx, buf, CHUNK); 234fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 235fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 236fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 237fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 238fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 239fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 240844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboestatic uint64_t t_xxhash(void) 241844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe{ 242844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe void *state; 243844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe struct timeval s; 244844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe uint64_t ret; 245844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe void *buf; 246844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe int i; 247844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe 248844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe state = XXH32_init(0x8989); 249844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe 250844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe buf = malloc(CHUNK); 251844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 252844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe 253844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe fio_gettime(&s, NULL); 254844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 255844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe XXH32_update(state, buf, CHUNK); 256844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe 257844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe XXH32_digest(state); 258844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe ret = utime_since_now(&s); 259844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe free(buf); 260844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe return ret; 261844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe} 262844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe 263fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic struct test_type t[] = { 264fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 265fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "md5", 266fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_MD5, 267fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_md5, 268fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 269fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 270fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc64", 271fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC64, 272fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc64, 273fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 274fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 275fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc32", 276fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC32, 277fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc32, 278fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 279fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 280fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc32c", 281fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC32C, 282fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc32c, 283fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 284fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 285fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc16", 286fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC16, 287fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc16, 288fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 289fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 290fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc7", 291fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC7, 292fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc7, 293fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 294fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 295fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "sha1", 296fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_SHA1, 297fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_sha1, 298fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 299fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 300fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "sha256", 301fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_SHA256, 302fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_sha256, 303fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 304fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 305fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "sha512", 306fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_SHA512, 307fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_sha512, 308fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 309fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 310844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe .name = "xxhash", 311844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe .mask = T_XXHASH, 312844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe .fn = t_xxhash, 313844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe }, 314844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe { 315fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = NULL, 316fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 317fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe}; 318fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 319fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic unsigned int get_test_mask(const char *type) 320fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 321fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe char *ostr, *str = strdup(type); 322fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe unsigned int mask; 323fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe char *name; 324fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 325fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 326fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ostr = str; 327fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mask = 0; 328fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe while ((name = strsep(&str, ",")) != NULL) { 329fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; t[i].name; i++) { 330f754086950c511d48af21aee5c49e9d7985d3d32Jens Axboe if (!strcmp(t[i].name, name)) { 331fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mask |= t[i].mask; 332fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe break; 333fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 334fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 335fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 336fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 337fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(ostr); 338fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return mask; 339fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 340fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 341782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboestatic int list_types(void) 342782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe{ 343782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe int i; 344782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 345782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe for (i = 0; t[i].name; i++) 346782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe printf("%s\n", t[i].name); 347782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 348782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe return 0; 349782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe} 350782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 351fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboeint fio_crctest(const char *type) 352fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 353fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe unsigned int test_mask = 0; 354fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t mb = CHUNK * NR_CHUNKS; 355fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 356fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 357fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe crc32c_intel_probe(); 358fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 359fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe if (!type) 360fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe test_mask = ~0U; 361782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe else if (!strcmp(type, "help") || !strcmp(type, "list")) 362782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe return list_types(); 363fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe else 364fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe test_mask = get_test_mask(type); 365fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 366fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; t[i].name; i++) { 367fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe double mb_sec; 368fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t usec; 369fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 370fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe if (!(t[i].mask & test_mask)) 371fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe continue; 372fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 373fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe usec = t[i].fn(); 374fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mb_sec = (double) mb / (double) usec; 375fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mb_sec /= (1.024 * 1.024); 376fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe printf("%s:\t%.2f MB/sec\n", t[i].name, mb_sec); 377fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 378782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 379fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return 0; 380fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 381