From: Adam C. Emerson Date: Tue, 6 Aug 2019 19:24:19 +0000 (-0400) Subject: librados: Test completion creation/handling speed X-Git-Tag: v16.1.0~2266^2~23 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f6f5e6c224d2ae07e7b1a25f5e34d09b7882bf01;p=ceph.git librados: Test completion creation/handling speed Signed-off-by: Adam C. Emerson --- diff --git a/src/test/librados/CMakeLists.txt b/src/test/librados/CMakeLists.txt index d4d1c48d5519..d5a99bd2a32d 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 000000000000..708a58425e16 --- /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(); +}