From f3d7a23d198d5c16ae29db87b21d74fca6fbd1d3 Mon Sep 17 00:00:00 2001 From: solsta <segorov555@gmail.com> Date: Thu, 14 Oct 2021 13:35:55 +0100 Subject: [PATCH] Testing add_range --- main.c | 76 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 21 deletions(-) diff --git a/main.c b/main.c index 798506e..858674c 100644 --- a/main.c +++ b/main.c @@ -11,9 +11,9 @@ #include <unistd.h> #include <stdbool.h> -POBJ_LAYOUT_BEGIN(list); -POBJ_LAYOUT_ROOT(list, struct my_root); -POBJ_LAYOUT_END(list); +POBJ_LAYOUT_BEGIN(nvmem); +POBJ_LAYOUT_ROOT(nvmem, struct my_root); +POBJ_LAYOUT_END(nvmem); #define buffer_size 100000000 @@ -23,7 +23,7 @@ struct my_root{ char buffer[buffer_size]; char buffer_copy[buffer_size]; }; -TOID(struct my_root) root; +//TOID(struct my_root) root; struct array{ char *buffer; @@ -59,6 +59,7 @@ void iterate_write(char *buffer){ void iterate_write_rand(char *buffer){ for(int i = 0; i < buffer_size; i++ ){ buffer[rand() % buffer_size] = 'a'; + } } @@ -87,15 +88,15 @@ int main(int argc, char **argv) { printf("DRAM results: \n"); printf("Sequential time: "); execute(ap->buffer, iterate_write, iterate_read); - printf("Random time: "); - execute(ap->buffer, iterate_write_rand, iterate_read_rand); + //printf("Random time: "); + //execute(ap->buffer, iterate_write_rand, iterate_read_rand); //PMEM code const char *path = argv[1]; if (file_exists(path) == false) { if ((pop = pmemobj_create(path, POBJ_LAYOUT_NAME(list), - sizeof(char)*buffer_size*3, 0666)) == NULL) { + sizeof(char)*buffer_size*10, 0666)) == NULL) { perror("failed to create pool\n"); return -1; } @@ -107,20 +108,52 @@ int main(int argc, char **argv) { } } printf("Pmem results: \n"); - root = POBJ_ROOT(pop, struct my_root); + //TOID (struct my_root) root = POBJ_ROOT(pop, struct my_root); + TOID (struct my_root) root = POBJ_ROOT(pop,struct my_root); + PMEMoid pmeMoid_root = pmemobj_root(pop, sizeof(struct my_root)); + struct my_root *rp = D_RW(root); - TX_BEGIN(pop){ - clock_t begin = clock(); - TX_ADD_DIRECT(rp->buffer); - clock_t tx_range_is_added = clock(); - double time_spent_adding_range_to_tx = (double)(tx_range_is_added - begin) / CLOCKS_PER_SEC; - - printf("Time took to add a range to a transaction: %f \n", time_spent_adding_range_to_tx); - - printf("Sequential time: "); - execute(rp->buffer, iterate_write, iterate_read); - printf("Random time: "); - execute(rp->buffer, iterate_write_rand, iterate_read_rand); + struct my_root *rptr = pmemobj_direct(pmeMoid_root); + + + + + TX_BEGIN(pop) { + clock_t begin = clock(); + //TX_ADD_DIRECT(rp->buffer); //Works + printf("Size of the range is %lu MB \n", buffer_size/1000000); + printf("Size of rp->buffer is: %lu \n", sizeof(rp->buffer)); + printf("Size of rp is: %lu \n", sizeof(rp)); + printf("Size of buffer should be: %lu \n", sizeof(char)*buffer_size); + + size_t st = buffer_size; + //pmemobj_tx_add_range_direct(rp->buffer, st); + //int pmemobj_tx_xadd_range(PMEMoid oid, uint64_t off, size_t size, + // uint64_t flags); + //pmemobj_tx_xadd_range(root.oid, 0, buffer_size, POBJ_FLA); + pmemobj_tx_xadd_range(root.oid, 0, buffer_size, POBJ_FLAG_NO_SNAPSHOT); + //pmemobj_tx_xadd_range(root.oid, 0, buffer_size, 0);//POBJ_FLAG_NO_SNAPSHOT); + //TX_ADD(root);//Crushes + + printf("Added to tx \n"); + + //TX_ALLOC() + // + // + //pmemobj_tx_add_range_direct(rptr, sizeof(struct my_root)); + // + //pmemobj_tx_add_range(pmeMoid, 0, sizeof(struct my_root)); + clock_t tx_range_is_added = clock(); + double time_spent_adding_range_to_tx = (double) (tx_range_is_added - begin) / CLOCKS_PER_SEC; + + printf("Time took to add a range to a transaction: %f \n", time_spent_adding_range_to_tx); + + printf("Sequential time: "); + execute(rp->buffer, iterate_write, iterate_read); + //printf("Random time: "); + //execute(rp->buffer, iterate_write_rand, iterate_read_rand); + } TX_ONABORT { + printf("TX aborted \n"); } TX_END @@ -131,7 +164,8 @@ int main(int argc, char **argv) { printf("MEMCPY took: %f \n", memcpy_time); start = clock(); - pmemobj_memcpy_persist(pop, rp->buffer_copy, rp->buffer, sizeof(char)*buffer_size); + pmemobj_memcpy(pop, rp->buffer_copy, rp->buffer, sizeof (char)*buffer_size, NULL); + //pmemobj_memcpy_persist(pop, rp->buffer_copy, rp->buffer, sizeof(char)*buffer_size); finish = clock(); double pmemcpy_time = (double)(finish - start) / CLOCKS_PER_SEC; printf("PMEMCPY took: %f \n", pmemcpy_time); -- GitLab