1
0
Fork 0

Merge pull request #453 from yarda/builtin_function_calc_isolated_cores

builtin functions: added calc_isolated_cores function
This commit is contained in:
Jaroslav Škarvada 2022-08-09 16:41:02 +02:00 committed by GitHub
commit f4f4d2b9cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 59 additions and 1 deletions

View file

@ -2,5 +2,8 @@
# isolated_cores=2,4-7
# isolated_cores=2-23
#
# Reserve 1 core per socket for housekeeping, isolate the rest.
isolated_cores=${f:calc_isolated_cores:1}
# To disable the kernel load balancing in certain isolated CPUs:
# no_balance_cores=5-10

View file

@ -6,6 +6,9 @@
# isolated_cores=2,4-7
# isolated_cores=2-23
#
# Reserve 1 core per socket for housekeeping, isolate the rest.
isolated_cores=${f:calc_isolated_cores:1}
#
# Uncomment the 'isolate_managed_irq=Y' bellow if you want to move kernel
# managed IRQs out of isolated cores. Note that this requires kernel

View file

@ -6,7 +6,9 @@
# isolated_cores=2,4-7
# isolated_cores=2-23
#
#
# Reserve 1 core per socket for housekeeping, isolate the rest.
isolated_cores=${f:calc_isolated_cores:1}
# Uncomment the 'isolate_managed_irq=Y' bellow if you want to move kernel
# managed IRQs out of isolated cores. Note that this requires kernel
# support. Please only specify this parameter if you are sure that the

View file

@ -2,6 +2,9 @@
# isolated_cores=2,4-7
# isolated_cores=2-23
#
# Reserve 1 core per socket for housekeeping, isolate the rest.
isolated_cores=${f:calc_isolated_cores:1}
#
# Uncomment the 'isolate_managed_irq=Y' bellow if you want to move kernel
# managed IRQs out of isolated cores. Note that this requires kernel

View file

@ -66,6 +66,9 @@ SYSTEMD_CPUAFFINITY_VAR = "CPUAffinity"
# irqbalance plugin configuration
IRQBALANCE_SYSCONFIG_FILE = "/etc/sysconfig/irqbalance"
# built-in functions configuration
SYSFS_CPUS_PATH = "/sys/devices/system/cpu"
# number of backups
LOG_FILE_COUNT = 2
LOG_FILE_MAXBYTES = 100*1000

View file

@ -0,0 +1,44 @@
import os
import glob
import tuned.logs
from . import base
import tuned.consts as consts
log = tuned.logs.get()
class calc_isolated_cores(base.Function):
"""
Calculates and returns isolated cores. The argument specifies how many
cores per socket reserve for housekeeping. If not specified, 1 core
per socket is reserved for housekeeping and the rest is isolated.
"""
def __init__(self):
# max 1 argument
super(calc_isolated_cores, self).__init__("calc_isolated_cores", 1)
def execute(self, args):
if not super(calc_isolated_cores, self).execute(args):
return None
cpus_reserve = 1
if len(args) > 0:
if not args[0].isdecimal() or int(args[0]) < 0:
log.error("invalid argument '%s' for builtin function '%s', it must be non-negative integer" %
(args[0], self._name))
return None
else:
cpus_reserve = int(args[0])
topo = {}
for cpu in glob.iglob(os.path.join(consts.SYSFS_CPUS_PATH, "cpu*")):
cpuid = os.path.basename(cpu)[3:]
if cpuid.isdecimal():
socket = self._cmd.read_file(os.path.join(cpu, "topology/physical_package_id")).strip()
if socket.isdecimal():
topo[socket] = topo.get(socket, []) + [cpuid]
isol_cpus = []
for cpus in topo.values():
cpus.sort(key = int)
isol_cpus = isol_cpus + cpus[cpus_reserve:]
isol_cpus.sort(key = int)
return ",".join(isol_cpus)