#pragma once #include <string> #include <vector> #define GIB(x) (x * 1024 * 1024 * 1024ull) #define GB(x) (x * 1000 * 1000 * 1000ull) #define KEY_SIZE 10 // 10 #define VALUE_SIZE 90 // 94 // 246 #define RECORD_SIZE (KEY_SIZE + VALUE_SIZE) /* #define INDEX_SIZE 5 #define BLOCK_SIZE 4000 // Need not be equal to physical block size #define READ_BUFFER_SIZE GB(10) // RUNs are equal to READ buffer size #define WRITE_BUFFER_SIZE GB(10) // WB can be < RB where multiple write cycles take place. //////////////////////////////////////////////////////////////////// #define REC_PER_BLOCK (BLOCK_SIZE / RECORD_SIZE) #define READ_BUFFER_COUNT (READ_BUFFER_SIZE / BLOCK_SIZE) #define WRITE_BUFFER_COUNT (WRITE_BUFFER_SIZE / BLOCK_SIZE) #define REC_PER_WRITE_BUFFER ((WRITE_BUFFER_COUNT * BLOCK_SIZE) / RECORD_SIZE) #define REC_PER_READ_BUFFER ((READ_BUFFER_COUNT * BLOCK_SIZE) / RECORD_SIZE) */ struct Config { std::vector<std::string> files; std::string output_dir; // int key_size; // int value_size; size_t read_buffer_size; size_t write_buffer_size; size_t block_size; int mode; // Three concurrency modes int read_thrds; int sort_thrds; int write_thrds; // Not from cmdline int record_size; size_t recs_per_blk; size_t read_buff_blk_count; size_t write_buff_blk_count; size_t read_buff_rec_count; size_t write_buff_rec_count; }; // Initialize a global struct, perhaps replace this with a singleton? extern struct Config conf;