feature:TSG-10492:配置在系统boot过程中的cpu isolate

This commit is contained in:
fumingwei
2022-04-26 16:00:26 +08:00
parent 09e1e79e70
commit 7ca064ca79
5 changed files with 129 additions and 0 deletions

View File

@@ -66,6 +66,12 @@
dest: /usr/lib/systemd/system/system.slice.d/50-MemoryLimit.conf
mode: 0644
- name: Template the grub config
template:
src: "{{ role_path }}/templates/grub.j2.j2"
dest: /opt/tsg/tsg-os-provision/templates/grub.j2
tags: template
# 启用 IPMI
- name: "copy ipmi.conf to /etc/sysconfig/ipmi"
copy:

View File

@@ -0,0 +1 @@
GRUB_CMDLINE_LINUX="crashkernel=512M default_hugepagesz=1G hugepagesz=1G hugepages=16 intel_iommu=on iommu=pt mitigations=off psi=1 isolcpus={% raw %}{{ grub_cpu_isolate }}{% endraw %}"

View File

@@ -0,0 +1,77 @@
#!/usr/bin/env python3
import json
import subprocess
CPU_LAYOUTS_CONF_PATH = "/opt/tsg/tsg-os-provision/.cpu_layouts.json"
PROXY_CONF_PATH = "/opt/tsg/tsg-os-provision/.proxy.json"
def get_cpu_machine():
model_info = (subprocess.check_output("lscpu | grep \"Model name:\" | head -n 1 | sed -r \'s/Model name:\s{1,}//g\'", shell=True).strip()).decode()
socket_info = int((subprocess.check_output("lscpu | grep \"Socket(s):\" | head -n 1 | sed -r \'s/Socket\(s\):\s{1,}//g\'", shell=True).strip()).decode())
return (model_info, socket_info)
def get_cpu_layouts():
with open(CPU_LAYOUTS_CONF_PATH, 'r',encoding='utf-8') as f:
temp=json.load(f)
f.close()
return temp
def get_proxy_config():
with open(PROXY_CONF_PATH, 'r',encoding='utf-8') as f:
temp=json.load(f)
f.close()
return temp
def get_cpu_affinity():
matched = 0
mrzcpd_cpu_affinity = []
sapp_cpu_affinity = []
tfe_cpu_affinity = []
cpu_machine = get_cpu_machine()
cpu_layouts = get_cpu_layouts()
for layout in cpu_layouts:
if (layout['match']['sockets'] == cpu_machine[1]) and (cpu_machine[0].find(layout['match']['model_name']) != -1):
matched = 1
sapp_cpu_affinity = layout['sapp_affinity']
mrzcpd_cpu_affinity = layout['mrzcpd_affinity']
tfe_cpu_affinity = layout['tfe_affinity']
break
if matched == 0:
print("Warning: not match cpu model name and sockets,please checkout cpuinfo and cpu_layouts config ...")
exit(1)
return (mrzcpd_cpu_affinity, sapp_cpu_affinity, tfe_cpu_affinity)
def append_range_list(start,end,rangelist):
if start == end:
rangelist.append(('%d' % start))
else:
rangelist.append(('%d-%d' % (start,end)))
def get_range_isolate_cpu():
proxy_config = get_proxy_config()
isolate_range_cpu_list = []
range_start = range_end = -1
cpu_affinity = get_cpu_affinity()
isolate_cpu_list = cpu_affinity[0] + cpu_affinity[1]
if proxy_config['enable'] == 0:
isolate_cpu_list = isolate_cpu_list + cpu_affinity[2]
isolate_cpu_list.sort()
for i,val in enumerate(isolate_cpu_list):
if i == 0:
range_start = val
range_end = val
continue
if val - range_end == 1:
range_end = val
continue
else:
append_range_list(range_start,range_end,isolate_range_cpu_list)
range_start = val
range_end = val
append_range_list(range_start,range_end, isolate_range_cpu_list)
print(",".join(isolate_range_cpu_list))
if __name__ == '__main__':
get_range_isolate_cpu()

View File

@@ -69,6 +69,40 @@
######setting nic cpu affinity mask end######
######get isolate cpu core start######
- name: redirect proxy config to config .proxy.json
copy:
content: "{{ proxy | to_json }}"
dest: /opt/tsg/tsg-os-provision/.proxy.json
- name: "tsg-os-provision: execute obtain_isolate_cpu_range.py"
shell: /opt/tsg/tsg-os-provision/scripts/obtain_isolate_cpu_range.py
register: result_exec_obtain_isolate_cpu_range
- name: "tsg-os-provision: check result_exec_obtain_isolate_cpu_range"
assert:
that:
- result_exec_obtain_isolate_cpu_range.rc == 0
- result_exec_obtain_isolate_cpu_range.failed == False
fail_msg: "error:{{ result_exec_obtain_isolate_cpu_range.stderr }},stdout:{{ result_exec_obtain_isolate_cpu_range.stdout_lines }}"
success_msg: "Successded: obtain isolate cpu range"
- name: "set fact grub_cpu_isolate"
set_fact:
grub_cpu_isolate: "{{ result_exec_obtain_isolate_cpu_range.stdout }}"
- name: "template grub config for cpu isolate"
template:
src: ../templates/grub.j2
dest: /etc/default/grub
- name: "update grub: BIOS"
shell: grub2-mkconfig -o /boot/grub2/grub.cfg
- name: "update grub: EFI"
shell: grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
######get isolate cpu core end######
- name: "set keep_alive_ip"
set_fact:
gdev_conf_keep_alive_ip: "{{ etherfabric_settings.keepalive.ip }}"

View File

@@ -248,6 +248,17 @@
dest: /opt/tsg/tsg-os-provision/
mode: 0755
when: runtime_env == 'TSG-X-P1403' or runtime_env == 'TSG-X-P0804'
- name: "tsg-os-provision: obtain_rps_mask and obtain_cpu_core_range to dest - TSG-X-P0804"
copy:
src: "{{ role_path }}/files/script/{{ item }}"
dest: /opt/tsg/tsg-os-provision/scripts/
mode: 0755
with_items:
- obtain_rps_mask.py
- obtain_isolate_cpu_range.py
when: runtime_env == 'TSG-X-P0804'
######TSG-X-P1403 end######
#- name: "tsg-os-provision: install yaml module using pip3"