feature:TSG-10393:TSG-X_P0804环境下配置kni到tfe通讯网卡的rpm内核绑定

This commit is contained in:
fumingwei
2022-04-25 16:04:30 +08:00
parent 968dd78148
commit 09e1e79e70
4 changed files with 103 additions and 0 deletions

View File

@@ -100,6 +100,11 @@
- /usr/lib/systemd/system/tfe-env.service
- /usr/lib/systemd/system/tfe.service
- name: "template the pangu_pxy.conf"
template:
src: "{{ role_path }}/templates/service_add_StartPostForRps.conf.j2.j2"
dest: /opt/tsg/tsg-os-provision/templates/service_add_StartPostForRps.conf.j2
##################### tfe #####################
- name: "systemctl daemon-reload"
systemd:

View File

@@ -0,0 +1,4 @@
[Service]
{% raw %}{% for i in range( tfe_env_rps_info.rps_size ) %}
ExecStartPost=/bin/sh -c "echo {{tfe_env_rps_info.rps_mask}} > /sys/class/net/${TFE_DEVICE_DATA_INCOMING}/queues/rx-{{i}}/rps_cpus"
{% endfor %}{% endraw %}

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env python3
import psutil
import platform
import subprocess
import yaml
import math
import json
CPU_LAYOUTS_CONF_PATH = "/opt/tsg/tsg-os-provision/.cpu_layouts.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 (psutil.cpu_count(), retstr)
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_cpu_affinity():
matched = 0
tfe_cpu_affinity = []
mrzcpd_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
tfe_cpu_affinity = layout['tfe_affinity']
mrzcpd_cpu_affinity = layout['mrzcpd_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, tfe_cpu_affinity)
def calc_rps_mask():
rps_list_size = math.ceil(psutil.cpu_count()/32)
rps_list = [0] * rps_list_size
cpu_affinity = get_cpu_affinity()
for core in cpu_affinity[1]:
rps_list_index = core // 32
rps_core_location = core % 32
rps_list[rps_list_index] = rps_list[rps_list_index] | (2 ** rps_core_location)
result_queue_rps = ""
is_top = False
for rps in reversed(rps_list):
if is_top == False:
result_queue_rps = ('%x' % rps)
is_top = True
else:
result_queue_rps = result_queue_rps + ',' + ('%08x' % rps)
result_output = {"rps_size": len(cpu_affinity[0]), "rps_mask": result_queue_rps}
print(json.dumps(result_output))
if __name__ == '__main__':
calc_rps_mask()

View File

@@ -36,6 +36,39 @@
######setting cpu affinity end######
######setting nic cpu affinity mask start######
- name: output cpu_layouts config to config .cpu_layouts.json
copy:
content: "{{ cpu_layouts| to_json }}"
dest: /opt/tsg/tsg-os-provision/.cpu_layouts.json
- name: "tsg-os-provision: obtain rps_mask"
shell: /opt/tsg/tsg-os-provision/scripts/obtain_rps_mask.py
register: result_exec_obtain_rps_mask
- name: "tsg-os-provision: check result_exec_obtain_rps_mask"
assert:
that:
- result_exec_obtain_rps_mask.rc == 0
- result_exec_obtain_rps_mask.failed == False
fail_msg: "error:{{ result_exec_obtain_rps_mask.stderr }},stdout:{{ result_exec_obtain_rps_mask.stdout_lines }}"
success_msg: "Successded: obtain rpm mask"
- name: "set rps_mask into tfe-env-config"
set_fact:
tfe_env_rps_info: "{{ result_exec_obtain_rps_mask.stdout | from_json }}"
- name: "output tfe_env_rps_info"
debug:
msg: "{{ tfe_env_rps_info }}"
- name: "template tfe-env service for rps mask"
template:
src: ../templates/service_add_StartPostForRps.conf.j2
dest: /usr/lib/systemd/system/tfe-env.service.d/service_add_StartPostForRps.conf
######setting nic cpu affinity mask end######
- name: "set keep_alive_ip"
set_fact:
gdev_conf_keep_alive_ip: "{{ etherfabric_settings.keepalive.ip }}"