]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson: Support io_uring as reactor backend option
authorMohit Agrawal <moagrawa@redhat.com>
Fri, 16 Jan 2026 13:28:27 +0000 (18:58 +0530)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 12 Feb 2026 10:26:16 +0000 (10:26 +0000)
Provide a bootable option to configure reactor backend option.

Fixes: https://tracker.ceph.com/issues/69057
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
src/CMakeLists.txt
src/common/options/crimson.yaml.in
src/crimson/osd/main_config_bootstrap_helpers.cc
src/vstart.sh

index 51842026837377ff3b6a1df2ef80cf970adca1c1..60eea154dc12e1757f4fa3ead272b07e9bfe9062 100644 (file)
@@ -463,7 +463,7 @@ if(WITH_CRIMSON)
     endif()
   endmacro ()
   set(Seastar_API_LEVEL "6" CACHE STRING "" FORCE)
-  set(Seastar_IO_URING OFF CACHE BOOL "" FORCE)
+  set(Seastar_IO_URING OFF CACHE BOOL "")
   set(Seastar_DEPRECATED_OSTREAM_FORMATTERS OFF CACHE BOOL "" FORCE)
   if(Seastar_DPDK)
     find_package(dpdk QUIET)
index ab4c5bcc33db2b5df674b0dfc60bce48750e5a56..cda3e47d3458d344fb3d98587d5c33bb1b77e6b6 100644 (file)
@@ -28,6 +28,20 @@ options:
   min: 0
   max: 32
 
+- name: crimson_reactor_backend
+  type: str
+  level: advanced
+  default: linux-aio
+  enum_values:
+  - linux-aio
+  - io_uring
+  - epoll
+  desc: Select the seastar reactor IO backend to use for the crimson
+  long_desc: The backend is chosen during OSD bootup and determines how asynchrnous disk I/O
+              is performed.
+  flags:
+  - startup
+
 # Reactor options:
 
 - name: crimson_reactor_task_quota_ms
index 090c54ee495da59b5602ca7723330d77f3b12bf6..1781fd978aa7be35ab2db043a63213af5ca2d1eb 100644 (file)
@@ -96,7 +96,8 @@ const std::vector<SeastarOption> seastar_options = {
   {"--task-quota-ms", "crimson_reactor_task_quota_ms", Option::TYPE_FLOAT},
   {"--io-latency-goal-ms", "crimson_reactor_io_latency_goal_ms", Option::TYPE_FLOAT},
   {"--idle-poll-time-us", "crimson_reactor_idle_poll_time_us", Option::TYPE_UINT},
-  {"--poll-mode", "crimson_poll_mode", Option::TYPE_BOOL}
+  {"--poll-mode", "crimson_poll_mode", Option::TYPE_BOOL},
+  {"--reactor-backend", "crimson_reactor_backend", Option::TYPE_STR}
 };
 
 // Function to get the option value as a string
@@ -120,6 +121,13 @@ std::optional<std::string> get_option_value(const SeastarOption& option) {
       }
       break;
     }
+    case Option::TYPE_STR: {
+      auto value = crimson::common::get_conf<std::string>(option.config_key);
+      if (!value.empty()) {
+        return value;
+      }
+      break;
+    }
     default:
       logger().warn("get_option_value --option_name {} encountered unknown type", option.config_key);
       return std::nullopt;
@@ -196,6 +204,20 @@ _get_early_config(int argc, const char *argv[])
             }
           }
         }
+        if (auto found = std::find_if(
+              std::begin(ret.early_args),
+              std::end(ret.early_args),
+              [](auto& arg) { return arg == "--reactor-backend"; });
+            found == std::end(ret.early_args)) {
+          auto backend = crimson::common::get_conf<std::string>("crimson_reactor_backend");
+          #ifndef SEASTAR_IO_URING
+            if (backend == "io_uring") {
+              ceph_abort_msgf("reactor_backend=io_uring requested but build "
+                              "does not support io_uring");
+            }
+          #endif
+       }
+
        if (auto found = std::find_if(
              std::begin(early_args),
              std::end(early_args),
index 41becb09d22858363bd1d94b315f96b830a345fc..2d7b702cfb600c476cbd69614f2112d4419f38ed 100755 (executable)
@@ -281,6 +281,7 @@ options:
        --osds-per-host: populate crush_location as each host holds the specified number of osds if set
        --require-osd-and-client-version: if supplied, do set-require-min-compat-client and require-osd-release to specified value
        --use-crush-tunables: if supplied, set tunables to specified value
+       --reactor-backend: configre seastar reactor backend options like io_uring or linux-aio
 \n
 EOF
 
@@ -616,6 +617,10 @@ case $1 in
         crimson_smp=$2
         shift
         ;;
+    --reactor-backend)
+        crimson_reactor_backend=$2
+        shift
+        ;;
     --crimson-alien-num-threads)
         crimson_alien_num_threads=$2
         shift
@@ -1256,6 +1261,10 @@ start_osd() {
             echo "$CEPH_BIN/ceph -c $conf_fn config set osd.$osd crimson_poll_mode true"
             $CEPH_BIN/ceph -c $conf_fn config set "osd.$osd" crimson_poll_mode true
         fi
+        if [ -n "$crimson_reactor_backend" ]; then
+            echo "$CEPH_BIN/ceph -c $conf_fn config set osd.$osd crimson_reactor_backend $crimson_reactor_backend"
+            $CEPH_BIN/ceph -c $conf_fn config set osd.$osd crimson_reactor_backend $crimson_reactor_backend
+        fi
     fi
        if [ "$new" -eq 1 -o $inc_osd_num -gt 0 ]; then
             wconf <<EOF