linux中設置進程在特定的cpu上運行(上次是查看,這次是設置)

cpu親和性的必要性

之前咱們介紹了cpu親和性,並且查看了進程在哪個cpu上運行。

由於各個cpu都有自己的緩存,如L1,L2等,程序中的指令在CPU內部,往往通過分支預測,提前放到了流水線上。也就是說,一個進程在cpuA上運行時,其未來要執行的指令往往被cpuA預估了,會把未來要執行的指令提前寫到自己的一、二級緩存中。當進程換到了cpuB運行后,除了cpuA上的之前做的緩存白做之外,還要把這些緩存丟棄以避免不要影響新的進程,而且cpuB為了提速,還需要重新做一次緩存,即使可以把cpuA的緩存拷貝到cpuB中,這樣在電路間也很麻煩,而且也不能保證兩個cpu之間的緩存規格一樣,萬一大小不同,該怎樣截斷,都是問題,因此不如到了那邊重建。

Advertisements

因此,保證進程在同一個cpu上運行,可減少在cpu之間切換時產生的「原來緩存丟棄與重建新緩存」的損失。

下面在運維的角度,給大家介紹如何指定進程在特定的cpu上運行。

linux中也提供了相應的命令——taskset。

獲取pid為1的進程的cpu掩碼集,也就是獲取進程可以在哪些cpu上運行,可以用-p來指定pid,如圖。

本機一共4個cpu,mask為f,即二進位為1111,所以4個cpu都可以運行。

設置進程在某些cpu上運行,

-c是用來指定cpu列表,有兩種形式:

1 用','分隔的cpu序號

2 用'-'表示的一段連續的cpu序號

下面用taskset指定pid為1的進程在第2到第3個cpu上運行。

再查看相應進程的cpu掩碼集

Advertisements

c的二進位是1100,即第2和3位是1,表示只在第2個和第3個cpu上運行。

歐啦。

Advertisements

你可能會喜歡