導航:首頁 > 操作系統 > linuxaffinity

linuxaffinity

發布時間:2022-12-07 23:01:37

① 如何關閉linux smp中斷

在多 CPU 的環境中,還有一個中斷平衡的問題,比如,網卡中斷會教給哪個 CPU 處理,這個參數控制哪些 CPU 可以綁定 IRQ 中斷。其中的 {number} 是對應設備的中斷編號,可以用下面的命令找出:

cat /proc/interrupt
比如,一般 eth0 的 IRQ 編號是 16,所以控制 eth0 中斷綁定的 /proc 文件名是 /proc/irq/16/smp_affinity。上面這個命令還可以看到某些中斷對應的CPU處理的次數,預設的時候肯定是不平衡的。

設置其值的方法很簡單,smp_affinity 自身是一個位掩碼(bitmask),特定的位對應特定的 CPU,這樣,01 就意味著只有第一個 CPU 可以處理對應的中斷,而 0f(0x1111)意味著四個 CPU 都會參與中斷處理。

幾乎所有外設都有這個參數設置,可以關注一下。

這個數值的推薦設置,其實在很大程度上,讓專門的CPU處理專門的中斷是效率最高的,比如,給磁碟IO一個CPU,給網卡一個CPU,這樣是比較合理的。

現在的伺服器一般都是多核了,但是中斷很多時候都是只用一個核,如果有些中斷要求比較高,可以把它獨立分配給一個cpu使用。

② Linux 進程、線程和CPU的關系,cpu親和性

1、物理CPU數:機器主板上實際插入的cpu數量,比如說你的主板上安裝了一塊8核CPU,那麼物理CPU個數就是1個,所以物理CPU個數就是主板上安裝的CPU個數。

2、物理CPU核數:單個物理CPU上面有多個核,物理CPU核數=物理CPU數✖️單個物理CPU的核
3、邏輯CPU核數:一般情況,我們認為一顆CPU可以有多個核,加上intel的超線程技術(HT), 可以在邏輯上再分一倍數量的CPU core出來。邏輯CPU核數=物理CPU數✖️單個物理CPU的核*2
4、超線程技術(Hyper-Threading):就是利用特殊的硬體指令,把兩個邏輯CPU模擬成兩個物理CPU,實現多核多線程。我們常聽到的雙核四線程/四核八線程指的就是支持超線程技術的CPU。

1、並行:兩件(多件)事情在同一時刻一起發生。
2、並發:兩件(多件)事情在同一時刻只能有一個發生,由於CPU快速切換,從而給人的感覺是同時進行。
3、進程和線程
進程是資源分配的最小單位,一個程序有至少一個進程。線程是程序執行的最小單位。一個進程有至少一個線程。
線程之間的通信更方便,同一進程下的線程共享全局變數、靜態變數等數據,而進程之間的通信需要以通信的方式(IPC)進行。多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉並不會對另外一個進程造成影響,因為進程有自己獨立的地址空間。
4、單核多線程:單核CPU上運行多線程, 同一時刻只有一個線程在跑,系統進行線程切換,系統給每個線程分配時間片來執行,看起來就像是同時在跑, 但實際上是每個線程跑一點點就換到其它線程繼續跑。
5、多核多線程:每個核上各自運行線程,同一時刻可以有多個線程同時在跑。

1、對於單核:多線程和多進程的多任務是在單cpu交替執行(時間片輪轉調度,優先順序調度等),屬於並發
2、對於多核:同一個時間多個進程運行在不同的CPU核上,或者是同一個時間多個線程能分布在不同的CPU核上(線程數小於內核數),屬於並行。
3、上下文切換:上下文切換指的是內核(操作系統的核心)在CPU上對進程或者線程進行切換。上下文切換過程中的信息被保存在進程式控制制塊(PCB-Process Control Block)中。PCB又被稱作切換幀(SwitchFrame)。上下文切換的信息會一直被保存在CPU的內存中,直到被再次使用。

CPU 親和性(affinity)就是進程要在某個給定的 CPU 上盡量長時間地運行而不被遷移到其他處理器的傾向性。這樣可以減少上下文切換的次數,提高程序運行性能。可分為:自然親和性和硬親和性
1、自然親和性:就是進程要在指定的 CPU 上盡量長時間地運行而不被遷移到其他處理器,Linux 內核進程調度器天生就具有被稱為 軟 CPU 親和性(affinity) 的特性,這意味著進程通常不會在處理器之間頻繁遷移。這種狀態正是我們希望的,因為進程遷移的頻率小就意味著產生的負載小。Linux調度器預設就支持自然CPU親和性(natural CPU affinity): 調度器會試圖保持進程在相同的CPU上運行。
2、硬親和性:簡單來說就是利用linux內核提供給用戶的API,強行將進程或者線程綁定到某一個指定的cpu核運行。Linux硬親和性指定API:taskset .

taskset [options] mask command [arg]...
taskset [options] -p [mask] pid

taskset 命令用於設置或者獲取一直指定的 PID 對於 CPU 核的運行依賴關系。也可以用 taskset 啟動一個命令,直接設置它的 CPU 核的運行依賴關系。

CPU 核依賴關系是指,命令會被在指定的 CPU 核中運行,而不會再其他 CPU 核中運行的一種調度關系。需要說明的是,在正常情況下,為了系統性能的原因,調度器會盡可能的在一個 CPU 核中維持一個進程的執行。強制指定特殊的 CPU 核依賴關系對於特殊的應用是有意義的
CPU 核的定義採用位定義的方式進行,最低位代表 CPU0,然後依次排序。這種位定義可以超過系統實際的 CPU 總數,並不會存在問題。通過命令獲得的這種 CPU 位標記,只會包含系統實際 CPU 的數目。如果設定的位標記少於系統 CPU 的實際數目,那麼命令會產生一個錯誤。當然這種給定的和獲取的位標記採用 16 進制標識。
0x00000001
代表 #0 CPU
0x00000003
代表 #0 和 #1 CPU
0xFFFFFFFF
代表 #0 到 #31 CPU

-p, --pid
對一個現有的進程進行操作,而不是啟動一個新的進程
-c, --cpu-list
使用 CPU 編號替代位標記,這可以是一個列表,列表中可以使用逗號分隔,或者使用 "-" 進行范圍標記,例如:0,5,7,9
-h, --help
列印幫助信息
-V, --version
列印版本信息

如果需要設定,那麼需要擁有 CAP_SYS_NICE 的許可權;如果要獲取設定信息,沒有任何許可權要求。

taskset 命令屬於 util-linux-ng 包,可以使用 yum 直接安裝。

③ linux下把進程/線程綁定到特定cpu核上運行

你那個是系統下把CPU的核說釘在五河以下是比較好的,因為吧和內心壓力非常大,發熱量非常大。

④ 如何指定CPU只運行特定任務,linux中斷interrupt

cpuset 允許把所有進程echo到一個cpuset目錄中,與指定的cpu綁定。
The following script which is a starting point for investigating willmove all the processes to a specific cpuset with one cpu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

if [ ! -d /sys/fs/cgroup ]; then
echo "cgroup not supported by the kernel"
else
mkdir /sys/fs/cgroup/cpuset
mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset
echo 1 > /sys/fs/cgroup/cpuset/cgroup.clone_children
mkdir /sys/fs/cgroup/cpuset/cpu0
mkdir /sys/fs/cgroup/cpuset/cpu1

# assign a cpu for cgroup cpu0
echo 0 > /sys/fs/cgroup/cpuset/cpu0/cpuset.cpus

# move outself to this new cgroup
echo $$ > /sys/fs/cgroup/cpuset/cpu0/tasks
for i in $(cat /sys/fs/cgroup/cpuset/tasks); do
echo $i > /sys/fs/cgroup/cpuset/cpu0/tasks || echo "failed to add pid $i/$(cat /proc/$i/comm)"
done

# assign a cpu for cgroup cpu1
echo 1 > /sys/fs/cgroup/cpuset/cpu1/cpuset.cpus

# make cpu1 exclusive so processes belonging
# to the other cgroup won't use it
echo 1 > /sys/fs/cgroup/cpuset/cpu1/cpuset.cpu_exclusive
fi

把系統中的進程與CPU0綁定,然後把CPU1設置 exclusive屬性,這樣其它cgroup不會使用這個CPU。
開啟stress壓力測試

在此基礎上再開啟一個CPUhot:
可見新啟動的任務不會佔用CPU1。
將CPUhot進程與 CPU1綁定:
此時觀察CPU使用率:
另外還有一個問題就是怎樣禁止一個中斷打斷cpu?
內核提供了中斷的affinity,但要使用這個還需要關閉 irq balancer 進程。
如下腳本可以設置中斷的cpu affinity。

for i in $(find /proc/irq -name "smp_affinity"); do echo 1 > $i; done
以上腳本把所有中斷的CPU Affinity都設置為CPU0。
這樣在/proc/irq目錄下的每一個中斷其CPU Affinity都被設置為CPU0。
此時仍有一系列的中斷會打斷CPU1:
Single function call interrupts
Local timer interrupts

另外要讓中斷的CPU Affinity起作用,irq balance 服務必須被關閉。但這樣中斷負載平衡就被打斷,能不能修改irq balance 代碼,讓其在規定的若干個CPU核心上負責中斷平衡

⑤ 什麼是linux內核硬親和性

什麼是 Linux 內核硬親和性(affinity)
在 Linux 內核中,所有的進程都有一個相關的數據結構,稱為 task_struct。這個結構非常重要,原因有很多;其中與 親和性(affinity)相關度最高的是 cpus_allowed 位掩碼。
這個位掩碼由 n 位組成,與系統中的 n 個邏輯處理器一一對應。 具有 4 個物理 CPU 的系統可以有 4 位。如果這些 CPU 都啟用了超線程,那麼這個系統就有一個 8 位的位掩碼。
如果為給定的進程設置了給定的位,那麼這個進程就可以在相關的 CPU 上運行。因此,如果一個進程可以在任何 CPU 上運行,並且能夠根據需要在處理器之間進行遷移,那麼位掩碼就全是 1。實際上,這就是 Linux 中進程的預設狀態。轉載,僅供參考。

⑥ Linux CPU Affinity

 在伺服器壓力特別大,心跳經常丟失從而造成服務超時。經過分析發現網路沒有問題,心跳網路包都發過來了而且也正常進入了dispatch隊列,但是由於dispatch在處理別的request的時候耗時過長,而且要命的是它還hold著一把全局的鎖,導致隊列裡面的其他queue也無法正常被dispatch。所以我們想到可以利用設置CPU親和性來保證 核心進程/線程 得到足夠的時間片,從而不讓服務超時。

 說到親和性,如果我們不隔離CPU,那麼就只能減少CPU切換,提高cpu cache的命中率,從而減少內存訪問損耗,提高程序的速度。但是這樣做只能保證自己不被調度到的別的CPU,卻不能阻止其他線程不來我這個CPU。這樣就成了「 我的是公共的,別人的我不能用! 」,豈不是我得到的時間片更少了?所以為了防止這樣的窘境,我們還得先「 隔核 」再「 綁核 」。

我們可以用如下命令來查看自己的伺服器有多少個核心:

隔核方法: 修改grub
環境: CentOS7
具體步驟: (隔離4,5核心)

更改一個進程的CPU affinity mask,可以設置一個進程在某個CPU核心上執行,也可以設置該進程在除了某CPU 核心之外的其他CPU核心上執行。如果第一個參數pid為0,則設置當前進程的mask。
 其實這個mask是一個針對線程組內的線程屬性,可以被獨立調節。所以我們可以用gettid()的參數作為第一個參數,同樣如果第一個參數為0,則設置當前線程。如果傳的getpid的返回值,則設置該線程組的主線程mask屬性。

更改一個線程的CPU affinity mask, 同樣也是可以設置一個線程在某個CPU核心上執行,也可以設置該線程在除了某CPU 核心之外的其他CPU核心上執行。這兩個介面在底層也是調用sched_setaffinity/sched_getaffinity。當第一個參數為0時,就是設置當前thread的mask。

上面我們介紹了兩種設置CPU affinity mask的介面,但是無論是哪一種介面有個共同的特性:創建出來的子線程默認會繼承父親線程的CPU affinity mask。在復雜的系統中有時並不希望這個屬性的出現,因為可能會導致某個隔離出來的cpu上還是運行了很多的thread。所以我就想了一個解決方案來解決這個問題。

<1> http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html
<2> https://linux.die.net/man/2/sched_setaffinity

⑦ affinity photo有Linux版嗎

affinity photo最常見的是windows版本
Affinity Photo 憑借專門為創意人士和攝影專業人士設計的龐大工具集,它具有編輯修飾圖像、創建完整的多層構圖或精美的光柵畫所需的一切功能。
AffinityPhoto因可以最大程度兼容.PSD格式而出名,但實際使用中,會自動將PSD文件中「智能對象」、「圖形」、「文字」轉為像素圖層(即PS中的柵格化圖層)。

優點:文件體積小,靜態圖像編輯功能與PS相當,操作上也與PS近似,PS的眾多插件可以直接拿來使用。
缺點:無gif動畫/簡易3D建模渲染/視頻製作等附加功能,許多PS中有的快捷鍵功能需要進入菜單中尋找 。

閱讀全文

與linuxaffinity相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163