From a2a4730255f33cae4fe3daa242a3cf5c32400c66 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 5 Mar 2021 16:42:33 +0100 Subject: Add a very basic test of direct disk writing speed. --- hacks/direct_disk_speed_test.cc | 58 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 hacks/direct_disk_speed_test.cc diff --git a/hacks/direct_disk_speed_test.cc b/hacks/direct_disk_speed_test.cc new file mode 100644 index 000000000..c4e5b69f7 --- /dev/null +++ b/hacks/direct_disk_speed_test.cc @@ -0,0 +1,58 @@ +#include +#include +#include + +int test(int block_size, int blocks, int gap, int rdisk) +{ + struct timeval start; + gettimeofday(&start, NULL); + + FILE* f = NULL; + if (rdisk) { + f = fopen("/dev/rdisk3", "r+b"); + } else { + f = fopen("/dev/disk3", "r+b"); + } + if (!f) { + printf("fopen failed.\n"); + return -1; + } + + setbuf(f, 0); + + void* buffer = malloc(block_size); + if (!buffer) { + printf("malloc failed.\n"); + return -1; + } + + for (int i = 0; i < blocks; ++i) { + fwrite(buffer, block_size, 1, f); + if (gap > 0) { + fseek(f, gap, SEEK_CUR); + } + } + + fclose(f); + + struct timeval end; + gettimeofday(&end, NULL); + float duration = ((end.tv_sec + end.tv_usec / 1e6) - (start.tv_sec + start.tv_usec / 1e6)); + printf("block_size=%d blocks=%d gap=%d rdisk=%d time=%f\n", block_size, blocks, gap, rdisk, duration); + return 0; +} + + +int main() +{ + for (int i = 0; i < 2; i++) { + test(4096, 4096, 0, i); + test(4096, 4096, 0, i); + test(8192, 2048, 0, i); + test(4096, 4096, 4096, i); + test(4096, 4096, 65536, i); + test(8192, 2048, 65536, i); + test(16384, 1024, 65536, i); + } +} + -- cgit v1.2.3