From f6f5e6c224d2ae07e7b1a25f5e34d09b7882bf01 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Tue, 6 Aug 2019 15:24:19 -0400 Subject: [PATCH] librados: Test completion creation/handling speed Signed-off-by: Adam C. Emerson --- src/test/librados/CMakeLists.txt | 4 +++ src/test/librados/completion_speed.cc | 38 +++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/test/librados/completion_speed.cc diff --git a/src/test/librados/CMakeLists.txt b/src/test/librados/CMakeLists.txt index d4d1c48d5519d..d5a99bd2a32d7 100644 --- a/src/test/librados/CMakeLists.txt +++ b/src/test/librados/CMakeLists.txt @@ -190,3 +190,7 @@ target_link_libraries(unittest_librados_config librados ${BLKID_LIBRARIES} ${GSSAPI_LIBRARIES} ${OPENLDAP_LIBRARIES}) +add_executable(ceph_test_rados_completion_speed + completion_speed.cc) +target_link_libraries(ceph_test_rados_completion_speed + librados ${UNITTEST_LIBS} radostest-cxx) diff --git a/src/test/librados/completion_speed.cc b/src/test/librados/completion_speed.cc new file mode 100644 index 0000000000000..708a58425e16e --- /dev/null +++ b/src/test/librados/completion_speed.cc @@ -0,0 +1,38 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include "include/rados/librados.hpp" +#include "common/ceph_context.h" +#include "common/Finisher.h" +#include "librados/AioCompletionImpl.h" + + +constexpr int max_completions = 10'000'000; +int completed = 0; +auto cct = (new CephContext(CEPH_ENTITY_TYPE_CLIENT))->get(); +Finisher f(cct); + +void completion_cb(librados::completion_t cb, void* arg) { + auto c = static_cast(arg); + delete c; + if (++completed < max_completions) { + auto aio = librados::Rados::aio_create_completion(); + aio->set_complete_callback(static_cast(aio), &completion_cb); + f.queue(new librados::C_AioComplete(aio->pc)); + } +} + +int main(void) { + auto aio = librados::Rados::aio_create_completion(); + aio->set_complete_callback(static_cast(aio), &completion_cb); + f.queue(new librados::C_AioComplete(aio->pc)); + f.start(); + + while (completed < max_completions) + f.wait_for_empty(); + + f.stop(); + + assert(completed == max_completions); + cct->put(); +} -- 2.39.5