Skip to content

Commit c0db4b6

Browse files
authored
Merge pull request ceph#60319 from baum/no_huge
cephadm: support no huge pages for nvmeof spdk
2 parents 801186f + 38513cb commit c0db4b6

File tree

4 files changed

+30
-9
lines changed

4 files changed

+30
-9
lines changed

src/cephadm/cephadmlib/daemons/nvmeof.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,18 @@ def _get_container_mounts(
7373
os.path.join(data_dir, 'ceph-nvmeof.conf')
7474
] = '/src/ceph-nvmeof.conf:z'
7575
mounts[os.path.join(data_dir, 'configfs')] = '/sys/kernel/config'
76-
mounts['/dev/hugepages'] = '/dev/hugepages'
77-
mounts['/dev/vfio/vfio'] = '/dev/vfio/vfio'
7876
mounts[log_dir] = '/var/log/ceph:z'
7977
if mtls_dir:
8078
mounts[mtls_dir] = '/src/mtls:z'
8179
return mounts
8280

81+
def _get_huge_pages_mounts(self, files: Dict[str, str]) -> Dict[str, str]:
82+
mounts = dict()
83+
if 'spdk_mem_size' not in files:
84+
mounts['/dev/hugepages'] = '/dev/hugepages'
85+
mounts['/dev/vfio/vfio'] = '/dev/vfio/vfio'
86+
return mounts
87+
8388
def _get_tls_cert_key_mounts(
8489
self, data_dir: str, files: Dict[str, str]
8590
) -> Dict[str, str]:
@@ -111,6 +116,7 @@ def customize_container_mounts(
111116
)
112117
else:
113118
mounts.update(self._get_container_mounts(data_dir, log_dir))
119+
mounts.update(self._get_huge_pages_mounts(self.files))
114120
mounts.update(self._get_tls_cert_key_mounts(data_dir, self.files))
115121

116122
def customize_container_binds(
@@ -198,11 +204,13 @@ def configfs_mount_umount(data_dir, mount=True):
198204
)
199205
return cmd.split()
200206

201-
@staticmethod
202-
def get_sysctl_settings() -> List[str]:
203-
return [
204-
'vm.nr_hugepages = 4096',
205-
]
207+
def get_sysctl_settings(self) -> List[str]:
208+
if 'spdk_mem_size' not in self.files:
209+
return [
210+
'vm.nr_hugepages = 4096',
211+
]
212+
else:
213+
return []
206214

207215
def container(self, ctx: CephadmContext) -> CephContainer:
208216
ctr = daemon_to_container(ctx, self)
@@ -222,4 +230,6 @@ def customize_container_args(
222230
args.append(ctx.container_engine.unlimited_pids_option)
223231
args.extend(['--ulimit', 'memlock=-1:-1'])
224232
args.extend(['--ulimit', 'nofile=10240'])
225-
args.extend(['--cap-add=SYS_ADMIN', '--cap-add=CAP_SYS_NICE'])
233+
args.extend(['--cap-add=CAP_SYS_NICE'])
234+
if 'spdk_mem_size' not in self.files:
235+
args.extend(['--cap-add=SYS_ADMIN'])

src/pybind/mgr/cephadm/services/nvmeof.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonD
6666
daemon_spec.keyring = keyring
6767
daemon_spec.extra_files = {'ceph-nvmeof.conf': gw_conf}
6868

69+
# Indicate to the daemon whether to utilize huge pages
70+
if spec.spdk_mem_size:
71+
daemon_spec.extra_files['spdk_mem_size'] = str(spec.spdk_mem_size)
72+
6973
if spec.enable_auth:
7074
if (
7175
not spec.client_cert

src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ protocol_log_level = {{ spec.spdk_protocol_log_level }}
6969
log_file_dir = {{ spec.spdk_log_file_dir }}
7070
{% endif %}
7171
conn_retries = {{ spec.conn_retries }}
72+
{% if spec.spdk_mem_size %}
73+
mem_size = {{ spec.spdk_mem_size }}
74+
{% endif %}
7275
transports = {{ spec.transports }}
7376
{% if transport_tcp_options %}
7477
transport_tcp_options = {{ transport_tcp_options }}

src/python-common/ceph/deployment/service_spec.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,9 @@ def __init__(self,
13511351
client_key: Optional[str] = None,
13521352
client_cert: Optional[str] = None,
13531353
root_ca_cert: Optional[str] = None,
1354+
# unused and duplicate of tgt_path below, consider removing
13541355
spdk_path: Optional[str] = None,
1356+
spdk_mem_size: Optional[int] = None,
13551357
tgt_path: Optional[str] = None,
13561358
spdk_timeout: Optional[float] = 60.0,
13571359
spdk_log_level: Optional[str] = '',
@@ -1455,8 +1457,10 @@ def __init__(self,
14551457
self.client_cert = client_cert
14561458
#: ``root_ca_cert`` CA cert for server/client certs
14571459
self.root_ca_cert = root_ca_cert
1458-
#: ``spdk_path`` path to SPDK
1460+
#: ``spdk_path`` path is unused and duplicate of tgt_path below, consider removing
14591461
self.spdk_path = spdk_path or '/usr/local/bin/nvmf_tgt'
1462+
#: ``spdk_mem_size`` memory size in MB for DPDK
1463+
self.spdk_mem_size = spdk_mem_size
14601464
#: ``tgt_path`` nvmeof target path
14611465
self.tgt_path = tgt_path or '/usr/local/bin/nvmf_tgt'
14621466
#: ``spdk_timeout`` SPDK connectivity timeout

0 commit comments

Comments
 (0)