diff --git a/ansible/roles/system-init-TSG-X-P1403/tasks/main.yml b/ansible/roles/system-init-TSG-X-P1403/tasks/main.yml index 1d821428..dbf2ca37 100644 --- a/ansible/roles/system-init-TSG-X-P1403/tasks/main.yml +++ b/ansible/roles/system-init-TSG-X-P1403/tasks/main.yml @@ -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: diff --git a/ansible/roles/system-init-TSG-X-P1403/templates/grub.j2.j2 b/ansible/roles/system-init-TSG-X-P1403/templates/grub.j2.j2 new file mode 100644 index 00000000..2af9d383 --- /dev/null +++ b/ansible/roles/system-init-TSG-X-P1403/templates/grub.j2.j2 @@ -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 %}" \ No newline at end of file diff --git a/ansible/roles/tsg-os-provision/files/script/obtain_isolate_cpu_range.py b/ansible/roles/tsg-os-provision/files/script/obtain_isolate_cpu_range.py new file mode 100644 index 00000000..740e5a64 --- /dev/null +++ b/ansible/roles/tsg-os-provision/files/script/obtain_isolate_cpu_range.py @@ -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() diff --git a/ansible/roles/tsg-os-provision/files/tasks/provision.yml.TSGXNXR620G40R01P0804 b/ansible/roles/tsg-os-provision/files/tasks/provision.yml.TSGXNXR620G40R01P0804 index a061cd21..23f1c45f 100644 --- a/ansible/roles/tsg-os-provision/files/tasks/provision.yml.TSGXNXR620G40R01P0804 +++ b/ansible/roles/tsg-os-provision/files/tasks/provision.yml.TSGXNXR620G40R01P0804 @@ -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 }}" diff --git a/ansible/roles/tsg-os-provision/tasks/main.yml b/ansible/roles/tsg-os-provision/tasks/main.yml index c2daeec6..303b2eb2 100644 --- a/ansible/roles/tsg-os-provision/tasks/main.yml +++ b/ansible/roles/tsg-os-provision/tasks/main.yml @@ -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"