/*********************************************************************** * * DESCRIPTION : * Test that measures IOPS * * AUTHOR: Antonio Gomez START DATE: 5 Feb 18 * */ #include #include #include #include #include #include #include #include #define PAPYRUSKV_SCRATCH 0 int rank, size, peer; char name[256]; char *text; int lenght; int db; int ret; int main(int argc, char** argv) { int i; MPI_Init(&argc, &argv); //Initialize papyrus papyruskv_init(&argc, &argv, "kv_repo"); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); if (size<2) { printf ("This test needs at least 2 processes\n"); return 1; } MPI_Get_processor_name(name, &ret); text=(char*) malloc (64*sizeof(char)); memset(text, '\0', 65); peer = rank == size - 1 ? 0 : rank + 1; printf("[%s:%d] [%s] [%d/%d]\n", __FILE__, __LINE__, name, rank, size); ret = papyruskv_open("TEST_DB", PAPYRUSKV_CREATE | PAPYRUSKV_RELAXED | PAPYRUSKV_RDWR, NULL, &db); if (ret != PAPYRUSKV_OK) printf("[%s:%d] ret[%d]\n", __FILE__, __LINE__, ret); printf("[%s:%d] db[%d]\n", __FILE__, __LINE__, db); papyruskv_consistency (db, PAPYRUSKV_SEQUENTIAL); if (rank==0) { //Mount the files in the /tmp/test folder as a scratch space (it won't be written back) ret=papyruskv_mount_file(db, "/home1/05191/agomezig/papyrus/kv/tests/21_iops/test_file", "r", PAPYRUSKV_SCRATCH); if (ret != PAPYRUSKV_OK) printf("\n\n[%s:%d] ret[%d]\n\n", __FILE__, __LINE__, ret); else printf ("\n\nFile mounted\n\n"); } MPI_Barrier (MPI_COMM_WORLD); ret = papyruskv_fence(db, PAPYRUSKV_MEMTABLE); if (ret != PAPYRUSKV_OK) printf("[%s:%d] FAILED:ret[%d]\n", __FILE__, __LINE__, ret); printf("[%s:%d] FENCE:rank[%d]\n", __FILE__, __LINE__, rank); MPI_Barrier (MPI_COMM_WORLD); struct timeval tv1, tv2; if (rank==0) { gettimeofday(&tv1, NULL); for (i=0; i<10000; ++i) { ret=papyruskv_fread(db, text, 64, 0, "/home1/05191/agomezig/papyrus/kv/tests/21_iops/test_file"); if (ret != PAPYRUSKV_OK) { printf("\n\n[%s:%d] ret[%d]\n\n", __FILE__, __LINE__, ret); break; } else { // printf ("\n\n[0] Read content: %s\n\n", text); } } gettimeofday(&tv2, NULL); } MPI_Barrier (MPI_COMM_WORLD); if (rank!=0) { gettimeofday(&tv1, NULL); for (i=0; i<10000; ++i) { ret=papyruskv_fread(db, text, 64, 0, "/home1/05191/agomezig/papyrus/kv/tests/21_iops/test_file"); if (ret != PAPYRUSKV_OK) { printf("\n\n[%s:%d] ret[%d]\n\n", __FILE__, __LINE__, ret); break; } else { // printf ("\n\n[%d] Read content: %s\n\n", rank, text); } } gettimeofday(&tv2, NULL); } MPI_Barrier (MPI_COMM_WORLD); double ellapsed = (double)(tv2.tv_usec - tv1.tv_usec) / 1000000 + (double)(tv2.tv_sec - tv1.tv_sec); double IOPS = 10000.0/ellapsed; printf ("\nRank [%d] IOPS: %f [ellapsed %f]\n\n", rank, IOPS, ellapsed); if (rank==0) { ret=papyruskv_fclose(db, "/home1/05191/agomezig/papyrus/kv/tests/21_iops/test_file"); if (ret != PAPYRUSKV_OK) printf("\n\n[%s:%d] ret[%d]\n\n", __FILE__, __LINE__, ret); else printf ("\n\nFile closed\n\n"); } ret = papyruskv_close(db); if (ret != PAPYRUSKV_OK) printf("[%s:%d] ret[%d]\n", __FILE__, __LINE__, ret); papyruskv_finalize(); MPI_Finalize(); free (text); return 0; }