电竞比分网-中国电竞赛事及体育赛事平台

分享

taskset: 讓進(jìn)程運行在指定的CPU

 antyoung 2012-04-14

轉(zhuǎn)載:http://www./archives/2670.html

 

我的Linode十分繁忙,在跑一些密集操作數(shù)據(jù)庫的Rake任務(wù)時尤其如此。但我觀察發(fā)現(xiàn),Linode服務(wù)器的4核CPU,只有第1個核心(CPU#0)非常忙,其他都處于idle狀態(tài)。

不了解Linux是如何調(diào)度的,但目前顯然有優(yōu)化的余地。除了處理正常任務(wù),CPU#0還需要處理每秒網(wǎng)卡中斷。因此,若能將CPU#0分擔(dān)的任務(wù)攤派到其他CPU核心上,可以預(yù)見,系統(tǒng)的處理能力將有更大的提升。

兩個名詞

SMP (Symmetrical Multi-Processing):指在一個計算機(jī)上匯集了一組處理器(多CPU),各CPU之間共享內(nèi)存子系統(tǒng)以及總線結(jié)構(gòu)。 [更多...]

CPU affinity:中文喚作“CPU親和力”,是指在CMP架構(gòu)下,能夠?qū)⒁粋€或多個進(jìn)程綁定到一個或多個處理器上運行。[更多...]


一、在Linux上修改進(jìn)程的“CPU親和力”

在Linux上,可以通過 taskset 命令進(jìn)行修改。以Ubuntu為例,運行如下命令可以安裝taskset工具。

# apt-get install schedutils

對運行中的進(jìn)程,文檔上說可以用下面的命令,把CPU#1 #2 #3分配給PID為2345的進(jìn)程:

# taskset -cp 1,2,3 2345

但我嘗試沒奏效,于是我關(guān)掉了MySQL,并用taskset將它啟動:

# taskset -c 1,2,3 /etc/init.d/mysql start

對于其他進(jìn)程,也可如此處理(nginx除外,詳見下文)。之后用top查看CPU的使用情況,原來空閑的#1 #2 #3,已經(jīng)在辛勤工作了。


二、配置nginx綁定CPU

剛才說nginx除外,是因為nginx提供了更精確的控制。

conf/nginx.conf中,有如下一行:

worker_processes  1;

這是用來配置nginx啟動幾個工作進(jìn)程的,默認(rèn)為1。而nginx還支持一個名為worker_cpu_affinity的配置項,也就是說,nginx可以為每個工作進(jìn)程綁定CPU。我做了如下配置:

worker_processes  3;
worker_cpu_affinity 0010 0100 1000;

這里0010 0100 1000是掩碼,分別代表第2、3、4顆cpu核心。

重啟nginx后,3個工作進(jìn)程就可以各自用各自的CPU了。


三、刨根問底

  1. 如果自己寫代碼,要把進(jìn)程綁定到CPU,該怎么做?可以用sched_setaffinity函數(shù)。在Linux上,這會觸發(fā)一次系統(tǒng)調(diào)用。
  2. 如果父進(jìn)程設(shè)置了affinity,之后其創(chuàng)建的子進(jìn)程是否會有同樣的屬性?我發(fā)現(xiàn)子進(jìn)程確實繼承了父進(jìn)程的affinity屬性。


四、Windows?

在Windows上修改“CPU親和力”,可以通過任務(wù)管理器搞定。

* 個人感覺,Windows系統(tǒng)中翻譯的“處理器關(guān)系”比“CPU親和力”容易理解點兒

—————–

進(jìn)行了這樣的修改后,即使系統(tǒng)負(fù)載達(dá)到3以上,不帶緩存打開首頁(有40多次查詢)依然順暢;以前一旦負(fù)載超過了1.5,響應(yīng)就很慢了。效果很明顯。

 

linux taskset命令詳解

SYNOPSIS
       taskset [options] [mask | list ] [pid | command [arg]...]
OPTIONS
       -p, --pid
              operate on an existing PID and not launch a new task
       -c, --cpu-list
              specifiy  a  numerical  list of processors instead of a bitmask.
              The list may contain multiple items,  separated  by  comma,  and
              ranges.  For example, 0,5,7,9-11.
       -h, --help
              display usage information and exit
       -V, --version
              output version information and exit

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多