PHP 扩展 php-affinity

MIT
Objective-C
跨平台
2015-11-23
呼延平

Php-affinity 通过设置cpu亲和性,可以将进程绑定到一个cpu核心上。一般在如下场景我们可能会希望修改进程的cpu亲和性:

  •  频繁的并行运算

  •  线程可伸缩性测试(通过增加cpu核心数量模拟线性扩展)

  •  运行时间敏感的,决定性的进程

向nginx,swoole等开源软件,都提供了设置cpu亲和性的方法。nginx官方建议worker数量等同于cpu核心数量也是为了将一个进程绑定到一个cpu核心上,同时避免进程切换带来的开销。

Php本身并没有提供设置cpu亲和性的函数,我们可以通过两种方式实现:

  •  调用系统命令,修改当前进程cpu亲和性

  •  编写php扩展,封装系统调用。

php-affinity是使用c编写的php扩展,项目地址:https://github.com/huyanping/php-affinity

    /**
                     * set CPU affinity
                     *
                     * @param $cpu_id
                     * @return bool
                     */
                    functionsetaffinity($cpu_id){
                        $num= getcpucores();
                        if($cpu_id>= $num){
                            returnfalse;
                        }
                        $set= system_call($cpu_id);
                        if($set=== -1){
                            returnfalse;
                        }
                     
                        returntrue;
                    }
                     
                    /**
                     * get CPU affinity
                     *
                     * @return bool
                     */
                    functiongetaffinity(){
                        $cpu_id= system_call();
                        if($cpu_id=== -1){
                            returnfalse;
                        }
                        return$cpu_id;
                    }
                     
                     
                    /**
                     * get number of CPU
                     *
                     * @return bool
                     */
                    functiongetcpucores(){
                        $nums= system_call();
                        if($nums=== -1){
                            returnfalse;
                        }
                        return$nums;
                    }

提供了如下三个函数:

  1. setaffinity – 设置cpu亲和性

  2. getaffinity – 获取cpu亲和性

  3. getcpucores – 获取cpu核心数量

API 如下:

参考文献:

  1. https://zh.wikipedia.org/wiki/%E5%A4%84%E7%90%86%E5%99%A8%E4%BA%B2%E5%92%8C%E6%80%A7

  2. http://www.ibm.com/developerworks/cn/linux/l-affinity.html

  3. http://www.cnblogs.com/LubinLew/p/cpu_affinity.html

加载中

评论(0)

暂无评论

暂无资讯

暂无问答

Nginx服务器进程数设置和利用多核CPU的方法

Nginx worker_processes进程数设置 我们的目的是要把不同的 worker_processes 进程分配至不同核上的 CPU 上运行,一般来说,拥有几个逻辑CPU,就设置为几个worker_processes 为宜,但是 work...

2015/11/27 17:01
45
0
kubernetes每个节点创建一个服务的Pod

1. 问题场景 希望一个worker节点上仅部署同样的服务一个. 比如: kubernets有三个worker节点,三个节点部署N个副本的api服务, 为了提高服务效率希望加入缓存,需要为三个节点个部署一个redis服务...

2018/12/10 19:00
40
0
Android Task 相关

在日常开发过程中,只要涉及到activity,那么对task相关的东西总会或多或少的接触到,不过对task相关的一些配置的作用一直理解的还不是很透彻,官方文档在细节上说的也不够清楚,要透彻理解还...

2015/10/20 19:03
63
0
linux CPU SI软中断比较占用率比较大(网络解决方案)

irq 默认linux自动启动的,但是往往它自己控制不是很好(CPU SI经常某个CPU占用大) 通常碰到大流量的,通常我们会把自动启动的irqblance关闭,然后手动指定一下IRQ进行优化: 看CPU的 si利用...

2016/07/31 11:37
57
0
Linux CPU affinity

在Linux中,我们知道可以通过nice、renice命令改变进程的执行优先级,优先级高的进程优先执行,从而一定程度上保证重要任务的运行。 除了nice、renice外,可以通过CPU affinity指定进程在哪些...

2015/12/23 13:27
6
0
CPU绑定

1 概念 什么是CPU Affinity?Affinity是进程的一个属性,这个属性指明了进程调度器能够把这个进程调度到哪些CPU上。 在Linux中,我们可以利用CPU affinity 把一个或多个进程绑定到一个或多个...

2016/02/21 22:47
562
1
针对 CPU 的Nginx 配置优化

针对 CPU 的Nginx 配置优化 2018年08月02日 21:18:21 肖申克的围墙 阅读数:237 处理器正处于多核时代。多内核是指在一枚处理器中集成两个或多个完整的计算引擎,多核处理器是单芯片。一枚多...

01/14 21:57
10
0
taskset: 让进程运行在指定的CPU 上

关于绑定与不绑定CPU的对比 观察发现4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态。 不了解Linux是如何调度的,但目前显然有优化的余地。除了处理正常任务,CPU#0还需要处理每...

2018/12/26 09:47
12
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部