Hi,

I worked on performance improvement for Rados Storage Daemon.  There was a 
discouraging message here:
https://groups.google.com/d/msg/bareos-users/hnLJrH60GHU/TJlb6j47BAAJ

Overall write speed went up 10 times. My comments are here - 
https://groups.google.com/d/msg/bareos-users/hnLJrH60GHU/TJlb6j47BAAJ

Patch is attached.  There are minor bug fixes, plus reworked options for 
libradosstriper (you have to introduce object_size)

Perhaps it can be useful for the project.

Alexander.

-- 
You received this message because you are subscribed to the Google Groups 
"bareos-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to bareos-devel+unsubscr...@googlegroups.com.
To post to this group, send email to bareos-devel@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
diff -C3 -r -w ./bareos-Release-16.2.4-orig/src/stored/backends/rados_device.c ./bareos-Release-16.2.4-new/src/stored/backends/rados_device.c
*** ./bareos-Release-16.2.4-orig/src/stored/backends/rados_device.c	2016-10-16 18:14:36.000000000 +0300
--- ./bareos-Release-16.2.4-new/src/stored/backends/rados_device.c	2017-10-16 01:33:28.032995404 +0300
***************
*** 43,48 ****
--- 43,49 ----
     argument_username,
     argument_striped,
     argument_stripe_unit,
+    argument_object_size,
     argument_stripe_count
  };
  
***************
*** 64,69 ****
--- 65,71 ----
  #ifdef HAVE_RADOS_STRIPER
     { "striped", argument_striped, 7 },
     { "stripe_unit=", argument_stripe_unit, 12 },
+    { "object_size=", argument_object_size, 12 },   
     { "stripe_count=", argument_stripe_count, 13 },
  #endif
     { NULL, argument_none }
***************
*** 137,142 ****
--- 139,148 ----
                    size_to_uint64(bp + device_options[i].compare_size, &m_stripe_unit);
                    done = true;
                    break;
+                case argument_object_size:
+                   size_to_uint64(bp + device_options[i].compare_size, &m_object_size);
+                   done = true;
+                   break;
                 case argument_stripe_count:
                    m_stripe_count = str_to_int64(bp + device_options[i].compare_size);
                    done = true;
***************
*** 254,259 ****
--- 260,272 ----
              Emsg0(M_FATAL, 0, errmsg);
              goto bail_out;
           } 
+          
+          status = rados_striper_set_object_layout_object_size(m_striper, m_object_size);
+          if (status < 0) {
+             Mmsg3(errmsg, _("Unable to set RADOS striper object size to %d  for pool %s: ERR=%s\n"), m_object_size, m_rados_poolname, be.bstrerror(-status));
+             Emsg0(M_FATAL, 0, errmsg);
+             goto bail_out;
+          }
        }
  #endif
     }
***************
*** 314,320 ****
  
  bail_out:
     if (m_cluster_initialized) {
!       rados_shutdown(&m_cluster);
        m_cluster_initialized = false;
     }
  
--- 327,333 ----
  
  bail_out:
     if (m_cluster_initialized) {
!       rados_shutdown(m_cluster);
        m_cluster_initialized = false;
     }
  
***************
*** 594,600 ****
     }
  
     if (m_cluster_initialized) {
!       rados_shutdown(&m_cluster);
        m_cluster_initialized = false;
     }
  
--- 607,613 ----
     }
  
     if (m_cluster_initialized) {
!       rados_shutdown(m_cluster);
        m_cluster_initialized = false;
     }
  
***************
*** 633,640 ****
     m_ctx = NULL;
  #ifdef HAVE_RADOS_STRIPER
     m_stripe_volume = false;
!    m_stripe_unit = 0;
!    m_stripe_count = 0;
     m_striper = NULL;
  #endif
     m_virtual_filename = get_pool_memory(PM_FNAME);
--- 646,654 ----
     m_ctx = NULL;
  #ifdef HAVE_RADOS_STRIPER
     m_stripe_volume = false;
!    m_stripe_unit = 4194304;
!    m_stripe_count = 1;
!    m_object_size = 4194304;
     m_striper = NULL;
  #endif
     m_virtual_filename = get_pool_memory(PM_FNAME);
diff -C3 -r -w ./bareos-Release-16.2.4-orig/src/stored/backends/rados_device.h ./bareos-Release-16.2.4-new/src/stored/backends/rados_device.h
*** ./bareos-Release-16.2.4-orig/src/stored/backends/rados_device.h	2016-10-16 18:14:36.000000000 +0300
--- ./bareos-Release-16.2.4-new/src/stored/backends/rados_device.h	2017-10-15 01:00:00.738631428 +0300
***************
*** 63,68 ****
--- 63,69 ----
     bool m_stripe_volume;
     uint64_t m_stripe_unit;
     uint32_t m_stripe_count;
+    uint64_t m_object_size;
  #endif
     rados_t m_cluster;
     rados_ioctx_t m_ctx;

Reply via email to