feature:TSG-10492:配置在系统boot过程中的cpu isolate
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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 %}"
|
||||
@@ -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()
|
||||
@@ -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 }}"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user