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)

Reply via email to