test.c revision 782744ef60b7ed47a529d30b9f8e0c528c436fdb
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" 7fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe#include "../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" 19fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 20f754086950c511d48af21aee5c49e9d7985d3d32Jens Axboe#define CHUNK 131072U 21f754086950c511d48af21aee5c49e9d7985d3d32Jens Axboe#define NR_CHUNKS 2048U 22fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 23fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestruct test_type { 24fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe const char *name; 25fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe unsigned int mask; 26fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t (*fn)(void); 27fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe}; 28fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 29fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboeenum { 30fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_MD5 = 1U << 0, 31fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC64 = 1U << 1, 32fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC32 = 1U << 2, 33fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC32C = 1U << 3, 34fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC16 = 1U << 4, 35fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_CRC7 = 1U << 5, 36fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_SHA1 = 1U << 6, 37fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_SHA256 = 1U << 7, 38fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe T_SHA512 = 1U << 8, 39fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe}; 40fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 41fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic void randomize_buf(void *buf, unsigned int size, int seed) 42fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 43fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct frand_state state; 44fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 45fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe init_rand_seed(&state, seed); 46fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fill_random_buf(&state, buf, size); 47fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 48fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 49fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_md5(void) 50fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 51fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint32_t digest[4]; 52fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_md5_ctx ctx = { .hash = digest }; 53fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 54fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 55fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 56fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 57fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 58fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_md5_init(&ctx); 59fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 60fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 61fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 62fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 63fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 64fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 65fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_md5_update(&ctx, buf, CHUNK); 66fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 67fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 68fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 69fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 70fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 71fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 72fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc64(void) 73fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 74fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 75fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 76fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 77fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 78fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 79fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 80fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 81fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 82fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 83fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 84fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc64(buf, CHUNK); 85fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 86fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 87fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 88fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 89fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 90fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 91fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc32(void) 92fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 93fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 94fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 95fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 96fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 97fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 98fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 99fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 100fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 101fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 102fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 103fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc32(buf, CHUNK); 104fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 105fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 106fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 107fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 108fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 109fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 110fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc32c(void) 111fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 112fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 113fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 114fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 115fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 116fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 117fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 118fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 119fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 120fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 121fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 122fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc32c(buf, CHUNK); 123fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 124fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 125fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 126fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 127fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 128fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 129fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc16(void) 130fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 131fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 132fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 133fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 134fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 135fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 136fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 137fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 138fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 139fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 140fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 141fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc16(buf, CHUNK); 142fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 143fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 144fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 145fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 146fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 147fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 148fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_crc7(void) 149fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 150fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 151fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 152fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 153fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 154fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 155fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 156fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 157fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 158fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 159fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 160fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_crc7(buf, CHUNK); 161fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 162fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 163fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 164fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 165fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 166fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 167fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_sha1(void) 168fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 169fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint32_t sha[5]; 170fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_sha1_ctx ctx = { .H = sha }; 171fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 172fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 173fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 174fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 175fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 176fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha1_init(&ctx); 177fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 178fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 179fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 180fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 181fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 182fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 183fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha1_update(&ctx, buf, CHUNK); 184fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 185fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 186fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 187fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 188fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 189fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 190fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_sha256(void) 191fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 192fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint8_t sha[64]; 193fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_sha256_ctx ctx = { .buf = sha }; 194fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 195fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 196fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 197fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 198fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 199fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha256_init(&ctx); 200fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 201fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 202fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 203fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 204fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 205fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 206fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha256_update(&ctx, buf, CHUNK); 207fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 208fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 209fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 210fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 211fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 212fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 213fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic uint64_t t_sha512(void) 214fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 215fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint8_t sha[128]; 216fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct fio_sha512_ctx ctx = { .buf = sha }; 217fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe struct timeval s; 218fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t ret; 219fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe void *buf; 220fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 221fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 222fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha512_init(&ctx); 223fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 224fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe buf = malloc(CHUNK); 225fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe randomize_buf(buf, CHUNK, 0x8989); 226fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 227fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_gettime(&s, NULL); 228fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; i < NR_CHUNKS; i++) 229fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe fio_sha512_update(&ctx, buf, CHUNK); 230fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 231fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ret = utime_since_now(&s); 232fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(buf); 233fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return ret; 234fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 235fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 236fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic struct test_type t[] = { 237fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 238fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "md5", 239fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_MD5, 240fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_md5, 241fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 242fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 243fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc64", 244fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC64, 245fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc64, 246fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 247fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 248fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc32", 249fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC32, 250fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc32, 251fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 252fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 253fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc32c", 254fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC32C, 255fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc32c, 256fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 257fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 258fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc16", 259fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC16, 260fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc16, 261fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 262fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 263fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "crc7", 264fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_CRC7, 265fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_crc7, 266fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 267fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 268fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "sha1", 269fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_SHA1, 270fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_sha1, 271fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 272fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 273fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "sha256", 274fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_SHA256, 275fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_sha256, 276fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 277fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 278fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = "sha512", 279fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .mask = T_SHA512, 280fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .fn = t_sha512, 281fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 282fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe { 283fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe .name = NULL, 284fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe }, 285fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe}; 286fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 287fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboestatic unsigned int get_test_mask(const char *type) 288fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 289fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe char *ostr, *str = strdup(type); 290fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe unsigned int mask; 291fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe char *name; 292fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 293fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 294fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe ostr = str; 295fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mask = 0; 296fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe while ((name = strsep(&str, ",")) != NULL) { 297fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; t[i].name; i++) { 298f754086950c511d48af21aee5c49e9d7985d3d32Jens Axboe if (!strcmp(t[i].name, name)) { 299fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mask |= t[i].mask; 300fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe break; 301fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 302fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 303fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 304fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 305fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe free(ostr); 306fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return mask; 307fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 308fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 309782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboestatic int list_types(void) 310782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe{ 311782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe int i; 312782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 313782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe for (i = 0; t[i].name; i++) 314782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe printf("%s\n", t[i].name); 315782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 316782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe return 0; 317782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe} 318782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 319fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboeint fio_crctest(const char *type) 320fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe{ 321fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe unsigned int test_mask = 0; 322fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t mb = CHUNK * NR_CHUNKS; 323fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe int i; 324fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 325fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe crc32c_intel_probe(); 326fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 327fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe if (!type) 328fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe test_mask = ~0U; 329782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe else if (!strcmp(type, "help") || !strcmp(type, "list")) 330782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe return list_types(); 331fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe else 332fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe test_mask = get_test_mask(type); 333fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 334fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe for (i = 0; t[i].name; i++) { 335fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe double mb_sec; 336fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe uint64_t usec; 337fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 338fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe if (!(t[i].mask & test_mask)) 339fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe continue; 340fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe 341fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe usec = t[i].fn(); 342fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mb_sec = (double) mb / (double) usec; 343fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe mb_sec /= (1.024 * 1.024); 344fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe printf("%s:\t%.2f MB/sec\n", t[i].name, mb_sec); 345fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe } 346782744ef60b7ed47a529d30b9f8e0c528c436fdbJens Axboe 347fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe return 0; 348fec0f21cb04bfd6c94b546998f194baed41fdec5Jens Axboe} 349