diff --git a/iocore/io_uring/I_IO_URING.h b/iocore/io_uring/I_IO_URING.h index 3ada7b501cc..d65741c888d 100644 --- a/iocore/io_uring/I_IO_URING.h +++ b/iocore/io_uring/I_IO_URING.h @@ -66,7 +66,7 @@ class IOUringContext void submit(); void service(); - void submit_and_wait(int ms); + void submit_and_wait(ink_hrtime delay); int register_eventfd(); diff --git a/iocore/io_uring/io_uring.cc b/iocore/io_uring/io_uring.cc index c2663e2ed3b..7a2b50e5859 100644 --- a/iocore/io_uring/io_uring.cc +++ b/iocore/io_uring/io_uring.cc @@ -151,15 +151,14 @@ IOUringContext::service() } void -IOUringContext::submit_and_wait(int ms) +IOUringContext::submit_and_wait(ink_hrtime delay) { - ink_hrtime t = ink_hrtime_from_msec(ms); - timespec ts = ink_hrtime_to_timespec(t); + timespec ts = ink_hrtime_to_timespec(delay); __kernel_timespec timeout = {ts.tv_sec, ts.tv_nsec}; io_uring_cqe *cqe = nullptr; int ret; - if (ms == -1) { + if (delay == -1) { ret = io_uring_submit(&ring); } else { ret = io_uring_submit_and_wait_timeout(&ring, &cqe, 1, &timeout, nullptr); diff --git a/iocore/io_uring/unit_tests/test_diskIO.cc b/iocore/io_uring/unit_tests/test_diskIO.cc index 9047460f79c..b5c08cdce38 100644 --- a/iocore/io_uring/unit_tests/test_diskIO.cc +++ b/iocore/io_uring/unit_tests/test_diskIO.cc @@ -25,6 +25,7 @@ #include "I_IO_URING.h" #include "tscore/ts_file.h" +#include "tscore/ink_hrtime.h" #include @@ -66,6 +67,10 @@ template class FunctionHolderHandler : public IOUringCompletionHand f(c->res); } + std::string id() const override { + return "holder"; + } + private: F f; }; @@ -136,13 +141,13 @@ TEST_CASE("disk_io", "[io_uring]") REQUIRE(fd != -1); io_uring_write(ctx, fd, "hello", 5, [](int result) { REQUIRE(result == 5); }); - ctx.submit_and_wait(100); + ctx.submit_and_wait(100*HRTIME_MSECOND); io_uring_close(ctx, fd, [&fd](int result) { REQUIRE(result == 0); fd = -1; }); - ctx.submit_and_wait(100); + ctx.submit_and_wait(100 * HRTIME_MSECOND); REQUIRE(fd == -1); @@ -155,7 +160,7 @@ TEST_CASE("disk_io", "[io_uring]") REQUIRE("hello"sv == std::string_view(buffer, result)); }); - ctx.submit_and_wait(100); + ctx.submit_and_wait(100 * HRTIME_MSECOND); } void @@ -259,8 +264,8 @@ TEST_CASE("net_io", "[io_uring]") connected = true; }); - ctx.submit_and_wait(1000); + ctx.submit_and_wait(1 * HRTIME_SECOND); REQUIRE(server.clients == 1); REQUIRE(connected); -} \ No newline at end of file +} diff --git a/iocore/net/IOUringNetAccept.cc b/iocore/net/IOUringNetAccept.cc index 8aa2b3cd27d..21b9e482919 100644 --- a/iocore/net/IOUringNetAccept.cc +++ b/iocore/net/IOUringNetAccept.cc @@ -89,7 +89,7 @@ IOUringNetAccept::acceptLoopEvent(int event, void *ep) // setup eventfd for activity? do { - ctx->submit_and_wait(1000); + ctx->submit_and_wait(1*HRTIME_SECOND); } while (!TSSystemState::is_event_system_shut_down()); Warning("Accept loop stopped!"); diff --git a/src/traffic_server/traffic_server.cc b/src/traffic_server/traffic_server.cc index a5ea1a0b349..20f93d0186c 100644 --- a/src/traffic_server/traffic_server.cc +++ b/src/traffic_server/traffic_server.cc @@ -2234,7 +2234,7 @@ main(int /* argc ATS_UNUSED */, const char **argv) while (!TSSystemState::is_event_system_shut_down()) { #if TS_USE_LINUX_IO_URING == 1 - ur->submit_and_wait(1000); + ur->submit_and_wait(1 * HRTIME_SECOND); #else sleep(1); #endif