Node.js CPU核心绑定

背景

Linux 有一套 CPU 调度策略。多个进程同时处于内存,当一个进程 wait,os 会拿走 cpu 使用权先给其它进程使用。

对于多核系统,不做特殊设置,程序进程是不会和某个 cpu 关联,而是服从 os 调配。这就造成了一个问题,来回切换 cpu,会产生大量上下文切换,影响性能。

taskset 命令

通过 taskset 可以将进程绑定到特定的 cpu 上运行,从而避免 cpu 切换带来的消耗,提高性能。

示例,更多参考taskset 命令 – 设置或检索进程的 CPU 相关性

1
2
3
4
# 将 cpu0 和 cpu1 分配给 PID 为 1234 的进程
taskset -pc 1,2 1234
# 进程在指定 cpu 上运行
taskset -c 1 /etc/init.d/mysql start

nodejs 中如何绑定 CPU?

两种方法:

  • 调用 c++扩展:使用相关 API-int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask)
  • 调用taskset命令:使用execa.js或者child_process.exec系列执行taskset命令

没找到 node 提供相关接口,只能通过这种「胶水」的方式来调用。

参考连接