Linux CPU affinity

來源:互聯網
上載者:User

在Linux中,我們知道可以通過nice、renice命令改變進程的執行優先順序,優先順序高的進程優先執行,從而一定程度上保證重要任務的運行。

除了nice、renice外,可以通過CPU  affinity指定進程在哪些處理器上運行。CPU  affinity表示進程要在某個給定的 CPU 上盡量長時間地運行而不被遷移到其他處理器的傾向性。
2.6 版本的Linux核心,實現了CPU affinity的介面,
需要說明的說:應用程式顯示指定了CPU affinity的話,表示應用程式只會在指定的處理器上運行,就算其他處理器空閑,也不會切換到別的處理器上運行。

以下兩種情況有可能需要使用自訂進程CPU affinity:
1. 保證高優先順序任務
如有存在一些優先順序高的任務,可以將其他任務都分配到指定的處理器執行,這個高優先順序任務設定CPU affinity到其他處理器,避免非重要任務對高優先順序任務的幹擾。
一個比較好的case是,在分散式運算系統中,在淩晨常常會進行一些資料/索引merge或者導資料的工作,為了避免對服務進程的影響,可以將這些任務都放到一個處理器上執行
2. 測試複雜程式
對於號稱scale out的程式,在資源受限的情況下進行測試,可以通過定義進程的cpu affinity,逐步測試在提供不同數量處理器的情況下,程式的處理能力!

linux下可以通過taskset(需安裝schedutils)顯示指定進程的cpu affinity
taskset功能如下:
$ taskset -help
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]

Options:
 -a, --all-tasks         operate on all the tasks (threads) for a given pid
 -p, --pid               operate on existing given pid
 -c, --cpu-list          display and specify cpus in list format
......

執行個體:
編寫一個簡單的C程式(讓CPU忙起來即可):

#include <stdio.h>void main(int argc, char** argv){        for(int i = 0; i<=10000000000000; i++)        {                if(i == 100000000)                {                        i = 0;                        printf("program is running!\n");                }        }}

產生可執行檔:gcc -o test test.c -std=c99

啟動兩個執行個體,將進程都綁定到Cpu0:
taskset -c 0 ./test
taskset -c 0 ./test

通過top, 輸入“1”查看系統cpu狀況:


Cpu1空閑,Cpu0使用100%

繼續測試,將pid為18057的test遷移到CPU1上運行,執行:
$ taskset -pc  1 18057
pid 18057's current affinity list: 0
pid 18057's new affinity list: 1

觀察CPU狀況:


Cpu0及Cpu1都進入忙碌狀態了!

繼續測試!將pid為18210的test也遷移到Cpu1上運行,執行:


Cpu0閑著,Cpu1忙碌起來了!

Reference:

Processor affinity
管理處理器的親和性
榨乾伺服器:讓進程運行在指定的CPU

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.