鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

执行绑核

本章节通过命令实现主进程绑核、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