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;