Compare commits

..

4 Commits

Author SHA1 Message Date
Adrien Gallouët
b4a311cdc8 Check for clock_gettime() 2016-06-15 14:12:21 +00:00
Adrien Gallouët
08617d0017 Fix macosx build 2016-06-15 14:01:20 +00:00
Adrien Gallouët
38cd3b0371 Try to do a more accurate bench 2016-06-15 09:20:18 +00:00
Adrien Gallouët
5944e61dfe Fix bench output 2016-06-15 09:10:57 +00:00
2 changed files with 59 additions and 24 deletions

View File

@@ -16,6 +16,8 @@ AC_PROG_CC_C99
AC_USE_SYSTEM_EXTENSIONS AC_USE_SYSTEM_EXTENSIONS
AC_SEARCH_LIBS([getaddrinfo], [resolv nsl]) AC_SEARCH_LIBS([getaddrinfo], [resolv nsl])
AC_SEARCH_LIBS([socket], [socket]) AC_SEARCH_LIBS([socket], [socket])
AC_CHECK_LIB([rt], [clock_gettime])
AC_CHECK_FUNCS([clock_gettime])
PKG_CHECK_MODULES([libsodium], [libsodium >= 1.0.4]) PKG_CHECK_MODULES([libsodium], [libsodium >= 1.0.4])
AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([Makefile])
AC_OUTPUT AC_OUTPUT

View File

@@ -14,6 +14,7 @@
#include <signal.h> #include <signal.h>
#include <poll.h> #include <poll.h>
#include <fcntl.h> #include <fcntl.h>
#include <time.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/time.h> #include <sys/time.h>
@@ -36,6 +37,10 @@
#include <sodium.h> #include <sodium.h>
#ifdef __APPLE__
#include <mach/mach_time.h>
#endif
#ifndef O_CLOEXEC #ifndef O_CLOEXEC
#define O_CLOEXEC 0 #define O_CLOEXEC 0
#endif #endif
@@ -986,50 +991,78 @@ static int gt_track (uint8_t **db, struct ip_common *ic, uint8_t *data, int rev)
return 0; return 0;
} }
static unsigned long long gt_now (void)
{
#if defined __APPLE__
static mach_timebase_info_data_t mtid;
if (!mtid.denom) mach_timebase_info(&mtid);
return (mach_absolute_time()*mtid.numer/mtid.denom)/1000ULL;
#elif defined CLOCK_MONOTONIC
struct timespec tv;
clock_gettime(CLOCK_MONOTONIC, &tv);
return tv.tv_sec*1000000ULL+tv.tv_nsec/1000ULL;
#else
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec*1000000ULL+tv.tv_usec;
#endif
}
static void gt_bench (int chacha) static void gt_bench (int chacha)
{ {
unsigned char npub[crypto_aead_aes256gcm_NPUBBYTES]; unsigned char npub[crypto_aead_aes256gcm_NPUBBYTES];
memset(npub, 0, sizeof(npub)); memset(npub, 0, sizeof(npub));
unsigned char key[crypto_aead_aes256gcm_KEYBYTES]; unsigned char key[crypto_aead_aes256gcm_KEYBYTES];
memset(key, 1, sizeof(key)); memset(key, 1, sizeof(key));
crypto_aead_aes256gcm_state ctx; crypto_aead_aes256gcm_state ctx;
if (!chacha) if (!chacha)
crypto_aead_aes256gcm_beforenm(&ctx, key); crypto_aead_aes256gcm_beforenm(&ctx, key);
int count = 2000000;
size_t size = 8;
gt_print("bench: %s\n", chacha?"chacha20poly1305":"aes256gcm"); gt_print("bench: %s\n", chacha?"chacha20poly1305":"aes256gcm");
_align_(16) unsigned char buf[32*1024+crypto_aead_aes256gcm_ABYTES]; _align_(16) unsigned char buf[32*1024+crypto_aead_aes256gcm_ABYTES];
for (size_t size=8; size<=sizeof(buf); size*=2) { size_t bs = 8;
struct timeval tv1;
gettimeofday(&tv1, NULL);
for (int i=0; !gt.quit && i<count; i++) { while (!gt.quit && bs<=sizeof(buf)) {
if (chacha) { size_t total_size = 0;
crypto_aead_chacha20poly1305_encrypt(buf, NULL, unsigned long long total_dt = 0.0;
buf, size, NULL, 0, NULL, npub, key); double mbps = 0.0;
} else {
crypto_aead_aes256gcm_encrypt_afternm(buf, NULL, while (!gt.quit) {
buf, size, NULL, 0, NULL, npub, unsigned long long now = gt_now();
(const crypto_aead_aes256gcm_state *)&ctx);
size_t size = 0;
while (!gt.quit && size<16*1024*1024) {
if (chacha) {
crypto_aead_chacha20poly1305_encrypt(buf, NULL,
buf, bs, NULL, 0, NULL, npub, key);
} else {
crypto_aead_aes256gcm_encrypt_afternm(buf, NULL,
buf, bs, NULL, 0, NULL, npub,
(const crypto_aead_aes256gcm_state *)&ctx);
}
size += bs;
} }
total_dt += gt_now()-now;
total_size += size;
double last_mbps = mbps;
mbps = total_size*8.0/total_dt;
double diff = mbps-last_mbps;
if (-0.1<diff && diff<0.1)
break;
} }
if (gt.quit) gt_print("%6zu bytes %9.2f Mbps\n", bs, mbps);
break; bs *= 2;
struct timeval tv2;
gettimeofday(&tv2, NULL);
double dt = (tv2.tv_usec+tv2.tv_sec*1e6)-(tv1.tv_usec+tv1.tv_sec*1e6);
gt_print("block size: %-6zu bps: %.2f\n", size, size*count*8.0/dt);
} }
} }