Linux中CPU核心优化命令taskset详解(转载)

1. 前言

1.1. 问题及需求

通常如果不加以配置,对于一些密集操作数据库的任务时,会发现Linode服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态。

不了解Linux是如何调度的,但目前显然有优化的余地。除了处理正常任务,CPU#0还需要处理每秒网卡中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升。

1.2. 两个名词

  • SMP (Symmetrical Multi-Processing):指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。

  • CPU affinity:中文唤作"CPU亲和力",是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。

2. taskset工具

2.1. 安装taskset工具

2.2. taskset语法

调整进程优先权和利用taskset有效控制cpu资源

  1. 语法

  1. 参数

2.3. taskset使用示例

  1. -V, --version 输出版本信息

  2. 配置某进程在指定核上运行

    -p:在存在的给定pid上操作
    -c:以列表的格式显示和指定CPU

    Pid 8724的当前关联列表:0-3
    Pid 8724的新关联列表

  3. 查询pid在那些CPU核心上运行

  4. 查询进程可用CPU核心
    使用taskset -p 指定进程号(pid),查询PID(TID)= 10855 的进程可用的CPU核心,掩码形式表示

      mask是16进制, f代表15,转为2进制就是1111; 该设备存在4个CPU核心,即表示每个核心均可使用;
    0x0F(十六进制) => 1111(二进制),最右起第一个1表示CPU核心#0,第二个1表示CPU核心#1…设置 PID(TID)= 10878 的线程可用的CPU核心到#0、#1、#2、#3上
      只要taskset成功返回了,那就表示绑核一定成功了,即该进程已被绑到指定的核上面,而且taskset命令会显示原来的绑核(原来的可能是系统默认分配的核)情况,以及新的绑核情况。

  5. 运行命令的同时,指定对应CPU核心
    taskset -c cpu核心号 具体执行命令

3. nginx绑定cpu实验

3.1. 安装依赖包

3.2. 创建运行用户

3.3. 编译安装

3.4. 优化路径

3.5. 添加nginx系统服务

3.6. 修改nginx工作内核数

因为nginx提供了更精确的控制。在conf/nginx.conf中,有如下一行:worker_processes 1;

这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU。我做了如下配置,启动三个工作进程,分别使用对应的CPU核心,通过掩码指定:

3.7. 查询nginx的pid

重启nginx,发现4个服务各自在不同的cpu上运行;

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注