Add updated tuning configuration

Uses a much nicer CPU tuning configuration, leveraging systemd's
AllowedCPUs and CPUAffinity options within a set of slices (some
default, some custom).

Configuration is also greatly simplified versus the previous
implementation, simply asking for a number of CPUS for both the system
and OSDs, and calculating everything else that is required.

Also switches (back) to the v2 unified cgroup hierarchy by default as
required by the systemd AllowedCPUs directive.
This commit is contained in:
2023-09-01 15:42:29 -04:00
parent 131caba0bd
commit 07d75573d6
12 changed files with 258 additions and 17 deletions

View File

@ -37,18 +37,39 @@ pvc_api_database_name: "pvcapi"
pvc_api_database_user: "pvcapi"
pvc_api_database_password: "PVCprovPassw0rd"
# CPU tuning
# This is left commented so the section of the tasks never runs; enable or disable it in your per-cluster configs
# CPU tune options defined per-node are placed in the pvc_nodes section below under cpu_tuning; global versions
# may be placed here instead.
# Whether a node has hyperthreading is determined automatically; if so, for each (real) CPU core assigned to a
# subscection, its corresponding hyperthread is also assigned to that section.
# machine_cpus is later used in the templates; the value of this field is autogenerated as:
# total_system_cpus - osd_cpus - system_cpus
#cpu_tuning:
# enabled: yes # Enable or disable CPU tuning for processes
# nodes: # Nodes configuration; default options, can be overridden by per-node tuning below
# system_cpus: 2 # The number of CPUs to assign to the "system" slice
# # This slice includes all non-VM, non-OSD processes including databases, node daemons, system processes, non-OSD Ceph processes, etc.
# # At least 2 cores should be assigned to this slice.
# osd_cpus: 2 # The number of CPUs to assign to the "osd" slice
# # This slice includes all OSD processes
# # At least 1 core per OSD should be assigned to this slice.
# Coordinators
pvc_nodes:
- hostname: "pvc1"
is_coordinator: yes
node_id: 1
router_id: "10.0.0.1"
cluster_ip: "by-id"
storage_ip: "by-id"
upstream_ip: ""
ipmi_host: "pvc1-lom"
ipmi_user: ""
ipmi_password: ""
- hostname: "pvc1" # The full ansible inventory hostname of the node
is_coordinator: yes # If the node is a coordinator or not
node_id: 1 # The sequential node ID, usually matches the numerical part of the hostname
router_id: "10.0.0.1" # The router ID of the node; can be the IP Address of the Cluster network, or the node_id, or some other unique number
cluster_ip: "by-id" # The Cluster network IP of the host; by-id uses the network then adds the node as node_id within that network (e.g. pvc1 becomes x.y.z.1)
storage_ip: "by-id" # The Storage network IP of the host; by-id as above
upstream_ip: "" # The Upstream network IP of the host; by-id as above
ipmi_host: "pvc1-lom" # The IPMI hostname of the node
ipmi_user: "" # The IPMI username to use
ipmi_password: "" # The IPMI password to use
cpu_tuning: # Per-node CPU tuning options; if set, overrides the global options above; useful if a node has different CPU characteristics
system_cpus: 1
osd_cpus: 2
- hostname: "pvc2"
is_coordinator: yes
node_id: 2
@ -56,9 +77,10 @@ pvc_nodes:
cluster_ip: "by-id"
storage_ip: "by-id"
upstream_ip: ""
ipmi_host: "pvc2-lom"
ipmi_user: ""
ipmi_password: ""
ipmi:
host: "pvc2-lom"
user: ""
password: ""
- hostname: "pvc3"
is_coordinator: yes
node_id: 3
@ -66,9 +88,10 @@ pvc_nodes:
cluster_ip: "by-id"
storage_ip: "by-id"
upstream_ip: ""
ipmi_host: "pvc3-lom"
ipmi_user: ""
ipmi_password: ""
ipmi:
host: "pvc3-lom"
user: ""
password: ""
# Networks
pvc_asn: "65001"