Merge pull request #453 from yarda/builtin_function_calc_isolated_cores
builtin functions: added calc_isolated_cores function
This commit is contained in:
commit
f4f4d2b9cf
6 changed files with 59 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
44
tuned/profiles/functions/function_calc_isolated_cores.py
Normal file
44
tuned/profiles/functions/function_calc_isolated_cores.py
Normal 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)
|
||||
Loading…
Reference in a new issue