Node.js CPU核心绑定

Node.js CPU核心绑定

Tags
Shell编程
CPU调度
CreatedTime
Aug 19, 2022 03:44 AM
Slug
2020-10-17-taskset
UpdatedTime
Last updated August 19, 2022

背景

Linux 有一套 CPU 调度策略。多个进程同时处于内存,当一个进程 wait,os 会拿走 cpu 使用权先给其它进程使用。
对于多核系统,不做特殊设置,程序进程是不会和某个 cpu 关联,而是服从 os 调配。这就造成了一个问题,来回切换 cpu,会产生大量上下文切换,影响性能。

taskset 命令

通过 taskset 可以将进程绑定到特定的 cpu 上运行,从而避免 cpu 切换带来的消耗,提高性能。
# 将 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 提供相关接口,只能通过这种「胶水」的方式来调用。

参考连接