From 7b4af1f4917728aeb127c23ff7a310be4159203b Mon Sep 17 00:00:00 2001 From: Gil Bregman Date: Thu, 13 Feb 2025 21:42:48 +0200 Subject: [PATCH] mgr/cephadm/nvmeof: Add QOS timeslice field to NVMeOF configuration Fixes https://tracker.ceph.com/issues/69952 Signed-off-by: Gil Bregman --- .../mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 | 1 + src/pybind/mgr/cephadm/tests/test_services.py | 1 + src/python-common/ceph/deployment/service_spec.py | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 b/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 index ad6574786a3c5..cbfc2a8a07569 100644 --- a/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 +++ b/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 @@ -90,6 +90,7 @@ tgt_cmd_extra_args = {{ spec.tgt_cmd_extra_args }} {% if iobuf_options %} iobuf_options = {{ iobuf_options }} {% endif %} +qos_timeslice_in_usecs = {{ spec.qos_timeslice_in_usecs }} [monitor] timeout = {{ spec.monitor_timeout }} diff --git a/src/pybind/mgr/cephadm/tests/test_services.py b/src/pybind/mgr/cephadm/tests/test_services.py index ebdbcc4991d04..84d015a1c2469 100644 --- a/src/pybind/mgr/cephadm/tests/test_services.py +++ b/src/pybind/mgr/cephadm/tests/test_services.py @@ -421,6 +421,7 @@ conn_retries = 10 transports = tcp transport_tcp_options = {{"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}} tgt_cmd_extra_args = {tgt_cmd_extra_args} +qos_timeslice_in_usecs = 0 [monitor] timeout = 1.0\n""" diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index 054f90e55f45c..3daa09a4c58ed 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -1388,6 +1388,7 @@ class NvmeofServiceSpec(ServiceSpec): {"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}, tgt_cmd_extra_args: Optional[str] = None, iobuf_options: Optional[Dict[str, int]] = None, + qos_timeslice_in_usecs: Optional[int] = 0, discovery_addr: Optional[str] = None, discovery_addr_map: Optional[Dict[str, str]] = None, discovery_port: Optional[int] = None, @@ -1528,6 +1529,8 @@ class NvmeofServiceSpec(ServiceSpec): self.tgt_cmd_extra_args = tgt_cmd_extra_args #: List of extra arguments for SPDK iobuf in the form opt=value self.iobuf_options: Optional[Dict[str, int]] = iobuf_options + #: ``qos_timeslice_in_usecs`` timeslice for QOS code, in micro seconds + self.qos_timeslice_in_usecs = qos_timeslice_in_usecs #: ``discovery_addr`` address of the discovery service self.discovery_addr = discovery_addr #: ``discovery_addr_map`` per node address map of the discovery service @@ -1590,6 +1593,7 @@ class NvmeofServiceSpec(ServiceSpec): verify_positive_int(self.bdevs_per_cluster, "Bdevs per cluster") if self.bdevs_per_cluster is not None and self.bdevs_per_cluster < 1: raise SpecValidationError("Bdevs per cluster should be at least 1") + verify_non_negative_int(self.qos_timeslice_in_usecs, "QOS timeslice") verify_non_negative_number(self.spdk_ping_interval_in_seconds, "SPDK ping interval") if ( -- 2.39.5