如何充分利用CPU資源提高伺服器的效能

2021-06-07 16:38:02 字數 2023 閱讀 9405

基本思路是如何讓cpu的超執行緒或者多核更加均衡和高效的利用起來,我們知道總是有一塊cpu去專門響應網絡卡的中斷請求,如果網路請求包非常大,很可能單個cpu就處理不過來,因此,需要啟用多核或者超執行緒,把網絡卡中斷請求分發到多個cpu去執行,從而提高整體伺服器的接入效能,也是提高cpu資源利用率的好辦法。下面分別進行討論:

一,  雙cpu超執行緒的伺服器

我們知道,在linux下,對於雙cpu超執行緒的伺服器而已,如果核心啟用了cpu的超執行緒功能(ht),  則通過cat /proc/cpuinfo 可以識別到4塊cpu: cpu0-3,其中cpu0和cpu1是同一真實cpu的本身和它的超執行緒出的cpu,cpu2和cpu3也是同理一對。

我們可以配置網絡卡的irq路由,來選擇指定的一塊cpu來處理對應網絡卡中斷請求,從而使得多塊網絡卡的中斷處理分別分攤到2塊真實的cpu上,達到充分發揮雙cpu的效能。

1,  首先我們可以通過訪問/proc/cpuinfo的資訊檢視到cpu的具體資訊。

cat /proc/cpuinfo

cat /proc/cpuinfo | grep processor

cat /proc/cpuinfo | grep processor| wc –l

最後的命令可以得到當前cpu的個數。

2,  分別獲取eth0和eth1網絡卡的中斷irq號,並且賦值給shell變數

eth0_irq_num  =`cat  /proc/interrupts | grep  eth0 | awk -f ':'  ''`

eth1_irq_num  =`cat  /proc/interrupts | grep  eth1 | awk -f ':'  ''`

3,  指定cpu來處理對應網絡卡的中斷請求

首先可以檢視一下現有的cpu情況(需要root使用者):

cat  /proc/irq/$eth0_irq_num/smp_affinity

cat  /proc/irq/$eth1_irq_num/smp_affinity

echo 8 > /proc/irq/$eth0_irq_num/smp_affinity

(指定cpu3來處理網絡卡eth0的中斷請求)

echo 2 >/proc/irq/$eth1_irq_num/smp_affinity

(指定cpu1來處理網絡卡eth1的中斷請求)

4,  檢視切換後的效果

watch  cat  /proc/interrupts

可以看到每隔2s的時間間隔的中斷處理效果

二,  雙cpu雙核的伺服器

在linux下,對雙cpu雙核的伺服器來說,若核心沒有開啟超執行緒ht選項,則訪問cat /proc/cpuinfo可以識別到4塊cpu,分別是cpu0-3,其中cpu0和cpu1是同一真實cpu的兩個核,同理,cpu2和cpu3是另外乙個真實cpu的兩個核。並且對同屬於真實乙個cpu的核共享4m的二級cache,因此,如果我們將一塊網絡卡的中斷請求對應到同一真實cpu的2個核上,可以在保證二級cache命中率的前提下,充分發揮雙核心cpu的效能優勢,從而提高整體伺服器的效能。

具體的設定方法,如上說明。

三,  附加說明

注意:對smp_affinity,乙個位元組(8個bit)本質上對應二進位制位:******xx,分別表示cpu7,cpu6,cpu5,cpu4,cpu3,cpu2,cpu1,cpu0,對應的位為1, 表示對應的cpu選中狀態。

1,  echo 8 > /proc/irq/$eth0_nu/smp_affinity,由於8 = 1000,所以是指定cpu3來響應。

2,  echo 2 > /proc/irq/$eth1_nu/smp_affinity,由於2 = 0010,所以是指定cpu1來響應。

3,  echo c > /proc/irq/$eth0_nu/smp_affinity,由於c = 1100,所以是指定cpu2和cpu3來響應。

4,  echo 3 > /proc/irq/$eth1_nu/smp_affinity,由於3 = 0011,所以是指定cpu0和cpu1來響應。

充分利用會議

這是我的好朋友patroklos組織的2017年我的最後一次會議,即塞薩洛尼基voxxed day 我幾年前開始參加會議。參加會議是一項投資,無論是時間上的還是金錢上的 或兩者兼有 您應該確保從投資中獲得最大收益。在這篇文章中,我想寫下實現這一目標的方法。未雨綢繆 要做的第一件事是提前獲得可用對話的...

充分利用Unique Index

假如我們是一服裝公司,在接受定單的時候,我們就要檢測,乙個季度是否有重複的訂單,但然,在我們接受打單的時候,也要做乙個檢測。怎麼完成這項任務呢?我想,除了我們在程式級設定檢測以外,最重要的就是資料庫本身了。下面我們就試著來解決這個問題 下面是我們的資料庫設計,當然是簡略版的 orders 訂單表,主...

用 taskset 充分利用多核cpu

常常感覺系統資源不夠用,一台機子上跑了不下3個比較重要的服務,但是每天我們還要在上面進行個備份壓縮等處理,網路長時間傳輸,這在就很影響本就不夠用的系統資源 這個時候我們就可以把一些不太重要的比如copy 備份 同步等工作限定在一顆cpu上,或者是多核的cpu的一顆核心上進行處理,雖然這不一定是最有效...