Php-affinity 通過設定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; }
提供了如下三個函數:
setaffinity – 設定cpu親和性
getaffinity – 擷取cpu親和性
getcpucores – 擷取cpu核心數量
API 如下:
參考文獻:
https://zh.wikipedia.org/wiki/%E5%A4%84%E7%90%86%E5%99%A8%E4%BA%B2%E5%92%8C%E6%80%A7
http://www.ibm.com/developerworks/cn/linux/l-affinity.html
http://www.cnblogs.com/LubinLew/p/cpu_affinity.html
項目首頁:http://www.open-open.com/lib/view/home/1448371981438