This is an automated email from the ASF dual-hosted git repository. cmcfarlen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push: new 52cdad0989 Cleanup io_uring metrics and the cmake build (#10473) 52cdad0989 is described below commit 52cdad0989a52fb6952f8e7bb2f91a868b2cf486 Author: Chris McFarlen <ch...@mcfarlen.us> AuthorDate: Wed Sep 27 14:10:27 2023 -0500 Cleanup io_uring metrics and the cmake build (#10473) Co-authored-by: Chris McFarlen <cmcfar...@apple.com> --- iocore/aio/AIO.cc | 5 ----- iocore/aio/CMakeLists.txt | 3 +++ iocore/aio/P_AIO.h | 5 ----- iocore/aio/test_AIO.cc | 10 ++++++++-- iocore/io_uring/CMakeLists.txt | 15 ++++++++++++--- iocore/io_uring/io_uring.cc | 23 +++++++++++++++++++---- iocore/io_uring/unit_tests/test_diskIO.cc | 12 ++++++++++-- iocore/net/CMakeLists.txt | 4 ++++ 8 files changed, 56 insertions(+), 21 deletions(-) diff --git a/iocore/aio/AIO.cc b/iocore/aio/AIO.cc index d08a979a3c..08e60b4b59 100644 --- a/iocore/aio/AIO.cc +++ b/iocore/aio/AIO.cc @@ -114,11 +114,6 @@ ink_aio_init(ts::ModuleVersion v, AIOBackend backend) aio_rsb.kb_read = intm.newMetricPtr("proxy.process.cache.aio.KB_read"); aio_rsb.kb_write = intm.newMetricPtr("proxy.process.cache.aio.KB_write"); -#if TS_USE_LINUX_IO_URING - aio_rsb.io_uring_submitted = intm.newMetricPtr("proxy.process.io_uring.submitted"); - aio_rsb.io_uring_completed = intm.newMetricPtr("proxy.process.io_uring.completed"); -#endif - memset(&aio_reqs, 0, MAX_DISKS_POSSIBLE * sizeof(AIO_Reqs *)); ink_mutex_init(&insert_mutex); diff --git a/iocore/aio/CMakeLists.txt b/iocore/aio/CMakeLists.txt index f39e4be2ba..66a5f902d1 100644 --- a/iocore/aio/CMakeLists.txt +++ b/iocore/aio/CMakeLists.txt @@ -33,3 +33,6 @@ target_link_libraries(aio ts::inkevent ts::tscore ) +if(TS_USE_LINUX_IO_URING) +target_link_libraries(aio PUBLIC ts::inkuring) +endif() diff --git a/iocore/aio/P_AIO.h b/iocore/aio/P_AIO.h index 2f794e7054..567368972a 100644 --- a/iocore/aio/P_AIO.h +++ b/iocore/aio/P_AIO.h @@ -137,11 +137,6 @@ struct AIOStatsBlock { Metrics::IntType *kb_read; Metrics::IntType *write_count; Metrics::IntType *kb_write; - -#if TS_USE_LINUX_IO_URING - Metrics::IntType *io_uring_submitted; - Metrics::IntType *io_uring_completed; -#endif }; extern AIOStatsBlock aio_rsb; diff --git a/iocore/aio/test_AIO.cc b/iocore/aio/test_AIO.cc index 7f11f13378..c6acef9de3 100644 --- a/iocore/aio/test_AIO.cc +++ b/iocore/aio/test_AIO.cc @@ -220,8 +220,14 @@ dump_summary() printf("-----------------\n"); printf("IO_URING results\n"); printf("-----------------\n"); - printf("submissions: %lu\n", Metrics::read(aio_rsb.io_uring_submitted); - printf("completions: %lu\n", Metrics::read(aio_rsb.io_uring_completed); + + auto &m = Metrics::getInstance(); + + Metrics::IntType *completed = m.lookup(m.lookup("proxy.process.io_uring.completed")); + Metrics::IntType *submitted = m.lookup(m.lookup("proxy.process.io_uring.submitted")); + + printf("submissions: %lu\n", Metrics::read(submitted)); + printf("completions: %lu\n", Metrics::read(completed)); #endif if (delete_disks) { diff --git a/iocore/io_uring/CMakeLists.txt b/iocore/io_uring/CMakeLists.txt index 50d26e7b07..9871fed2d7 100644 --- a/iocore/io_uring/CMakeLists.txt +++ b/iocore/io_uring/CMakeLists.txt @@ -17,7 +17,10 @@ add_library(inkuring STATIC io_uring.cc + IOUringEventIO.cc ) +add_library(ts::inkuring ALIAS inkuring) + include_directories( ${CMAKE_SOURCE_DIR}/iocore/dns ${CMAKE_SOURCE_DIR}/iocore/io_uring @@ -25,16 +28,22 @@ include_directories( ${CMAKE_SOURCE_DIR}/iocore/cache ) +target_link_libraries(inkuring + PUBLIC + ts::tscore + uring + PRIVATE + ts::tsapicore + ) + add_executable(test_iouring unit_tests/test_diskIO.cc) target_link_libraries(test_iouring - PUBLIC - ts::tscore PRIVATE inkuring libswoc tscpputil - uring + catch2::catch2 ) target_include_directories(test_iouring PRIVATE ${CMAKE_SOURCE_DIR}/include ${CATCH_INCLUDE_DIR}) diff --git a/iocore/io_uring/io_uring.cc b/iocore/io_uring/io_uring.cc index 0598a095ba..cf744f54e5 100644 --- a/iocore/io_uring/io_uring.cc +++ b/iocore/io_uring/io_uring.cc @@ -32,10 +32,25 @@ Linux io_uring helper library #include "tscore/ink_hrtime.h" #include "tscore/Diags.h" +#include <api/Metrics.h> + +using ts::Metrics; + std::atomic<int> main_wq_fd; IOUringConfig IOUringContext::config; +struct IOUringStatsBlock { + Metrics::IntType *io_uring_submitted; + Metrics::IntType *io_uring_completed; +}; + +static IOUringStatsBlock io_uring_rsb = []() { + auto &intm = Metrics::getInstance(); + return IOUringStatsBlock{intm.newMetricPtr("proxy.process.io_uring.submitted"), + intm.newMetricPtr("proxy.process.io_uring.completed")}; +}(); + void IOUringContext::set_config(const IOUringConfig &cfg) { @@ -128,7 +143,7 @@ IOUringContext::get_wq_max_workers() void IOUringContext::submit() { - Metrics::increment(aio_rsb.io_uring_submitted, io_uring_submit(&ring)); + Metrics::increment(io_uring_rsb.io_uring_submitted, io_uring_submit(&ring)); } void @@ -146,7 +161,7 @@ IOUringContext::service() io_uring_peek_cqe(&ring, &cqe); while (cqe) { handle_cqe(cqe); - Metrics::increment(aio_rsb.io_uring_completed); + Metrics::increment(io_uring_rsb.io_uring_completed); io_uring_cqe_seen(&ring, cqe); cqe = nullptr; @@ -168,10 +183,10 @@ IOUringContext::submit_and_wait(ink_hrtime t) int count = io_uring_submit_and_wait_timeout(&ring, &cqe, 1, &timeout, nullptr); - Metrics::increment(aio_rsb.io_uring_submitted, count); + Metrics::increment(io_uring_rsb.io_uring_submitted, count); while (cqe) { handle_cqe(cqe); - Metrics::increment(aio_rsb.io_uring_completed); + Metrics::increment(io_uring_rsb.io_uring_completed); io_uring_cqe_seen(&ring, cqe); cqe = nullptr; diff --git a/iocore/io_uring/unit_tests/test_diskIO.cc b/iocore/io_uring/unit_tests/test_diskIO.cc index 99967a2149..f29d235702 100644 --- a/iocore/io_uring/unit_tests/test_diskIO.cc +++ b/iocore/io_uring/unit_tests/test_diskIO.cc @@ -35,6 +35,10 @@ #include <arpa/inet.h> #include "tscore/ink_hrtime.h" +#include "api/Metrics.h" + +using ts::Metrics; + swoc::file::path temp_prefix(const char *basename) { @@ -262,10 +266,14 @@ TEST_CASE("net_io", "[io_uring]") connected = true; }); - uint64_t completions_before = Metrics::read(aio_rsb.io_uring_completed); + auto &m = Metrics::getInstance(); + + Metrics::IntType *completed = m.lookup(m.lookup("proxy.process.io_uring.completed")); + + uint64_t completions_before = Metrics::read(completed); uint64_t needed = 2; - while ((Metrics::read(aio_rsb.io_uring_completed) - completions_before) < needed) { + while ((Metrics::read(completed) - completions_before) < needed) { ctx.submit_and_wait(1 * HRTIME_SECOND); } diff --git a/iocore/net/CMakeLists.txt b/iocore/net/CMakeLists.txt index 03ce7d1fb4..7ca11f85d9 100644 --- a/iocore/net/CMakeLists.txt +++ b/iocore/net/CMakeLists.txt @@ -129,6 +129,10 @@ target_link_libraries(inknet yaml-cpp::yaml-cpp ) +if(TS_USE_LINUX_IO_URING) + target_link_libraries(inknet PUBLIC ts::inkuring) +endif() + # Fails to link because of circular dep with proxy (ParentSelection) # add_executable(test_net unit_tests/test_ProxyProtocol.cc) # target_link_libraries(test_net records_p inknet inkevent tscore yaml-cpp libswoc)