执行绑核
本章节通过命令实现主进程绑核、ACL线程绑核和NPU中断绑核。
NPU中断包括以下两部分:
- “dev*_sq_send_wq”处理发送队列的中断任务。
- “dev*_sq_fair_wq”处理需要公平调度的任务的中断。
其中“*”部分表示NPU编号,例如dev2_sq_send_wq与dev2_sq_fair_wq分别表示NPU2对应的两个中断队列。
cpumask为一个掩码值,其格式为16进制,其二进制表示的每一个bit位代表一个CPU核心(从低到高依次为CPU0、CPU1、...),例如:
- 3(二进制 0011),表示将中断绑定到CPU0与CPU1。
- f (二进制 1111),表示将中断绑定到CPU0-CPU3。
中断绑核命令:
- 在物理机上执行中断绑核命令,(例如将NPU2的中断绑定在CPU80、81)。
echo "00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000" > /sys/devices/virtual/workqueue/dev2_sq_send_wq/cpumask echo "00000000,00000000,00000000,00000000,00000000,00000000,00000000,00020000,00000000,00000000" > /sys/devices/virtual/workqueue/dev2_sq_fair_wq/cpumask
- 主进程绑核命令(例如将主进程绑定在CPU82、83),若推理服务在容器中执行,则以下命令在容器内执行,否则在物理机上执行。
for THREAD_ID in ${ THREADS[@]} do taskset -acp 82-83 ${THREAD_ID} done - ACL线程绑核命令(例如将ACL线程绑定在CPU84、85),若推理服务在容器中执行,则以下命令在容器内执行,否则在物理机上执行。
for THREAD_ID in ${ THREADS[@]} do ACL=`ps -Te | grep ${THREAD_ID} | grep acl_thread | grep -v grep | awk '!a[$1]++' | awk '{print $2}'` taskset -acp 84-85 ${ACL} done
父主题: 参考示例