为nginx 绑定CPU

前文所讲,taskset 能为进程绑定CPU,但毕竟是事后的绑定,nginx 能够在软件内部实现该功能。


本来淘宝的tengine很好的解决了这个问题,一行搞定

1
worker_cpu_affinity auto;


但是无奈编译tengine+ pagespeed 失败,只好研究一下nginx的绑定办法


以四核CPU 为例,CPU 编号分别是

1
0001 0010 0100 1000


假设有四个nginx worker进程,那么绑定就很简单了,挨个绑定:

1
worker_cpu_affinity 0001 0010 0100 1000;


8核CPU,8个nginx worker进程

1
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;


假设只有2个nginx worker进程,将第一个进程绑到第一三个CPU,将第二个进程绑定到第二四个CPU,只需简单的加法就好:

1
worker_cpu_affinity 0101 1010;


同理,将第一个进程绑定到第一四个CPU,将第二个进程绑定到第二三个CPU的方法是:

1
worker_cpu_affinity 1001 0110;


同理,有一个12核的CPU,绑定6个进程(首尾相加)的办法就是:

1
2
worker_cpu_affinity  100000000001   010000000010  001000000100   \
000100001000  000010010000  000001100000  ;


这种办法虽然看起来很傻,也不太省心,但确实奏效


你可能感兴趣的:(绑定CPU,为nginx)