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 <[email protected]>
AuthorDate: Wed Sep 27 14:10:27 2023 -0500
Cleanup io_uring metrics and the cmake build (#10473)
Co-authored-by: Chris McFarlen <[email protected]>
---
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)