Skip to content

Instantly share code, notes, and snippets.

@tanakamura
Last active December 27, 2015 08:19
Show Gist options
  • Save tanakamura/7295694 to your computer and use it in GitHub Desktop.
Save tanakamura/7295694 to your computer and use it in GitHub Desktop.
write throughput
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifdef _WIN32
#include <windows.h>
double
sec()
{
LARGE_INTEGER freq, v;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&v);
return v.QuadPart / (double)freq.QuadPart;
}
HANDLE log_file2;
#else
#include <sys/time.h>
#include <fcntl.h>
double
sec()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + tv.tv_usec / 1000000.0;
}
int log_file2;
#endif
int
main(int argc, char **argv)
{
int size = 64;
int sizei, counti;
FILE *result = fopen("result.csv", "w");
fprintf(result, "size,time,,size,sec/byte\n");
for (sizei=1; sizei<128; sizei++) {
int size2 = size * sizei;
#ifdef _WIN32
HANDLE log_file2 = CreateFile("bench.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
#else
int log_file2 = open("bench.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
#endif
char *buffer = malloc(size2);
double start, end, dt;
memset(buffer, 'a', size2);
buffer[size2-2] = '\r';
buffer[size2-1] = '\n';
start = sec();
for (counti=0; counti<256; counti++) {
#ifdef _WIN32
WriteFile(log_file2, buffer, size2, NULL, NULL);
#else
write(log_file2, buffer, size2);
#endif
}
end = sec();
dt = (end-start) / 256;
fprintf(result, "%d,%.20f,,%d,%.20f\n", size2, dt, size2, dt/size2);
free(buffer);
#ifdef _WIN32
CloseHandle(log_file2);
#else
close(log_file2);
#endif
}
fclose(result);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment