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